百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Agent 智能体开发框架选型对比

haoteby 2025-05-11 15:35 53 浏览

在人工智能领域,智能体(Agents)正处于蓬勃发展的阶段,众多新框架不断涌现。现代 AI 智能体逐渐克服了初期的不稳定,迅速取代传统技术成为开发首选。然而,开发人员在构建智能体时,面临着诸多决策,不仅要确定使用的模型、应用场景和技术架构,还要精心挑选合适的开发框架。是选择较为早期的 LangGraph,还是新兴的 LlamaIndex Workflows?亦或是走传统路线,自行编写全部代码?本文将通过对多种主流框架的实践对比,为您提供一份全面的选型指南,帮助您做出更明智的决策。

一、智能体框架

本次测试所采用的智能体具备多项功能,包括执行函数调用(function calling)、运用多种工具或技能、与外部资源建立连接,以及实现状态或记忆的共享。其核心能力涵盖基于知识库进行问题解答、针对 LLM 应用程序的数据进行问题解答以及对获取的数据进行更高层次的趋势和模式分析。为实现这些目标,智能体需要掌握结合产品文档的 RAG、在相关数据库上生成 SQL 语句以及数据分析等三项基本技能。智能体的用户界面借助 gradio 搭建,整体以聊天机器人的形式构建。

(一)Code - Based Agent(不使用智能体框架)

  1. 纯代码架构

基于纯代码构建的智能体,核心是由 OpenAI 提供支持的技能路由器,通过函数调用来确定使用的技能。技能执行完毕后,控制权返回技能路由器,以便调用其他技能或直接回应用户。智能体会持续记录用户消息和自身响应,并在每次调用时传递完整列表给技能路由器,以保留上下文。各项技能定义在独立类中,存储于 SkillMap,技能路由器仅与 SkillMap 交互,添加新技能只需编写新类并加入 SkillMap,方便实现新技能的扩展。

  1. 使用纯代码智能体面临的挑战

技能路由器的系统提示词设计困难,容易出现模型不按预期执行任务的情况,需要多次调试。同时,处理不同步骤产生的多种输出格式复杂,因未使用结构化输出,需为技能路由器和各项技能中模型调用准备多种应对策略。

  1. 纯代码智能体的优点

这种方法提供了扎实基础和学习途径,能让人在不依赖框架教程的情况下理解智能体运作原理。虽然引导模型行为有难度,但代码结构简洁,在某些场景下是合理选择。

(二)LangGraph

  1. LangGraph 架构

LangGraph 智能体与基于代码的智能体表面相似,但底层代码差异大。它使用 “路由器” 概念,通过代码函数调用 OpenAI 并依据响应推进步骤,程序在不同技能间的切换控制机制不同。其定义的图包含初始化 OpenAI 调用的 “agent” 节点和工具处理步骤的 “tools” 节点,内置 ToolNode 对象能根据 ChatMessage 响应触发工具,操作完成后返回 “agent” 节点。“state” 负责保存与 OpenAI 的交互消息和响应列表。

  1. 使用 LangGraph 面临的挑战

使用 LangGraph 构建智能体时,必须借助 Langchain 对象确保流程顺畅。主要挑战包括函数调用的 validation 错误,因 ToolNode 对函数参数配置要求,导致技能代码需大规模重构;调试困难,错误信息混乱不清,框架抽象概念使追踪和查看变量复杂,如消息在 state [“messages”] 中的自动提取过程影响对消息内容的把握。

  1. LangGraph 的优点

LangGraph 最大优势是易用性,图结构代码简洁易懂,对复杂节点逻辑场景能提供清晰图视图,便于把握智能体连接方式,还可直接转换以 LangChain 构建的现有应用程序。

  1. 经验之谈

仅使用 LangGraph 框架相关功能时运行流畅,但尝试跳出框架则可能面临复杂调试。


(三)LlamaIndex Workflows

  1. Workflows 架构

Workflows 旨在简化可循环智能体构建,强调异步执行能力,采用事件作为连接逻辑方式,智能体逻辑封装在 “步骤” 中,事件负责在不同步骤间传递信息。其架构配置状态信息并绑定技能到 LLM 对象,还定义了 “prepare_agent” 步骤,将用户输入转换为 ChatMessage 并存储到工作流记忆存储,避免重复添加用户信息。路由代码和工具调用处理代码实现方式更接近纯代码智能体,维护条件路由逻辑,且技能无需修改即可应用于 Workflows,简化了开发工作。


  1. 使用 Workflows 面临的挑战

调试同步执行困难,虽异步执行对在线智能体更优,但将其改为同步执行需重新定义 Workflow 类内部方法。此外,也出现了类似 LangGraph 的 Pydantic Validation Errors 问题,不过相对容易解决,需更规范地创建 LlamaIndex FunctionTool 对象。

  1. Workflows 的优点

与 LangGraph 相比,使用 Workflows 构建智能体更轻松,因其未提供内置功能,开发者需自行编写路由逻辑和工具操作代码,与纯代码智能体相似。基于事件的架构有助于管理复杂、异步触发且多事件的系统步骤,具有轻量级特性,结构限制少,基于事件的架构为函数调用提供有效替代方案,适用于复杂异步应用场景。

使用两个自定义事件在智能体中的各个步骤之间移动

二、框架比较与分析

  1. 无框架方法

实施最为简单直接,开发者自行定义抽象层(如 SkillMap 对象),管理不同类型和对象相对容易。但代码可读性和易用性依赖开发者个人,缺乏智能体结构约束,随着智能体复杂性增加可能难以维护。

  1. LangGraph

提供完整的智能体结构规范,智能体定义清晰,适合团队协作开发,对智能体结构新手有帮助。然而,框架限制较多,若不完全认同其理念,可能面临较多调试挑战,代码简洁但调试成本可能较高。

  1. LlamaIndex Workflows

采用事件驱动架构,在框架约束和开发自由度之间取得平衡,对框架依赖较少。其固有的异步特性在某些项目中极具价值,且基于事件的架构有助于管理复杂系统步骤。但异步特性可能增加某些场景的复杂度,如调试难度。

三、框架选择关键问题

  1. 项目集成情况

若项目已深度集成 LlamaIndex 或 LangChain,优先考虑与之紧密集成的框架,如 LangGraph 或 LlamaIndex Workflows,其额外优势可能使其成为合适选择。

  1. 对智能体架构的熟悉程度

若开发者对智能体常见架构不熟悉,希望有框架指导构建结构,LangGraph 是较好选择;若希望在一定框架基础上有更多自由度,Workflows 可能更适合。

  1. 参考样例情况

框架通常有大量教程和实例供参考,而纯代码构建智能体的参考实例相对较少。若构建智能体需要参考样例,框架会提供更多便利。

四、小结

选择智能体框架只是影响生成式人工智能系统在生产环境中表现的众多决策之一。在构建智能体时,除了框架选型,建立强大的安全保障和对大语言模型(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

本文,完。觉得本篇文章不错的,记得随手点个赞、收藏和转发三连,感谢感谢~如果想第一时间收到推送,请记得关注我们~




相关推荐

一日一技:用Python程序将十进制转换为二进制

用Python程序将十进制转换为二进制通过将数字连续除以2并以相反顺序打印其余部分,将十进制数转换为二进制。在下面的程序中,我们将学习使用递归函数将十进制数转换为二进制数,代码如下:...

十进制转化成二进制你会吗?#数学思维

六年级奥赛起跑线:抽屉原理揭秘。同学们好,我是你们的奥耀老师。今天一起来学习奥赛起跑线第三讲二进制计数法。例一:把十进制五十三化成二进制数是多少?首先十进制就是满十进一,二进制就是满二进一。二进制每个...

二进制、十进制、八进制和十六进制,它们之间是如何转换的?

在学习进制时总会遇到多种进制转换的时候,学会它们之间的转换方法也是必须的,这里分享一下几种进制之间转换的方法,也分享两个好用的转换工具,使用它们能够大幅度的提升你的办公和学习效率,感兴趣的小伙伴记得点...

c语言-2进制转10进制_c语言 二进制转十进制

#include<stdio.h>intmain(){charch;inta=0;...

二进制、八进制、十进制和十六进制数制转换

一、数制1、什么是数制数制是计数进位的简称。也就是由低位向高位进位计数的方法。2、常用数制计算机中常用的数制有二进制、八进制、十进制和十六进制。...

二进制、十进制、八进制、十六进制间的相互转换函数

二进制、十进制、八进制、十六进制间的相互转换函数1、输入任意一个十进制的整数,将其分别转换为二进制、八进制、十六进制。2、程序代码如下:#include<iostream>usingna...

二进制、八进制、十进制和十六进制等常用数制及其相互转换

从大学开始系统的接触计算机专业,到现在已经过去十几年了,今天整理一下基础的进制转换,希望给还在上高中的表妹一个入门的引导,早日熟悉这个行业。一、二进制、八进制、十进制和十六进制是如何定义的?二进制是B...

二进制如何转换成十进制?_二进制如何转换成十进制例子图解

随着社会的发展,电器维修由继电器时代逐渐被PLC,变频器,触摸屏等工控时代所替代,特别是plc编程,其数据逻辑往往涉及到数制二进制,那么二进制到底是什么呢?它和十进制又有什么区别和联系呢?下面和朋友们...

二进制与十进制的相互转换_二进制和十进制之间转换

很多同学在刚开始接触计算机语言的时候,都会了解计算机的世界里面大多都是二进制来表达现实世界的任何事物的。当然现实世界的事务有很多很多,就拿最简单的数字,我们经常看到的数字大多都是十进制的形式,例如:我...

十进制如何转换为二进制,二进制如何转换为十进制

用十进制除以2,除的断的,商用0表示;除不断的,商用1表示余0时结束假如十进制用X表示,用十进制除以2,即x/2除以2后为整数的(除的断的),商用0表示;除以2除不断的,商用1表示除完后的商0或1...

十进制数如何转换为二进制数_十进制数如何转换为二进制数举例说明

我们经常听到十进制数和二进制数,电脑中也经常使用二进制数来进行计算,但是很多人却不清楚十进制数和二进制数是怎样进行转换的,下面就来看看,十进制数转换为二进制数的方法。正整数转二进制...

二进制转化为十进制,你会做吗?一起来试试吧

今天孩子问把二进制表示的110101改写成十进制数怎么做呀?,“二进制”简单来说就是“满二进一”,只用0和1共两个数字表示,同理我们平常接触到的“十进制”是“满十进一”,只用0-9共十个数字表示。如果...

Mac终于能正常打游戏了!苹果正逐渐淘汰Rosetta转译

Mac玩家苦转译久矣!WWDC2025苹果正式宣判Rosetta死刑,原生游戏时代终于杀到。Metal4光追和AI插帧技术直接掀桌,连Steam都连夜扛着ARM架构投诚了。看到《赛博朋克2077》...

怎么把视频的声音提出来转为音频?音频提取,11款工具实测搞定

想把视频里的声音单独保存为音频文件(MP3/AAC/WAV/FLAC)用于配音、播客、听课或二次剪辑?本文挑出10款常用工具,给出实测可复现的操作步骤、优缺点和场景推荐。1)转换猫mp3转换器(操作门...

6个mp4格式转换器测评:转换速度与质量并存!

MP4视频格式具有兼容性强、视频画质高清、文件体积较小、支持多种编码等特点,适用于网络媒体传播。如果大家想要将非MP4格式的视频转换成MP4的视频格式的话,可以使用MP4格式转换器更换格式。本文分别从...