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

相关推荐
yanlele1 小时前
我用爬虫抓取了 25 年 5 月掘金热门面试文章
前端·javascript·面试
ai小鬼头2 小时前
Ollama+OpenWeb最新版0.42+0.3.35一键安装教程,轻松搞定AI模型部署
后端·架构·github
小兵张健3 小时前
武汉拿下 23k offer 经历
java·面试·ai编程
爱莉希雅&&&3 小时前
技术面试题,HR面试题
开发语言·学习·面试
天天扭码4 小时前
《很全面的前端面试题》——HTML篇
前端·面试·html
群联云防护小杜5 小时前
构建分布式高防架构实现业务零中断
前端·网络·分布式·tcp/ip·安全·游戏·架构
森焱森5 小时前
垂起固定翼无人机介绍
c语言·单片机·算法·架构·无人机
zhuiQiuMX6 小时前
脉脉maimai面试死亡日记
数据仓库·sql·面试
独行soc6 小时前
2025年渗透测试面试题总结-2025年HW(护网面试) 33(题目+回答)
linux·科技·安全·网络安全·面试·职场和发展·护网
库森学长6 小时前
面试官:发生OOM后,JVM还能运行吗?
jvm·后端·面试