在當今的數據驅動世界中,組織依靠數據分析師來解釋複雜的數據集,發現可行的見解和推動決策。但是,如果我們可以使用AI提高此過程的效率和可擴展性怎麼辦?輸入數據分析代理,以自動化分析任務,執行代碼並自適應響應數據查詢。 Langgraph,Crewai和Autogen是用於建造AI代理的三個流行框架。我們將在本文中使用並比較這三個,以構建簡單的數據分析代理。
數據分析代理將首先從用戶中獲取查詢並生成代碼以讀取文件並分析文件中的數據。然後,生成的代碼將使用Python Repl工具執行。代碼的結果發送回代理。然後,代理分析從代碼執行工具中收到的結果,並回復了用戶查詢。 LLM可以生成任意代碼,因此我們必須在本地環境中仔細地執行LLM生成的代碼。
如果您是這個主題的新手或希望掌握您對Langgraph的了解,我建議這篇文章:Langgraph是什麼?
在構建代理之前,請確保您擁有必要的API鍵。
加載.ENV文件,並帶有所需的API鍵。
來自dotenv import load_dotenv load_dotenv(./ env)
需要關鍵庫
Langchain - 0.3.7
蘭鏈實驗 - 0.3.3
Langgraph - 0.2.52
CREWAI - 0.80.0
Crewai-Tools - 0.14.0
Autogen-Agentchat - 0.2.38
現在我們都設定了,讓我們開始建立代理商。
導入大熊貓作為pd 從ipython.display導入圖像,顯示 從輸入導入列表,文字,可選,打字,註釋 來自langchain_core.tools導入工具 來自langchain_core.messages導入工具 來自langchain_exeperiment.utilities導入pythonrepl 來自langchain_openai進口chatopenai 摘自langgraph.graph Import stategraph,開始,結束 來自langgraph.graph.message導入add_messages 來自langgraph.prebuilt導入工具節,tools_condition 來自langgraph.checkpoint.memory Import MemorySaver
班級狀態(鍵入): 消息:註釋[list,add_messages] graph_builder = stategraph(狀態)
llm = chatopenai(型號=“ gpt-4o-mini”,溫度= 0.1) @工具 def python_repl(代碼:註釋[str,“ fileName” fileName旨在讀取“來自”]): “”“使用它執行從文件中讀取Python代碼。如果要查看值的輸出, 確保您正確閱讀了代碼 您應該用``打印(...)'打印出來。用戶可以看到這一點。”“” 嘗試: 結果= pythonrepl()。運行(代碼) 打印(“結果代碼執行:”,結果) 除了baseexception作為e: 返回f“無法執行。錯誤:{repr(e)}” 返回f“執行:\ n``python \ n {code} \ n````` llm_with_tools = llm.bind_tools([python_repl])
DEF聊天機器人(狀態:狀態): 返回{“消息”:[llm_with_tools.invoke(state [“ message”])]}} graph_builder.add_node(“代理”,聊天機器人)
code_execution = toolnode(工具= [python_repl]) graph_builder.add_node(“工具”,code_execution)
如果LLM返回工具調用,我們需要將其路由到工具節點。否則,我們可以結束它。讓我們定義一個路由函數。然後,我們可以添加其他邊緣。
DEF ROUTE_TOOLS(狀態:狀態): ”“” 如果最後一條消息,則在條件_EDDED中路由到工具節 有工具調用。否則,路線到達末端。 ”“” 如果IsInstance(狀態,列表): ai_message = state [-1] elif消息:= state.get(“消息”,[]): ai_message =消息[-1] 別的: 提高ValueError(f“在輸入狀態中未找到to tool_edge:{state}”) 如果hasattr(ai_message,“ tool_calls”)和len(ai_message.tool_calls)> 0: 返回“工具” 返回結束 graph_builder.add_conditional_edges( “代理人”, Route_tools, {“工具”:“工具”,end:end}, ) graph_builder.add_edge(“工具”,“代理”)
內存= MemorySaver() graph = graph_builder.compile(checkpointer =內存)
graph = graph_builder.compile(checkpointer =內存) display(圖像(graph.get_graph()。draw_mermaid_png()))
config = {“ configurable”:{“ thread_id”:“ 1”}} def stream_graph_updates(user_input:str): 事件= graph.stream( {“消息”:[(“用戶”,user_input)]},config,stream_mode =“ values” ) 對於活動中的事件: 事件[“消息”] [ - 1] .pretty_print() 而真: user_input =輸入(“用戶:”) 如果在[“退出”,“退出”,“ q”]中使用USER_INPUT.LOWER(): 打印(“再見!”) 休息 stream_graph_updates(user_input)
循環運行時,我們首先提供文件的路徑,然後根據數據提出任何問題。
輸出將如下:
由於我們包含了內存,因此我們可以在聊天中的數據集上提出任何問題。代理將生成所需的代碼,並將執行代碼。代碼執行結果將發送回LLM。一個示例如下所示:
另請閱讀:如何使用langgraph創建個性化的新聞摘要代理
現在,我們將使用CREWAI進行數據分析任務。
來自Crewai進口代理,任務,機組人員 來自Crewai.Tools導入工具 來自crewai_tools import dimentoreReadTool,fileReadTool 來自langchain_exeperiment.utilities導入pythonrepl
coding_agent =代理( 角色=“ Python開發人員”, 目標=“工藝精心設計和經過思考的代碼來回答給定的問題”, BackStory =“”“您是一位高級Python開發人員,在軟件及其最佳實踐方面擁有豐富的經驗。 您有編寫乾淨,高效和可擴展代碼的專業知識。 ”“”, llm ='gpt-4o', human_input = true, ) coding_task =任務( 描述=“”“寫代碼以回答給定的問題 將代碼輸出分配給“結果”變量 問題:{問題}, ”“”, Excection_output =“代碼要獲得問題的結果。代碼的輸出應分配給'結果'變量', 代理= coding_agent )
@Tool(“ repl”) DEF REPL(代碼:Str) - > str: ”“”“對執行python代碼有用” 返回pythonrepl()。運行(命令=代碼)
executing_agent = agent( 角色=“ python executor”, 目標=“運行接收的代碼以回答給定的問題”, BackStory =“”“您是一名Python開發人員,在軟件及其最佳實踐方面擁有豐富的經驗。 “您可以有效地執行代碼,調試和優化Python解決方案。”“,”, llm ='gpt-4o-mini', human_input = true, 工具= [repl,filereadtool()] ) executing_task =任務( description =“”“執行代碼以回答給定的問題 將代碼輸出分配給“結果”變量 問題:{問題}, ”“”, Expectig_output ='問題的結果', 代理= executing_agent )
分析_CREW = CREW( 代理= [coding_agent,recuting_agent], tasks = [coding_task,recuting_task], 冗長= true )
inputs = {'問題':“”“讀取此文件並返回列名並找到平均年齡 “/home/santhosh/projects/code/langgraph/gym_members_exercise_tracking.csv”“,} 結果= Analysis_crew.kickoff(輸入=輸入) 打印(result.raw)
這是輸出的外觀:
另請閱讀:在沒有CREWAI的無代碼的情況下,即時建立LLM代理商
來自自動進口的對話 從Autogen。編碼導入LocalCommandlineCodeexeexecutor,DockerCommandlineCodeeXecutor
opecutor = localcommandlinecodeexecutor( 超時= 10,每個代碼執行的#及時在幾秒鐘內執行。 work_dir ='。/data',#使用目錄存儲代碼文件。 ) code_executor_agent = conversableAgent( “ code_executor_agent”, llm_config = false, code_execution_config = {“ executor”:executor}, human_input_mode =“始終”, )
從https://microsoft.github.io/autogen/0.2/docs/tutorial/code-executors/獲取Code_writer系統消息。
code_writer_agent = conversableAgent( “ code_writer_agent”, system_message = code_writer_system_message, llm_config = {“ config_list”:[{“ model”:“ gpt-4o-mini”}]},}, code_execution_config = false, )
問題=“”“”在路徑'/home/santhosh/projects/code/langgraph/gym_members_exercise_tracking.csv'上讀取文件 並打印人民的平均年齡。”“” chat_result = code_executor_agent.initiate_chat( code_writer_agent, 消息=問題, )
聊天開始後,我們還可以在上述數據集上提出任何後續問題。如果代碼遇到任何錯誤,我們可以要求修改代碼。如果代碼很好,我們只需按“ Enter”繼續執行代碼。
有關chat_result.chat_history中的消息: 如果消息['角色'] =='助手': 如果“ exitCode”未在消息['content']中: 打印(消息['content']) 打印('\ n') 別的: 如果在消息['content']中的“終止”: 打印(消息['content']) 列印("----------------------------------------")
這是結果:
另請閱讀:使用Autogen建立多代理聊天機器人的動手指南
現在,您已經學會了使用所有3個框架來構建數據分析代理,讓我們探索它們之間的差異,在代碼執行方面:
框架 | 關鍵功能 | 優勢 | 最適合 |
---|---|---|---|
Langgraph | - 基於圖的結構(節點代表代理/工具,邊緣定義相互作用) - 與PythonRepl的無縫集成 |
- 高度靈活地創建結構化的多步驟工作流程 - 安全有效的代碼執行,並跨任務保存內存 |
需要清晰,可自定義的工作流程的複雜,流程驅動的分析任務 |
CREWAI | - 以協作為中心 - 與預定義的角色並行工作的多個代理 - 與Langchain工具集成 |
- 面向任務的設計 - 非常適合團隊合作和角色專業化 - 使用PythonRepl支持安全可靠的代碼執行 |
協作數據分析,代碼審核設置,任務分解和基於角色的執行 |
自動基因 | - 動態和迭代代碼執行 - 可說明互動執行和調試的代理 - 內置聊天功能 |
- 自適應和對話工作流程 - 專注於動態互動和調試 - 快速原型和故障排除的理想 |
快速原型製作,故障排除以及任務和需求經常發展的環境 |
在本文中,我們演示瞭如何使用Langgraph,Crewai和Autogen構建數據分析代理。這些框架使代理能夠生成,執行和分析代碼以有效地解決數據查詢。通過使重複任務自動化,這些工具使數據分析更快,更可擴展。模塊化設計允許根據特定需求進行自定義,使其對數據專業人員很有價值。這些代理展示了AI的潛力簡化工作流並輕鬆從數據中提取見解。
要了解有關AI代理商的更多信息,請查看我們的獨家代理AI先驅計劃!
答:這些框架可自動化代碼生成和執行,從而更快地數據處理和洞察力。他們簡化了工作流程,減少手動努力並提高數據驅動的任務的生產力。
Q2。這些數據分析代理可以處理多個數據集或複雜的查詢嗎?答:是的,可以定制代理來通過集成適當的工具並調整其工作流程來處理各種數據集和復雜的分析查詢。
Q3。執行LLM生成的代碼時應採取哪些預防措施?A. LLM生成的代碼可能包括錯誤或不安全的操作。始終在受控環境中驗證代碼,以確保執行前的準確性和安全性。
Q4。內存集成如何增強這些數據分析代理?答:內存集成使代理可以保留過去相互作用的上下文,從而在復雜或多步查詢中實現自適應響應和連續性。
Q5。這些數據分析代理可以自動化哪些類型的任務?答:這些代理可以自動化任務,例如讀取文件,執行數據清潔,生成摘要,執行統計分析並回答有關數據的詢問。
以上是Langchain與Crewai vs Autogen建立數據分析代理的詳細內容。更多資訊請關注PHP中文網其他相關文章!