🤖 LangGraph 多智能体群集

LangGraph 多智能体群集是一种 Python 库,用于创建基于 LangGraph 的多智能体系统。这种系统允许智能体根据其专业化动态地将控制权交给彼此,并记住最后活跃的智能体,以便在后续交互中继续对话。

基础概念

  • 多智能体协作:不同智能体可以合作并将上下文传递给彼此。
  • 可定制的交接工具:内置工具用于智能体之间的通信。

安装和快速开始

  1. 安装库

    bash 复制代码
    pip install langgraph-swarm langchain-openai
  2. 设置 OpenAI API

    bash 复制代码
    export OPENAI_API_KEY=
  3. 创建智能体

    python 复制代码
    from langchain_openai import ChatOpenAI
    from langgraph.checkpoint.memory import InMemorySaver
    from langgraph.prebuilt import create_react_agent
    from langgraph_swarm import create_handoff_tool, create_swarm
    
    # 创建模型
    model = ChatOpenAI(model="gpt-4o")
    
    # 定义加法函数
    def add(a: int, b: int) -> int:
        return a + b
    
    # 创建 Alice 智能体
    alice = create_react_agent(
        model,
        [add, create_handoff_tool(agent_name="Bob")],
        prompt="You are Alice, an addition expert.",
        name="Alice",
    )
    
    # 创建 Bob 智能体
    bob = create_react_agent(
        model,
        [create_handoff_tool(agent_name="Alice", description="Transfer to Alice, she can help with math")],
        prompt="You are Bob, you speak like a pirate.",
        name="Bob",
    )
    
    # 创建群集
    checkpointer = InMemorySaver()
    workflow = create_swarm([alice, bob], default_active_agent="Alice")
    app = workflow.compile(checkpointer=checkpointer)
    
    # 与智能体交互
    config = {"configurable": {"thread_id": "1"}}
    turn_1 = app.invoke({"messages": [{"role": "user", "content": "i'd like to speak to Bob"}]}, config)
    print(turn_1)
    turn_2 = app.invoke({"messages": [{"role": "user", "content": "what's 5 + 7?"}]}, config)
    print(turn_2)

内存管理

  • 短期内存 :使用 InMemorySaver 来维持对话状态。
  • 长期内存 :使用 InMemoryStore 来存储历史数据。

自定义

  1. 自定义交接工具

    python 复制代码
    from langchain_core.tools import tool, BaseTool
    from langchain_core.messages import ToolMessage
    from langgraph.types import Command
    
    def create_custom_handoff_tool(*, agent_name: str, tool_name: str, tool_description: str) -> BaseTool:
        @tool(name=tool_name, description=tool_description)
        def handoff_to_agent(task_description: str, state: dict, tool_call_id: str):
            tool_message = ToolMessage(
                content=f"Successfully transferred to {agent_name}",
                name=tool_name,
                tool_call_id=tool_call_id,
            )
            return Command(
                goto=agent_name,
                graph=Command.PARENT,
                update={
                    "messages": [state["messages"][-1], tool_message],
                    "active_agent": agent_name,
                    "task_description": task_description,
                },
            )
    
        return handoff_to_agent
  2. 自定义智能体实现

    python 复制代码
    from langchain_core.messages import AnyMessage
    from langgraph.graph import StateGraph
    
    class AliceState:
        alice_messages: list[AnyMessage]
    
    alice = (
        StateGraph(AliceState)
        .add_node("model", ...)
        .add_node("tools", ...)
        .add_edge(...)
        .compile()
    )
    
    def call_alice(state):
        response = alice.invoke({"alice_messages": state["messages"]})
        return {"messages": response["alice_messages"]}
    
    workflow = (
        StateGraph()
        .add_node("Alice", call_alice, destinations=("Bob",))
        .add_node("Bob", call_bob, destinations=("Alice",))
    )
    workflow = add_active_agent_router(workflow, route_to=["Alice", "Bob"], default_active_agent="Alice")
    app = workflow.compile()

总结

LangGraph 多智能体群集提供了一个灵活的框架,用于创建多智能体系统。通过自定义交接工具和智能体实现,可以满足不同应用场景的需求。同时,内存管理对于维持对话状态至关重要。

相关推荐
上海云盾商务经理杨杨28 分钟前
2025年高防IP隐身术:四层架构拆解源站IP“消失之谜”
网络协议·tcp/ip·网络安全·架构
zuozewei1 小时前
高可用改造之构建双活冗余的TDengine时序数据处理架构
java·架构·tdengine
C4程序员3 小时前
北京JAVA基础面试30天打卡03
java·开发语言·面试
jz_ddk3 小时前
[科普] AI加速器架构全景图:从GPU到光计算的算力革命
人工智能·学习·算法·架构
Java技术小馆4 小时前
PromptPilot打造高效AI提示词
java·后端·面试
国家不保护废物5 小时前
Web Worker 多线程魔法:告别卡顿,轻松实现图片压缩!😎
前端·javascript·面试
BOB_BOB_BOB_5 小时前
【ee类保研面试】其他类---计算机网络
计算机网络·面试·职场和发展·保研
程序视点5 小时前
OpenAI 的最新 AI 模型 GPT-5 现已在 GitHub Models 上提供!
github·github copilot
寻月隐君6 小时前
Rust NFT 开发实战:构建生产级的 Pinata IPFS 自动化上传工具
后端·rust·github
UrbanJazzerati7 小时前
如何使用 PowerShell 动态授权不同 Salesforce 环境的详细指南
面试·shell