想象一家小饭馆,后厨只有两个人:一位负责看清菜单、报出需求,另一位负责动手下厨。他们没有微信群,也没有标准化接口,只靠一句一句中文交流,就能端出一桌菜。CAMEL 就是一套这样的“双人协作协议”:它让一个 AI 扮演“点菜员”,负责不断提出要求;让另一个 AI 扮演“厨师”,负责逐条给出解决方案。为了让这对搭档不跑偏,CAMEL 还需要给任务定菜谱、给对话排轮次,并在最后复盘那些“菜单之外”的默契与分歧。本文就把这套协议拆给你看。
学完本文,你将理解多智能体协作的核心对话协议,能拆解角色、任务和轮次,并把这些方法迁移到自己的 AI 应用设计中。
可视化演示
展示CAMEL框架的AI用户与AI助手角色对话、任务编排流程及多Agent涌现行为,切换模式查看协作不同维度。
本节配有交互动效(进入视口后自动加载,约 3KB)。
角色扮演:AI用户与AI助手对话 AI用户角色发出任务指令和需求 AI助手角色响应并执行具体操作 多轮对话后协作完成任务目标 CAMEL通过角色扮演实现自主多Agent协作
CAMEL框架概述
想象一家小饭馆,后厨只有两个人:一位负责看清菜单、报出需求,另一位负责动手下厨。他们之间没有微信群,也没有标准化接口,只靠一句一句中文交流,就能端出一桌菜。CAMEL 就是这套“双人协作协议”。
CAMEL 的全称是 Communicative Agents for Mind Exploration,中文可译为“用于心智探索的交流式智能体”。它让两个大语言模型分别扮演 AI 用户和 AI 助手,通过自然语言反复交换信息,从而完成一个原本模糊的复杂目标。这里的“大语言模型”可以理解为一种能理解和生成自然语言的 AI 大脑。
与 CrewAI、AutoGen 等把任务拆成固定工作流不同,CAMEL 更看重“对话本身”:AI 用户负责出题,AI 助手负责解题;AI 用户再看答案,继续出题。这个循环让协作过程像一段真实的人际沟通。
回到小饭馆的比喻:点菜员和厨师的默契不是靠菜单模板,而是靠开口说话。CAMEL 把“说话”变成一种可编程的协作机制。
- 协作系统$\mathcal{C}$ 表示整个协作系统,由方括号内四个要素共同描述。
- AI 用户$U$ 负责解析目标并向对方发出指令。
- AI 助手$A$ 负责给出具体的解决方案。
- 任务与记忆$T$ 是任务规格,$M$ 是不断累积的对话历史。
角色扮演机制
下厨之前,老板要发胸牌:谁是点菜员,谁是厨师。CAMEL 的“开场提示”(Inception Prompting)就像发胸牌。它告诉 AI 用户:你是一个需要帮助的用户,提出的指令要以“Instruction:”开头;也告诉 AI 助手:你是一个乐于助人的助手,回复要以“Solution:”开头。
于是每个对话轮次的文本都有固定格式。AI 用户不能自己跑去做菜,AI 助手也不能反客为主点菜。角色扮演不是简单地把 system prompt 写成“你是助手”,而是让两个角色在对话中形成互补的互动结构。
CAMEL 把这段初始设定称为“角色扮演提示”,由系统消息承载。它包含角色描述、协作约束和指令前缀。例如系统消息中会写:AI 用户需要对 AI 助手给出的结果进行评判,并继续提出后续要求。
胸牌戴好,话才能说对。这套角色卡保证了整个协作过程既有分工,又有边界。
- 角色配置$\mathcal{R}$ 代表两个 Agent 的角色扮演配置。
- 用户角色$r_u$ 规定 AI 用户身份、输出前缀与行为约束。
- 助手角色$r_a$ 规定 AI 助手身份、输出前缀与回复格式。
- 协作规则$C_r$ 描述双方如何交互,如谁先发言、如何结束。
任务指定方法
食客只说“来点下饭菜”,厨师只能靠猜;可如果食客说“做一道少油微辣的宫保鸡丁”,厨师就知道从备菜到下锅的每一步。任务指定就是把“来点下饭菜”变成“宫保鸡丁”的过程。
CAMEL 的实现中,有一个先行的“任务指定”步骤:给定用户的初始意图,让大模型生成三个要素:行动谓词、任务主体和具体任务。行动谓词描述“做什么”,任务主体描述“对谁做”,具体任务则是完整的执行描述。
比如初始意图是“帮我在视频平台做宣传”,行动谓词可能是“撰写社交媒体文案”,任务主体是“一段 YouTube 视频”,具体任务则会被改写成“为这段视频撰写一段吸引人的简介”。这样 AI 用户和 AI 助手就有了同一个明确的靶心。
有了一份清晰的“菜谱”,点菜员和厨师才不至于南辕北辙。任务指定是整个多 Agent 协作中常常被忽略、却最决定成败的一步。
- 任务三元组$\mathcal{T}$ 表示结构化任务描述。
- 行动谓词$P$ 是要发生的动作,例如“撰写”“生成”。
- 任务主体$S$ 是动作作用的对象,例如“视频简介”。
- 具体任务$G$ 是把目的展开后的完整任务描述。
对话轮次管理
饭馆里不可能所有菜一次性下完,点菜员要一道一道报,厨师一道一道上。CAMEL 的对话也是按轮次进行的。
每一轮先由 AI 用户读取历史对话,生成一条“Instruction:”;AI 助手读取历史对话和这条指令,生成一条“Solution:”。这两条消息会被追加进对话记忆,成为下一轮的上下文。这里的“上下文”就是模型作答时能看到的所有背景信息。
为了防止对话漂移,CAMEL 会设置最大轮次,也可以让 AI 用户在完成目标时发出终止信号。轮次管理就像定好了上菜节奏,既保证每道菜都是热的,又不会让后厨无限拖时间。
点菜员喊得快,厨师出菜也要跟得上。CAMEL 把“喊单—出菜”反复执行,正是多 Agent 协作的日常形态。
- 轮次消息$R_t$ 是第 $t$ 轮完整消息对。
- AI 用户指令$I_t$ 由大语言模型根据上一轮对话记忆 $M_{t-1}$ 生成。
- AI 助手方案$S_t$ 由大语言模型同时参考历史记忆和当前指令生成。
- 历史更新生成后 $R_t$ 被追加到对话记忆,形成新的 $M_t$。
涌现行为分析
合作久了,点菜员和厨师偶尔会出现“超纲”行为:点菜员不仅报菜名,还会直接说做法;厨师也会反问“这道菜是不是要少放盐?”这些都不在菜单上,却真实地发生了。CAMEL 把这类现象称为涌现行为。
论文中最典型的两类是角色反转和认知分歧。角色反转指 AI 用户开始直接输出解决方案,而不是发指令;认知分歧指双方对问题理解不一致,对话反复绕圈,难以收敛。
CAMEL 通过统计指令是否仍属于“提问/要求”、方案是否连续推进等指标来识别这些现象。这类分析不仅帮助研究者理解大模型的“社会性”,也为设计更稳定的多 Agent 系统提供了线索。
惊喜和意外总在一线之间。涌现行为既是研究价值的金矿,也是工程落地的坑。理解它,才能真正驾驭多 Agent 协作。
- 涌现指标集合$\mathcal{E}$ 汇总用于观察各类协作现象的量。
- 角色反转频率$f_{flip}$ 统计 AI 用户改用解决方案措辞的比例。
- 认知分歧频率$f_{div}$ 统计对话无法推进或重复质问的比例。
- 协作收敛率$f_{conv}$ 统计任务在限定轮次内顺利终结的比例。
系统构建与应用
如果我们把点菜员和厨师当作两个可以随时调用的大模型,再为厨房接入保存食材的仓库(工具)、排菜系统(任务队列),就得到了一个可扩展的多 Agent 系统。
实际构建 CAMEL 应用时,流程通常是:先写角色扮演提示,再做任务指定,然后循环执行“AI 用户出题—AI 助手答题”,最后收敛到一份解决方案。开源的 CAMEL 框架(camel-ai)已经封装了这些步骤。
更进一步,可以让多个 AI 助手分别负责检索、写代码、审稿,用同样的交流式协作组成一个团队。正因为每个 Agent 都只是“角色 + 任务 + 记忆”,系统的扩展成本很低。
小饭馆能变成连锁中央厨房,靠的正是把一套成熟的“双人协作协议”复制到每个岗位。CAMEL 给多 Agent 应用提供的,正是这套可以被规模化的交流底座。
- 多智能体系统$\mathcal{S}$ 是包含多个 Agent 的协作系统。
- 成员枚举$A_i$ 表示系统里第 $i$ 个 Agent,可以是 AI 用户或 AI 助手。
- 规模参数$n$ 是 Agent 数量,体现系统的可扩展性。
AI 应用场景
需求澄清与产品设计
阶段:需求分析
解决的问题:传统方式下,业务方提出“做个会员系统”这样的模糊想法,产品经理需要反复开会追问细节。用 CAMEL,一个 AI 扮演业务方,另一个 AI 扮演产品经理,通过多轮对话把模糊意图逐步细化成可执行的功能清单。
具体案例:某团队让 AI 用户持续追问“会员等级怎么分、积分规则是什么、优惠怎么叠加”,AI 助手逐条给出方案,最后直接生成一份产品需求文档初稿。
研究头脑风暴与盲点发现
阶段:研究探索
解决的问题:单一模型思考容易陷入惯性。CAMEL 让两个大模型分别扮演“提问者”和“回应者”,通过多轮对话观察彼此的角色反转与认知分歧,从而帮助研究人员发现被忽略的假设。
具体案例:研究者在探索“大模型如何做规划”时,让两个 Agent 围绕同一问题辩论 20 轮,结果出现了一方从提问转向直接给方案、另一方指出逻辑矛盾等现象,成为论文中的定性证据。
内容营销自动流水线
阶段:内容生成
解决的问题:品牌方需要大量选题和文案,传统人工分工成本高。用 CAMEL 让 AI 用户扮演内容策划,AI 助手扮演文案撰写,任务指定后循环产出多个标题和正文候选,再人工挑优。
具体案例:一家新媒体团队把“为一款咖啡机写小红书种草文案”作为具体任务,两个 Agent 交替出题和改稿,3 轮后收敛出一组可直接发布的文案。
Python 演示
# -*- coding: utf-8 -*-# CAMEL 风格双 Agent 协作最小演示, 使用规则模拟代替真实 LLM class CamelSim: def __init__(self): self.history = [] self.task = "" def specify_task(self, intent): if "视频" in intent or "宣传" in intent: return ("撰写社交文案", "视频内容", "为这段视频写一段吸引人的简介") if "学习" in intent or "课程" in intent: return ("整理学习笔记", "课程内容", "把课程要点整理成问答清单") return ("生成任务清单", "模糊需求", "把需求拆解成可执行清单") def ai_user(self, round_no): return f"Instruction: 请继续执行任务:{self.task}." def ai_assistant(self, round_no): return f"Solution: 第{round_no}轮完成, 结果示例:{self.task} 的需求已完成." def run(self, max_rounds=3): intent = input("请输入一个模糊意图: ") action, subject, self.task = self.specify_task(intent) print("任务指定结果:", action, "/", subject, "/", self.task) for i in range(1, max_rounds + 1): ins = self.ai_user(i) sol = self.ai_assistant(i) self.history.append((ins, sol)) print(f"[第{i}轮] {ins}") print(f"[第{i}轮] {sol}") print("达到最大轮次, 协作结束.") if __name__ == "__main__": CamelSim().run()
self.history = []保存每轮消息对,相当于 CAMEL 的对话记忆。def specify_task(self, intent)模拟任务指定,返回行动谓词、任务主体和具体任务。return ("撰写社交文案", "视频内容", "为这段视频写一段吸引人的简介")对应任务三元组 (P,S,G)。def ai_user(self, round_no)AI 用户每轮生成指令。def ai_assistant(self, round_no)AI 助手每轮给出解决方案。self.history.append((ins, sol))把消息对追加到记忆。if __name__ == "__main__":可执行入口。
常见误区
误区让两个大模型对话就能自动完成任务,聊得越多结果越好。
正解CAMEL 的关键不是“聊天”,而是“按规则协作”。它需要任务指定把目标说清,需要轮次管理防止发散,还需要角色扮演保持分工。没有这些约束,两个 Agent 很容易各说各话,甚至在无限循环里打转。
为何常见:因为 CAMEL 的外在形式确实是两个 Agent 用自然语言对话,容易让人忽略背后的结构化设计。
误区给大模型一个“你是 AI 助手”的消息,就算完成了角色扮演。
正解CAMEL 的 Inception Prompting 要同时设定用户和助手双方的身份、输出前缀以及协作规则。AI 用户要知道自己该发指令,AI 助手要知道自己该回方案,双方还要知道如何结束对话,这远比一句“你是助手”复杂。
为何常见:因为很多人对 system prompt 的理解停留在“设定身份”这一层,而忽略了它还要定义角色间的关系。
误区整个协作过程中,AI 用户只负责发指令,所有创造性答案都来自 AI 助手。
正解CAMEL 的分析中明确提到可能出现“角色反转”:AI 用户开始直接给出解决方案,而不是发指令。这说明角色边界是动态的,也提醒我们在真实系统中要监控这类行为。
为何常见:因为多数介绍只描述理想流程,没有讲论文中关于涌现行为的观察。
误区只要把需求写得很长,模型就能理解任务。
正解任务指定不是为了加长文本,而是把模糊意图映射成行动谓词、任务主体和具体任务的结构化三元组。这种结构让后续每一轮对话都有明确靶心,而不是让模型在一大段描述中自己找重点。
为何常见:因为日常沟通中“说详细一点”确实有用,但 Agent 协作更需要结构化表达。
误区一个 AI 用户配一个 AI 助手,只能处理双人任务,无法扩展。
正解两个 Agent 是 CAMEL 的基本单元,但系统可以扩展到多个角色。每个 Agent 仍然遵循“角色 + 任务 + 记忆”的结构,相当于把双人协作协议复制到多岗位团队中。
为何常见:因为 CAMEL 的名字和常用示例都强调 AI 用户与 AI 助手两个角色,容易让人误以为这是上限。
面试题
Q1. CAMEL 中“AI 用户”的主要职责是?
- A.给出最终答案
- B.发出任务指令← 正确答案
- C.保存对话日志
- D.检查代码语法
答案:B。AI 用户类比点菜员,负责根据对话历史发出指令。保存日志和检查代码都不是核心职责,直接给最终答案则是 AI 助手的工作。
Q2. CAMEL 的名称来源是?
- A.骆驼的英文名
- B.交流式心智探索缩写← 正确答案
- C.一种模型加载技术
- D.一种数据增强算法
答案:B。CAMEL 是 Communicative Agents for Mind Exploration 的缩写,强调“交流式智能体”和“心智探索”。骆驼英文名是巧合,不是技术含义。
Q3. CAMEL 任务指定方法中不包含下列哪一项?
- A.行动谓词
- B.任务主体
- C.具体任务
- D.最大轮次← 正确答案
答案:D。任务指定生成的是行动谓词、任务主体、具体任务三元组。最大轮次属于对话轮次管理,不属于任务指定。
Q4. “开场提示”(Inception Prompting)的主要作用是?
- A.随机生成回复文本
- B.定义双方身份和规则← 正确答案
- C.压缩历史记忆长度
- D.替换系统内置消息
答案:B。开场提示相当于给两个 Agent 发胸牌,让 AI 用户和 AI 助手知道各自身份、输出前缀与协作规则,而不是随机生成或压缩记忆。
Q5. 下列哪些属于 CAMEL 分析中发现的涌现行为?
- A.角色反转← 正确答案
- B.认知分歧← 正确答案
- C.轮次超限
- D.日志丢失
答案:AB。角色反转指 AI 用户开始直接给方案,认知分歧指双方理解不一致而绕圈,两者都是论文观察到的涌现行为。轮次超限是管理机制,日志丢失是工程异常。
Q6. AI 助手在每一轮生成内容时,通常会参考什么?
- A.仅采用第一条用户指令
- B.全部历史与最新指令← 正确答案
- C.采样训练时的随机标签
- D.读取其他智能体隐私数据
答案:B。CAMEL 把历史对话作为记忆,AI 助手需要同时看到之前的对话记录和 AI 用户最新指令,才能保持上下文连贯。只看第一句或随机采样都无法完成协作。
Q7. CAMEL 框架中的两个核心角色是?
- A.生成器与判别器
- B.AI 用户与 AI 助手← 正确答案
- C.编码器与解码器
- D.调度器与执行器
答案:B。CAMEL 明确使用 AI 用户和 AI 助手两个角色,分别负责指令与解决方案。生成器/判别器是生成对抗网络的概念,编码器/解码器是序列模型概念。
Q8. 关于 CAMEL 交流式 Agent 范式,下列说法正确的是?
- A.依赖固定工作流
- B.自然语言是协同界面← 正确答案
- C.任务指定降低模糊度← 正确答案
- D.协作中不会角色反转
答案:BC。CAMEL 以自然语言对话作为协作界面,并通过任务指定降低目标模糊度。它不依赖固定工作流,且论文观察到了角色反转,所以 A 和 D 错误。
Q9. AI 用户开始直接提供解决方案,而不是发指令,这种现象被称为?
- A.认知分裂现象
- B.角色反转现象← 正确答案
- C.指令衰减现象
- D.模式崩溃现象
答案:B。这正是 CAMEL 论文中“角色反转”的典型表现。认知分裂和模式崩溃属于其他语境,指令衰减不是标准术语。
Q10. 以下哪些策略有助于避免 CAMEL 对话陷入无效循环?
- A.设置最大轮次← 正确答案
- B.检查指令方案对← 正确答案
- C.仅允许单方发言
- D.任务指定细化目标← 正确答案
答案:ABD。设置最大轮次能强制终止,检查每轮指令与方案配对能发现卡点,任务指定细化目标能降低歧义。只允许单方发言会破坏双人协作结构,因此不可取。