OpenAI近日发布的智能体构建指南《A practical guide to building agents》,引起了广泛关注。鉴于OpenAI在AI领域的强大影响力,每次发布的技术文章,都会被不少人奉为圭臬。
然而,业内也有不同的声音,因为智能体现快速发展中,没有一个统一的标准,而是百花争鸣的状态。可以参考本号之前发布过的一些智能体相关文章,下面有给出相应链接。
1.OpenAI指南原始英文版
2.LangChain创始人对指南的不同看法
3.深入解读《Google智能体白皮书》
倾听不同的技术声音,不同理念的碰撞,能为我们深入理解Agent构建提供更丰富的视角。
本篇文章中,我将对该论文进行完整的翻译,不是一般的AI那种拗口的翻译,而是逐字逐句的精心翻译和理解。阅读完成后,相信对读者理解智能体,会带来一定的帮助和启发。
《构建智能体实用指南》
目录
- 引言
- 什么是智能体?
- 何时应该构建智能体?
- 智能体设计基础
- 防护机制
- 构建智能体实用指南
- 结论
引言
大语言模型(LLMs)处理复杂多步骤任务的能力越来越强。推理、多模态和工具使用方面的进步催生了一类新的由大语言模型驱动的系统,即智能体。
本指南面向正在探索如何构建首个智能体的产品和工程团队,将从众多客户部署中获得的见解,提炼为切实可行的最佳实践。它包含:识别有前景用例的框架、设计智能体逻辑和编排的清晰模式,以及确保智能体安全、可预测且高效运行的最佳实践。
阅读本指南后,你将掌握自信开启首个智能体构建所需的基础知识。
什么是智能体?
传统软件能帮助用户简化和自动化工作流程,而智能体则可以代表用户高度自主地执行相同的工作流程。
智能体是代表你独立完成任务的系统。
工作流程是为实现用户目标而必须执行的一系列步骤,这个目标可以是解决客户服务问题、预订餐厅、提交代码变更,或是生成一份报告。
集成了大语言模型但未利用其控制工作流程执行的应用程序,如简单聊天机器人、单轮大语言模型应用或情感分类器,都不属于智能体。
更具体地说,智能体具备一些核心特征,使其能够可靠且一致地代表用户行事:
- 它利用大语言模型管理工作流程的执行并做出决策。它能够识别工作流程何时完成,必要时还能主动纠正自己的行为。如果出现故障,它可以停止执行并将控制权交回给用户。
- 它可以使用各种工具与外部系统进行交互,既用于收集上下文信息,也用于执行操作,并且能够根据工作流程的当前状态动态选择合适的工具,始终在明确定义的规则范围内运行。
何时应该构建智能体?
构建智能体需要重新思考系统如何决策以及处理复杂性。与传统自动化不同,智能体特别适用于传统的确定性和基于规则的方法难以应对的工作流程。
以支付欺诈分析为例,传统的规则引擎就像一个检查表,根据预设标准标记交易。相比之下,大语言模型驱动的智能体更像是一位经验丰富的调查员,它会评估上下文、考虑微妙的模式,即使在没有违反明确规则的情况下也能识别出可疑活动。这种细致入微的推理能力正是智能体能够有效处理复杂、模糊情况的原因。
在评估智能体在哪些方面能够增加价值时,应优先考虑那些以往难以实现自动化的工作流程,尤其是传统方法在处理时会遇到困难的流程:
- 复杂决策:涉及细致判断、特殊情况或根据上下文做出决策的工作流程,例如客户服务工作流程中的退款审批。
- 难以维护的规则:由于规则集广泛而复杂,导致系统变得难以管理,更新成本高昂或容易出错的情况,例如进行供应商安全审查。
- 严重依赖非结构化数据:涉及解释自然语言、从文档中提取含义或与用户进行对话交互的场景,例如处理家庭保险理赔。
在着手构建智能体之前,请确保你的用例能够明确满足这些标准。否则,确定性解决方案可能就足够了。
智能体设计基础
智能体最基本的形式由三个核心组件构成:
组件 | 描述 |
---|---|
模型(Model) | 为智能体的推理和决策提供支持的大语言模型 |
工具(Tools) | 智能体可以用来执行操作的外部函数或API |
指令(Instructions) | 定义智能体行为的明确指南和规则 |
使用OpenAI的Agents SDK时,代码示例如下。你也可以使用自己喜欢的库,或者直接从头开始实现相同的概念。
weather_agent = Agent(
name="Weather agent",
instructions="You are a helpful agent who can talk to users about the weather.",
tools=[get_weather]
)
选择不同的模型
不同的模型在任务复杂性、延迟和成本方面各有优劣。正如我们将在“编排”部分看到的,你可能需要考虑在工作流程的不同任务中使用多种模型。
并非每个任务都需要最强大的模型,简单的检索或意图分类任务可以由较小、速度更快的模型处理,而像决定是否批准退款这样更具挑战性的任务,可能使用能力更强的模型会更有优势。
一种有效的方法是,在构建智能体原型时,为每个任务都使用能力最强的模型来建立性能基线。然后,尝试换用较小的模型,看看是否仍能取得可接受的结果。这样,你就不会过早限制智能体的能力,并且可以判断较小的模型在哪些方面表现出色或不足。
总之,选择模型的原则很简单:
- 进行评估以建立性能基线。
- 专注于使用现有最佳模型达到准确性目标。
- 在可能的情况下,通过用较小的模型替换较大的模型来优化成本和延迟。
你可以在此处找到选择OpenAI模型的综合指南。
定义工具
工具通过使用底层应用程序或系统的API来扩展智能体的能力。对于没有API的遗留系统,智能体可以依靠计算机使用模型,通过Web和应用程序界面直接与这些应用程序和系统进行交互,就像人类操作一样。
每个工具都应该有标准化的定义,以便在工具和智能体之间建立灵活的多对多关系。文档完善、经过充分测试且可复用的工具可以提高工具的可发现性,简化版本管理,并避免重复定义。
一般来说,智能体需要三种类型的工具:
类型 | 描述 | 示例 |
---|---|---|
数据工具(Data) | 支持智能体获取执行工作流所需的上下文信息 | 查询交易数据库/CRM系统、读取PDF文档、网络搜索 |
操作工具(Action) | 支持智能体与系统交互执行具体操作 | 发送邮件和短信、更新CRM记录、转接客服工单 |
编排工具(Orchestration) | 智能体可作为其他智能体的工具使用(参见编排章节的"管理者模式") | 退款智能体、研究智能体、写作智能体 |
例如,使用Agents SDK为上述智能体配备一系列工具的代码如下:
from agents import Agent, WebSearchTool, function_tool
@function_tool
def save_results(output):
db.insert({
"output": output, "timestamp": datetime.time