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.pswp.cn/web/74671.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74671.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74671.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL介紹及使用

1. 安裝、啟動、配置 MySQL 1. 安裝 MySQL 更新軟件包索引 sudo apt update 安裝 MySQL 服務器 sudo apt install mysql-server 安裝過程中可能會提示你設置 root 用戶密碼。如果沒有提示,可以跳過,后續可以手動設置。 2. 配置 MySQL 運行安全腳本…

九、重學C++—類和函數

上一章節: 八、重學C—動態多態(運行期)-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/147004745?spm1001.2014.3001.5502 本章節代碼: cpp/cppClassAndFunc.cpp CuiQingCheng/cppstudy - 碼云 - 開源中國…

lua和C的交互

1.C調用lua例子 #include <iostream> #include <lua.hpp>int main() {//用于創建一個新的lua虛擬機lua_State* L luaL_newstate();luaL_openlibs(L);//打開標準庫/*if (luaL_dofile(L, "test.lua") ! LUA_OK) {std::cerr << "Lua error: &…

java高并發------守護線程Daemon Thread

文章目錄 1.概念2.生命周期與行為2. 應用場景3. 示例代碼4. 注意事項 1.概念 Daemon &#xff1a; 滴門 在Java中&#xff0c;線程分為兩類&#xff1a;用戶線程(User Thread)和守護線程(Daemon Thread)。 守護線程是后臺線程&#xff0c;主要服務于用戶線程&#xff0c;當所…

Docker存儲策略深度解析:臨時文件 vs 持久化存儲選型指南

Docker存儲策略深度解析&#xff1a;臨時文件 vs 持久化存儲選型指南 一、存儲類型全景對比二、臨時存儲適用場景與風險2.1 最佳使用案例2.2 風險警示 三、持久化存儲技術選型3.1 Volume核心優勢Volume管理命令&#xff1a; 3.2 Bind Mount適用邊界掛載模式對比&#xff1a; 四…

【Linux網絡#18】:深入理解select多路轉接:傳統I/O復用的基石

&#x1f4c3;個人主頁&#xff1a;island1314 &#x1f525;個人專欄&#xff1a;Linux—登神長階 目錄 一、前言&#xff1a;&#x1f525; I/O 多路轉接 為什么需要I/O多路轉接&#xff1f; 二、I/O 多路轉接之 select 1. 初識 select2. select 函數原型2.1 關于 fd_set 結…

高級:微服務架構面試題全攻略

一、引言 在現代軟件開發中&#xff0c;微服務架構被廣泛應用于構建復雜、可擴展的應用程序。面試官通過相關問題&#xff0c;考察候選人對微服務架構的理解、拆分原則的掌握、服務治理的能力以及API網關的運用等。本文將深入剖析微服務架構相關的面試題&#xff0c;結合實際開…

使用MQTTX軟件連接阿里云

使用MQTTX軟件連接阿里云 MQTTX軟件阿里云配置MQTTX軟件設置 MQTTX軟件 阿里云配置 ESP8266連接阿里云這篇文章里有詳細的創建過程&#xff0c;這里就不再重復了&#xff0c;需要的可以點擊了解一下。 MQTTX軟件設置 打開軟件之后&#xff0c;首先點擊添加進行創建。 在阿…

【HFP】藍牙Hands-Free Profile(HFP)核心技術解析

藍牙 Hands-Free Profile&#xff08;HFP&#xff09;作為車載通信和藍牙耳機的核心協議&#xff0c;定義了設備間語音交互的標準化流程&#xff0c;并持續推動著無線語音交互體驗的革新。自2002年首次納入藍牙核心規范以來&#xff0c;HFP歷經多次版本迭代&#xff08;最新為v…

輕量化大模型微調工具XTuner指令微調實戰(下篇)

接著上篇文章《輕量化大模型微調工具XTuner指令微調實戰&#xff08;上篇&#xff09;》來接著寫教程。 一、模型轉換 模型訓練后會自動保存成 PTH 模型&#xff08;例如 iter_500.pth&#xff09;&#xff0c;我們需要利用 xtuner convert pth_to_hf 將其轉換為 HuggingFace…

pyTorch框架使用CNN進行手寫數字識別

目錄 1.導包 2.torchvision數據處理的方法 3.下載加載手寫數字的訓練數據集 4.下載加載手寫數字的測試數據集 5. 將訓練數據與測試數據 轉換成dataloader 6.轉成迭代器取數據 7.創建模型 8. 把model拷到GPU上面去 9. 定義損失函數 10. 定義優化器 11. 定義訓練…

強化學習課程:stanford_cs234 學習筆記(3)introduction to RL

文章目錄 前言7 markov 實踐7.1 markov 過程再敘7.2 markov 獎勵過程 MRP&#xff08;markov reward process&#xff09;7.3 markov 價值函數與貝爾曼方程7.4 markov 決策過程MDP&#xff08;markov decision process&#xff09;的 狀態價值函數7.4.1 狀態價值函數7.4.2 狀態…

操作系統 4.5-文件使用磁盤的實現

通過文件進行磁盤操作入口 // 在fs/read_write.c中 int sys_write(int fd, const char* buf, int count) {struct file *file current->filp[fd];struct m_inode *inode file->inode;if (S_ISREG(inode->i_mode))return file_write(inode, file, buf, count); } 進程…

libreoffice-help-common` 的版本(`24.8.5`)與官方源要求的版本(`24.2.7`)不一致

出現此錯誤的原因主要是軟件包依賴沖突&#xff0c;具體分析如下&#xff1a; ### 主要原因 1. **軟件源版本不匹配&#xff08;國內和官方服務器版本有差距&#xff09; 系統中可能啟用了第三方軟件源&#xff08;如 PPA 或 backports 源&#xff09;&#xff0c;導致 lib…

使用Geotools中的原始方法來操作PostGIS空間數據庫

目錄 前言 一、原生PostGIS連接介紹 1、連接參數說明 2、創建DataStore 二、工程實戰 1、Maven Pom.xml定義 2、空間數據庫表 3、讀取空間表的數據 三、總結 前言 在當今數字化與信息化飛速發展的時代&#xff0c;空間數據的處理與分析已成為眾多領域不可或缺的一環。從…

訊飛語音合成(流式版)語音專業版高質量的分析

一、引言 在現代的 Web 應用開發中&#xff0c;語音合成技術為用戶提供了更加便捷和人性化的交互體驗。訊飛語音合成&#xff08;流式版&#xff09;以其高效、穩定的性能&#xff0c;成為了眾多開發者的首選。本文將詳細介紹在 Home.vue 文件中實現訊飛語音合成&#xff08;流…

走進未來的交互世界:下一代HMI設計趨勢解析

在科技日新月異的今天&#xff0c;人機交互界面&#xff08;HMI&#xff09;設計正以前所未有的速度發展&#xff0c;不斷引領著未來的交互世界。從簡單的按鈕和圖標&#xff0c;到如今的智能助手和虛擬現實&#xff0c;HMI設計不僅改變了我們的生活方式&#xff0c;還深刻影響…

洛谷題單3-P1217 [USACO1.5] 回文質數 Prime Palindromes-python-流程圖重構

題目描述 因為 151 151 151 既是一個質數又是一個回文數&#xff08;從左到右和從右到左是看一樣的&#xff09;&#xff0c;所以 151 151 151 是回文質數。 寫一個程序來找出范圍 [ a , b ] ( 5 ≤ a < b ≤ 100 , 000 , 000 ) [a,b] (5 \le a < b \le 100,000,000…

學習筆記,DbContext context 對象是保存了所有用戶對象嗎

DbContext 并不會將所有用戶對象保存在內存中&#xff1a; DbContext 是 Entity Framework Core (EF Core) 的數據庫上下文&#xff0c;它是一個數據庫訪問的抽象層它實際上是與數據庫的一個連接會話&#xff0c;而不是數據的內存緩存當您通過 _context.Users 查詢數據時&…

本地命令行啟動服務并連接MySQL8

啟動服務命令 net start mysql8 關閉服務命令 net stop mysql8 本地連接MySQL數據庫mysql -u [用戶名] -p[密碼] 這里&#xff0c;我遇到了個問題 —— 啟動、關閉服務時&#xff0c;顯示 “發生系統錯誤 5。拒絕訪問。 ” 解法1&#xff1a;在 Windows 上以管理員身份打開…