LangChain
Email checker with LangChain. Verify emails in LangChain agents and chains.
在 Python 和 JavaScript/TypeScript 的 LangChain 中將電郵驗證整合為自定義工具。
Python
安裝
pip install langchain langchain-openai requests基礎工具定義
from langchain.tools import tool
import requests
import os
@tool
def verify_email(email: str) -> dict:
"""驗證電子郵箱地址是否有效且可送達。
參數:
email: 要驗證的電子郵箱地址
返回:
驗證結果,包括狀態、可送達性和風險標誌
"""
response = requests.post(
'https://api.emailverify.ai/v1/verify',
headers={
'Authorization': f'Bearer {os.environ["EMAILVERIFY_API_KEY"]}',
'Content-Type': 'application/json',
},
json={'email': email}
)
return response.json()與代理一起使用
from langchain.tools import tool
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_openai_functions_agent
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
import requests
import os
@tool
def verify_email(email: str) -> dict:
"""驗證電子郵箱地址是否有效且可送達。
參數:
email: 要驗證的電子郵箱地址
返回:
驗證結果,包括狀態、可送達性和風險標誌
"""
response = requests.post(
'https://api.emailverify.ai/v1/verify',
headers={
'Authorization': f'Bearer {os.environ["EMAILVERIFY_API_KEY"]}',
'Content-Type': 'application/json',
},
json={'email': email}
)
return response.json()
# 建立代理
llm = ChatOpenAI(model="gpt-4-turbo")
tools = [verify_email]
prompt = ChatPromptTemplate.from_messages([
("system", "你是一個能夠驗證電子郵箱地址的有用助手。"),
MessagesPlaceholder("chat_history", optional=True),
("human", "{input}"),
MessagesPlaceholder("agent_scratchpad"),
])
agent = create_openai_functions_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)
# 使用代理
result = agent_executor.invoke({
"input": "john@google.com 是有效的郵箱嗎?"
})
print(result["output"])批次驗證工具
@tool
def verify_emails_bulk(emails: list[str]) -> dict:
"""一次性驗證多個電子郵箱地址。
參數:
emails: 要驗證的電子郵箱地址列表(最多 100 個)
返回:
批次驗證結果
"""
response = requests.post(
'https://api.emailverify.ai/v1/verify/bulk',
headers={
'Authorization': f'Bearer {os.environ["EMAILVERIFY_API_KEY"]}',
'Content-Type': 'application/json',
},
json={'emails': emails[:100]}
)
return response.json()錯誤處理
@tool
def verify_email(email: str) -> dict:
"""驗證電子郵箱地址是否有效且可送達。
參數:
email: 要驗證的電子郵箱地址
返回:
驗證結果或錯誤訊息
"""
try:
response = requests.post(
'https://api.emailverify.ai/v1/verify',
headers={
'Authorization': f'Bearer {os.environ["EMAILVERIFY_API_KEY"]}',
'Content-Type': 'application/json',
},
json={'email': email},
timeout=30
)
if response.status_code == 429:
return {'error': '超出頻率限制。請稍後重試。'}
response.raise_for_status()
return response.json()
except requests.exceptions.Timeout:
return {'error': '請求超時。請重試。'}
except requests.exceptions.RequestException as e:
return {'error': f'請求失敗: {str(e)}'}JavaScript/TypeScript
安裝
npm install @langchain/core @langchain/openai langchain zod基礎工具定義
import { DynamicStructuredTool } from '@langchain/core/tools';
import { z } from 'zod';
const verifyEmailTool = new DynamicStructuredTool({
name: 'verify_email',
description: '驗證電子郵箱地址是否有效且可送達',
schema: z.object({
email: z.string().email().describe('要驗證的電子郵箱地址'),
}),
func: async ({ email }) => {
const response = await fetch('https://api.emailverify.ai/v1/verify', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.EMAILVERIFY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ email }),
});
return JSON.stringify(await response.json());
},
});與代理一起使用
import { DynamicStructuredTool } from '@langchain/core/tools';
import { ChatOpenAI } from '@langchain/openai';
import { AgentExecutor, createOpenAIFunctionsAgent } from 'langchain/agents';
import { ChatPromptTemplate, MessagesPlaceholder } from '@langchain/core/prompts';
import { z } from 'zod';
const verifyEmailTool = new DynamicStructuredTool({
name: 'verify_email',
description: '驗證電子郵箱地址是否有效且可送達',
schema: z.object({
email: z.string().email().describe('要驗證的電子郵箱地址'),
}),
func: async ({ email }) => {
const response = await fetch('https://api.emailverify.ai/v1/verify', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.EMAILVERIFY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ email }),
});
return JSON.stringify(await response.json());
},
});
const llm = new ChatOpenAI({ modelName: 'gpt-4-turbo' });
const tools = [verifyEmailTool];
const prompt = ChatPromptTemplate.fromMessages([
['system', '你是一個能夠驗證電子郵箱地址的有用助手。'],
new MessagesPlaceholder('chat_history'),
['human', '{input}'],
new MessagesPlaceholder('agent_scratchpad'),
]);
const agent = await createOpenAIFunctionsAgent({ llm, tools, prompt });
const agentExecutor = new AgentExecutor({ agent, tools });
const result = await agentExecutor.invoke({
input: '檢查 test@example.com 是否有效',
chat_history: [],
});
console.log(result.output);串流傳輸
import { AgentExecutor, createOpenAIFunctionsAgent } from 'langchain/agents';
// ... 設定代碼 ...
const stream = await agentExecutor.stream({
input: '為我驗證 john@google.com',
chat_history: [],
});
for await (const chunk of stream) {
if (chunk.output) {
console.log(chunk.output);
}
}