进阶岛05 - CAMEL
进阶岛
L2G5- CAMEL
0 原理
1 以LLM为基础的Agent

这是一张描绘智能体(Agent)工作机制的流程图,核心是“Agent” ,各部分及联系如下:
### 核心组件 - Agent(智能体)
是整个流程的核心控制单元,负责协调、调度其他组件,依据任务需求,决定调用哪些工具、如何利用记忆、开展怎样的规划与行动,像一个 “指挥官”,驱动整个系统运转 。
### 工具(Tools)
包含多种功能性模块:
- **Calendar()**:日历工具,可用于处理时间相关任务,比如查询日期、安排日程等。
- **Calculator()**:计算器工具,执行数学计算操作。
- **CodeInterpreter()**:代码解释器,能解析、运行代码,处理编程相关任务 。
- **Search()**:搜索工具,用于从外部获取信息,拓展知识来源 。
- **...more**:代表可扩展的其他工具,根据需求添加,丰富智能体能力 。这些工具是 Agent 可调用的 “武器库”,Agent 按需选择工具辅助完成任务。
### 记忆(Memory)
- **Short - term memory(短期记忆)**:存储近期、临时的信息,用于当下任务的即时处理,像当前对话的上下文内容,辅助 Agent 短期决策 。
- **Long - term memory(长期记忆)**:留存长期积累的知识、经验,比如过往解决类似任务的策略、通用知识等,为复杂、持续任务提供深度支撑 。二者都受 “Memory” 模块管理,Agent 可从这里提取或存储信息,是智能体 “知识储备” 与 “即时信息” 的载体,影响任务处理的知识基础。
### 规划(Planning)
细分为多个策略:
- **Reflection(反思)**:让 Agent 回顾任务处理过程、结果,总结经验教训,优化后续行动 。
- **Self - critics(自我批判)**:对自身决策、行动进行审视,查找不足,避免重复犯错 。
- **Chain of thoughts(思维链)**:以逐步推理、连贯思考的方式拆解任务,理清解决步骤 。
- **Subgoal decomposition(子目标分解)**:把复杂大任务拆成多个可逐步完成的子目标,降低任务难度 。规划模块为 Agent 提供 “思考框架”,指导 Agent 如何拆解任务、优化流程,决定任务执行的逻辑路径 。
### 行动(Action)
是 Agent 依据前面的规划、借助工具与记忆,实际执行任务的环节,将规划转化为具体操作,是任务落地的 “执行手” ,且行动过程中产生的信息又会反馈到记忆模块,更新记忆内容 。
### 各组件联系
Agent 作为核心,根据任务需求,从 Memory 提取信息,选择 Tools 辅助,依靠 Planning 确定行动逻辑,通过 Action 执行任务;任务执行产生的新信息又回流到 Memory 存储;Planning 过程中也会参考 Memory 里的知识,Tools 的使用情况也会反馈给 Agent 调整后续操作,形成一个闭环的任务处理系统,各组件相互配合,让智能体完成复杂任务 。 简单说,就是 Agent 统筹,用工具、靠记忆、做规划,最终行动,各环节相互影响、协同,支撑智能体运作 。
2 multi-agent of Camel

1 CAMEL环境安装 从源码安装
conda create --name camel python=3.10
conda activate camel
git clone -b v0.2.38 https://github.com/camel-ai/camel.git
cd camel
pip install -e .[all]
使用多模态理解视频并不能读取语音内容;
from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType
from camel.messages import BaseMessage
model = ModelFactory.create(
model_platform=ModelPlatformType.INTERNLM,
model_type="internvl2.5-latest",
api_key=''
)
# 创建代理
agent = ChatAgent(
model=model,
output_language='中文'
)
# 读取本地视频文件
video_path = "digial_tample_pro.mp4"
with open(video_path, "rb") as video_file:
video_bytes = video_file.read()
# 创建包含视频的用户消息
user_msg = BaseMessage.make_user_message(
role_name="User",
content="请描述这段视频的内容",
video_bytes=video_bytes # 将视频字节作为参数传入
)
# 获取模型响应
response = agent.step(user_msg)
print(response.msgs[0].content)
# >>>
(camel) root@intern-studio-50076254:~/camel/code# python video_demo.py
2025-07-22 12:31:36,399 - root - WARNING - Invalid or missing `max_tokens` in `model_config_dict`. Defaulting to 999_999_999 tokens.
这段视频展现了一个奇幻的场景。画面中,一只白色的狗正在雪地上奔跑,背景是一片辽阔的雪原。天空中出现了一道壮观的极光,色彩斑斓,主要以粉色和紫色为主,伴随着一些金色和蓝色的光带,形成了一种梦幻般的视觉效果。极光的光线仿佛在天空中舞动,给整个场景增添了一种神秘和超现实的感觉。地面上的雪被阳光照射,反射出柔和的光线,而远处的雪丘和树木则点缀在画面中,增加了景深和层次感。视频整体风格唯美、宁静,给人一种置身于童话世界中的感觉。
(camel) root@intern-studio-50076254:~/camel/code# python video_demo.py
2025-07-22 12:33:30,714 - root - WARNING - Invalid or missing `max_tokens` in `model_config_dict`. Defaulting to 999_999_999 tokens.
视频显示的是一个计算机屏幕,上面运行着Jupyter Notebook软件。可以看到界面上有多个选项卡,包括“Notebook”、“Text File”、“Terminal”和“New”等。屏幕的右下角有一个提示框,询问是否要启用Office插件。整个界面以白色为主,配以蓝色和黄色的图标。
(camel) root@intern-studio-50076254:~/camel/code# python video_demo.py
2025-07-22 12:35:02,371 - root - WARNING - Invalid or missing `max_tokens` in `model_config_dict`. Defaulting to 999_999_999 tokens.
视频中展示的是一段电脑屏幕录制,具体为一个文档编辑软件界面。画面显示一个正在编辑的文档,文档内容包括一些中文文字,看起来像是某种协议或合同文本。文本包括标题、条款和子条款,但具体内容不清晰。在文档编辑界面的右侧,有一个聊天窗口,显示着一些消息,但具体内容无法辨识。整个视频风格简洁,以白色和灰色为主色调,文档编辑软件界面布局清晰。没有出现任何人物或其他动作。由于视频内容主要集中在电脑屏幕上的文字和界面,因此没有背景元素或环境描述。光线均匀,没有明显的阴影或高光。
2 智能体 Agent
Agent 指 “智能体”,是能自主感知环境、做出决策并执行动作的计算实体。
例子:聊天机器人(如客服 AI)、推荐系统(如电商商品推荐 Agent)、自动驾驶中的决策 Agent 等。
一个典型的智能体包含三个核心部分:
- 感知模块:处理输入信息
- 决策模块:制定行动计划
- 执行模块:实施具体行动
2.1 Models
Model 是 Agent 的大脑,负责处理所有输入和输出数据。
一个案例:
import os
from camel.agents import ChatAgent
from camel.configs import ZhipuAIConfig
from camel.messages import BaseMessage
from camel.models import ModelFactory
from camel.types import ModelPlatformType, ModelType
model = ModelFactory.create(
model_platform=ModelPlatformType.INTERNLM,
model_type="internlm2.5-latest",
model_config_dict=ZhipuAIConfig(temperature=0.2).as_dict(),
api_key='eyJ0'
)
# model = ModelFactory.create(
# model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
# model_type="a-string-representing-the-model-type",
# api_key=os.environ.get("OPENAI_COMPATIBILIY_API_KEY"),
# url=os.environ.get("OPENAI_COMPATIBILIY_API_BASE_URL"),
# model_config_dict={"temperature": 0.4, "max_tokens": 4096},
# )
# ollama下使用模型
# model = ModelFactory.create(
# model_platform=ModelPlatformType.OLLAMA,
# model_type="internlm3-8b-instruct",
# model_config_dict={"temperature": 0.4},#可选
# )
# vllm环境模型
# vllm_model = ModelFactory.create(
# model_platform=ModelPlatformType.VLLM,
# model_type="microsoft/Phi-3-mini-4k-instruct",
# url="http://localhost:8000/v1", # 可选
# model_config_dict={"temperature": 0.4}, #可选
# )
# 设置system prompt
sys_msg = BaseMessage.make_assistant_message(
role_name="Assistant",
content="You are a helpful assistant.",
)
# 初始化agent
camel_agent = ChatAgent(system_message=sys_msg, model=model, output_language="zh")#这里同样可以设置输出语言
user_msg = BaseMessage.make_user_message(
role_name="User",
content="""Say hi to CAMEL AI, one open-source community
dedicated to the study of autonomous and communicative agents.""",
)
# 调用模型
response = camel_agent.step(user_msg)
print(response.msgs[0].content)
2.2 Message
Agent的Message就是指系统中“智能体”或“代理者”之间互相传递的指令或数据包。
在 CAMEL 系统中,BaseMessage
是所有消息对象的基础类,它为对话中的每一条信息提供了统一的结构和标准化的处理方式。
创建 BaseMessage
实例的最小化示例
from camel.messages import BaseMessage
from camel.types import RoleType
# 创建一个简单的用户消息
message = BaseMessage(
role_name="example_user",
role_type=RoleType.USER,
content="Hello, CAMEL!",
meta_dict={} #添加必需的meta dict参数,即使为空也要提供,否则会报 TypeError
)
print(message)
>>>
BaseMessage(role_name='example_user', role_type=<RoleType.USER: 'user'>, meta_dict={}, content='Hello, CAMEL!', video_bytes=None, image_list=None, image_detail='auto', video_detail='low', parsed=None)
1 ChatAgent协作
ChatAgent
是 CAMEL 系统中负责对话处理与智能回应的组件。当你将 BaseMessage
对象传递给 ChatAgent
时,ChatAgent
将根据系统和用户消息的内容,生成具有上下文感知的回复。
2 Responses
一个典型的Agent响应通常包括以下几个部分:
- 消息内容(Message Content):这是用户直接看到的部分,如文本、图片等。
- 会话状态(Session Status):指示会话是否继续、结束或需要进行其他操作。
- 附加信息(Additional Information):用于存储上下文数据、调试信息或其他辅助数据。
2.3 Prompt Engineering
1 如何写好提示词
目标和细节
尽管有很多的提示词格式,这两个是最基础的
2 ICL 上下文学习
上下文学习(In-Context Learning)指的是通过提供几个任务示例/说明,让预训练模型理解任务本身。模型无需进行fine-tuning,只需通过几个示例输入和输出对,就能为新输入生成正确的输出。
ICL可以分为以下三种类型:
- Few-shot Learning:提供多个示例。例如:“将中文翻译为英文。你好->hello,再见->goodbye,购买->purchase,销售->”,模型应预测下一个输出为“sell”。
- One-shot Learning:提供一个示例。例如:“将中文翻译为英文。你好->hello,销售->”,模型应预测下一个输出为“sell”。
- Zero-shot Learning:无示例。例如:“将中文翻译为英文。销售->”,模型应预测下一个输出为“sell”。
- 预训练阶段:通过大规模语料库进行训练,培养语言模型的ICL能力。可选的预热阶段能进一步提升模型的性能。
- 演示设计:利用预训练的LLM和精心设计的示例,加上适当的评分策略,生成任务的最终输出。
- 推理阶段:将示例和查询问题结合形成一个提示,输入模型进行预测。示例的质量对ICL效果并没有显著影响。
ICL的强大性能依赖于两个阶段:
- 训练阶段:训练LLM的ICL能力。语言模型直接在语言建模目标上进行训练,如从左到右的生成。虽然这些模型并没有针对上下文学习进行特别优化,但ICL仍然具有令人惊讶的能力。
- 推理阶段:LLM根据特定任务的演示进行预测。由于输入和输出标签都在可解释的自然语言模板中表示,因此有多个方向来提高ICL的性能。
3 思维链 (CoT)
让大模型(像 ChatGPT 这样的 AI 模型)逐步将一个复杂的问题分解为更简单的几个子问题,一步一步解决,直到得出答案。这个分解过程就被称为“思维链”。
为什么 CoT 有效?
目前为止,还没有一个完全被大家认可的科学解释来说明为什么思维链有效。不过,有很多实验观察到了一些有趣的现象,可以帮助我们理解 CoT:
- 模型规模要足够大:如果 AI 太小(比如理解力不足),思维链可能就不起作用,因为它连基础知识都还不理解。
- 任务不能太简单:对于一些非常简单的问题,思维链没有太大帮助,因为 AI 已经能直接给出答案。
- 训练数据的联系:如果 AI 在训练中学到的数据彼此联系紧密,思维链的效果会更好。
- 示例中的错误:有趣的是,即使给 AI 的示例中有些错误步骤,思维链依然有效。这说明 CoT 更像是在“指挥” AI 去做一步步的推理,而不是教 AI 具体怎么做。
简而言之,思维链的效果,可能在于它强迫 AI 按步骤思考,就像老师要求学生把解题过程写下来一样,不仅是为了得到答案,更是为了更好地理解问题的过程。
4 CAMEL中的prompt
使用TaskSpecifyAgent 方法执行提示词
可以用来创建CoT提示词,另外也可以自己创建提示词;
使用 TextPrompt
类编写你的提示词
2.4 Memory
Memory模块是一个关键的组件,其主要功能是存储和检索信息,以支持agent的学习和决策过程。
Memory模块通常包括以下几个核心功能:
- 信息储存:能够高效存储多种形式的数据,包括事实、事件、规则和上下文信息,以便在需要时快速访问。
- 信息检索:支持根据特定查询或上下文快速检索相关信息,帮助agent在需要时做出准确的判断。
- 记忆更新:能够根据新的信息和经验动态更新存储内容,以反映环境或任务的变化。
- 记忆管理:包括老化机制和优先级管理,确保较重要的信息能够长期保留,而不再需要的信息可以被有效清除,以优化存储资源的使用。
1 ChatHistoryBlock
2 Tools
3 CAMEL框架简介及实践
1 什么是CAMEL?
CAMEL (Communicative Agents for "Mind" Exploration of Large Language Models) 是一个开源的多智能体框架,专注于构建基于大语言模型的智能体交互系统。该框架通过角色扮演和结构化对话机制,实现智能体之间的有效协作。
在CAMEL框架中,ChatAgent 是最基础的智能体单元,负责处理对话逻辑和任务执行。而RolePlaying
和Workforce
则是多智能体系统,用于协调多个智能体的协作。
详见我们的开源仓库和项目主页
2 ChatAgent 简介
ChatAgent 是 CAMEL 框架的基础构建块,其设计目标是回答以下问题:“如何设计一个自主的交互式智能体,使其能够在最少人工监督的情况下,引导对话完成任务?”
在当前实现中,我们的智能体具备以下关键特性:
- 角色 (Role):结合目标和内容规范,设定智能体的初始状态,引导智能体在连续交互过程中采取行动。
- 大语言模型 (LLMs):每个智能体都使用大语言模型来增强认知能力。大语言模型使智能体能够理解和生成自然语言,从而解释指令、生成响应并参与复杂对话。
- 记忆 (Memory):包括上下文记忆和外部记忆,使智能体能够以更扎实的方式进行推理和学习。
- 工具 (Tools):智能体可以使用的一组功能,用于与外部世界交互,本质上是为智能体提供具身化能力。
- 通信 (Communication):我们的框架允许智能体之间进行灵活且可扩展的通信,这是解决关键研究问题的基础。
- 推理 (Reasoning):我们为智能体配备了不同的规划和奖励(评论员)学习能力,使其能够以更有指导性的方式优化任务完成。
3 Role Playing机制
RolePlaying是CAMEL框架的独特合作式智能体框架。该框架通过预定义的提示词为不同的智能体创建唯一的初始设置,帮助智能体克服诸如角色翻转、助手重复指令、模糊回复、消息无限循环以及对话终止条件等多个挑战
4 Workforce 简介
Workforce是CAMEL框架中的一个多智能体协同工作系统。它以一种简洁的方式让多个智能体协作完成任务,类似于一个高效的团队合作系统。
5 创建你的第一个Agent Society
面向任务的 RolyPlaying()
类。我们以指令跟随的方式设计这个类。其本质是,要解决复杂任务,可以让两个交流智能体一步一步地协作,共同寻找解决方案。主要概念包括:
- 任务:任务可以简单到一个想法,由初始提示启动。
- AI 用户:预期提供指令的智能体。
- AI 助手:预期提供满足指令的解决方案的智能体。
以下展示了 RolePlaying
对象的主要参数配置及其默认值和描述:
参数名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
assistant_role_name | str | 无 | 助手智能体所扮演角色的名称(合理的名称设置有利于提高agent的能力)。 |
user_role_name | str | 无 | 用户智能体所扮演角色的名称(合理的名称设置有利于提高agent的能力)。 |
critic_role_name | str, optional | "critic" | 评审者智能体所扮演角色的名称。如果名称为 "human",则评审者将被设置为人类Agent,否则将创建一个 CriticAgent。 |
task_prompt | str, optional | "" | 要执行任务的提示。 |
with_task_specify | bool, optional | True | 是否使用任务明确化Agent。 |
with_task_planner | bool, optional | False | 是否使用任务规划Agent。 |
with_critic_in_the_loop | bool, optional | False | 是否在循环中包含一个评审者。 |
critic_criteria | str, optional | None | 评审者Agent的评审标准。如果没有指定,则设置为提高任务性能的标准。 |
model_type | ModelType, optional | None | 用于角色扮演的模型类型。如果指定,它将覆盖所有Agent中的模型。 |
task_type | TaskType, optional | TaskType.AI_SOCIETY | 要执行的任务类型。 |
output_language | str, optional | None | Agent输出的语言。 |