subagent就像找来的临时工, 创建——干活——返回摘要——解散,没有身份,没有记忆。
如果有一个复杂的项目,需要一个前端、一个后端、一个测试来协作完成,那么subagent就做不到了。

如果需要干这个活,那么需要组建一个团队,这个团队中的成员都有专属的角色和岗位,当然每个成员都有其自己的岗位职责。这意味着:

  • agent要有记忆,记得之前做过什么
  • agent有身份和生命周期:agent有名字、角色、是一个正式且长期的员工。
  • 多agent之间可通信:agent之间可以互相发送消息

基于以上的需求,可以使用两个类实现这个agent。

  • Agent:name、role、inbox、messages
    • chat:和LLM交互,如果inbox有新消息,先读取并消化
    • receive:往收件箱追加消息
  • Team:
    • create:创建agent
    • send:点对点通信
    • broadcast:广播
    • clear:解散团队

多agent团队协作


team = Team()

# 组件团队
mumbers = create_team(task)
for m in mumbers:
    team.create(m['name'], m['role'])

# 逐个执行,每个agent干完活后通知所有团队成员
for m in mumbers:
    agent = team.agents[m['name']]
    result = team.agents[m['task']]
    team.broadcast(m["name"], f"我完成了任务,摘要: {result[:200]}")

# 最后一个团队成员做review
reviewer = team.agents[members[-1]["name"]]
review = reviewer.chat("请根据团队成果做最终审查")

# 项目收尾,解散团队
team.clear()

从 subagent到Agent类, messages从局部变量变成了实例属性,这一变化让agent有了长期记忆。 对于编程来说,数据存放的位置,决定了它的生命周期,生命周期决定了该数据块的影响范围和能力边界,能力越强,责任越大,agent干的活越多、多个agent之前的协作越复杂,messages列表越长,如果不加以控制会在多轮对话之后撑爆LLM的context window。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐