Task04: CAMEL框架中的多智能体系统(课程第三章剩余章节)
【教程地址】https://datawhalechina.github.io/handy-multi-agent/#
3.2 创建首个 Agent Society
一、Agent Society 核心逻辑:Role-Playing(角色扮演)
1. 核心机制
CAMEL 中多智能体协作通过角色扮演实现:让智能体分别扮演 “AI 用户” 和 “AI 助手”,结合专业角色背景,通过多轮对话协作完成任务。关键流程如下:
- 任务具体化:人类用户提供初步想法后,“任务指定智能体” 将想法细化为明确描述。
- 协作执行:AI 用户负责提供指令、引导任务方向;AI 助手遵循指令输出解决方案,直至 AI 用户确认任务完成。
2. RolePlaying 类核心概念与参数
(1)核心角色
- AI 用户(AI User):指令提供者,引导对话走向任务完成。
- AI 助手(AI Assistant):解决方案提供者,遵循指令输出具体内容。
- 评审者(Critic,可选):负责优化任务表现,可设为 “AI 评审者” 或 “人类评审者”。
(2)关键参数配置
参数名称 | 类型 | 默认值 | 核心描述 |
---|---|---|---|
assistant_role_name | str | 无 | AI 助手扮演的角色名称(如 “实验物理学家”,合理命名提升能力) |
user_role_name | str | 无 | AI 用户扮演的角色名称(如 “时间旅行者”) |
critic_role_name | str(可选) | "critic" | 评审者角色名,设为 “human” 则为人类评审,否则为 AI 评审者(CriticAgent) |
task_prompt | str(可选) | "" | 初始任务提示(如 “制定时间旅行计划”) |
with_task_specify | bool(可选) | True | 是否启用 “任务明确化 Agent”,将初始提示细化为具体任务 |
with_critic_in_the_loop | bool(可选) | False | 是否在协作循环中加入评审者,优化任务表现 |
output_language | str(可选) | None | 智能体输出语言(如 “中文”) |
二、创建 Agent Society 实操步骤
1. 步骤 1:环境准备与参数配置
(1)导入依赖与初始化模型
from camel.societies import RolePlaying
from camel.types import ModelPlatformType
from camel.models import ModelFactory
import os# 初始化大模型(以Qwen为例,需替换API密钥)
model = ModelFactory.create(model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,model_type="Qwen/Qwen2.5-72B-Instruct",url='https://api-inference.modelscope.cn/v1/',api_key='你的API密钥' # 替换为实际密钥
)
(2)定义任务、角色参数
# 1. 任务参数(含任务细化)
task_kwargs = {'task_prompt': '制定一个计划去过去并进行改变。', # 初始任务'with_task_specify': True, # 启用任务明确化Agent'task_specify_agent_kwargs': {'model': model} # 细化任务的模型
}# 2. AI用户参数(角色+模型)
user_role_kwargs = {'user_role_name': '一个雄心勃勃的渴望成为时间旅行者的人','user_agent_kwargs': {'model': model}
}# 3. AI助手参数(角色+模型)
assistant_role_kwargs = {'assistant_role_name': '最优秀的实验物理学家','assistant_agent_kwargs': {'model': model}
}
2. 步骤 2:组建 AI-Society(初始化 RolePlaying)
# 整合参数,创建角色扮演会话
society = RolePlaying(**task_kwargs,**user_role_kwargs,**assistant_role_kwargs
)
- 日志观察:CAMEL 会自动生成智能体的
system_prompt
,例如为 “任务明确化 Agent” 设定指令:“将‘制定时间旅行计划’细化为 50 字内的具体任务”。
3. 步骤 3:编写协作循环,执行任务
(1)定义终止检测函数(避免无限循环)
def is_terminated(response):"""检测智能体是否终止,并输出原因"""if response.terminated:role = response.msg.role_type.namereason = response.info['termination_reasons']print(f'AI {role} 因为 {reason} 而终止')return response.terminated
(2)定义运行函数(多轮协作)
def run(society, round_limit: int=10):# 初始化对话:获取AI助手的初始消息input_msg = society.init_chat()# 多轮协作循环for _ in range(round_limit):# 一轮交互:AI助手响应 → AI用户反馈assistant_response, user_response = society.step(input_msg)# 检测终止条件if is_terminated(assistant_response) or is_terminated(user_response):break# 输出对话内容print(f'[AI 用户] {user_response.msg.content}.\n')# 检测任务是否完成(含"CAMEL_TASK_DONE"标识)if 'CAMEL_TASK_DONE' in user_response.msg.content:breakprint(f'[AI 助手] {assistant_response.msg.content}.\n')# 下一轮输入:以AI助手的响应作为新指令input_msg = assistant_response.msg# 启动协作
run(society)
(3)任务执行结果
- 任务细化:初始提示 “制定时间旅行计划” 被细化为 “设计量子纠缠 + 虫洞的时间机器,含安全返回机制,实施关键历史改变”。
- 协作过程:AI 用户(时间旅行者)逐步提出需求(如 “确定安全返回方案”),AI 助手(物理学家)输出技术细节,直至任务完成。
三、进阶:引入评审者(Critic)
1. 核心功能
通过with_critic_in_the_loop=True
在协作中加入评审者,优化任务表现,支持 “人类评审” 或 “AI 评审”。
2. 实操代码(以人类评审为例)
# 初始化含人类评审的RolePlaying
society = RolePlaying(**task_kwargs, # 任务:如"写一本关于AI社会未来的书"**user_role_kwargs, # AI用户:"AI专家"**assistant_role_kwargs, # AI助手:"AI领域作家"critic_role_name='human', # 评审者设为人类with_critic_in_the_loop=True, # 启用评审循环output_language="中文" # 中文输出
)# 启动协作(人类可手动选择优化方向或指导AI)
run(society)
3. 评审机制
- 人类评审:人类通过输入数字选择优化选项(如 “细化某章节内容”),或直接输入指令指导 AI 助手。
- AI 评审:若
critic_role_name
设为非 “human”(如 “editor”),则由 CriticAgent 自动评审并提出优化建议。
四、核心总结
- 协作核心:以 “AI 用户(指令)+ AI 助手(方案)” 的角色扮演为核心,通过任务细化和多轮对话实现复杂任务。
- 关键优势:参数化配置灵活(角色、评审、语言等),支持人类介入优化,避免智能体无限循环。
- 适用场景:需多角色协作的复杂任务(如计划制定、创作、技术开发),尤其适合需要专业背景的场景。
3.3 创建你的 Workforce(CAMEL 框架)核心总结
一、Workforce 核心定位
Workforce 是 CAMEL 框架中多智能体协同工作系统,通过层级架构(协调智能体、任务规划智能体、工作节点)和任务通道,实现多个智能体(Worker)的高效协作,适用于复杂任务的分工处理(如旅游攻略制作、项目评审等)。
二、简单实践:创建基础 Workforce
1. 核心步骤
(1)创建 Workforce 实例
初始化一个 Workforce,需指定描述(用于定位系统目标)及相关智能体参数(如模型配置)。
python
from camel.societies.workforce import Workforce# 初始化Workforce,指定描述和模型
workforce = Workforce(description="旅游攻略制作与评估工作组", # 系统目标描述new_worker_agent_kwargs={'model': model}, # 新智能体的模型配置coordinator_agent_kwargs={'model': model}, # 协调智能体的模型配置task_agent_kwargs={'model': model} # 任务规划智能体的模型配置
)
(2)定义 Worker(智能体)
根据任务需求,创建具有特定角色和能力的智能体(Worker),可配置工具(如搜索工具)和系统消息(明确职责)。
python
from camel.agents import ChatAgent
from camel.toolkits import FunctionTool, SearchToolkit# 1. 旅游信息搜索助手(带搜索工具)
search_tool = FunctionTool(SearchToolkit().search_duckduckgo) # 绑定搜索工具
search_agent = ChatAgent(system_message="""你是专业旅游信息搜索助手,负责搜索景点、美食、交通住宿信息""",model=model,tools=[search_tool], # 赋予搜索能力output_language='中文'
)# 2. 旅行规划师(无工具,专注规划)
planner_agent = ChatAgent(system_message="""你是专业旅行规划师,负责合理安排行程、考虑季节和休息时间""",model=model,output_language='中文'
)# 3. 旅行爱好者(负责评估)
reviewer_agent = ChatAgent(system_message="""你是经验丰富的旅行爱好者,负责评估行程合理性并给出建议""",model=model,output_language='中文'
)
(3)添加工作节点
将定义的 Worker 添加到 Workforce 中,节点描述需精准(协调智能体会根据描述分配任务)。
python
# 逐个添加节点(支持方法链操作)
workforce.add_single_agent_worker("负责搜索目的地相关信息", # 节点描述(关键!用于任务分配)worker=search_agent
).add_single_agent_worker("负责制定详细行程规划",worker=planner_agent
).add_single_agent_worker("负责从游客角度评估行程",worker=reviewer_agent
)
(4)启动任务处理
创建 Task 对象,调用process_task()
让 Workforce 协同处理,最终从task.result
获取结果。
python
from camel.tasks import Task# 定义任务
task = Task(content="规划一个3天的巴黎旅行计划。", # 任务内容id="0" # 任务唯一标识
)# 处理任务
task = workforce.process_task(task)# 查看结果
print(task.result)
2. 关键注意点
- 节点描述的重要性:协调智能体依赖节点描述分配子任务,描述需清晰反映角色职责(如 “负责搜索”“负责规划”)。
- 工具绑定:需为需要与外部交互的智能体(如搜索助手)绑定工具(
FunctionTool
),赋予其外部能力。 - 模型一致性:Workforce 中所有智能体建议使用同一模型,避免语义理解差异。
三、进阶实践:组建 Hackathon 评审团
以 “多智能体协同评审黑客松项目” 为例,展示 Workforce 在复杂场景的应用。
1. 核心目标
通过多个具有不同角色和评价标准的评审智能体,结合辅助搜索智能体,对项目进行多角度评估,生成综合评审结果。
2. 关键步骤
(1)创建个性化评审智能体
通过make_judge
函数生成具有独特人设、评价标准的评审智能体(如风险投资家、工程师、AI 创始人等)。
def make_judge(persona, example_feedback, criteria) -> ChatAgent:# 系统消息定义角色人设、反馈示例和评审标准sys_msg = BaseMessage.make_assistant_message(role_name="黑客马拉松评委",content=f"你的人设:{persona};示例反馈:{example_feedback};评审标准:{criteria}")return ChatAgent(system_message=sys_msg, model=model)# 示例:创建风险投资家评委(关注商业潜力)
vc_agent = make_judge(persona="你是关注独角兽公司的风投,常用'颠覆性'等词汇,不关心技术细节",example_feedback="这个项目在区块链市场是颠覆性的,可扩展性极高!",criteria="评估现实世界适用性(1-4分)"
)
(2)创建辅助智能体
添加具备搜索能力的 “研究员” 智能体,为评审提供项目相关的最新信息。
# 绑定百度搜索工具
search_tool = FunctionTool(SearchToolkit().search_baidu)
researcher_agent = ChatAgent(system_message="你是AI领域研究员,用搜索获取最新趋势辅助评审",model=model,tools=[search_tool]
)
(3)组建 Workforce 评审团
将评审智能体和辅助智能体添加到 Workforce,明确各节点角色描述。
workforce = Workforce(description="黑客马拉松评审团",coordinator_agent_kwargs={"model": model},task_agent_kwargs={"model": model}
)# 添加所有智能体节点
workforce.add_single_agent_worker("愿景先锋维罗妮卡(风投评委),关注商业潜力", worker=vc_agent
).add_single_agent_worker("批判性约翰(工程师评委),注重技术细节", worker=eng_agent
).add_single_agent_worker("研究员瑞秋(助手),负责在线搜索辅助评审", worker=researcher_agent
) # 省略其他评委...
(4)创建并处理评审任务
定义任务内容(含项目描述),由 Workforce 分配子任务(如搜索信息、各评委打分、汇总结果)。
task = Task(content="评估黑客马拉松项目:先研究项目信息,各评委打分,最后汇总意见和分数",additional_info=proj_content, # 项目详细描述id="0"
)# 处理任务
task = workforce.process_task(task)
print(task.result) # 输出含各评委分数、意见及总结的结果
四、Workforce 核心特性与优势
- 层级协作:通过协调智能体分配任务、任务规划智能体分解目标,实现分工明确的多智能体协作。
- 灵活性:支持动态添加 / 移除工作节点,适配不同任务需求。
- 容错性:任务失败时,协调智能体可分解任务或创建新智能体重试(避免无限循环)。
- 场景适配:适用于需要多角色分工的复杂任务(如项目评审、内容创作、方案规划等)。
五、总结
Workforce 是 CAMEL 框架中实现多智能体协同工作的核心组件,通过 “定义智能体→添加节点→分配任务” 的流程,支持从简单到复杂的多角色协作场景。其关键在于精准的节点描述(辅助任务分配)和合理的角色分工,可大幅提升复杂任务的处理效率和质量。