Agent 与工具调用6294 字
LangGraph多代理协作
·全库 336 / 611
《LangGraph多代理协作》共 0.6 万字,通篇围绕 prompt、Agent、工具调用、LangChain 展开,归在「Agent 与工具调用」这一层。
覆盖promptAgent工具调用LangChain工作流安全
适合要让 AI 真的去干活、不只是陪人聊天的人
目录骨架(6 节)
- 57.LangGraph多代理协作
- 注:将ppt后缀名改为zip后解压*
- python版本:3.12.4
- 生成的图将类似于以下图
- ```python
- setx TAVILY_API_KEY ""
示例代码
注:将ppt后缀名改为zip后解压
python版本:3.12.4
协作
官方文档地址:https://langchain-ai.github.io/langgraph/how-tos/#multi-agent
中文文档地址:https://www.aidoczh.com/langgraph/how-tos/#_9
单个代理通常可以使用少量工具在一个域内有效地运行,但即使使用像gpt-4这样的强大模型,它在使用许多工具时也可能效率较低。
解决复杂任务的一种方法是使用“分而治之”的方法:为每个任务或域创建一个专门的代理,并将任务路由到正确的“专家”。
此笔记本(受 Wu 等人撰写的论文 AutoGen:通过多代理对话实现下一代 LLM 应用 的启发)展示了一种使用 LangGraph 进行此操作的方法。
生成的图将类似于以下图

在我们开始之前,快速说明一下:以下展示如何在 LangGraph 中实现某些设计模式。如果模式适合您的需求
%pip install -U langchain langchain_openai langsmith pandas langchain_experimental matplotlib langgraph langchain_core
setx TAVILY_API_KEY ""
# Optional, add tracing in LangSmith
setx LANGCHAIN_TRACING_V2 "true"
setx LANGCHAIN_API_KEY ""
创建代理
以下辅助函数将帮助创建代理。这些代理将成为图中的节点。
如果您只想查看图的外观,可以跳过此步骤。
# 导入基本消息类、用户消息类和工具消息类
from langchain_core.messages import (
BaseMessage,
HumanMessage,
ToolMessage,
)
# 导入聊天提示模板和消息占位符
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
# 导入状态图相关的常量和类
from langgraph.graph import END, StateGraph, START
# 定义一个函数,用于创建代理
def create_agent(llm, tools, system_message: str):
"""创建一个代理。"""
# 创建一个聊天提示模板
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"你是一个有帮助的AI助手,与其他助手合作。"
" 使用提供的工具来推进问题的回答。"
" 如果你不能完全回答,没关系,另一个拥有不同工具的助手"
" 会接着你的位置继续帮助。执行你能做的以取得进展。"
" 如果你或其他助手有最终答案或交付物,"
" 在你的回答前加上FINAL ANSWER,以便团队知道停止。"
" 你可以使用以下工具: {tool_names}。\n{system_message}",
),
# 消息占位符
MessagesPlaceholder(variable_name="messages"),
]
)
# 传递系统消息参数
prompt = prompt.partial(system_message=system_message)
# 传递工具名称参数
prompt = prompt.partial(tool_names=", ".join([tool.name for tool in tools]))
# 绑定工具并返回提示模板
return prompt | llm.bind_tools(tools)
定义工具
我们还将定义一些代理将在未来使用的工具
# 导入注解类型
from typing import Annotated
# 导入Tavily搜索工具
from langchain_community.tools.tavily_search import TavilySearchResults
# 导入工具装饰器
from langchain_core.tools import tool
# 导入Python REPL工具
from langchain_experimental.utilities import PythonREPL
# 创建Tavily搜索工具实例,设置最大结果数为5
tavily_tool = TavilySearchResults(max_results=5)
# 警告:这会在本地执行代码,未沙箱化时可能不安全
# 创建Python REPL实例
repl = PythonREPL()