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

5天速成ai agent智能体camel-ai之第1天:camel-ai安装和智能体交流消息讲解(附源码,零基础可学习运行)

嗨,朋友们!👋 是不是感觉AI浪潮铺天盖地,身边的人都在谈论AI Agent、大模型,而你看着那些密密麻麻的代码,感觉像在读天书?🤯

别焦虑!你不是一个人。很多人都想抓住AI的风口,提升自己,却被技术门槛拦在门外。特别是那些想快速上手、做出点东西的朋友,看到复杂的框架和概念就头大。😥

但今天,我要给你一把钥匙🔑,一把能让你快速解锁AI Agent核心沟通机制的钥匙。我们将聚焦一个强大而友好的框架——CAMEL AI,特别是它的“消息(Message)”系统。这可是构建智能体的“神经网络”!

为什么是CAMEL AI?为什么是“消息”?

想象一下,AI Agent就像一个超级智能的员工。你要让它工作,总得跟它说话吧?“消息”就是你和AI Agent,以及AI Agent之间沟通的语言。搞懂了消息,你就掌握了指挥AI干活的核心!而CAMEL AI在消息处理上设计得非常巧妙和强大。

更重要的是,这篇文章会带你用5天(甚至更短!)的时间,从零开始,通过看得懂的语言和可运行的代码,彻底搞明白CAMEL AI的消息机制。别怕,即使你是编程小白,跟着步骤也能上手!🚀
先安装依赖:pip install "camel-ai[all]==0.2.38"
第一天:初识“砖块” - 万能的`BaseMessage`

所有复杂的对话,都是由一条条基本的消息组成的。在CAMEL AI里,这个最基本的“砖块”就是`BaseMessage`。它就像一个标准的信封,里面装着你要传递的信息。

这个“信封”上必须有几个要素:

*   `role_name`: 发件人是谁?(比如:“用户小明”、“智能助手”)
*   `role_type`: 发件人的角色类型?(是`USER`用户,还是`ASSISTANT`助手?)
*   `content`: 信的内容是啥?(比如:“你好啊!”)

听起来很简单?别急,`BaseMessage`的厉害之处在于,它不仅能装文字,还能装图片!📸

看看这段代码:
 

from PIL import Image
from io import BytesIO
import requests
from camel.messages import BaseMessage
from camel.types import RoleType

# 1. 从网上下载一张图片
url = "https://raw.githubusercontent.com/camel-ai/camel/master/misc/logo_light.png"
response = requests.get(url) # 发送请求,把图片数据拿回来
img = Image.open(BytesIO(response.content)) # 用PIL库打开图片数据,变成一个图片对象

# 2. 创建一个包含图片的消息
image_message = BaseMessage(
    role_name="User_with_image",  # 发件人名字
    role_type=RoleType.USER,      # 角色是用户
    content="你看这张图怎么样?",    # 文字内容
    meta_dict={},                 # 元数据,暂时不用管
    image_list=[img]             # 关键!把图片对象放进列表里传进去
)

print(image_message) # 打印看看这个带图片的消息长啥样



看明白了吗?我们用`requests`库从网上抓了张图,用`PIL`和`BytesIO`把它处理成程序认识的图片格式,然后把它塞进了`BaseMessage`的`image_list`参数里。

划重点:`BaseMessage`是基石,它定义了通信的基本单元,并且天生支持多模态(文字+图片)!这一下就让你的AI Agent拥有了“看图说话”的潜力!是不是有点小激动?🤩

第二天:偷个小懒 - 便捷的“快捷方式”

每次都写那么多参数创建`BaseMessage`有点烦?CAMEL AI早就替你想好了!对于最常用的用户消息和助手消息,它提供了“快捷方式”:

 

from camel.messages import BaseMessage

# 创建一条用户消息,超简单!
user_msg = BaseMessage.make_user_message(
    role_name="User_1",           # 用户名
    content="Hi, what can you do?" # 用户说的话
)

# 创建一条助手消息,同样简单!
assistant_msg = BaseMessage.make_assistant_message(
    role_name="Assistant_1",        # 助手名
    content="I can help you with various tasks." # 助手说的话
)

print("User Message:", user_msg)
print("Assistant Message:", assistant_msg)

# 你还可以把消息转换成字典格式,方便查看或传输
msg_dict = image_message.to_dict() # 把前面带图片的消息转成字典
print("Message as dict:", msg_dict)



`make_user_message`和`make_assistant_message`这两个函数,是不是让代码清爽多了?它们本质上还是创建`BaseMessage`,但帮你预设了`role_type`等信息。

同时,`.to_dict()`方法也很有用,它可以把消息对象变成Python字典,方便你检查里面的具体内容,或者序列化(比如存成JSON文件)。

第三天:走向世界 - 与OpenAI“接轨”

现在很多强大的AI模型(比如GPT系列,或者国内很多兼容其API的模型)都遵循OpenAI的API格式。你的CAMEL AI Agent要想和这些模型对话,就需要把自己的消息“翻译”成它们能听懂的格式。

CAMEL AI又提供了贴心工具:

 

from camel.types import OpenAIBackendRole

# 把我们之前创建的用户消息,转换成OpenAI API认识的用户消息格式
openai_user_msg = user_msg.to_openai_message(role_at_backend=OpenAIBackendRole.USER)
print("OpenAI-compatible user message:", openai_user_msg)

# 把助手消息,也转换成OpenAI API认识的助手消息格式
openai_assistant_msg = assistant_msg.to_openai_assistant_message()
print("OpenAI-compatible assistant message:", openai_assistant_msg)



`to_openai_message`和`to_openai_assistant_message`就是这个“翻译官”。它们接收CAMEL AI的`BaseMessage`,输出符合OpenAI规范的字典。`role_at_backend`参数指定了在对方系统里这条消息应该扮演什么角色(比如`USER`或`ASSISTANT`)。

为什么这很重要? 因为这意味着用CAMEL AI构建的Agent,可以轻松地接入各种不同的大模型后端!无论是OpenAI的GPT,还是国内支持OpenAI API格式的各种模型(比如代码示例里的Qwen通义千问),都能无缝切换。灵活性大大提升!💪

第四天:实战演练 - 让Agent看图说话!

理论学得差不多了,是时候让我们的Agent动起来了!这次,我们来个真刀真枪的演练:让Agent接收一张图片,并描述图片内容。

 

import os
from dotenv import load_dotenv # 用于加载环境变量中的API Key
from camel.agents import ChatAgent
from camel.messages import BaseMessage
from camel.models import ModelFactory
from camel.types import ModelPlatformType, RoleType
from io import BytesIO
import requests
from PIL import Image

# 1. 准备工作:加载你的API Key (需要先设置好)
load_dotenv() # 从 .env 文件加载环境变量
api_key = os.getenv('QWEN_API_KEY') # 读取你的通义千问API Key

# 2. 选择“大脑”:创建模型实例
# 这里用了通义千问Qwen的多模态模型,通过兼容OpenAI的接口访问
model = ModelFactory.create(
    model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL, # 平台类型
    model_type="qwen-vl-max", # 模型名称 (注意:这里用了更新的、更常用的模型名)
    url='https://dashscope.aliyuncs.com/compatible-mode/v1', # 阿里云DashScope的兼容接口地址
    api_key=api_key, # 传入你的API Key
    model_kwargs = {"temperature": 0.0} # 可以加一些模型参数,比如温度设为0让输出更稳定
)

# 3. 创建“执行者”:实例化ChatAgent
chat_agent = ChatAgent(model=model, output_language='中文') # 把模型传给Agent,并指定输出中文

# 4. 准备“任务”:下载图片并创建带图片的用户消息
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_image_msg = BaseMessage.make_user_message(
    role_name="User",
    content="请描述这张图片的内容", # 指令
    image_list=[img]  # 把图片加进去!
)

# 5. “开工!”:将消息发送给Agent,等待回复
print("正在请求AI描述图片,请稍候...")
response_with_image = chat_agent.step(user_image_msg) # 最关键的一步!

# 6. 查看“成果”:打印Agent的回复
if response_with_image and response_with_image.msgs:
    print("AI助手对图片的描述:", response_with_image.msgs[0].content)
else:
    print("未能获取到有效的回复。")
    if response_with_image and response_with_image.info:
        print("附带信息:", response_with_image.info)



这段代码做了什么?

1.  配置环境:加载API Key(你需要先申请并在`.env`文件里配置好)。这是调用大模型服务的“通行证”。
2.  选定模型:通过`ModelFactory`指定我们要用的模型(这里是Qwen的多模态模型),并传入API地址和Key。这就是Agent的“大脑”。
3.  创建Agent:实例化`ChatAgent`,把选好的模型装进去。这是具体干活的“人”。
4.  准备输入:下载一张图片,用我们学过的`make_user_message`创建一个包含文字指令和图片的消息。
5.  执行任务:调用`chat_agent.step(user_image_msg)`。这是核心!Agent接收到包含图片的消息,会调用模型进行处理。
6.  获取结果:`step`方法返回一个响应对象,我们从中提取Agent回复的消息内容并打印出来。

看到AI真的能“看懂”图片并用中文描述出来,是不是成就感爆棚?!🥳 这就是掌握CAMEL AI消息机制的威力!

第五天:解剖回信 - 理解Agent的反馈`ChatAgentResponse`

Agent干完活,会给你一个“工作报告”,这就是`ChatAgentResponse`对象。它里面包含了什么呢?

 

from camel.responses import ChatAgentResponse
from camel.messages import BaseMessage
from camel.types import RoleType

# 假设这是Agent执行完step后返回的响应对象 (我们模拟一个)
response = ChatAgentResponse(
    msgs=[ # 这里是一个列表,可能包含多条消息
        BaseMessage(
            role_name="Assistant",          # 回复者的名字
            role_type=RoleType.ASSISTANT,   # 角色是助手
            content="你好,这张图片描绘了一只可爱的卡通小动物...", # 助手的回复内容
            meta_dict={}                    # 元数据
        )
    ],
    terminated=False,                      # 会话是否结束?(False表示还可以继续聊)
    info={"usage": {"prompt_tokens": 120, "completion_tokens": 85, "total_tokens": 205}} # 附加信息,比如token消耗量
)

# 如何从Response对象里获取信息?
messages = response.msgs                # 获取Agent生成的消息列表 (通常只有一条)
is_terminated = response.terminated     # 获取会话是否终止的状态
additional_info = response.info         # 获取附加信息 (比如token统计)

# 打印出来看看
if messages:
    print("消息内容:", messages[0].content)
print("会话是否终止:", is_terminated)
print("附加信息:", additional_info)



`ChatAgentResponse`主要包含三部分:

*   `msgs`: 一个列表,包含了Agent生成的`BaseMessage`对象。通常情况下,调用一次`step`,这里面会有一条助手的回复消息。
*   `terminated`: 一个布尔值(True/False),表示当前的对话流程是否应该结束。比如Agent判断任务已完成,或者达到了某个终止条件。
*   `info`: 一个字典,包含一些额外信息。最常见的就是`usage`,记录了这次交互消耗了多少token(这通常关系到你的API调用成本)。

理解了`ChatAgentResponse`,你就能准确地拿到Agent的输出,判断对话状态,还能监控资源消耗。这对于开发复杂的、连续的Agent应用至关重要!

总结:你已经掌握了AI Agent的“沟通密码”!

恭喜你!🎉 通过这篇文章的阅读,你已经:

1.  理解了CAMEL AI消息系统的核心`BaseMessage`,以及它处理文本和图片的能力。
2.  学会了使用便捷方法创建用户和助手消息。
3.  知道了如何让CAMEL AI的消息与主流OpenAI API格式兼容,对接各种大模型。
4.  亲手实践了一个让AI Agent看图说话的完整例子!
5.  掌握了如何解析Agent的回复`ChatAgentResponse`,获取结果和状态。

这不仅仅是学会了几行代码,你掌握的是与未来智能体沟通的基础逻辑!这套消息机制,就是构建更复杂、更强大AI Agent的起点。

现在,轮到你了! 👇

*   你觉得CAMEL AI的消息机制设计得怎么样?简单吗?强大吗?
*   你最想用这个技术来构建一个什么样的AI Agent?帮P图?自动写报告?还是...?
*   在学习过程中遇到了什么困难?或者有什么更有趣的想法?

在评论区留下你的想法和问题吧!让我们一起交流,一起进步!

如果你觉得这篇文章对你有帮助,别忘了点赞👍、在看👀、转发↗️给更多需要的朋友!你的支持是我继续分享的动力!💖

 如果不会安装python,请看这一篇

零基础打造AI agent智能体!Windows从安装Python到调用顶级API,10分钟速成攻略!


#AI #人工智能 #Agent #CAMELAI #Python #编程 #AI绘画 #多模态 #教程 #大模型 #通义千问 #技术干货 #职场提升

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

相关文章:

  • linux专题3-----linux上链接远程mysql
  • 深入理解Python元组:从基础到高级应用
  • xss攻击
  • NDK开发:开发环境
  • 2025-04-05 吴恩达机器学习4——逻辑回归(1):基础入门
  • 华为高斯(GaussDB)数据库中 Range、List、Hash三种分区方式 的完整SQL示例及增删改查操作,并附上总结对比表格
  • Linux内核引导内存分配器原理
  • 金仓数据库KCM认证考试介绍【2025年4月更新】
  • PgVectore的使用
  • REASONING THOUGHT和REASONING分别是什么意思,有什么区别
  • C语言:字符串
  • Baklib企业CMS的核心要素是什么?
  • 贪心算法之最小生成树问题
  • Sentinel实战(五)、系统保护规则、限流后统一处理及sentinel持久化配置
  • 多GPU训练
  • C++_类和对象(上)
  • 【简单数论】(模运算,快速幂,乘法逆元,同余,exgcd,gcd,欧拉函数,质数,欧拉筛,埃式筛,调和级数枚举,约数,组合数)
  • 4.4日欧篮联,NBA全扫盘,雷霆 vs 火箭单关预测已出
  • 来聊聊C++中的vector
  • C++学习之线程
  • [Android安卓移动计算]:新建项目和配置环境步骤
  • 力扣DAY35 | 热100 | LRU缓存
  • 在windows环境下通过docker-compose脚本自动创建mysql和redis
  • SQL Server常见问题的分类解析(二)
  • 分治-归并排序-逆序对问题
  • 计算机视觉图像处理基础系列:滤波、边缘检测与形态学操作
  • 小迪安全110-tp框架,版本缺陷,不安全写法,路由访问,利用链
  • Android使用OpenGL和MediaCodec渲染视频
  • AI浪潮下,“内容创作平台”能否借势实现内容价值跃升?
  • Turtle图形化编程知识点汇总:让编程更有趣