LangChain智能助理开发教程:从零构建日程邮件协调系统
一、前置条件
1.1 环境要求
-
Python 3.8 或更高版本
-
稳定的网络连接(用于调用API)
1.2 依赖安装
bash
pip install langchain langchain-core langchain-deepseek
1.3 API密钥配置
需要获取以下密钥(可选):
-
DeepSeek API Key:必需,用于AI模型调用
-
LangSmith API Key:可选,用于监控和调试
二、代码结构解析
2.1 导入模块和初始化设置
python
from langchain_core.tools import tool, InjectedToolArg from typing_extensions import Annotated from langchain.agents import create_agent import os from langchain_deepseek import ChatDeepSeek # 环境变量设置 os.environ["LANGSMITH_TRACING"] = "true" # 启用LangSmith追踪 os.environ["DEEPSEEK_API_KEY"] = "your-deepseek-api-key" # 必须设置 # 初始化DeepSeek模型 model = ChatDeepSeek(model="deepseek-chat", temperature=0)
解释:
-
导入必要的LangChain组件
-
设置环境变量,包括API密钥
-
初始化AI模型,temperature=0表示确定性输出
2.2 定义基础工具函数
日历事件创建工具
python
@tool
def create_calendar_event(
title: str,
start_time: str, # ISO格式时间
end_time: str, # ISO格式时间
attendees: list[str], # 邮箱地址列表
location: str = ""
) -> str:
"""创建日历事件,需要准确的ISO时间格式"""
return f"事件已创建: {title} 从 {start_time} 到 {end_time},参与人数: {len(attendees)}"
邮件发送工具
python
@tool
def send_email(
to: list[str], # 收件人邮箱
subject: str, # 邮件主题
body: str, # 邮件正文
cc: list[str] = [] # 抄送列表
) -> str:
"""通过邮件API发送邮件,需要正确格式的邮箱地址"""
return f"邮件已发送给 {', '.join(to)} - 主题: {subject}"
时间槽查询工具
python
@tool
def get_available_time_slots(
attendees: list[str],
date: str, # ISO格式日期
duration_minutes: int
) -> list[str]:
"""在特定日期检查参与者的日历可用性"""
return ["09:00", "14:00", "16:00"] # 模拟返回可用时间
关键点:
-
@tool装饰器将普通函数转换为LangChain工具 -
每个工具都有清晰的参数说明和文档字符串
-
当前是模拟实现,实际使用时需要连接真实API
2.3 创建专业化子代理
日历代理
python
calendar_agent = create_agent(
model,
tools=[create_calendar_event, get_available_time_slots],
system_prompt=(
"你是日历调度助手。"
"将自然语言调度请求解析为正确的ISO时间格式。"
"需要时使用get_available_time_slots检查可用性。"
"使用create_calendar_event安排事件。"
"在最终响应中确认安排的内容。"
)
)
邮件代理
python
email_agent = create_agent(
model,
tools=[send_email],
system_prompt=(
"你是邮件助手。"
"根据自然语言请求撰写专业邮件。"
"提取收件人信息并创建合适的主题和正文。"
"使用send_email发送消息。"
"在最终响应中确认发送的内容。"
)
)
代理的作用:
-
日历代理:专门处理时间解析和事件安排
-
邮件代理:专门处理邮件撰写和发送
-
每个代理都有专门的系统提示词来指导行为
2.4 将子代理包装为监督代理的工具
python
@tool
def schedule_event(request: str) -> str:
"""使用自然语言安排日历事件
当用户想要创建、修改或检查日历时使用此工具。
处理日期/时间解析、可用性检查和事件创建。
输入:自然语言调度请求
"""
result = calendar_agent.invoke({
"messages": [{"role": "user", "content": request}]
})
return result["messages"][-1].text
@tool
def manage_email(request: str) -> str:
"""使用自然语言发送邮件
当用户想要发送通知、提醒或任何邮件通信时使用。
处理收件人提取、主题生成和邮件撰写。
输入:自然语言邮件请求
"""
result = email_agent.invoke({
"messages": [{"role": "user", "content": request}]
})
return result["messages"][-1].text
包装逻辑:
-
将复杂的子代理封装成简单的工具函数
-
监督代理只需要调用这些工具,无需了解内部实现
2.5 创建监督代理
python
supervisor_agent = create_agent(
model,
tools=[schedule_event, manage_email],
system_prompt=(
"你是一个有用的个人助理。"
"你可以安排日历事件和发送邮件。"
"将用户请求分解为适当的工具调用并协调结果。"
"当请求涉及多个操作时,按顺序使用多个工具。"
)
)
监督代理特点:
-
协调多个专业化工具
-
理解复杂指令并分解为步骤
-
管理工具之间的执行顺序
2.6 使用监督代理处理请求
python
if __name__ == "__main__":
# 示例:需要日历和邮件协调的用户请求
user_request = (
"为设计团队安排下周二(2025-11-26)下午2点开始1小时的会议,"
"参与人[1@test.com, 2@test.com],"
"并给admin@test.com发送关于审查新样式的邮件提醒。"
)
print("用户请求:", user_request)
print("\n" + "="*80 + "\n")
# 流式处理并显示结果
for step in supervisor_agent.stream(
{"messages": [{"role": "user", "content": user_request}]}
):
for update in step.values():
for message in update.get("messages", []):
message.pretty_print()
三、完整运行步骤
3.1 设置环境
-
创建新的Python虚拟环境(推荐)
-
安装所需依赖
-
获取并设置DeepSeek API密钥
3.2 代码配置
-
将代码保存为
personal_assistant.py -
替换
os.environ["DEEPSEEK_API_KEY"]中的占位符为真实API密钥 -
可选:配置LangSmith用于监控(非必需)
3.3 执行代码
bash
python personal_assistant.py
3.4 预期输出
程序将:
-
打印用户请求
-
显示监督代理的思考过程
-
展示日历安排的结果
-
显示邮件发送的结果
四、系统架构总结
这个多代理系统采用分层架构:
text
用户请求
↓
监督代理(协调者)
↓
专业工具层
├── 日历工具 → 日历代理 → 日历API工具
└── 邮件工具 → 邮件代理 → 邮件API工具
优势:
-
模块化:每个组件职责单一
-
可扩展:易于添加新的专业代理
-
用户友好:使用自然语言交互
-
智能化:AI自动解析和协调复杂请求
这个系统展示了如何使用LangChain构建复杂的AI应用,将大任务分解为小任务,并由专门的代理处理每个子任务。
更多推荐
所有评论(0)