Task01: CAMEL环境配置及第一个Agent
【教程地址】https://datawhalechina.github.io/handy-multi-agent/#/chapter1/1.1.get-camel
1.1 获取CAMEL
CAMEL(Communication-Aware Multi-agent Collaboration and Execution Learning)是一种聚焦多智能体协作的对话模型,核心目标是让多个 AI 代理(Agent)通过高效沟通,共同完成复杂任务(如项目规划、代码开发、问题拆解)。
通过PyPI安装
利用 pip 直接安装基础 CAMEL 库:
pip install camel-ai
Copy to clipboardErrorCopied
如果想体验完整功能,还需要安装额外的依赖项(本文档代码基于camel-ai 0.2.38版本运行):
pip install "camel-ai[all]==0.2.38"
1.2 API设置
智能体的部署可根据应用场景和资源限制选择 API 或本地模型。若网络稳定且能接受费用,API 是不错的选择;若硬件资源充足、注重数据隐私安全且需离线工作,则本地模型更合适。
1.2.1 获取API
以 Qwen 为例,使用 API 调用大模型需从 ModelScope 获取 API KEY。用户需有正常注册且可用的 ModelScope 账户,生成私有 API KEY 时,要注意图中的 SDK 令牌即 API KEY,且需在模型服务先绑定阿里巴巴云账号,否则 API 会显示无法使用。在 ModelScope 的模型库中选择推理 API-Inference,可体验到如使用 DeepSeek-R1 数据蒸馏出的 Llama-70B 等模型。
1.2.2 使用API调用模型
使用CAMEL中的ChatAgent模块来简单调用一下模型
使用语言模型
from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformTypemodel = 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_key'
)agent = ChatAgent(model=model,output_language='中文'
)response = agent.step("你好,你是谁?")
print(response.msgs[0].content)
你好,我是来自阿里云的大规模语言模型,我叫通义千问。
使用多模态模型
from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType
from camel.messages import BaseMessagefrom io import BytesIO
import requests
from PIL import Imagemodel = 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)
这是一张金毛寻回犬的特写照片。这只狗有着浓密的金色毛发,耳朵垂在头部两侧,眼睛明亮而有神,鼻子黑色且湿润。它的嘴巴微微张开,露出了粉红色的舌头,看起来非常友好和快乐。背景是一片模糊的绿色,可能是在户外的自然环境中拍摄的。整体画面非常温暖和愉悦,突出了金毛寻回犬的亲和力和活力。
视频理解
from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType
from camel.messages import BaseMessagefrom dotenv import load_dotenv
import osload_dotenv()api_key = os.getenv('QWEN_API_KEY')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_key
)# 创建代理
agent = ChatAgent(model=model,output_language='中文'
)# 读取本地视频文件
video_path = "vedio_test.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)
这是一幅令人惊叹的超现实主义景观画,画面中有一只狗在一条被雪覆盖的道路上奔跑。整个场景被一种奇幻而美丽的氛围所包围,让人感受到一种超凡脱俗的美。
首先,画面的背景是一片壮丽的天空,天空中布满了浓密的云层,这些云层呈现出丰富的纹理和层次感。云层的颜色以粉色和紫色为主调,其间还夹杂着一些金色和蓝色的光影,形成了一个绚丽多彩的天幕。在云层之间,有一道明亮的光线穿过,这道光线像是从天际线的尽头射来,照亮了整个场景,给人一种希望和温暖的感觉。
地面上是一条被雪覆盖的道路,道路两旁是连绵起伏的雪山和丘陵。雪地上的足迹和轮胎印清晰可见,表明这里虽然人迹罕至,但仍有生命活动的痕迹。一只白色的狗正在这条道路上奔跑,它的姿态轻盈而欢快,仿佛在享受着这美好的一刻。
整个画面的色彩非常丰富,粉色、紫色、金色、蓝色相互交织,营造出一种梦幻般的氛围。这种色彩的运用让画面充满了活力和生命力,令人不禁沉醉其中。
总的来说,这幅画通过超现实主义的手法,创造了一个美轮美奂的幻想世界,让观者在现实与幻想之间徘徊,感受到艺术带来的无限魅力。
使用dotenv 来管理 API 密钥:
pip install python-dotenv
之后在外面的项目根目录创建一个名为 .env 的文件,并在其中添加你的 API 密钥:
QWEN_API_KEY=你的api密钥
然后调用模型:
from dotenv import load_dotenv
import osload_dotenv()api_key = os.getenv('QWEN_API_KEY')
1.3 Hello CAMEL
使用CAMEL来开发一个交易机器人!在这一部分会使用到CAMEL的核心模块之一RolePlaying
from colorama import Forefrom camel.societies import RolePlaying
from camel.utils import print_text_animated
from camel.models import ModelFactory
from camel.types import ModelPlatformTypefrom dotenv import load_dotenvimport osload_dotenv(dotenv_path='.env')api_key = os.getenv('QWEN_API_KEY')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_key
)def main(model=model, chat_turn_limit=50) -> None:task_prompt = "为股票市场开发一个交易机器人"#设置任务目标role_play_session = RolePlaying(assistant_role_name="Python 程序员",#设置AI助手角色名assistant_agent_kwargs=dict(model=model),user_role_name="股票交易员",#设置用户角色名,在roleplay中,user用于指导AI助手完成任务user_agent_kwargs=dict(model=model),task_prompt=task_prompt,with_task_specify=True,task_specify_agent_kwargs=dict(model=model),output_language='中文'#设置输出语言)print(Fore.GREEN+ f"AI 助手系统消息:\n{role_play_session.assistant_sys_msg}\n")print(Fore.BLUE + f"AI 用户系统消息:\n{role_play_session.user_sys_msg}\n")print(Fore.YELLOW + f"原始任务提示:\n{task_prompt}\n")print(Fore.CYAN+ "指定的任务提示:"+ f"\n{role_play_session.specified_task_prompt}\n")print(Fore.RED + f"最终任务提示:\n{role_play_session.task_prompt}\n")n = 0input_msg = role_play_session.init_chat()while n < chat_turn_limit:n += 1assistant_response, user_response = role_play_session.step(input_msg)if assistant_response.terminated:print(Fore.GREEN+ ("AI 助手已终止。原因: "f"{assistant_response.info['termination_reasons']}."))breakif user_response.terminated:print(Fore.GREEN+ ("AI 用户已终止。"f"原因: {user_response.info['termination_reasons']}."))breakprint_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")if "CAMEL_TASK_DONE" in user_response.msg.content:breakinput_msg = assistant_response.msgif __name__ == "__main__":main()
RolePlaying会将将初始的task一步步拆解,由AI User指导AI Assistant完成整个任务
使用其他模型以及不同的输出语言
需要使用ModelFactory创建一个模型以及修改一些参数即可切换不同的模型。另外我们可以设置output_language
参数来调整不同的输出语言
from colorama import Forefrom camel.configs import ZhipuAIConfig
from camel.societies import RolePlaying
from camel.utils import print_text_animated
from camel.models import ModelFactory
from camel.types import ModelPlatformType,ModelType# import os
# os.environ["http_proxy"] = "http://127.0.0.0:7890"#这里替换成自己的代理IP地址
# os.environ["https_proxy"] = "http://127.0.0.0:7890"#这里替换成自己的AgentIP地址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_key
)def main(model=model, chat_turn_limit=50) -> None:task_prompt = "为股票市场开发一个交易机器人"#设置任务目标role_play_session = RolePlaying(assistant_role_name="Python 程序员",#设置AI助手角色名assistant_agent_kwargs=dict(model=model),user_role_name="股票交易员",#设置用户角色名,在roleplay中,user用于指导AI助手完成任务user_agent_kwargs=dict(model=model),task_prompt=task_prompt,with_task_specify=True,task_specify_agent_kwargs=dict(model=model),output_language='Chinese'#设置输出语言)
遇到问题:
Traceback (most recent call last):
File "D:\PycharmProjects\handy-multi-agent\chat.py", line 6, in <module>
model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
File "C:\Users\1\AppData\Local\Programs\Python\Python39\lib\enum.py", line 429, in __getattr__
raise AttributeError(name) from None
AttributeError: OPENAI_COMPATIBLE_MODEL
原因:
安装的库版本过旧,没有OPENAI_COMPATIBLE_MODEL
。
通过PyPI安装获取不到0.2.38版本,尝试从源码安装,成功解决。
另外:camel-ai
库要求 Python 版本在 3.10 到 3.13 之间(不包括 3.13),