框架(三)CAMEL
前面已经学习了AutoGen和AgentScope两个多智能体框架,今天继续学习第三个经典框架——CAMEL。
与前两个框架相比,CAMEL 并没有设计复杂的消息调度或工作流,而是提出了一种非常有意思的思想:让多个 AI 扮演不同角色,通过不断对话自主完成任务。
这种"角色扮演(Role Playing)"也是 CAMEL 最具代表性的特点。
一、什么是 CAMEL?
CAMEL(Communicative Agents for "Mind" Exploration of Large Language Model Society)最初的目标,就是研究如何让多个 AI 在尽可能少的人类干预下,通过自主对话完成复杂任务。
例如开发一个股票交易工具:
- AI 用户:股票交易员,负责提出需求。
- AI 助理:Python 工程师,负责实现代码。
整个过程就像真实团队协作一样。
股票交易员 │ 提出需求 │ ▼ Python 工程师 │ 实现功能 │ 返回结果 │ 继续协作相比 AutoGen 更偏向"多 Agent 调度",CAMEL 更强调不同角色之间的自然协作。
二、CAMEL 的核心思想
CAMEL 的设计主要围绕两个概念展开:
- Role Playing(角色扮演)
- Inception Prompting(引导性提示)
1、Role Playing(角色扮演)
CAMEL 会为每个 Agent 指定一个明确身份,每个角色负责不同工作。
例如:
AI User:
作家
负责:
- 规划章节
- 提出写作需求
- 调整整体结构
AI Assistant:
心理学家
负责:
- 提供专业知识
- 补充理论依据
- 保证内容科学性
整个任务就在两个不同领域专家之间不断推进。
2、Inception Prompting(引导性提示)
仅仅告诉 AI:
你是一位心理学家。
其实是不够的。
CAMEL 会在聊天开始前,为两个 Agent 自动生成一份System Prompt,其中通常包含:
- 自己的角色
- 合作对象是谁
- 当前共同目标
- 回复规则
- 任务结束标志
例如:
你是一名心理学家。 你正在与一位专业作家合作。 共同完成一本关于拖延症心理学的电子书。 任务完成后输出: <CAMEL_TASK_DONE>这样可以保证整个对话始终围绕同一个目标进行,而不会轻易跑题。
三、案例:AI 协作创作一本电子书
下面通过官方案例体验 CAMEL 的角色协作能力。
目标:
创作一本《拖延症心理学》电子书。
两个 Agent 分别负责:
心理学家(Psychologist)
- 提供专业理论
- 引用研究成果
- 保证科学严谨
作家(Writer)
- 组织文章结构
- 优化语言表达
- 提升可读性
最终共同完成一本适合普通读者阅读的科普电子书。
四、创建模型
首先创建大模型,这里以 Qwen 为例。
model = ModelFactory.create( model_platform=ModelPlatformType.QWEN, model_type=LLM_MODEL, url=LLM_BASE_URL, api_key=LLM_API_KEY )这里只负责创建模型对象,后续 RolePlaying 会直接使用该模型完成对话。
五、定义协作任务
接下来定义整个协作目标。
task_prompt = """ 创作一本关于"拖延症心理学"的短篇电子书。 要求: 1. 内容科学严谨 2. 通俗易懂 3. 包含案例分析 4. 8000~10000字 5. 结构清晰 """这里的task_prompt可以理解为整个协作任务的说明书。
后续 CAMEL 会根据任务内容自动生成 Prompt,引导两个 Agent 围绕这一目标开展讨论。
六、创建 RolePlaying
接下来创建角色协作会话。
role_play_session = RolePlaying( assistant_role_name="心理学家", user_role_name="作家", task_prompt=task_prompt, model=model, with_task_specify=False, )这里指定了两个角色:
- user_role_name:作家(提出需求)
- assistant_role_name:心理学家(提供专业内容)
整个双 Agent 协作环境就创建完成了。
七、启动自动协作
首先调用:
input_msg = role_play_session.init_chat()这一方法会根据任务和角色自动生成第一轮消息,因此无需我们手动编写开场白。
随后进入循环:
assistant_response, user_response = role_play_session.step(input_msg)每调用一次step(),都会完成一轮完整协作:
作家提出需求 │ ▼ 心理学家提供专业内容 │ ▼ 进入下一轮讨论随后:
input_msg = assistant_response.msg将上一轮回复作为下一轮输入,不断推进整个任务。
八、结束协作
为了避免无限循环,一般有两种结束方式。
达到最大轮数:
chat_turn_limit = 30或者检测任务完成标志:
if "<CAMEL_TASK_DONE>" in assistant_response.msg.content: break当任意一个 Agent 输出<CAMEL_TASK_DONE>时,说明任务已经完成,程序自动结束。
九、整体协作流程
整个案例的执行流程如下:
定义任务 │ 创建两个角色 │ 初始化 RolePlaying │ AI 自动开始对话 │ 不断调用 step() │ 输出 <CAMEL_TASK_DONE> │ 结束任务整个过程中基本不需要人工参与,两个 Agent 会围绕共同目标不断讨论,直到完成任务。
十、CAMEL 的优缺点
优点
- 角色扮演思想简单直观,多个 Agent 就像真实团队协作。
- Prompt 驱动,无需复杂工作流即可完成多轮协作。
- 上手简单,非常适合内容创作、方案讨论等场景。
不足
- 对 Prompt 质量依赖较高,Prompt 不合理容易影响协作效果。
- 更适合少量 Agent,对大规模多智能体调度支持相对有限。
- 工作流控制能力不如 LangGraph,工程化能力也弱于 AgentScope。
十一、完整代码
DigitalBookWriting.py
from colorama import Fore from camel.societies import RolePlaying from camel.utils import print_text_animated from camel.models import ModelFactory from camel.types import ModelPlatformType from dotenv import load_dotenv import os load_dotenv() LLM_API_KEY = os.getenv("LLM_API_KEY") LLM_BASE_URL = os.getenv("LLM_BASE_URL") LLM_MODEL = os.getenv("LLM_MODEL") #创建模型,在这里以Qwen为例,调用的百炼大模型平台API model = ModelFactory.create( model_platform=ModelPlatformType.QWEN, model_type=LLM_MODEL, url=LLM_BASE_URL, api_key=LLM_API_KEY ) # 定义协作任务 task_prompt = """ 创作一本关于"拖延症心理学"的短篇电子书,目标读者是对心理学感兴趣的普通大众。 要求: 1. 内容科学严谨,基于实证研究 2. 语言通俗易懂,避免过多专业术语 3. 包含实用的改善建议和案例分析 4. 篇幅控制在8000-10000字 5. 结构清晰,包含引言、核心章节和总结 """ print(Fore.YELLOW + f"协作任务:\n{task_prompt}\n") # 初始化角色扮演会话 role_play_session = RolePlaying( assistant_role_name="心理学家", user_role_name="作家", task_prompt=task_prompt, model=model ) print(Fore.CYAN + f"具体任务描述:\n{role_play_session.task_prompt}\n") # 开始协作对话 chat_turn_limit, n = 30, 0 input_msg = role_play_session.init_chat() while n < chat_turn_limit: n += 1 assistant_response, user_response = role_play_session.step(input_msg) print_text_animated(Fore.BLUE + f"作家:\n\n{user_response.msg.content}\n") print_text_animated(Fore.GREEN + f"心理学家:\n\n{assistant_response.msg.content}\n") # 检查任务完成标志 if "CAMEL_TASK_DONE" in user_response.msg.content: print(Fore.MAGENTA + "✅ 电子书创作完成!") break input_msg = assistant_response.msg print(Fore.YELLOW + f"总共进行了 {n} 轮协作对话")requirements.txt
code/chapter6/CAMEL/requirements.txt总结
CAMEL 最大的特点就是通过Role Playing(角色扮演)和Inception Prompting(引导性提示)实现多智能体协作。
相比 AutoGen,它没有复杂的调度机制,而是让不同角色通过持续对话自然完成任务;相比 AgentScope,它更加轻量,代码也更加简洁。
如果你的应用场景偏向内容创作、方案设计、头脑风暴等需要多个角色共同协作的任务,那么 CAMEL 是一个非常值得学习的多智能体框架。
