Agent Swarm 蜂群模式

0 阅读2分钟

一个用于利用 LangGraph 构建Swarm(蜂群式多智能体)系统的 Python 库。Swarm是一种多智能体架构,其中智能体会根据各自的专长动态地将控制权移交给其他智能体。该系统会记住最后一个处于活动状态的智能体,从而确保在后续交互中,对话能与该智能体继续进行。

Swarm 是一种受自然界蚁群、蜂群等生物群体行为启发的 多智能体协作设计范式。在自然界中,单只蚂蚁或蜜蜂的智能非常有限,但成千上万只聚集在一起时,却能完成极其复杂的任务——筑巢、觅食、防御。Swarm 蜂群式正是模仿了这种 "个体简单、群体智能" 的思想。

swarm.jpg Agent Swarm (由AIJoe生成)

每个Agent仅依据局部环境信息和简单规则进行决策,通过信息素、消息广播或状态共享等方式间接通信,最终在整体层面涌现出复杂、高效的智能行为。

  • 每只"蜜蜂"(Agent)负责采集特定区域的花蜜(子任务)
  • 蜜蜂之间通过"舞蹈"(信息传递)告诉同伴哪里花多
  • 没有一只蜜蜂知道全局计划,但整个蜂群高效完成了采蜜任务
  • 即使几只蜜蜂迷路了,蜂群整体依然正常运转
pip install langgraph-swarm -i https://pypi.tuna.tsinghua.edu.cn/simple  //0.1.0 


from dotenv import dotenv_values
from langchain_openai import ChatOpenAI
from langgraph.checkpoint.memory import InMemorySaver
from langchain.agents import create_agent
from langgraph_swarm import create_handoff_tool, create_swarm

env_vars = dotenv_values('.env')
OPENAI_KEY = env_vars['OPENAI_API_KEY'] 
OPENAI_BASE_URL = env_vars['OPENAI_API_BASE'] 


llm = ChatOpenAI(model="gpt-4o-mini", api_key=OPENAI_KEY,base_url=OPENAI_BASE_URL)


def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b

alice = create_agent(
    llm,
    tools=[
        add,
        create_handoff_tool(
            agent_name="Bob",
            description="Transfer to Bob",
        ),
    ],
    system_prompt="You are Alice, an addition expert.",
    name="Alice",
)

bob = create_agent(
    llm,
    tools=[
        create_handoff_tool(
            agent_name="Alice",
            description="Transfer to Alice, she can help with math",
        ),
    ],
    system_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(11, turn_1)
turn_2 = app.invoke(
    {"messages": [{"role": "user", "content": "what's 5 + 7?"}]},
    config,
)
print(22, turn_2)