多Agent的AI應用一直是個有意思的研究方向,之前試過用LangGraph構建一組Agent的執行流程,用于自動產出研究報告。但是流程都是針對任務固化的,如果要執行別的任務就需要修改代碼。CrewAI相對來說自動化程度就要高一些,你只需要定義好Agent和Task,剩下的就交給CrewAI。CrewAI(https://github.com/joaomdmoura/crewAI)專注于協調角色扮演的自主AIAgent。通過使用LLM作為協調器促進協作,使得多個Agent像一支默契十足的團隊一樣工作,每個Agent扮演不同的角色,共同完成一項大的任務。Agent被視為團隊的成員,具有特定的技能和特定的工作要做,執行任務、做出決策并與其他Agent進行通信。此外,CrewAI還支持LangChain引入的可擴展功能,包括工具集成和支持開源大語言模型。下面我們介紹一下CrewAI的核心概念,只有稍微懂一點Python的知識,就可以在本地運行多Agent的AI應用。順便試一下百度最近免費的大模型服務。
核心概念包括Agent、Task、Tool、Process、Crew、Collaboration、Memory。對大部分目標來說,我們需要定義的是Agent、Task。有點類似成立了一個團隊,第一要有隊員,第二設置好要完成的任務,剩下的就交給CrewAI這個職業經理人管理了,我們作為老板就等收結果就好了。Agent:可以視為團隊的一員,擁有特定技能,并承擔特定工作。Agent可以擔任不同的角色,例如“研究員”、“作家”或“客戶支持”,每個角色都為團隊的總體目標做出貢獻。有幾個主要的屬性。
agent = Agent( role='數據分析師', goal='分析總結出可進行下一步行動的建議', backstory='''你是一家大公司的數據分析師。您負責分析數據并提供公司下一步行動的建議。 您當前正在進行一個項目,以分析我們營銷活動的表現。''', tools=[my_tool1,my_tool2] #可選,默認為空列表)
Role,定義Agent在團隊中的職能角色,決定了Agent最適合執行的任務類型。
Goal,想要實現的個體目標,指導Agent的決策過程。
Backstory,為Agent的角色和目標提供背景,豐富互動和驅動協作。
Tool,工具是可用于執行任務的一組能力或功能,使得Agent能和外部環境交互,比如搜索網絡信息,執行特定的計算等。雖然不是必須的,但使用工具能給Agent提供更多的可能性。
Task:由Agent完成的特定任務。任務提供執行所需的所有詳細信息,例如描述、負責的Agent、所需的工具、指定期望輸出等,從而促進各種行動的復雜性。任務可以是協作的,需要多個Agent一起工作。這是通過任務屬性進行管理并由 Crew 流程進行編排,從而增強團隊合作和效率。Task是使用時最重要的概念,是驅動Agent執行和協作的動力。因此CrewAI也提供了多種任務的定義形式,支持異步執行、任務依賴關系、任務回調等。
task = Task( description='查找并總結最新的AI新聞', expected_output='輸出前5大最重要AI新聞的摘要', agent=research_agent, tools=[search_tool])Tool:工具為Agent提供了多種功能,從網絡搜索和數據分析到協作和在同事之間委派任務。CrewAI是基于LangChain框架實現的,也繼承了LangChain的Tool實現方式,這就意味著我們可以自定義工具。除此之外,CrewAI也提供了一套額外的工具包,有很多,這里列舉幾個:
YoutubeVideoSearchTool:RAG 工具旨在在 YouTube 視頻中進行搜索,非常適合視頻數據提取。
ScrapeWebsiteTool:方便抓取整個網站,非常適合全面的數據收集。
GithubSearchTool:用于在 GitHub 存儲庫內進行搜索的 RAG 工具,可用于代碼和文檔搜索。
CodeDocsSearchTool:一款針對搜索代碼文檔和相關技術文檔而優化的 RAG 工具。Process:流程協調Agent執行任務,類似于人類團隊中的項目管理。這些流程確保任務按照預定義的策略有效地分配和執行。主要有兩種流程,順序和分層,默認是順序執行。
順序,按順序執行任務,一個任務的輸出作為下一個任務的背景。
分層,模擬企業層級結構,自動創建經理Agent,需要為經理Agent指定manager_llm(一個LLM的實例)。此經理Agent負責監督任務執行,包括規劃、委派和驗證。任務不是編程分配的,經理Agent根據其他Agent的能力分配任務,審查輸出并評估任務完成情況。這個就會比較靈活,也有點像AutoGen。
共識(開發中),在Agent之間引入了一種民主的任務管理方法,在任務執行時進行協作決策,從而不需要經理Agent。
Crew:相當于一個團隊,定義有哪些Agent、Task,以及以什么樣的流程執行。團隊組建完畢,就用kickoff()方法啟動工作流程。
Collaboration:這是個基礎概念,并沒有可以實例化的對象。這個是CrewAI最主要的核心能力,對于我們來說,定義Agent、定義Task并不是什么難事,并且這肯定是使用者應該輸入的。但讓Agent協作完成目標就是比較麻煩了,當然你可以自己去編寫流程,智能化自動化才是更優方案。
Memory:CrewAI引入了復雜的記憶系統,旨在增強人工智能代理的能力。包括短期記憶、長期記憶、實體記憶和新識別的情境記憶,每個記憶都有一個獨特的目的,幫助Agent記憶、推理并從過去的交互中學習。默認情況下,記憶系統處于禁用狀態,可以通過memory=True開啟,這個需要Embedding模型的支持。
實例自從Deepseek的大模型把價格打下來之后,各家卷價格也是相當拼了,百度直接免費了幾個大模型的調用,剛好給大家試試效果。注冊百度智能云賬號后,進入千帆大模型平臺-》模型服務-〉應用接入,就可以創建一個用來調用API的Access key 和 Secret key。
下面創一個自動寫技術博客的crew,看看效果怎樣創建一個Project目錄,用pip安裝需要的python包
pip install crewai qianfan接下來在python文件中創建百度千帆的LangChain對象
import osfrom langchain_community.chat_models.baidu_qianfan_endpoint import QianfanChatEndpoint
os.environ['QIANFAN_AK'] = '上面創建應用Access key'os.environ['QIANFAN_SK'] = '上面創建應用Secret key'
baidu_chat = QianfanChatEndpoint( model='ERNIE-SPEED-8K', verbose=True)要寫技術博客,少不了要上網搜索資料,定義一個搜索工具Tool,這里換成LangChain的Tools是可以的,只不過輸入輸出可能要做一些特殊處理
from crewai_tools import SerperDevTool
os.environ['SERPER_API_KEY'] = 'Your Key' # serper.dev API key
search_tool = SerperDevTool()接下來定義Agent和Task,把Agent的llm設置成baidu_chat
researcher = Agent( role='高級研究分析師', goal='揭示人工智能和數據科學的前沿發展', backstory='''你在一家領先的科技智庫工作。您的專業技能在于識別新興趨勢。 你有分析復雜數據和提出可行見解的訣竅。''', verbose=True, allow_delegation=False, tools=[search_tool], llm=baidu_chat)
writer = Agent( role='技術內容策略師', goal='創造關于技術進步的引人注目的內容', backstory='''你是一位著名的內容策略師,以其富有洞察力和引人入勝的文章而聞名。 你將復雜的概念轉化為引人入勝的敘述。''', verbose=True, allow_delegation=True, llm=baidu_chat)
task1 = Task( description='''在2024年對人工智能的最新進展進行全面分析。 確定關鍵趨勢、突破性技術和潛在的行業影響。''', expected_output='要點中的完整分析報告', agent=researcher)
task2 = Task( description='''利用所提供的見解,開發一個引人入勝的博客 文章強調了人工智能的最重大進步。 你的帖子應該內容豐富,易于訪問,迎合精通技術的受眾。 讓它聽起來很酷,避免使用復雜的單詞,這樣聽起來就不像人工智能。''', expected_output='至少4段的完整博客文章', agent=writer)
crew = Crew( agents=[researcher, writer], tasks=[task1, task2], verbose=2,)
result = crew.kickoff()Crew的verbose設置了打印日志的級別,我們看看輸出的效果
只能說一般吧,如果要解決某一專業的問題,我覺得寫技術博客也需要專業,還需要不少優化的,定制化Prompt、執行流程等,但實際效果還不得而知,但這也是大多數AI應用的現狀。