CAMEL Multi-Agent
多智能体学习 1
一、环境配置准备
- 获取CAMEL
-
在python中安装CAMEL库
pip install "camel-ai[all]==0.2.19"
-
获取API KEY
我们可以去魔搭社区,绑定阿里巴巴云账号之后,就可与获取到API KEY了
- 使用
API
调用模型
- 调用
DeepseekR1
模型
这里我们使用CAMEL中的ChatAgent
模块来简单调用一下Deepseek-R1
模型
调用代码如下:
我们来问问它是谁
from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType
model = ModelFactory.create(
model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
model_type='deepseek-ai/DeepSeek-R1',
url='https://api-inference.modelscope.cn/v1/',
api_key='替换为自己的API key'
)
agent = ChatAgent(
model=model,
output_language='中文'
)
response = agent.step("你好,请说明你是谁,并简单介绍自己")
print(response.msgs[0].content)
deepseek的回答如下:
您好!我是DeepSeek-R1,一个由深度求索公司开发的智能助手。我基于大数据和机器学习技术训练而成,能够理解多语言、处理复杂逻辑推理,并通过实时联网获取最新信息。我的核心功能包括日常问题解答、学习辅助、任务规划、多模态内容生成等,旨在为用户提供高效准确的信息服务。若您有任何需求,随时告诉我即可~
(有warning可忽略~ 我尝试加上过max_tokens 但报错了)
-
调用多模态模型通义千问QVQ-72B-Preview
我们输入一张图片的URL 和 问题
“请描述这张图片的内容“
from camel.agents import ChatAgent from camel.models import ModelFactory from camel.types import ModelPlatformType from camel.messages import BaseMessage from io import BytesIO import requests from PIL import Image model = ModelFactory.create( model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL, model_type="Qwen/QVQ-72B-Preview", url='https://api-inference.modelscope.cn/v1/', api_key='自己的api' ) agent = ChatAgent( model=model, output_language='中文' ) # 图片URL url = "https://img0.baidu.com/it/u=2205376118,3235587920&fm=253&fmt=auto&app=120&f=JPEG?w=846&h=800" response = requests.get(url) img = Image.open(BytesIO(response.content)) user_msg = BaseMessage.make_user_message( role_name="User", content="请描述这张图片的内容", image_list=[img] # 将图片放入列表中 ) response = agent.step(user_msg) print(response.msgs[0].content)
通义千问的回答如下:
这是一张金毛寻回犬的特写照片。这只狗有着浓密的金色毛发,耳朵垂在头部两侧,眼睛明亮而有神,黑色的鼻子显得很突出。它的嘴巴微微张开,露出了粉红色的舌头,看起来非常友好和活泼。背景是一片模糊的绿色,可能是在户外的自然环境中拍摄的。整体来说,这张照片展示了一只健康、快乐的金毛寻回犬,它的表情充满了热情和活力。
二、使用CAMEL来开发机器人
在这一部分会使用到CAMEL的核心模块之一RolePlaying
我们来运用这个模块多轮迭代创造一个交易机器人
代码步骤如下:
初始化角色
- AI 助手 = Python 程序员
- AI 用户 = 股票交易员
任务目标
- 股票交易员指引 Python 程序员完成交易机器人开发。
对话循环
- AI 助手和 AI 用户不断交互,基于 AI 生成的消息驱动对话,直到达到上限或任务完成。
终止条件
- 达到最大轮数
- AI 认为任务已完成
- AI 返回终止信号
代码如下 内含有关键注释
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()
#这里要记得自己增加.env文件存放api_key
api_key = os.getenv('API_KEY')
model = ModelFactory.create(
model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
model_type='deepseek-ai/DeepSeek-R1',
url='https://api-inference.modelscope.cn/v1/',
api_key=api_key
)
#默认对话轮数上线为50回合
def main(model=model, chat_limit=50):
task_prompt = "请为股票市场开发一个交易机器人"
# 一、定义角色扮演会话
role_playing = RolePlaying(
assistant_role_name="Python 程序员", # AI助手的角色是"Python程序员"
assistant_agent_kwargs=dict(model=model), # AI助手使用指定的模型
user_role_name="股票交易员",
user_agent_kwargs=dict(model=model),
task_prompt=task_prompt, # 设定任务目标
with_task_specify=True, # 启用任务详细描述
task_specify_agent_kwargs=dict(model=model), # AI助手生成详细任务描述
output_language='中文'
)
# 二、打印初始信息
# Fore 是 colorama 库中的一个模块,用于在终端中更改文本颜色。
print(
Fore.GREEN
+ f"AI 助手系统消息:\n{role_playing.assistant_sys_msg}\n"
)
# AI 助手系统消息 (assistant_sys_msg):AI 作为“Python 程序员”如何执行任务的提示信息。
print(
Fore.BLUE + f"AI 用户系统消息:\n{role_playing.user_sys_msg}\n"
)
# AI 用户系统消息 (user_sys_msg):AI 作为“股票交易员”提供的任务指导信息。
print(Fore.YELLOW + f"原始任务提示:\n{task_prompt}\n")
print(
Fore.CYAN
+ "指定的任务提示:"
+ f"\n{role_playing.specified_task_prompt}\n"
)
# 指定的任务提示(specified_task_prompt):任务经过AI处理后的详细版本。
print(Fore.RED + f"最终任务提示:\n{role_playing.task_prompt}\n")
# 三、开始对话,对话循环
n = 0
# 获取 AI 用户(股票交易员)的初始问题。
input_msg = role_playing.init_chat()
while n < chat_limit:
n += 1
# 让AI 助手(Python 程序员)和 AI 用户(股票交易员)交互,返回双方的消息。
assistant_response, user_response = role_playing.step(input_msg)
# 如果终止 打印终止信息并退出
if assistant_response.terminated:
print(Fore.GREEN + ("AI 助手已终止。原因: "
f"{assistant_response.info['termination_reasons']}."
)
)
break
if user_response.terminated:
print(
Fore.GREEN
+ (
"AI 用户已终止。"
f"原因: {user_response.info['termination_reasons']}."
)
)
break
# 打印 AI用户和AI助手 交互内容
print_text_animated(
Fore.BLUE + f"AI 用户:\n\n{user_response.msg.content}\n"
)
print_text_animated(
Fore.GREEN + "AI 助手:\n\n"
f"{assistant_response.msg.content}\n"
)
# 任务完成检测 如果 AI 用户的消息包含 "CAMEL_TASK_DONE",说明任务已完成 终止
if "CAMEL_TASK_DONE" in user_response.msg.content:
break
# 更新输入消息 将 AI 助手的最新回复作为下一轮 AI 用户(股票交易员)的输入,继续对话。
input_msg = assistant_response.msg
if __name__ == "__main__":
main()
接下来让我们运行代码
首先出来的是初始信息,任务提示经过进一步的指定,变得更为详细和具体,确定两个AI角色的任务及规范
任务是逐步进行的,AI 用户在任务执行过程中将持续给出指令,AI 助手提供相应的技术实现。
任务完成标志是 AI 用户回复 <CAMEL_TASK_DONE>
:
接下来开始进行多轮对话,以下是第一轮对话的片段
最终就能完成任务 让两个AI配合开发出一个股票预测机器人
以上就是初步的创建智能体进行对话迭代完成任务的过程
当然你也可以修改model_type
参数来使用不同的模型,比如通义千问、ChatGPT
或Llama
等
或者修改output_language
参数 来更改AI输出的语言,换成英文或者日语都可以