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.