hello-agents学习笔记--CAMEL框架

CAMEL

CAMEL 是一个以 角色扮演(Role-Playing) 为核心思想的多智能体框架。和 AutoGen、AgentScope 相比,CAMEL 的重点不在于复杂的流程编排,也不强调大规模工程化部署,而是通过精心设计的角色提示词,让两个或多个智能体围绕同一个任务进行自主协作。

简单来说,CAMEL 的核心逻辑是:

给智能体设定清晰角色,再用任务目标约束它们的对话,让它们在多轮交流中逐步完成任务。

这类方法特别适合研究智能体之间的协作行为,也适合快速构建两个角色之间的任务协作场景,例如"AI 研究员 + Python 程序员""产品经理 + 工程师""教师 + 学生"等。


CAMEL 的核心机制

CAMEL 最有代表性的机制是 Role-Playing。它不是让一个智能体单独完成任务,而是让两个具有不同身份的智能体进行对话。每个智能体都被赋予明确角色,它们的目标一致,但职责不同。

例如:

text 复制代码
AI 研究员:负责提出算法思路和实验设计
Python 程序员:负责把思路转化为可运行代码

这种设计的好处是,任务可以自然拆分。一个智能体负责"想",另一个智能体负责"做";一个智能体提出需求,另一个智能体给出实现;一个智能体发现问题,另一个智能体进行修改。

CAMEL 中另一个关键概念是 Inception Prompting,也就是"初始引导提示"。它的作用是让智能体从一开始就明确:

  • 自己是谁;
  • 对方是谁;
  • 共同任务是什么;
  • 自己应该如何发言;
  • 对话应该朝什么方向推进;
  • 什么时候认为任务完成。

这比普通的 system prompt 更强,因为它不仅设置角色,还会设置角色之间的协作关系。也就是说,CAMEL 不只是告诉模型"你是某某角色",还会告诉它"你应该如何与另一个角色合作完成任务"。

在 CAMEL 的典型流程中,一般会先创建任务,然后创建两个角色智能体,并让它们开始轮流对话。对话过程本身就是任务求解过程。

text 复制代码
任务目标
  ↓
角色设定
  ↓
初始提示生成
  ↓
智能体轮流对话
  ↓
逐步完成任务

因此,CAMEL 可以理解为一种"轻架构、重提示"的多智能体框架。它不依赖复杂的图结构或消息中心,而是依赖角色设定和提示工程来激发智能体的协作能力。


软件开发协作案例

在软件开发任务中,CAMEL 可以把开发过程设计成两个角色之间的协作。例如:

text 复制代码
AI 产品经理 / AI 研究员
        ↕
Python 工程师 / 软件开发者

如果任务是开发一个比特币价格显示应用,那么一个智能体可以负责分析需求,另一个智能体负责编写代码。二者通过多轮对话不断推进任务。

产品经理可能会先提出需求:

text 复制代码
我们需要一个 Streamlit 应用,用于显示比特币当前价格和 24 小时涨跌情况。

工程师根据需求给出实现方案:

text 复制代码
可以使用 CoinGecko API 获取数据,并使用 st.metric 展示价格和涨跌幅。

接着产品经理继续补充体验要求:

text 复制代码
需要加入刷新按钮、加载状态和错误提示,避免网络异常时页面崩溃。

工程师再完善代码实现。

这种交互和 AutoGen 的团队协作很像,但 CAMEL 更强调"角色对话本身"。它不是先搭建复杂团队和终止条件,而是让角色之间围绕任务自然交流。

如果说 AutoGen 更像"多角色流程编排",AgentScope 更像"工程化消息系统",那么 CAMEL 更像"让角色扮演驱动任务解决"。


核心代码实现

CAMEL 的核心代码通常围绕三个部分展开:定义任务、创建角色、启动对话。

首先需要明确任务目标。任务写得越清楚,角色对话越容易稳定推进。

python 复制代码
task_prompt = """
开发一个比特币价格显示应用:
1. 实时显示 BTC/USD 当前价格
2. 显示 24 小时涨跌幅
3. 支持刷新功能
4. 使用 Streamlit 实现
5. 添加错误处理和加载状态
"""

然后定义两个协作角色。例如,一个角色负责需求和设计,另一个角色负责实现。

python 复制代码
assistant_role_name = "Python 程序员"
user_role_name = "产品经理"

在 CAMEL 的思想中,这两个名字不是简单标签,而是会影响智能体的行为模式。角色越具体,输出越稳定。例如"资深 Streamlit 工程师"通常比"程序员"更容易生成符合需求的代码。

接下来需要通过框架创建对应的智能体,并让它们围绕任务展开对话。虽然不同版本 CAMEL 的具体 API 可能有差异,但整体流程一般如下:

python 复制代码
from camel.societies import RolePlaying

society = RolePlaying(
    assistant_role_name="Python 程序员",
    user_role_name="产品经理",
    task_prompt=task_prompt,
)

input_msg = society.init_chat()

for _ in range(10):
    assistant_response, user_response = society.step(input_msg)

    print(assistant_response.msg.content)
    print(user_response.msg.content)

    if assistant_response.terminated or user_response.terminated:
        break

    input_msg = assistant_response.msg

这段代码体现了 CAMEL 的基本思想:不是手写每一步流程,而是让两个角色在任务约束下不断交流。开发者主要控制任务、角色和最大轮数,而不是精细控制每一句话。

如果希望输出更稳定,可以在任务中加入更明确的要求,例如:

text 复制代码
请最终输出完整可运行代码。
代码必须包含:
- requests 请求 CoinGecko API
- Streamlit 页面展示
- 错误处理
- 手动刷新按钮

在 CAMEL 中,任务描述非常关键。因为框架主要依赖角色扮演和提示词来推动协作,所以提示词越清楚,对话越不容易跑偏。

  • 输出案例
text 复制代码
协作任务:
创作一本关于"拖延症心理学"的短篇电子书,目标读者是对心理学感兴趣的普通大众。
要求:
1. 内容科学严谨,基于实证研究
2. 语言通俗易懂,避免过多专业术语
3. 包含实用的改善建议和案例分析
4. 篇幅控制在8000-10000字
5. 结构清晰,包含引言、核心章节和总结

具体任务描述:
为普通大众撰写8000--10000字短篇电子书《拖延症心理学》:实证为本、通俗易懂。结构:引言、成因(认知/情绪/奖励)、动机与决策、习惯形成与干预、实
用策略与练习、三则案例分析、总结与资源。每章含研究引用与可操作步骤。

作家:
Instruction: 请为电子书的"引言"章节撰写一段400--600字的中文草稿...
Input: None

心理学家:
Solution:
草稿:拖延,是指明知应当完成某项任务却反复推迟或回避的行为与内在倾向。它既可以是偶发的时间管理问题...

Next request.

作家:
Instruction: 请把下面的引言草稿修订为一段450--550字的中文文本...
Input: 草稿:拖延,是指明知应当完成某项任务却反复推迟或回避的行为...
.....

CAMEL 的优势与局限性分析

CAMEL 最大的优势是简单、自然、容易理解。它把多智能体协作抽象成角色之间的对话,不需要一开始就设计复杂流程图,也不需要构建消息中心。只要任务目标和角色关系写清楚,就能快速跑出一个多智能体协作 Demo。

它特别适合以下场景:

  • 两个角色之间的协作任务;
  • 研究智能体对话行为;
  • 快速验证多智能体想法;
  • 教学演示;
  • 需求分析和代码生成;
  • 论文讨论、方案推理、头脑风暴。

CAMEL 的另一个优点是角色感强。通过 Role-Playing,一个智能体可以扮演专家、研究员、程序员、教师等角色,另一个智能体可以扮演用户、学生、产品经理或审查者。这种角色差异会自然形成任务分工,使对话更有方向。

不过,CAMEL 的局限也很明显。它对提示词依赖较强,如果角色设定模糊,智能体容易出现重复、跑题或者职责混乱。比如本来要求"产品经理提需求,程序员写代码",但如果提示不清楚,产品经理可能也开始写代码,程序员也可能反过来做需求分析。

其次,CAMEL 的流程控制能力相对较弱。它更适合自然对话式协作,不适合强约束、强状态、强流程的生产系统。如果任务需要复杂状态管理、分布式部署、工具调用监控或严格的流程跳转,那么 AgentScope 或 LangGraph 可能更合适。

再者,CAMEL 的终止判断也需要额外注意。因为对话是开放式的,如果没有最大轮数或明确完成标准,两个智能体可能会继续讨论,导致输出冗长或重复。

因此,使用 CAMEL 时要特别注意三点:

text 复制代码
1. 任务目标要具体
2. 角色分工要清楚
3. 对话轮数要限制

总结来说,CAMEL 的价值在于用很低的复杂度实现多智能体协作。它不像 AgentScope 那样强调工程系统,也不像 LangGraph 那样强调流程图控制,而是通过角色设定和初始提示,让智能体在对话中自然协作。

一句话概括:

CAMEL 是一种以角色扮演为核心的多智能体协作框架,适合快速构建"两个角色围绕一个任务协作"的应用原型。