当前位置: 首页 > news >正文

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-aiCopy 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),

http://www.dtcms.com/a/339933.html

相关文章:

  • Kubernetes Ingress实战:从环境搭建到应用案例
  • C语言基础:(十九)数据在内存中的存储
  • Java线程池参数配置的坑:`corePoolSize=0` + `LinkedBlockingQueue`直接变成串行执行
  • Python爬虫第二课:爬取HTML静态网页之《某某小说》 小说章节和内容完整版
  • 智驾-AEB
  • 羟氯喹通过抑制抗磷脂综合征诱导的绒毛外滋养细胞过度自噬
  • 【模版匹配】基于深度学习
  • 洛谷 P2834 纸币问题 3-普及-
  • 《当 AI 学会 “思考”:大语言模型的逻辑能力进化与隐忧》
  • centos 总有new mail出现原因
  • [论文阅读] 软件工程 - 用户体验 | VR应用的无障碍性困局:基于Meta和Steam商店评论的深度剖析
  • 多幅图片拼接算法系统
  • FIFO通讯速率> 30MB/s,CH346保障FPGA与PC的高速通道稳定高效
  • 当GitHub宕机时,我们如何协作
  • 工业4.0时代,耐达讯自动化Profibus转光纤如何重构HMI通信新标准?“
  • HTML应用指南:利用GET请求获取全国新荣记门店位置信息
  • 【DAB收音机】DAB服务跟随Service Follow功能(三)【FIG 0/24:OE Services】
  • Browser Use + Playwright到AI Agent:Web自动化如何实现质变?
  • C++装饰器模式:从“勇勇”例子到实际应用
  • Day09 Go语言深入学习(1)
  • 单片机编程架构
  • AttributeError: module ‘ffmpeg‘ has no attribute ‘probe‘
  • 【光学神经网络与人工智能应用专题】
  • 力扣hot100:三数之和(排序 + 双指针法)(15)
  • 深度学习-167-MCP技术之工具函数的设计及注册到MCP服务器的两种方式
  • 零售行业新店网络零接触部署场景下,如何选择SDWAN
  • 排查Redis数据倾斜引发的性能瓶颈
  • 缓存-变更事件捕捉、更新策略、本地缓存和热key问题
  • Autoware Universe 感知模块详解 | 第零节 如何学习开源框架(以Autoware Universe为例)
  • 新手入门:用 LangChain+LlamaIndex 构建 RAG,通义千问 API 免费够用