Agent 与工具调用6294 字

LangGraph多代理协作

·全库 336 / 611

《LangGraph多代理协作》共 0.6 万字,通篇围绕 prompt、Agent、工具调用、LangChain 展开,归在「Agent 与工具调用」这一层。

覆盖promptAgent工具调用LangChain工作流安全

适合要让 AI 真的去干活、不只是陪人聊天的人

目录骨架(6 节)
  1. 57.LangGraph多代理协作
  2. 注:将ppt后缀名改为zip后解压*
  3. python版本:3.12.4
  4. 生成的图将类似于以下图
  5. ```python
  6. 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 进行此操作的方法。

生成的图将类似于以下图

2f0126cdaa50f86b10095918871e4f98_simple_multi_agent_diagram.png

在我们开始之前,快速说明一下:以下展示如何在 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()

资料里没有你的场景?

把你手上的数据和想解决的那个环节发上来,我们按具体情况回,不复述方法论。

发布需求