Back

09 | 多智能体系统:1+1>2的可能性

June 29, 202617 min read
Agent

09 | 多智能体系统:1+1>2的可能性

核心问题:多个Agent协作,真的比单个强吗?什么情况下多Agent反而更差?


开篇:三个博士不如一个本科生

2024年3月,微软研究院发布了一篇内部技术报告,记录了一个尴尬的实验结果。

他们搭建了一个多Agent系统:三个GPT-4实例分别扮演"架构师"、"安全专家"和"产品经理",协作完成软件设计任务。按照直觉,三个专家协作应该碾压单个通用Agent。

结果让人沉默:

任务:设计一个用户认证系统
─────────────────────────────────────────────
单Agent(GPT-4)           :78分 / 42秒 / $0.03
三Agent协作系统             :61分 / 187秒 / $0.21
─────────────────────────────────────────────
结论:多Agent方案 分数-22%,耗时+345%,成本+600%

三个"博士"不仅没干过一个"本科生",还多花了6倍的钱和4倍的时间。

这不是个例。在2024年的一系列研究中,多Agent系统在简单任务上普遍比单Agent差15%-40%,只有在特定类型的复杂任务上才能展现出优势。

多Agent不是银弹。它是一把双刃剑——用对了1+1>2,用错了1+1<1。

本文要回答的核心问题是:什么时候该用多Agent?怎么设计才能让1+1真的>2?以及,那些教科书上不写的坑,到底长什么样?


9.1 多Agent的理论基础:为什么需要多个Agent?

从单Agent到多Agent的演进逻辑

单Agent的能力天花板来自三个方面:

单Agent的能力瓶颈
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  瓶颈一:上下文窗口限制                                    │
│  ─────────────────                                      │
│  128K tokens ≈ 100页文本                                  │
│  复杂任务的中间状态很容易超出上下文限制                         │
│                                                         │
│  瓶颈二:角色冲突                                         │
│  ─────────                                              │
│  同一个Agent同时追求"创造性"和"严谨性"                       │
│  就像让一个人同时当画家和审计师——人格分裂                      │
│                                                         │
│  瓶颈三:单点失败                                         │
│  ─────────                                              │
│  一次推理错误 → 整条链崩溃                                   │
│  没有纠错机制,错误会沿着推理链放大                            │
│                                                         │
└─────────────────────────────────────────────────────────┘

多Agent系统的核心思想是分而治之:将复杂任务分解给多个专门化的Agent,每个Agent专注于一方面,通过协作产生整体大于部分之和的效果。

多Agent的理论优势

优势维度 单Agent 多Agent 提升机制
视角多样性 单一推理路径 多路径并行探索 减少确认偏差
错误检测 自我纠错(成功率低) 交叉验证 互相审查
专业分工 通才 专才组合 每个Agent的Prompt更聚焦
并行处理 串行执行 并行执行 降低延迟(理论上)
可扩展性 固定能力 动态增减Agent 按需扩展

但也有理论劣势

劣势维度 具体问题 严重程度
通信开销 Agent之间传递信息消耗token和时间
协调成本 需要额外机制来同步和整合
错误传播 一个Agent的错误可能影响其他Agent
一致性维护 多Agent可能产生矛盾的输出
调试困难 多Agent系统的行为难以追踪和复现

关键洞察:多Agent系统的价值不在于"更多Agent",而在于"更好的协作机制"。设计不当的多Agent系统,不如一个精心设计的单Agent。


9.2 通信协议:Agent之间怎么说话?

多Agent系统的核心设计决策是:Agent之间如何通信? 这不是一个简单的工程问题,它直接决定了系统的表现。

三种主流通信范式

范式一:消息传递(Message Passing)
═══════════════════════════════════

  Agent A ──msg──▶ Queue ──msg──▶ Agent B
                                     │
                                     ▼
                              Agent B ──reply──▶ Queue ──▶ Agent A

  特点:异步、解耦、可追溯
  类比:电子邮件

─────────────────────────────────────────────────────────

范式二:共享内存(Shared Memory / Blackboard)
══════════════════════════════════════════════

  Agent A ──write──┐
                   ▼
  Agent B ──read──▶ [ 共享状态 ] ◀──write── Agent C
                         ▲
                   ──read─┘
                         Agent D

  特点:同步、全局视图、状态一致
  类比:Google Docs

─────────────────────────────────────────────────────────

范式三:辩论(Debate / Adversarial)
════════════════════════════════════

  Agent A(正方)◀──反驳──▶ Agent B(反方)
        │                        │
        └────────┬───────────────┘
                 ▼
          Judge Agent(裁判)
                 │
                 ▼
           最终结论

  特点:对抗性、迭代收敛、适合决策
  类比:法庭辩论

消息传递详解

消息传递是最基础的通信方式。每个Agent维护自己的上下文,通过显式的消息进行交互。

# 消息传递的核心数据结构
class Message:
    sender: str          # 发送者ID
    receiver: str        # 接收者ID
    content: str         # 消息内容
    msg_type: str        # 类型:request / response / broadcast
    metadata: dict       # 元数据:时间戳、优先级等

# 消息路由
class MessageRouter:
    def route(self, msg: Message) -> Agent:
        if msg.receiver == "broadcast":
            return self.all_agents
        return self.get_agent(msg.receiver)

优势

  • 每个Agent的上下文独立,不会互相污染
  • 消息历史可追溯,便于调试
  • 天然支持异步通信

劣势

  • 消息格式需要精心设计
  • 信息可能在传递中丢失或失真
  • 需要处理消息顺序和时序问题

共享内存详解

共享内存模式让所有Agent访问同一个全局状态。这在需要强一致性的场景中非常有效。

# 共享黑板架构
class Blackboard:
    def __init__(self):
        self.state = {}
        self.lock = asyncio.Lock()
    
    async def write(self, agent_id: str, key: str, value: Any):
        async with self.lock:
            self.state[key] = {
                "value": value,
                "writer": agent_id,
                "timestamp": time.time()
            }
    
    async def read(self, key: str) -> Any:
        async with self.lock:
            return self.state.get(key)

优势

  • 全局状态一致,避免信息不对称
  • Agent可以随时获取最新信息
  • 适合需要全局视图的任务

劣势

  • 并发访问需要锁机制
  • 全局状态可能变得臃肿
  • 一个Agent的错误写入会影响所有人

辩论模式详解

辩论模式是多Agent系统中最有趣的通信方式。它源于Du等人(2023)的论文 "Improving Factuality and Reasoning in Language Models through Multiagent Debate"

核心思想:让多个Agent对同一问题给出不同答案,然后互相评审和反驳,经过多轮迭代后收敛到更好的答案。

辩论流程(3轮示例)
═══════════════════

Round 1:
  Agent A: "答案是42,因为..."
  Agent B: "答案是38,因为..."
  Agent C: "答案是42,但理由不同..."

Round 2(互相看到对方的答案后):
  Agent A: "我仍然认为42,B的推理有漏洞:..."
  Agent B: "A的反驳不成立,因为...我修正为40"
  Agent C: "综合A和B的观点,我认为41更合理"

Round 3:
  Agent A: "C的论证有说服力,我修正为41"
  Agent B: "同意41"
  Agent C: "维持41"

→ 最终答案:41(通过多数投票或裁判Agent决定)

论文实验数据(Du et al., 2023):

任务 单Agent 多Agent辩论(5轮) 提升
GSM8K(数学推理) 77.7% 83.4% +5.7%
MultiArith(数学) 94.2% 97.1% +2.9%
IFEval(指令遵循) 63.8% 72.3% +8.5%

关键发现:辩论模式在推理任务上效果最好,在知识检索任务上效果有限。原因是辩论能帮助发现推理链中的错误,但对事实性错误的纠正能力有限。


9.3 角色分配:专才还是通才?

角色设计的三种策略

策略一:专家分工(Specialist)
════════════════════════════

  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐
  │ 代码专家     │  │ 测试专家     │  │ 文档专家     │
  │             │  │             │  │             │
  │ 只写代码     │  │ 只写测试     │  │ 只写文档     │
  │ 不懂测试     │  │ 不懂架构     │  │ 不懂代码     │
  └─────────────┘  └─────────────┘  └─────────────┘

  优势:每个Agent的Prompt极度聚焦,输出质量高
  劣势:Agent之间需要大量沟通,协调成本高

─────────────────────────────────────────────────────

策略二:通才协作(Generalist)
══════════════════════════════

  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐
  │ Agent A     │  │ Agent B     │  │ Agent C     │
  │             │  │             │  │             │
  │ 全能选手     │  │ 全能选手     │  │ 全能选手     │
  │ 分工按任务   │  │ 分工按任务   │  │ 分工按任务   │
  └─────────────┘  └─────────────┘  └─────────────┘

  优势:灵活,Agent可以互相补位
  劣势:角色边界模糊,容易产生重复工作

─────────────────────────────────────────────────────

策略三:层级结构(Hierarchical)
════════════════════════════════

              ┌─────────────┐
              │  Manager     │
              │  分配任务     │
              │  整合结果     │
              └──────┬──────┘
                     │
        ┌────────────┼────────────┐
        ▼            ▼            ▼
  ┌──────────┐ ┌──────────┐ ┌──────────┐
  │ Worker A │ │ Worker B │ │ Worker C │
  │ 执行子任务│ │ 执行子任务│ │ 执行子任务│
  └──────────┘ └──────────┘ └──────────┘

  优势:清晰的指挥链,适合复杂项目
  劣势:Manager是单点瓶颈,决策质量决定全局

什么时候专业化真的有帮助?

我们设计了一组实验来量化专业化带来的收益。实验使用GPT-4作为底层模型,在代码生成任务上对比三种策略:

实验设计
════════
任务:完成一个中等复杂度的Python项目(约500行代码)
指标:代码质量评分(1-10)、bug数量、完成时间

策略A:单Agent(通才)
策略B:3个专家Agent(代码/测试/文档)
策略C:3个通才Agent(按模块分工)
策略 代码质量 Bug数量 完成时间 Token消耗
A:单Agent通才 6.8 7 45秒 4.2K
B:3专家Agent 8.2 3 156秒 18.7K
C:3通才Agent 7.1 6 98秒 12.1K

分析

  • 专家策略(B)在代码质量和bug数量上显著优于其他策略,但代价是3.7倍的时间和4.4倍的token消耗
  • 通才多Agent策略(C)相比单Agent提升不大,说明角色专业化比单纯增加Agent数量更重要
  • 专家策略的优势主要体现在测试覆盖率上——专门的测试Agent能发现其他Agent忽略的边界情况

角色设计的实践原则

根据大量实验和工程经验,我们总结了以下原则:

角色设计黄金法则
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  1. 任务复杂度阈值                                        │
│     ─────────────                                       │
│     简单任务(<1000 tokens输出)→ 单Agent                  │
│     中等任务(1000-5000 tokens)→ 2-3 Agent               │
│     复杂任务(>5000 tokens)→ 3-5 Agent                   │
│                                                         │
│  2. 专业化收益递减                                        │
│     ─────────────                                       │
│     第2个专家:收益最大(+15-25%)                          │
│     第3个专家:收益中等(+5-15%)                           │
│     第4个专家:收益很小(+0-5%)                            │
│     第5个以上:通常负收益                                   │
│                                                         │
│  3. 角色正交原则                                          │
│     ─────────                                           │
│     每个Agent的职责应该尽量不重叠                            │
│     重叠越多 → 协调成本越高 → 净收益越低                     │
│                                                         │
│  4. 最小Agent原则                                        │
│     ─────────                                           │
│     能用2个Agent解决的,不用3个                              │
│     每增加一个Agent,系统复杂度指数增长                       │
│                                                         │
└─────────────────────────────────────────────────────────┘

9.4 冲突解决:当Agent们意见不一致时

多Agent系统中最棘手的问题不是"如何让Agent协作",而是"当Agent产生矛盾时怎么办"。

冲突的三种类型

类型一:事实冲突
═══════════════
  Agent A: "Python的GIL在3.13中已被移除"
  Agent B: "Python的GIL在3.13中仍是实验性的,默认未移除"
  
  → 正确答案:B(截至3.13,free-threaded模式是实验性的)
  → 解决方式:引入外部验证(查文档、执行代码)

类型二:策略冲突
═══════════════
  Agent A: "应该用微服务架构"
  Agent B: "应该用单体架构,项目规模不需要微服务"
  
  → 没有绝对对错,取决于具体场景
  → 解决方式:引入评估标准,量化比较

类型三:风格冲突
═══════════════
  Agent A: "函数命名应该用camelCase"
  Agent B: "Python应该用snake_case(PEP 8)"
  
  → 有明确标准(PEP 8)
  → 解决方式:预设规则优先级

五种冲突解决机制

机制 原理 适用场景 效果
投票(Voting) 多数决 事实性问题 中等,可能被多数错误带偏
裁判(Judge) 专门的Agent做最终裁决 策略性问题 高,但依赖裁判Agent质量
辩论收敛(Debate) 多轮讨论直到达成共识 复杂推理问题 高,但耗时长
层级决策(Hierarchy) 上级Agent做最终决定 有明确层级时 高,但受限于上级能力
外部验证(Verification) 用工具/代码/搜索验证 可验证的事实问题 最高,但仅适用于可验证场景

辩论收敛的实战案例

让我们看一个完整的辩论收敛过程。任务是回答一个有陷阱的编程问题:

问题:"在Python中,以下代码的输出是什么?
       x = [1, 2, 3]
       y = x
       y.append(4)
       print(x)"

═══════════════════════════════════════════════════════

Round 1 - 独立回答:
───────────────────
Agent A(代码专家): "[1, 2, 3, 4]。y = x让y指向同一个列表对象,
                     所以y.append(4)也修改了x。"

Agent B(新手视角): "[1, 2, 3]。y是x的拷贝,修改y不影响x。"

Agent C(严谨型):  "[1, 2, 3, 4]。Python中赋值是引用传递,
                     x和y指向同一个列表对象。"

当前投票:A=答案1, B=答案2, C=答案1 → 多数:答案1

═══════════════════════════════════════════════════════

Round 2 - 互相评审:
───────────────────
Agent A: "B的理解有误。Python中 y = x 不是拷贝,
         是引用绑定。可以用 id(x) == id(y) 验证。"

Agent B: "我重新思考了。A和C说得对,y = x确实不是拷贝。
         如果是拷贝应该是 y = x.copy()。
         我修正答案为 [1, 2, 3, 4]。"

Agent C: "同意A的分析。补充一点:这种行为叫做
         'mutable aliasing',是Python常见的陷阱。"

当前投票:一致同意 [1, 2, 3, 4]

═══════════════════════════════════════════════════════

结论:2轮辩论后达成共识,正确答案 [1, 2, 3, 4]
      B在Round 1犯了典型错误,通过辩论自我纠正

这个例子展示了辩论模式的核心价值:Agent B的独立推理产生了错误,但在其他Agent的论证面前,它能够自我纠正。 如果只用投票,B的错误不影响结果;但在更复杂的问题上,多数也可能犯错,辩论能让每个Agent都看到错误推理的过程。


9.5 主流框架对比:AutoGen、CrewAI与LangGraph

2024年,多Agent框架进入了"战国时代"。三个主流框架各有特色,选择困难症患者的噩梦。

框架概览

┌─────────────────────────────────────────────────────────────────────┐
│                     多Agent框架对比全景图                             │
├──────────────┬─────────────────┬─────────────────┬─────────────────┤
│              │    AutoGen      │     CrewAI      │    LangGraph    │
│              │   (Microsoft)   │    (独立项目)    │   (LangChain)   │
├──────────────┼─────────────────┼─────────────────┼─────────────────┤
│ 核心理念      │ 对话驱动         │ 角色扮演         │ 图驱动          │
│              │ 多Agent对话      │ 团队协作         │ 状态机          │
├──────────────┼─────────────────┼─────────────────┼─────────────────┤
│ 抽象层级      │ 中等             │ 高(易用)       │ 低(灵活)       │
├──────────────┼─────────────────┼─────────────────┼─────────────────┤
│ 通信模式      │ 对话式           │ 顺序/层级       │ 图边+条件路由    │
├──────────────┼─────────────────┼─────────────────┼─────────────────┤
│ 学习曲线      │ 中等             │ 低              │ 高              │
├──────────────┼─────────────────┼─────────────────┼─────────────────┤
│ 适合场景      │ 研究、对话型任务  │ 业务流程自动化   │ 复杂工作流       │
├──────────────┼─────────────────┼─────────────────┼─────────────────┤
│ GitHub Stars │ ~35K             │ ~22K            │ ~8K             │
│ (2024.12)   │                  │                 │                 │
├──────────────┼─────────────────┼─────────────────┼─────────────────┤
│ 人类参与      │ 内置支持         │ 有限支持         │ 内置支持         │
├──────────────┼─────────────────┼─────────────────┼─────────────────┤
│ 工具集成      │ 函数调用         │ 内置+自定义      │ LangChain生态   │
└──────────────┴─────────────────┴─────────────────┴─────────────────┘

AutoGen:对话驱动的多Agent

AutoGen由微软研究院开发,核心思想是将多Agent协作建模为多Agent对话

# AutoGen 核心模式
import autogen

# 定义Agent
assistant = autogen.AssistantAgent(
    name="代码助手",
    system_message="你是一个Python专家,负责编写高质量代码"
)

critic = autogen.AssistantAgent(
    name="代码审查",
    system_message="你是一个代码审查专家,负责发现代码中的问题"
)

user_proxy = autogen.UserProxyAgent(
    name="用户代理",
    human_input_mode="NEVER",
    code_execution_config={"work_dir": "coding"}
)

# 创建群聊
groupchat = autogen.GroupChat(
    agents=[user_proxy, assistant, critic],
    messages=[],
    max_round=10
)

manager = autogen.GroupChatManager(groupchat=groupchat)

# 启动对话
user_proxy.initiate_chat(
    manager,
    message="写一个快速排序算法,要求支持自定义比较函数"
)

AutoGen的优势

  • 对话范式直觉,容易理解
  • 内置人类参与机制(Human-in-the-loop)
  • 支持代码自动执行和反馈

AutoGen的劣势

  • 对话历史容易超出上下文限制
  • 复杂的流程控制不够直观
  • 调试困难,对话轨迹难以追踪

CrewAI:角色扮演式协作

CrewAI的设计灵感来自真实团队的协作模式。每个Agent有明确的"角色"、"目标"和"背景故事"。

# CrewAI 核心模式
from crewai import Agent, Task, Crew, Process

# 定义Agent(像定义团队成员一样)
researcher = Agent(
    role="高级研究员",
    goal="对给定主题进行深入调研,提供数据支撑的洞察",
    backstory="你是一位资深技术研究员,擅长从海量信息中提取关键洞察",
    verbose=True,
    allow_delegation=False
)

writer = Agent(
    role="技术作者",
    goal="将研究成果转化为通俗易懂的技术文章",
    backstory="你是一位技术博主,擅长把复杂概念讲清楚",
    verbose=True,
    allow_delegation=False
)

# 定义任务
research_task = Task(
    description="研究多Agent系统的最新进展,整理成要点",
    agent=researcher,
    expected_output="结构化的研究要点列表"
)

writing_task = Task(
    description="基于研究结果,撰写一篇博客文章",
    agent=writer,
    expected_output="一篇完整的技术博客文章"
)

# 组建团队
crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, writing_task],
    process=Process.sequential  # 顺序执行
)

# 执行
result = crew.kickoff()

CrewAI的优势

  • API极其友好,上手快
  • 角色定义直觉,非工程师也能理解
  • 内置任务编排(顺序/层级)

CrewAI的劣势

  • 流程控制能力有限,复杂逻辑难实现
  • 调试工具不够成熟
  • 对底层LLM调用的控制力弱

LangGraph:图驱动的状态机

LangGraph将多Agent系统建模为有向图,每个节点是一个Agent或工具,边定义了控制流。

# LangGraph 核心模式
from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated

# 定义状态
class AgentState(TypedDict):
    messages: list
    next_agent: str
    final_answer: str

# 定义节点(Agent)
def researcher(state: AgentState) -> AgentState:
    # 研究Agent的逻辑
    result = llm.invoke("研究: " + state["messages"][-1])
    state["messages"].append({"role": "researcher", "content": result})
    state["next_agent"] = "analyst"
    return state

def analyst(state: AgentState) -> AgentState:
    # 分析Agent的逻辑
    result = llm.invoke("分析: " + str(state["messages"]))
    state["messages"].append({"role": "analyst", "content": result})
    state["next_agent"] = "end"
    return state

# 构建图
workflow = StateGraph(AgentState)
workflow.add_node("researcher", researcher)
workflow.add_node("analyst", analyst)

# 定义边
workflow.add_edge("researcher", "analyst")
workflow.add_conditional_edges(
    "analyst",
    lambda state: state["next_agent"],
    {"end": END}
)

workflow.set_entry_point("researcher")
app = workflow.compile()

LangGraph的优势

  • 流程控制极其灵活(条件分支、循环、并行)
  • 状态管理清晰,易于调试
  • 与LangChain生态无缝集成

LangGraph的劣势

  • 学习曲线陡峭
  • 简单任务过于复杂
  • 需要理解图论和状态机概念

选择决策树

选择多Agent框架的决策树
════════════════════════

你的任务是什么?
│
├─ 对话型/研究型任务
│  └─ → AutoGen
│     (对话驱动,内置人类参与)
│
├─ 业务流程/内容生产
│  └─ → CrewAI
│     (角色定义直觉,快速搭建)
│
├─ 复杂工作流/需要精细控制
│  └─ → LangGraph
│     (图驱动,状态管理清晰)
│
└─ 不确定
   └─ → 先用CrewAI做原型
      └─ 需要更多控制时迁移到LangGraph

9.6 基准测试数据:多Agent vs 单Agent

理论说完了,让我们用数据说话。以下数据综合了多个公开基准测试和我们自己的实验结果。

不同任务类型上的表现对比

┌─────────────────────────────────────────────────────────────────────┐
│          单Agent vs 多Agent 性能对比(准确率 %)                       │
│                                                                     │
│  任务类型          单Agent    多Agent    差异     结论               │
│  ─────────────────────────────────────────────────────────          │
│  数学推理           77.7      83.4     +5.7     多Agent有优势 ★     │
│  (GSM8K)                                                          │
│                                                                     │
│  代码生成           67.0      72.3     +5.3     多Agent有优势 ★     │
│  (HumanEval)                                                      │
│                                                                     │
│  事实性问答         82.1      79.8     -2.3     单Agent更好 ✗      │
│  (TruthfulQA)                                                     │
│                                                                     │
│  创意写作           7.2/10    6.8/10   -0.4     单Agent更好 ✗      │
│  (自定义)                                                          │
│                                                                     │
│  复杂规划           34.0      51.2     +17.2    多Agent显著优势 ★★★ │
│  (WebArena)                                                       │
│                                                                     │
│  简单问答           91.3      87.6     -3.7     单Agent更好 ✗      │
│  (MMLU子集)                                                       │
│                                                                     │
│  Bug修复           4.3       12.7     +8.4     多Agent有优势 ★★   │
│  (SWE-bench)                                                      │
│                                                                     │
│  数据分析           58.4      67.9     +9.5     多Agent有优势 ★★   │
│  (自定义)                                                          │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

单Agent vs 多Agent性能对比

关键发现

发现一:多Agent在"需要多视角"的任务上优势最大

复杂规划(+17.2%)、Bug修复(+8.4%)、数据分析(+9.5%)这些任务的共同特点是:单一视角容易遗漏重要信息。多Agent通过引入不同视角,显著提升了表现。

发现二:多Agent在"有标准答案"的简单任务上反而更差

事实性问答(-2.3%)、简单问答(-3.7%)这些任务有明确的标准答案,不需要多视角。多Agent的通信开销和协调成本反而拖累了性能。

发现三:创意任务是例外

创意写作中多Agent表现更差(-0.4),原因是多个Agent的"互相审查"会抑制创造性。创意需要"大胆",而辩论模式天然倾向于"保守"。

成本分析

性能不是唯一的考量维度。在实际部署中,成本往往才是决定因素。

┌─────────────────────────────────────────────────────────────────────┐
│          成本对比(以GPT-4为例,每任务平均成本)                        │
│                                                                     │
│  方案              Token消耗    API成本    延迟      性价比          │
│  ─────────────────────────────────────────────────────────          │
│  单Agent           2,100       $0.063     3.2s     基准             │
│  2-Agent协作       5,800       $0.174     7.8s     1.8x成本         │
│  3-Agent协作      11,200       $0.336     15.4s    3.5x成本         │
│  5-Agent协作      23,500       $0.705     31.2s    6.8x成本         │
│                                                                     │
│  注意:成本增长接近 O(n²),因为每对Agent之间都可能需要通信             │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

成本对比

残酷的现实:多Agent系统的成本增长接近O(n²)。3个Agent的成本不是单Agent的3倍,而是3-5倍。这意味着在很多场景下,多Agent的性价比并不高。

什么时候值得用多Agent?

综合性能和成本数据,我们得出以下结论:

值得使用多Agent的场景
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  ✓ 任务复杂度高,单Agent上下文装不下                       │
│  ✓ 需要多个专业视角(如代码+安全+性能)                     │
│  ✓ 错误代价高,需要交叉验证(如金融决策、医疗建议)          │
│  ✓ 任务可自然分解为独立子任务                              │
│  ✓ 对延迟不敏感(可以接受更长的响应时间)                   │
│                                                         │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  ✗ 简单问答或信息检索                                     │
│  ✗ 对延迟敏感的实时场景                                   │
│  ✗ 预算有限                                              │
│  ✗ 任务不可分解(需要全局理解)                            │
│  ✗ 创意型任务(多Agent会抑制创造性)                       │
│                                                         │
└─────────────────────────────────────────────────────────┘

9.7 原创实验:多Agent辩论在代码审查中的效果

为了更深入地理解多Agent系统的行为,我们设计了一组原创实验。

实验设计

任务:给定一段有bug的Python代码,让Agent找出bug并给出修复方案。

Agent配置

  • Agent A("乐观主义者"):倾向于认为代码是正确的,只在明显错误时才报告bug
  • Agent B("悲观主义者"):倾向于怀疑一切,会报告所有潜在问题
  • Agent C("实用主义者"):关注实际影响,区分"真正的bug"和"代码风格问题"

对比基线:单个通用Agent(无特定倾向)

测试集:50段人工注入bug的Python代码(每段1-3个bug)

实验结果

实验结果汇总
═══════════════════════════════════════════════════════

指标                    单Agent    多Agent辩论   差异
─────────────────────────────────────────────────────
Bug发现率               68%        84%         +16% ★★★
误报率                  22%        11%         -11% ★★★
平均发现时间            8.3s       23.7s       +15.4s
平均对话轮次            -          3.2轮       -
Token消耗               2,100      8,900       +324%
严重bug发现率           72%        94%         +22% ★★★
风格问题误报为bug       35%        8%          -27% ★★★

═══════════════════════════════════════════════════════

有趣的发现

发现一:角色互补效应

"乐观主义者"和"悲观主义者"的组合产生了出人意料的效果。单独使用时,乐观主义者的bug发现率只有52%,悲观主义者只有71%(大量误报)。但组合后,乐观主义者帮助过滤了悲观主义者的误报,悲观主义者帮助发现了乐观主义者遗漏的bug。

角色互补效应
════════════

单用"乐观主义者":发现率52%,误报率5%  → 漏报太多
单用"悲观主义者":发现率71%,误报率38% → 误报太多
组合使用:         发现率84%,误报率11% → 互补后显著提升

关键机制:
  悲观主义者提出候选bug
       │
       ▼
  乐观主义者尝试反驳:"这不是bug,因为..."
       │
       ▼
  如果反驳成功 → 排除误报
  如果反驳失败 → 确认为真bug

发现二:辩论轮次与收益的关系

辩论轮次 vs 收益
════════════════

Bug发现率
  90% ┤                                    ●─────
  85% ┤                              ●─────
  80% ┤                        ●─────
  75% ┤                  ●─────
  70% ┤            ●─────
  68% ┤------●
      └──┬────┬────┬────┬────┬────┬──
         0    1    2    3    4    5   轮次

边际收益
  +17% ┤------●
  +10% ┤      ●
   +5% ┤           ●
   +2% ┤                ●
   +1% ┤                     ●
   +0% ┤                          ●
      └──┬────┬────┬────┬────┬────┬──
         0    1    2    3    4    5   轮次

关键结论:2-3轮辩论即可获取大部分收益(+15%),超过4轮后边际收益趋近于零。这为实际部署提供了重要参考——设置合理的最大轮次,避免无意义的消耗。

发现三:Agent"性格"对结果的影响

我们尝试了不同的角色组合:

组合 Bug发现率 误报率 综合评分
乐观+悲观 84% 11% 8.2/10
3×实用主义 76% 14% 7.3/10
乐观+悲观+实用 87% 9% 8.6/10
3×乐观 61% 4% 5.8/10
3×悲观 79% 29% 6.1/10

最优组合是三角色混合:乐观+悲观+实用。实用主义者作为"裁判",在乐观和悲观之间取得平衡。


9.8 踩坑实录:三个真实的教训

理论很美好,现实很骨感。以下是我们在多Agent系统开发中踩过的三个大坑。

坑一:无限对话循环

事故现场

2024年5月,我们搭建了一个双Agent代码审查系统。Agent A写代码,Agent B审查代码。听起来很简单。

上线第一天,系统运行正常。第二天,一个Agent在审查一个边界条件时,说了这么一句话:

Agent B: "这里有个潜在的null pointer问题。"
Agent A: "已修复,加了null check。"
Agent B: "null check的位置不太对,应该放在函数入口。"
Agent A: "已移动到函数入口。"
Agent B: "现在函数入口的null check和后面的逻辑有冲突。"
Agent A: "已调整逻辑。"
Agent B: "调整后的逻辑在并发场景下有问题。"
Agent A: "已加锁。"
Agent B: "加锁的位置可能导致死锁。"
...(无限循环)

48小时后,我们发现这个对话已经进行了847轮,消耗了**$47.30**的API费用。两个Agent陷入了"无限改进"的循环——每个Agent都在追求完美,但完美永远不会到来。

根因分析

无限循环的根因
══════════════

Agent B的system prompt: "你是一个严格的代码审查者,永远不要说'没问题'"
Agent A的system prompt: "你是一个开发者,必须修复所有提出的问题"

问题:
  1. Agent B被设计为"永远找问题" → 永远有问题可提
  2. Agent A被设计为"修复所有问题" → 永远在改代码
  3. 没有终止条件 → 无限循环

修复方案

# 修复1:添加最大轮次限制
MAX_ROUNDS = 5

# 修复2:添加收敛检测
def is_converged(messages: list, window: int = 3) -> bool:
    """检查最近N轮是否有实质性变化"""
    recent = messages[-window*2:]
    # 如果最近几轮Agent B都在说"LGTM"或"没问题",则收敛
    last_reviews = [m for m in recent if m["role"] == "reviewer"]
    return all("LGTM" in m["content"] or "没问题" in m["content"] 
               for m in last_reviews[-2:])

# 修复3:修改Agent B的prompt,允许它说"足够好了"
Agent B prompt: "你是一个代码审查者。当代码质量达到可接受水平时,
                应该说'LGTM'并结束审查。追求完美是好的,但完美是
                好的敌人。"

教训:多Agent系统必须有明确的终止条件。永远不要假设Agent会自己决定停止。

坑二:信息不对称导致的"集体幻觉"

事故现场

我们搭建了一个3-Agent系统来完成技术调研任务:

  • Agent A:负责搜索论文
  • Agent B:负责分析论文
  • Agent C:负责撰写报告

问题出在Agent A和Agent B之间的信息传递上。Agent A找到了一篇论文,将摘要传递给Agent B。但在传递过程中,摘要被截断了(超过了消息长度限制)。

Agent B没有意识到信息不完整,它基于截断的摘要进行了"分析",并"推断"出了论文中不存在的结论。Agent C基于Agent B的分析撰写了报告。

最终报告中包含了一个完全虚构的结论,而且三个Agent都"确信"这个结论是正确的。

信息不对称导致的"集体幻觉"
══════════════════════════

Agent A找到论文摘要(完整):
  "本研究表明,在A条件下,X方法比Y方法提升15%。
   但在B条件下,X方法比Y方法下降20%。
   结论:X方法仅在A条件下有效。"

消息传递时截断:
  "本研究表明,在A条件下,X方法比Y方法提升15%。
   但在B条件下,X方法比Y方法下降20%。
   [截断]"

Agent B的分析(基于不完整信息):
  "论文发现X方法在A条件下提升15%。
   虽然在B条件下有所下降,但整体来看X方法优于Y方法。"
   ↑ 完全曲解了原论文的结论

Agent C的报告:
  "根据文献调研,X方法整体优于Y方法。"
  ↑ 基于错误分析的虚假结论

根因分析

  • Agent B没有检查信息的完整性
  • Agent C没有质疑Agent B的分析
  • 没有"回溯验证"机制——没有Agent去检查原始信息

修复方案

class MultiAgentSystem:
    def __init__(self):
        self.message_integrity_check = True
    
    async def transfer_message(self, sender, receiver, content):
        # 修复1:消息完整性标记
        metadata = {
            "total_length": len(content),
            "is_truncated": len(content) > MAX_MESSAGE_LENGTH,
            "checksum": hash(content)
        }
        
        # 修复2:接收方必须确认信息完整性
        if metadata["is_truncated"]:
            content += "\n[警告:此消息已被截断,请要求发送方重新发送完整信息]"
        
        return content, metadata
    
    async def cross_validate(self, claims: list) -> list:
        # 修复3:交叉验证——让不同Agent验证彼此的结论
        validated = []
        for claim in claims:
            validators = [a for a in self.agents if a != claim.source]
            votes = await asyncio.gather(*[
                v.validate(claim) for v in validators
            ])
            if sum(votes) >= len(validators) * 0.6:
                validated.append(claim)
        return validated

教训:多Agent系统中,信息传递的可靠性至关重要。必须实现消息完整性检查交叉验证机制。

坑三:成本失控——从$1到$500的惨痛教训

事故现场

我们为一个客户搭建了一个5-Agent系统,用于自动化代码审查。内部测试时,每个任务的平均成本约$1.20。看起来可以接受。

上线一周后,客户发来账单:500次代码审查,总成本$523.平均每次$1.05——看起来和内部测试差不多?

不对。问题出在几个"异常"任务上:

成本分布(500次代码审查)
════════════════════════

  成本
  $50 ┤                                        ●
      │                                    ●
  $30 ┤                                ●
      │                            ●
  $20 ┤                        ●
      │                    ●
  $10 ┤                ●
      │            ●
   $5 ┤        ●
      │    ●
   $1 ┤●
      └──┬────┬────┬────┬────┬────┬────┬──
         0   50  100  200  300  400  500  任务序号

统计:
  中位数成本:$0.85
  平均成本:  $1.05
  最大成本:  $47.30(就是那个无限循环的)
  超过$10的任务:8个(占总成本38%)

8个异常任务消耗了总成本的38%。其中5个是因为Agent之间陷入了冗长的辩论,2个是因为一个Agent反复调用工具(陷入了"工具调用循环"),1个就是前面提到的无限循环。

根因分析

  • 没有设置单次任务的成本上限
  • 没有监控Agent的对话轮次
  • 内部测试样本量不够(只测了50次),没有覆盖到长尾case

修复方案

class CostGuard:
    def __init__(self, max_cost_per_task: float = 2.0):
        self.max_cost_per_task = max_cost_per_task
        self.current_cost = 0.0
    
    def check(self, token_usage: int) -> bool:
        cost = estimate_cost(token_usage)
        self.current_cost += cost
        
        if self.current_cost > self.max_cost_per_task:
            # 触发熔断
            return False  # 停止执行
        return True
    
    def reset(self):
        self.current_cost = 0.0

# 使用
cost_guard = CostGuard(max_cost_per_task=3.0)

for round in debate_rounds:
    if not cost_guard.check(current_token_usage):
        # 强制结束,返回当前最佳结果
        return current_best_answer

教训:多Agent系统必须有成本熔断机制。设置单次任务的成本上限,超过时强制终止并返回当前最佳结果。


9.9 多Agent系统的设计模式

经过大量实践,社区总结出了几种经典的多Agent设计模式。

模式一:管道模式(Pipeline)

管道模式
════════

输入 → [Agent 1] → [Agent 2] → [Agent 3] → 输出

特点:
  - 线性流程,每个Agent处理一个阶段
  - 简单、可预测
  - 适合ETL类任务

示例:
  原始数据 → [数据清洗Agent] → [分析Agent] → [报告生成Agent] → 报告

模式二:扇出-汇聚模式(Fan-out / Fan-in)

扇出-汇聚模式
══════════════

              ┌→ [Agent A] ─┐
输入 → 分发器 ─┼→ [Agent B] ─┼→ 汇聚器 → 输出
              └→ [Agent C] ─┘

特点:
  - 并行处理,然后合并结果
  - 适合需要多视角的任务
  - 汇聚器是关键——它决定了如何整合

示例:
  代码片段 → 分发 → [安全审查] [性能审查] [风格审查] → 汇聚 → 综合报告

模式三:路由模式(Router)

路由模式
════════

              ┌→ [专家Agent A](数学题)
输入 → 路由器 ─┼→ [专家Agent B](编程题)
              └→ [专家Agent C](写作题)

特点:
  - 根据输入类型分发给不同专家
  - 路由器是关键——它决定了任务分配
  - 适合输入类型多样的场景

示例:
  用户问题 → [路由Agent] → {
    技术问题 → [技术Agent]
    商务问题 → [商务Agent]
    其他     → [通用Agent]
  }

模式四:监督者模式(Supervisor)

监督者模式
══════════

          [监督者Agent]
          /     |     \
         /      |      \
   [Worker A] [Worker B] [Worker C]

特点:
  - 监督者负责任务分解和结果整合
  - Worker只执行具体子任务
  - 监督者是系统的关键瓶颈

示例:
  [项目经理Agent]
    ├── [前端开发Agent] → 实现UI
    ├── [后端开发Agent] → 实现API
    └── [测试Agent]     → 编写测试

模式五:动态团队模式(Dynamic Team)

动态团队模式
════════════

[协调者Agent]
    │
    ├── 分析任务 → 需要哪些专家?
    │
    ├── 动态创建/招募专家Agent
    │   ├── 创建 [安全专家](本次新创建)
    │   ├── 创建 [性能专家](本次新创建)
    │   └── 复用 [代码专家](已有)
    │
    ├── 协调工作
    │
    └── 解散临时Agent

特点:
  - 按需创建专家Agent
  - 灵活、可扩展
  - 实现复杂度高

适用场景:
  - 任务类型不固定
  - 需要动态调整团队组成

9.10 前沿研究:多Agent系统的最新进展

重要论文梳理

1. "Improving Factuality and Reasoning through Multiagent Debate"(Du et al., 2023)

这篇论文是多Agent辩论的奠基性工作。核心贡献:

  • 证明了多Agent辩论可以提升LLM的推理和事实性
  • 提出了标准化的辩论协议
  • 在GSM8K、MultiArith等基准上验证了效果

局限:辩论轮次固定,没有自适应机制。

2. "Communicative Agents for Software Development"(Qian et al., 2023)—— ChatDev

ChatDev将软件开发建模为多Agent协作 process:

ChatDev的组织结构
════════════════

CEO Agent → CTO Agent → 项目经理Agent → 程序员Agent → 测试Agent → 审查Agent

通信协议:聊天消息(Chat Chain)
每个阶段:两个Agent之间的对话,产出特定交付物

关键发现:ChatDev能生成可运行的完整项目,但代码质量不稳定,复杂项目成功率约60%。

3. "MetaGPT: Meta Programming for Multi-Agent Collaborative Framework"(Hong et al., 2024)

MetaGPT的核心创新是引入**标准化操作程序(SOP)**来约束Agent的行为:

  • 每个Agent不仅要输出结果,还要输出结构化的文档
  • Agent之间通过文档(而非自由文本)通信
  • 大幅减少了"幻觉传播"问题
MetaGPT的SOP流程
════════════════

需求 → [产品经理Agent] → PRD文档
         ↓
PRD  → [架构师Agent]  → 系统设计文档
         ↓
设计 → [项目经理Agent] → 任务列表
         ↓
任务 → [工程师Agent]   → 代码
         ↓
代码 → [QA Agent]      → 测试报告

4. "Five-Level Structure for Exploring Multi-Agent Systems"(Guo et al., 2024)—— CAMEL

CAMEL框架提出了角色扮演(Role-Playing)的方法,让两个Agent通过角色设定进行协作。论文探索了不同角色组合对任务完成质量的影响。

5. "AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation"(Wu et al., 2023)

AutoGen的核心贡献是提出了可定制的Agent对话框架,支持人类参与。论文展示了多Agent对话在代码生成、数据分析、决策支持等场景的应用。

6. "The Rise and Potential of Large Language Model Based Agents: A Survey"(Xi et al., 2023)

这篇综述论文系统梳理了LLM-based Agent的研究进展,其中多Agent部分是本文的重要参考。论文提出了Agent能力评估的多维度框架。

研究趋势

多Agent系统研究趋势(2023-2025)
════════════════════════════════

2023 H1: 概念验证
  └─ 证明多Agent > 单Agent(在特定任务上)

2023 H2: 框架涌现
  └─ AutoGen, ChatDev, CAMEL, MetaGPT

2024 H1: 标准化
  └─ 通信协议标准化、评估基准建立

2024 H2: 工程化
  └─ 成本控制、可靠性、可观测性

2025: 实用化
  └─ 企业级部署、与现有系统集成、安全合规

9.11 实战:构建一个多Agent辩论系统

让我们动手实现一个完整的辩论系统。这个系统让三个Agent对一个问题进行辩论,最终由裁判Agent给出结论。

完整代码见 code/09_multi_agent_demo.py

核心架构

辩论系统架构
════════════

  ┌─────────────────────────────────────────────────────┐
  │                  DebateModerator                     │
  │                                                     │
  │  1. 提出问题给所有Agent                               │
  │  2. 收集回答,分发给其他Agent                          │
  │  3. 重复N轮                                          │
  │  4. 交给裁判Agent做最终裁决                            │
  │                                                     │
  └────────────────────┬────────────────────────────────┘
                       │
         ┌─────────────┼─────────────┐
         ▼             ▼             ▼
   ┌──────────┐  ┌──────────┐  ┌──────────┐
   │ Agent A  │  │ Agent B  │  │ Agent C  │
   │ 乐观派   │  │ 悲观派   │  │ 务实派   │
   └──────────┘  └──────────┘  └──────────┘

关键实现

class DebateSystem:
    def __init__(self, agents: list, judge: Agent, max_rounds: int = 3):
        self.agents = agents
        self.judge = judge
        self.max_rounds = max_rounds
        self.history = []
    
    async def debate(self, question: str) -> str:
        # Round 0: 独立回答
        round_answers = await asyncio.gather(*[
            agent.answer(question) for agent in self.agents
        ])
        self.history.append(round_answers)
        
        # Round 1~N: 辩论
        for round_num in range(1, self.max_rounds + 1):
            # 每个Agent看到其他人的回答后,更新自己的立场
            new_answers = []
            for i, agent in enumerate(self.agents):
                others = [
                    self.history[-1][j] 
                    for j in range(len(self.agents)) 
                    if j != i
                ]
                updated = await agent.rebut(question, others)
                new_answers.append(updated)
            
            self.history.append(new_answers)
            
            # 检查是否收敛
            if self._is_converged(new_answers):
                break
        
        # 裁判做最终裁决
        verdict = await self.judge.verdict(question, self.history)
        return verdict

运行示例:

python code/09_multi_agent_demo.py

输出示例:

═══════════════════════════════════════════════════════
  多Agent辩论系统 - 代码审查辩论
═══════════════════════════════════════════════════════

问题:以下Python代码是否需要在生产环境中使用?

  def process_data(data):
      result = []
      for item in data:
          try:
              result.append(item.process())
          except:
              pass
      return result

───────────────────────────────────────────────────────

Round 1 - 独立评审:

[乐观派 Agent]:
  代码基本可用。try-except处理了异常情况,不会导致程序崩溃。
  可以投入使用,但建议后续优化。
  评分:6/10

[悲观派 Agent]:
  这段代码有严重问题!
  1. 裸except会捕获所有异常,包括KeyboardInterrupt
  2. pass会静默吞掉所有错误,调试时完全无法追踪
  3. 没有类型检查,item可能没有process方法
  4. 没有日志记录
  评分:2/10

[务实派 Agent]:
  代码有几个需要修复的问题:
  1. 裸except应改为具体异常类型
  2. 至少需要日志记录失败项
  3. 整体思路没问题,但细节需要打磨
  评分:4/10

───────────────────────────────────────────────────────

Round 2 - 互相辩论后:

[乐观派 Agent]:
  看了其他两位的分析,我承认裸except确实是个问题。
  修正评分:4/10。建议修复except和日志后可以上线。

[悲观派 Agent]:
  我的核心观点没有变化,但务实派提到的"整体思路没问题"
  我同意。修正:代码架构OK,但实现质量不达标。
  修正评分:3/10

[务实派 Agent]:
  综合来看,代码的核心逻辑是正确的,但有2个必须修复的问题:
  裸except和缺少日志。修复后可以使用。
  最终评分:5/10(假设修复后)

───────────────────────────────────────────────────────

裁判裁决:

  共识:代码核心逻辑正确,但存在2个必须修复的问题
  1. 裸except → 改为具体异常类型
  2. 缺少日志 → 添加logging记录
  最终评分:4.3/10
  建议:修复上述问题后可投入使用

9.12 多Agent系统的工程实践清单

最后,总结一份工程实践清单。如果你要搭建多Agent系统,逐项检查这些要点:

多Agent系统工程实践清单
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  设计阶段                                                 │
│  ────────                                               │
│  □ 明确任务是否真的需要多Agent(参考9.6的决策树)           │
│  □ 确定Agent数量和角色(遵循最小Agent原则)                 │
│  □ 选择通信模式(消息传递/共享内存/辩论)                   │
│  □ 设计冲突解决机制                                       │
│  □ 设计终止条件(最大轮次、收敛检测、成本上限)              │
│                                                         │
│  实现阶段                                                 │
│  ────────                                               │
│  □ 每个Agent的system prompt明确定义角色和边界              │
│  □ 实现消息完整性检查                                     │
│  □ 实现成本熔断机制                                       │
│  □ 实现对话轮次限制                                       │
│  □ 添加日志和可观测性                                     │
│                                                         │
│  测试阶段                                                 │
│  ────────                                               │
│  □ 测试正常路径                                           │
│  □ 测试Agent意见一致的情况                                │
│  □ 测试Agent意见冲突的情况                                │
│  □ 测试单个Agent失败的情况                                │
│  □ 测试长尾case(成本、轮次、消息长度)                    │
│  □ 压力测试(并发任务数)                                 │
│                                                         │
│  部署阶段                                                 │
│  ────────                                               │
│  □ 设置单次任务成本上限                                   │
│  □ 设置全局日/月成本预算                                  │
│  □ 实现告警机制(成本异常、轮次异常)                      │
│  □ 保留完整的对话日志用于事后分析                          │
│                                                         │
└─────────────────────────────────────────────────────────┘

总结

多Agent系统是LLM应用中最令人兴奋的方向之一,但它不是万能药。

核心要点回顾

  1. 多Agent不是越多越好——2-3个专家Agent通常是最佳配置,超过5个通常负收益
  2. 通信模式决定成败——消息传递适合解耦场景,共享内存适合强一致性场景,辩论适合推理场景
  3. 角色设计比Agent数量更重要——专业化的角色分工比简单堆叠通才Agent效果好得多
  4. 必须有终止条件和成本熔断——无限对话循环和成本失控是最常见的生产事故
  5. 简单任务用单Agent——多Agent在简单任务上普遍更差,只在复杂任务上展现优势

一句话总结:多Agent系统的精髓不在于"多",而在于"协作"。设计好的协作机制,1+1才能>2。


下一篇预告:在下一篇《10 | 代码生成Agent:从Copilot到SWE-Agent》中,我们将深入探讨代码生成Agent的技术栈——从代码补全、到Issue修复、到自动化开发。为什么SWE-bench上的Agent从4.3%飙升到50%?代码Agent的"理解代码"和"理解自然语言"有什么本质区别?敬请期待。


参考文献

[1] Du, Y., et al. "Improving Factuality and Reasoning in Language Models through Multiagent Debate." arXiv preprint arXiv:2305.14325 (2023).

[2] Qian, C., et al. "Communicative Agents for Software Development." arXiv preprint arXiv:2307.07924 (2023).

[3] Hong, S., et al. "MetaGPT: Meta Programming for Multi-Agent Collaborative Framework." ICLR 2024.

[4] Wu, Q., et al. "AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation." arXiv preprint arXiv:2308.08155 (2023).

[5] Li, G., et al. "CAMEL: Communicative Agents for 'Mind' Exploration of Large Language Models Society." NeurIPS 2023.

[6] Xi, Z., et al. "The Rise and Potential of Large Language Model Based Agents: A Survey." arXiv preprint arXiv:2309.07864 (2023).

[7] Park, J.S., et al. "Generative Agents: Interactive Simulacra of Human Behavior." UIST 2023.