1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
import os
from typing import Optional
from langchain.agents import initialize_agent, AgentExecutor
from langchain_openai import ChatOpenAI
from langchain.tools import tool
from langchain.memory import ConversationBufferMemory
# ========== 工具定义 ==========
@tool
def search_web(query: str) -> str:
"""搜索网络信息,返回相关结果"""
# 实际可接入 SerpAPI 或 Google Search API
return f"搜索 '{query}' 的结果:[模拟搜索结果...]"
@tool
def send_email(to: str, subject: str, body: str) -> str:
"""
发送邮件
Args:
to: 收件人邮箱
subject: 邮件主题
body: 邮件正文
"""
# 实际可接入 SMTP 或邮件 API
return f"邮件已发送给 {to},主题:{subject}"
@tool
def get_current_time(timezone: str = "Asia/Shanghai") -> str:
"""获取当前时间"""
from datetime import datetime
import pytz
tz = pytz.timezone(timezone)
return datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
@tool
def calculate(expression: str) -> str:
"""
计算数学表达式
Args:
expression: 数学表达式,如 "2+2", "100*5"
"""
try:
result = eval(expression)
return f"计算结果:{result}"
except Exception as e:
return f"计算错误:{str(e)}"
# ========== Agent 配置 ==========
def create_smart_assistant():
# 初始化 LLM
llm = ChatOpenAI(
model="gpt-4",
temperature=0,
openai_api_key=os.getenv("OPENAI_API_KEY")
)
# 工具列表
tools = [search_web, send_email, get_current_time, calculate, get_weather]
# 记忆
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)
# 创建 Agent
agent = initialize_agent(
tools=tools,
llm=llm,
agent="conversational-react-description",
memory=memory,
verbose=True,
max_iterations=10,
handle_parsing_errors=True
)
return agent
# ========== 使用示例 ==========
if __name__ == "__main__":
assistant = create_smart_assistant()
# 场景1:查询天气
print(assistant.run("北京今天天气怎么样?"))
# 场景2:复杂任务
print(assistant.run("""
请帮我完成以下任务:
1. 查询当前时间
2. 查询上海天气
3. 如果上海下雨,发邮件给 test@example.com 提醒带伞
"""))
|