在当今的数据驱动世界中,组织依靠数据分析师来解释复杂的数据集,发现可行的见解和推动决策。但是,如果我们可以使用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中文网其他相关文章!