引言:
去年到今年致力于开发大语言模型(LLM)智能体。我们发现,最成功的案例并不是依赖复杂的框架或专业的库,而是采用了简单且可组合的模式。我们将分自主构建智能体过程中学习到的经验,并为开发人员提供构建高效智能体的实用建议。
一:Agent是什么?
“智能体”(Agent)的定义有多种。
一些客户将智能体定义为完全自主的系统,这类系统能够长时间独立运行,借助各种工具完成复杂任务。预定义工作流程、更具规范性的应用。
我们将所有这些不同类型都归类为智能体系统,但在架构上对工作流程和智能体做出了重要区分:
-
工作流程是指通过预定义的代码路径协调大语言模型和工具的系统。
-
而智能体是指大语言模型能够动态指导自身流程和工具使用,对如何完成任务保持控制权的系统。
我们将详细探讨这两种类型的智能体系统并赋予它一定应用价值。
1:应该使用智能体的复杂应用流
在使用大语言模型开发应用时,建议优先选择简单方案,只有在必要时才增加复杂度。有时,甚至无需构建智能体系统。因为智能体系统通常会以增加响应时间和成本为代价来提升任务执行效果,你需要权衡这种利弊在何时是合理的。如果必须提高复杂度,对于明确的任务,工作流程能提供稳定性和可预测性;而对于需要高度灵活性和基于模型决策的场景,智能体是更好的选择。不过,对于多数应用来说,通过检索和上下文示例优化单次大语言模型调用通常就足够了。
不过,对于许多应用程序而言,通过检索和上下文示例来优化单次大语言模型调用通常就已足够。
2:如何使用智能体相关框架
众多框架使智能代理系统的实现变得更为便捷,
例如LangChain的LangGraph、
亚马逊云科技的Amazon Bedrock人工智能代理框架、
Rivet(一款用于大语言模型工作流的拖放式图形用户界面构建器)
Vellum(一款用于构建和测试复杂工作流的图形用户界面工具)。
许多框架让智能代理系统的实现变得更容易,比如LangChain的LangGraph、亚马逊云科技的AI代理框架、Rivet(一个大语言模型工作流的拖放式GUI构建器)以及Vellum(用于构建和测试复杂工作流的GUI工具)。这些框架简化了调用大语言模型、定义和解析工具以及串联调用等基础任务,让入门变得简单。然而,它们也增加了额外的抽象层,可能会掩盖底层的提示和响应,增加调试难度。而且,当简单设置就能满足需求时,它们可能会让开发者不必要地增加复杂性。我们建议开发者先直接使用大语言模型API:很多模式只需几行代码就能实现。如果使用框架,一定要理解底层代码。对底层情况的错误假设是导致用户出错的常见原因。
二:构建模块、工作流与智能体的关系
我们将从基础构建模块——增强型大语言模型(LLM)开始,逐步增加复杂性,从简单的组合式工作流程逐渐过渡到自主智能体。
1.模块的构建
智能体系统的基本构建模块,是通过检索、工具和记忆等功能增强的大语言模型(LLM)。目前的模型能够主动运用这些功能,比如自行生成搜索查询、选择合适的工具,以及决定保留哪些信息。
我们建议重点关注实现过程中的两个关键方面:
a:是根据特定用例对这些功能进行定制,
b:是确保它们为大语言模型提供简单且有详尽文档说明的接口。
2:构建工作流
提示链接(Prompt Chaining)
将一项任务分解为一系列步骤,每次大语言模型调用都会处理上一步的输出。你可以在任何中间步骤添加编程式检查(见下图中的 “网关”),以确保流程仍按计划进行。
何时使用此工作流程:当任务能够轻松、清晰地分解为固定的子任务时,此工作流程最为理想。其主要目的是通过将每个大语言模型调用的任务简化,以牺牲一些延迟来换取更高的准确性。
3.工作流间的连接
路由功能(router)
会对输入内容进行分类,然后将其导向特定的后续任务。这种工作流程有助于实现关注点分离,还能构建更为专业的提示。若没有这种流程,针对某一类输入进行优化可能会降低模型对其他输入的处理性能。路由适用于复杂任务,这些任务存在明显不同的类别,分开处理会更有效,而且分类工作能够由大语言模型(LLM)或更传统的分类模型 / 算法准确完成。
4.工作流间的并行
有时可以同时处理一项任务,并通过编程方式汇总其输出结果。这种并行化工作流程主要有两种关键变体:
拆分处理:将任务拆解为多个独立的子任务,并进行并行处理。
投票机制:多次运行同一任务,以获取多样化的输出结果。
何时使用此工作流程:当划分后的子任务可并行处理以提升速度,或者为获得更可靠的结果需要多个视角或多次尝试时,并行化非常有效。对于需要多方面考量的复杂任务,若每个考量点由单独的大语言模型调用处理,大语言模型通常表现更佳,因为这样能专注于每个特定方面。
5.协调者-工作者模式:工作流间
一个核心大语言模型会动态分解任务,将其委派给 “工作者” 大语言模型,然后综合这些模型的结果。此工作流程非常适合处理复杂任务,特别是那些无法预先确定所需子任务的情况(例如在编程中,需要修改的文件数量以及每个文件的修改性质很可能取决于具体任务)。尽管在架构上与并行化相似,但 “协调者 - 工作者” 工作流程的关键区别在于其灵活性 —— 子任务并非预先定义,而是由协调者根据特定输入来确定。
6.工作流间的评估者与优化器
我们有明确的评估标准,且迭代优化能带来显著价值时,此工作流程尤为有效。适用这种流程有两个明显标志:其一,当人类阐明反馈后,大语言模型的回复能得到明显改进;其二,大语言模型自身能够给出此类反馈。这类似于人类作家在创作一篇精良文档时所经历的反复修改过程。
在评估 - 优化工作流程中,一次大语言模型调用生成一个回复,同时另一个大语言模型循环提供评估和反馈。
7.构建智能体
随着大语言模型(LLMs)在理解复杂输入、推理与规划、可靠使用工具以及从错误中恢复等关键能力上的逐步提升,智能体在实际应用中开始展现出其价值。智能体可以通过接收人类用户的指令或与用户进行交互式讨论来启动任务。一旦任务明确,智能体便能独立规划并执行操作,必要时会向人类用户请求更多信息或判断。在执行过程中,智能体每一步都会从环境中获取“基本事实”(例如工具调用结果或代码执行情况),以评估自身进展,这一步骤至关重要。之后,智能体可以在检查点或遇到阻碍时暂停,等待人类的反馈。任务通常在完成时结束,但为了便于控制,设置停止条件(例如最大迭代次数)也很常见。虽然智能体能够处理复杂任务,但其实现方式往往较为直接,通常就是基于环境反馈循环使用工具的大语言模型。因此,清晰且周全地设计工具集及其文档说明至关重要。
完成这几个步骤后,构建智能体到此完成初步建设。