Agent 智能体开发框架选型对比
haoteby 2025-05-11 15:35 11 浏览
在人工智能领域,智能体(Agents)正处于蓬勃发展的阶段,众多新框架不断涌现。现代 AI 智能体逐渐克服了初期的不稳定,迅速取代传统技术成为开发首选。然而,开发人员在构建智能体时,面临着诸多决策,不仅要确定使用的模型、应用场景和技术架构,还要精心挑选合适的开发框架。是选择较为早期的 LangGraph,还是新兴的 LlamaIndex Workflows?亦或是走传统路线,自行编写全部代码?本文将通过对多种主流框架的实践对比,为您提供一份全面的选型指南,帮助您做出更明智的决策。
一、智能体框架
本次测试所采用的智能体具备多项功能,包括执行函数调用(function calling)、运用多种工具或技能、与外部资源建立连接,以及实现状态或记忆的共享。其核心能力涵盖基于知识库进行问题解答、针对 LLM 应用程序的数据进行问题解答以及对获取的数据进行更高层次的趋势和模式分析。为实现这些目标,智能体需要掌握结合产品文档的 RAG、在相关数据库上生成 SQL 语句以及数据分析等三项基本技能。智能体的用户界面借助 gradio 搭建,整体以聊天机器人的形式构建。
(一)Code - Based Agent(不使用智能体框架)
- 纯代码架构
基于纯代码构建的智能体,核心是由 OpenAI 提供支持的技能路由器,通过函数调用来确定使用的技能。技能执行完毕后,控制权返回技能路由器,以便调用其他技能或直接回应用户。智能体会持续记录用户消息和自身响应,并在每次调用时传递完整列表给技能路由器,以保留上下文。各项技能定义在独立类中,存储于 SkillMap,技能路由器仅与 SkillMap 交互,添加新技能只需编写新类并加入 SkillMap,方便实现新技能的扩展。
- 使用纯代码智能体面临的挑战
技能路由器的系统提示词设计困难,容易出现模型不按预期执行任务的情况,需要多次调试。同时,处理不同步骤产生的多种输出格式复杂,因未使用结构化输出,需为技能路由器和各项技能中模型调用准备多种应对策略。
- 纯代码智能体的优点
这种方法提供了扎实基础和学习途径,能让人在不依赖框架教程的情况下理解智能体运作原理。虽然引导模型行为有难度,但代码结构简洁,在某些场景下是合理选择。
(二)LangGraph
- LangGraph 架构
LangGraph 智能体与基于代码的智能体表面相似,但底层代码差异大。它使用 “路由器” 概念,通过代码函数调用 OpenAI 并依据响应推进步骤,程序在不同技能间的切换控制机制不同。其定义的图包含初始化 OpenAI 调用的 “agent” 节点和工具处理步骤的 “tools” 节点,内置 ToolNode 对象能根据 ChatMessage 响应触发工具,操作完成后返回 “agent” 节点。“state” 负责保存与 OpenAI 的交互消息和响应列表。
- 使用 LangGraph 面临的挑战
使用 LangGraph 构建智能体时,必须借助 Langchain 对象确保流程顺畅。主要挑战包括函数调用的 validation 错误,因 ToolNode 对函数参数配置要求,导致技能代码需大规模重构;调试困难,错误信息混乱不清,框架抽象概念使追踪和查看变量复杂,如消息在 state [“messages”] 中的自动提取过程影响对消息内容的把握。
- LangGraph 的优点
LangGraph 最大优势是易用性,图结构代码简洁易懂,对复杂节点逻辑场景能提供清晰图视图,便于把握智能体连接方式,还可直接转换以 LangChain 构建的现有应用程序。
- 经验之谈
仅使用 LangGraph 框架相关功能时运行流畅,但尝试跳出框架则可能面临复杂调试。
(三)LlamaIndex Workflows
- Workflows 架构
Workflows 旨在简化可循环智能体构建,强调异步执行能力,采用事件作为连接逻辑方式,智能体逻辑封装在 “步骤” 中,事件负责在不同步骤间传递信息。其架构配置状态信息并绑定技能到 LLM 对象,还定义了 “prepare_agent” 步骤,将用户输入转换为 ChatMessage 并存储到工作流记忆存储,避免重复添加用户信息。路由代码和工具调用处理代码实现方式更接近纯代码智能体,维护条件路由逻辑,且技能无需修改即可应用于 Workflows,简化了开发工作。
- 使用 Workflows 面临的挑战
调试同步执行困难,虽异步执行对在线智能体更优,但将其改为同步执行需重新定义 Workflow 类内部方法。此外,也出现了类似 LangGraph 的 Pydantic Validation Errors 问题,不过相对容易解决,需更规范地创建 LlamaIndex FunctionTool 对象。
- Workflows 的优点
与 LangGraph 相比,使用 Workflows 构建智能体更轻松,因其未提供内置功能,开发者需自行编写路由逻辑和工具操作代码,与纯代码智能体相似。基于事件的架构有助于管理复杂、异步触发且多事件的系统步骤,具有轻量级特性,结构限制少,基于事件的架构为函数调用提供有效替代方案,适用于复杂异步应用场景。
使用两个自定义事件在智能体中的各个步骤之间移动
二、框架比较与分析
- 无框架方法
实施最为简单直接,开发者自行定义抽象层(如 SkillMap 对象),管理不同类型和对象相对容易。但代码可读性和易用性依赖开发者个人,缺乏智能体结构约束,随着智能体复杂性增加可能难以维护。
- LangGraph
提供完整的智能体结构规范,智能体定义清晰,适合团队协作开发,对智能体结构新手有帮助。然而,框架限制较多,若不完全认同其理念,可能面临较多调试挑战,代码简洁但调试成本可能较高。
- LlamaIndex Workflows
采用事件驱动架构,在框架约束和开发自由度之间取得平衡,对框架依赖较少。其固有的异步特性在某些项目中极具价值,且基于事件的架构有助于管理复杂系统步骤。但异步特性可能增加某些场景的复杂度,如调试难度。
三、框架选择关键问题
- 项目集成情况
若项目已深度集成 LlamaIndex 或 LangChain,优先考虑与之紧密集成的框架,如 LangGraph 或 LlamaIndex Workflows,其额外优势可能使其成为合适选择。
- 对智能体架构的熟悉程度
若开发者对智能体常见架构不熟悉,希望有框架指导构建结构,LangGraph 是较好选择;若希望在一定框架基础上有更多自由度,Workflows 可能更适合。
- 参考样例情况
框架通常有大量教程和实例供参考,而纯代码构建智能体的参考实例相对较少。若构建智能体需要参考样例,框架会提供更多便利。
四、小结
选择智能体框架只是影响生成式人工智能系统在生产环境中表现的众多决策之一。在构建智能体时,除了框架选型,建立强大的安全保障和对大语言模型(LLM)的监控同样必要。同时,面对新智能体框架、研究成果和模型对传统技术的不断颠覆,开发者需保持灵活应对的态度,持续学习和适应新变化,以构建出高效、智能且可靠的智能体应用。
文中代码:
https://github.com/Arize-ai/phoenix/tree/main/examples/agent_framework_comparison
原文链接:
https://towardsdatascience.com/choosing-between-llm-agent-frameworks-69019493b259
参考链接:
https://mp.weixin.qq.com/s/0jB157hXY2AwIcji0jywBQ
本文,完。觉得本篇文章不错的,记得随手点个赞、收藏和转发三连,感谢感谢~如果想第一时间收到推送,请记得关注我们~
相关推荐
- 网站seo该怎么优化
-
一、网站定位在建设一个网站之前,我们首先要做的就是一个网站清晰的定位,会带来转化率相对较高的客户群体,我们建站的目的就是为了营销,只有集中来做某一件事,才会更好的展现我们的网站。在做SEO优化的同时...
- 3个小技巧教你如何做好SEO优化
-
想半路出家做SEO?可是,怎么才做的好呢?关于SEO专业技术弄懂搜索引擎原理,咱们做搜索引擎排名的首先就是要了解搜索引擎的工作原理,对SEO优化有更深入了解之后再来做SEO,你就能从搜索引擎的视点...
- SEO指令分享:filetype指令
-
filetype用于搜索特定的文件格式。百度和谷歌都支持filetype指令。比如搜索filetype:pdf今日头条返回的就是包含今日头条这个关键词的所有pdf文件,如下图:百度只支持:pdf...
- 网站seo优化技巧大全
-
SEO在搜索引擎中对检索结果进行排序,看谁最初是在用户的第一眼中看到的。实际上,这些排名都是通过引擎的内部算法来实现的。例如,百度算法很有名。那么,对百度SEO的优化有哪些小技巧?下面小编就会说下针对...
- 小技巧#10 某些高级的搜索技巧
-
由于某些原因,我的实验场所仅限百度。1.关键词+空格严格说来这个不能算高级,但关键词之间打空格的办法确实好用。我习惯用右手大拇指外侧敲击空格键,这个习惯在打英文报告时尤其频繁。2.site:(请不要忽...
- MYSQL数据库权限与安全
-
权限与安全数据库的权限和数据库的安全是息息相关的,不当的权限设置可能会导致各种各样的安全隐患,操作系统的某些设置也会对MySQL的安全造成影响。1、权限系统的工作原理...
- WPF样式
-
UniformGrid容器<UniformGridColumns="3"Rows="3"><Button/>...
- MySQL学到什么程度?才有可以在简历上写精通
-
前言如今互联网行业用的最多就是MySQL,然而对于高级Web面试者,尤其对于寻找30k下工作的求职者,很多MySQL相关知识点基本都会涉及,如果面试中,你的相关知识答的模糊和不切要点,基...
- jquery的事件名称和命名空间的方法
-
我们先看一些代码:当然,我们也可以用bind进行事件绑定。我们看到上面的代码,我们可以在事件后面,以点号,加我们的名字,就是事件命名空间。所谓事件命名空间,就是事件类型后面以点语法附加一个别名,以便引...
- c#,委托与事件,发布订阅模型,观察者模式
-
什么是事件?事件(Event)基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些提示信息,如系统生成的通知。应用程序需要在事件发生时响应事件。通过委托使用事件事件在类中声明且生成,且通过...
- 前端分享-原生Popover已经支持
-
传统网页弹窗开发需要自己处理z-index层级冲突、编写点击外部关闭的逻辑、管理多个弹窗的堆叠顺序。核心优势对比:...
- Axure 8.0 综合帖——新增细节内容
-
一、钢笔工具与PS或者AI中的钢笔工具一样的用法。同样有手柄和锚点,如果终点和起点没有接合在一起,只要双击鼠标左键即可完成绘画。画出来的是矢量图,可以理解为新的元件。不建议通过这个工具来画ICON图等...
- PostgreSQL技术内幕28:触发器实现原理
-
0.简介在PostgreSQL(简称PG)数据库中,触发器(Trigger)能够在特定的数据库数据变化事件(如插入、更新、删除等)或数据库事件(DDL)发生时自动执行预定义的操作。触发器的实现原理涉及...
- UWP开发入门(十七)--判断设备类型及响应VirtualKey
-
蜀黍我做的工作跟IM软件有关,UWP同时会跑在电脑和手机上。电脑和手机的使用习惯不尽一致,通常我倾向于根据窗口尺寸来进行布局的变化,但是特定的操作习惯是依赖于设备类型,而不是屏幕尺寸的,比如聊天窗口的...