目录

1.智能体设计基础

2.选择模型

3.定义工具

4.配置指令(instructions)

5.智能体构建

5.1 单智能体系统

5.2 什么时候应该考虑构建多智能体?

5.3 多智能系统

5.3.1 管理器模式

5.3.2 去中心化模式

6.总结


前言

大语言模型(LLM)正变得越来越能够处理复杂的多步骤任务。推理能力、多模态和工具使用的进步,催生了一类新的基于LLM的系统,被称为“智能体”(agents)。

本指南核心思路为OpenAI发布,专为产品和工程团队设计,旨在探索如何构建他们的第一个代理,并从众多客户部署中提炼出实用且可操作的最佳实践。它包括

1、识别有前途的用例的框架

2、设计代理逻辑和编排的清晰模式

3、确保助理安全、可靠和有效运行

我们将指南内容进行了精心整理,阅读本指南后,您将获得开始构建第一个代理所需的基础知识。内容较多,我们将分上下3篇进行讲解,本篇是第二篇。

上篇地址:【智能体构建】构建智能体的实用指南(上)-CSDN博客

1.智能体设计基础

智能体由三个核心组件组成:

编号 组件 描述
01 模型 驱动智能体推理和决策的大语言模型(LLM)
02 工具 智能体可用来执行行动的外部函数或 API
03 指令 明确的指导

在使用 OpenAI 的 Agents SDK 时,代码大致如下所示。你也可以选择自己偏好的库,或者从头开始构建来实现:

2.选择模型

不同的模型在任务复杂度、延迟和成本方面具有不同的优势和权衡。正如我们将在下一节关于“编排(Orchestration)”中看到的,你可能希望为工作流中的不同任务使用多种模型。

并不是每个任务都需要最强大的模型——一个简单的检索或意图分类任务可以由较小、更快的模型处理,而像决定是否批准退款这样更复杂的任务,则可能更适合使用能力更强的模型。

一种行之有效的方法是:在构建智能体原型时,为每个任务选择能力最强的模型,以建立性能基准。然后,尝试用较小的模型替换它们,看看是否仍能获得可接受的结果。这样,你不会过早限制智能体的能力,并且可以诊断出小模型在哪些地方成功或失败。

模型的原则:

编号 步骤描述
01 设置评估(evals)以建立性能基准
02 使用当前最佳模型,专注于达成准确率目标
03 在可能的情况下,用较小模型替换较大模型,以优化成本和延迟

3.定义工具

工具通过使用底层应用程序或系统的 API 来扩展智能体的能力。对于没有 API 的传统系统,智能体可以通过计算机操作模型,像人类一样通过网页和应用程序的用户界面直接与这些系统进行交互。

每个工具应具有标准化的定义,从而在工具与智能体之间建立灵活的、多对多的关系。良好文档、充分测试并可复用的工具能够提高可发现性,简化版本管理,并避免重复定义。

智能体需要的工具类型:

类型 描述 示例
数据(Data) 使智能体能够获取执行工作流所需的上下文和信息 查询交易数据库或CRM系统、读取PDF文档、搜索网络
动作(Action) 使智能体能够与系统交互并执行操作,例如向数据库添加新信息、更新记录或发送消息 发送电子邮件和短信、更新CRM记录、将客服工单转交给人工处理
编排(Orchestration) 智能体本身也可以作为其他智能体的工具 退款智能体、研究智能体、写作智能体

使用 Agents SDK 时,为智能体配备工具的方式:

4.配置指令(instructions)

高质量的指令对于任何基于大语言模型(LLM)的应用程序都至关重要,而对于智能体来说尤其关键。清晰的指令可以减少歧义,提升智能体的决策能力,从而实现更顺畅的工作流执行并减少错误。

为智能体编写指令的最佳实践:

建议 描述
使用现有文档 在创建流程时,使用现有的操作规程、支持脚本或政策文件来构建适合 LLM 的流程。例如在客服场景中,流程可以沉淀到知识库中的单个文档,并给智能体。
提示智能体分解任务 从密集型资源中提供更小、更清晰的步骤,有助于减少歧义,并帮助模型更好地遵循指令。
定义明确的动作 确保流程中的每一步都对应一个具体的动作或输出。例如,某一步可能指示智能体要求用户提供订单号,或调用 API 获取账户详情。对动作(甚至用户面向消息的措辞)进行明确描述,能减少理解上的错误。
捕获边缘情况 实际交互中常会出现决策点,例如当用户提供不完整信息或提出意外问题时该如何处理。一个健壮的流程应预见到常见边界case,并包含如何通过条件步骤或分支处理这些情况的说明,例如当缺少必要信息时执行替代步骤。

你可以使用高级模型(如 o1 或 o3-mini),从现有文档中自动生成指令。以下是一个展示该方法的示例提示:

你是一位为 LLM 智能体编写指令的专家。请将以下帮助中心文档转换为一个清晰、有序号的指令列表。该文档将成为 LLM 遵循的政策。请确保指令无歧义,并以对智能体的操作指引方式撰写。需要转换的帮助中心文档如下:{{help_center_doc}}

5.智能体构建

在基础组件准备好后,你可以考虑采用编排模式构建智能体,以使智能体能够高效地执行工作流。

尽管直接构建一个具有复杂架构的完全自主智能体可能很诱人,但通常很难一步位,因此建议通过逐步推进的方法以取得更好的效果。

编排模式可以分为两类:

编号 类型 描述
01 单智能体系统 一个配备了适当工具和指令的单一模型,通过循环执行工作流
02 多智能体系统 工作流的执行分布在多个协同工作的智能体之间

5.1 单智能体系统

通过给智能体添加工具,一个单一的智能体可以处理许多任务,从而保持复杂度可控,简化评估和维护成本。每增加一个新的工具,都会扩展其能力,不建议在早期就进行多智能体的编排(复杂度高)。

每种编排方法都需要“运行(run)”的概念,通常通过一个循环来实现,使智能体持续运行直到满足退出条件。常见的退出条件包括调用工具、生成特定结构的输出、发生错误,或达到最大交互轮次。

例如,在 Agents SDK 中,智能体是通过某个方法启动的,该方法会循环调用 LLM,直到以下任一情况发生:

编号 描述
01 调用了最终输出工具,该工具由特定的输出类型定义
02 模型返回了不包含任何工具调用的响应(例如,直接的用户消息)

调用示例:

while 循环这一概念是智能体运行的核心。在多智能体系统中,可以在多个智能体之间依次调用工具并进行交接,但模型仍会连续执行多个步骤,直到满足退出条件。

一种在不切换到多智能体框架的情况下管理复杂性的有效策略是使用提示模板。与其为不同的使用场景维护大量独立的提示语,不如使用一个灵活的基础提示模板,该模板可以接受策略变量作为输入。这种模板方法能够轻松适应各种上下文,大大简化维护和评估工作。当新的使用场景出现时,只需更新变量,而无需重写整个工作流。

你是一名客服中心的智能体。你正在与{{user_first_name}}进行交流,该用户已注册{{user_tenure}}。用户最常见的投诉是关于{{user_complaint_categories}}。请向用户打招呼,感谢他们作为忠实客户,并回答用户可能提出的问题!

5.2 什么时候应该考虑构建多智能体?

建议是首先最大化单个智能体的能力。虽然使用多个智能体可以在概念上提供更直观的分离,但也可能引入额外的复杂性和开销。很多情况下,一个配备了工具的单一智能体就已足够。 对于复杂的工作流来说,将提示和工具分配到多个智能体中,有助于提升性能和可扩展性。当你的智能体无法遵循复杂的指令,或者持续选择错误的工具时,你可能需要进一步拆分系统,并引入更多功能明确的智能体。

拆分智能体的原则:

类型 描述
复杂逻辑 当提示中包含大量条件语句(多个 if-then-else 分支),并且提示模板难以扩展时,考虑将每个逻辑段分配给不同的智能体处理。
工具过载 问题不仅在于工具的数量,还在于它们之间的相似性或重叠度。有些智能体能管理超过15个定义良好且互不重叠的工具,而另一些则在少于10个重叠工具的情况下就遇到困难。如果通过提供描述性的名称、清晰的参数和详细的说明来提高工具的清晰度仍无法改善性能,则应使用多个智能体。

5.3 多智能系统

多智能体主要有两类广泛适用的模式:

类型

描述

中心化管理器(智能体作为工具)

一个中心化的“管理者”智能体通过调用工具的方式协调多个专业化的智能体,每个智能体负责处理特定的任务或领域。

去中心化(智能体之间交接任务)

多个智能体以对等的方式运行,根据各自的专长将任务交接给其他智能体。

多智能体系统可以建模为图结构,其中每个智能体表示为一个节点。在“管理器”模式中,边代表工具调用;而在“去中心化”模式中,边代表任务交接,用于在不同智能体之间转移执行流程。

无论采用哪种编排模式,都应保持相同的原则:保持组件灵活、可组合,并通过清晰、结构良好的提示来驱动。

5.3.1 管理器模式

管理器模式赋予一个中心化的“管理者”通过工具调用来无缝协调一组专业化智能体的能力。管理者不会丢失上下文或控制权,而是在合适的时间将任务智能地委派给合适的智能体,并轻松地将结果整合成连贯的交互体验。这确保了用户获得流畅、统一的使用体验,同时按需随时可用各种专业能力。

该模式非常适合那些你只想让一个智能体控制工作流执行并拥有与用户交互权限的场景。

使用Agents SDK实现此模式:

5.3.2 去中心化模式

在去中心化模式中,智能体之间可以“交接”工作流的执行。交接是一种单向转移机制,允许一个智能体将任务委派给另一个智能体。在 Agents SDK 中,交接是一种工具类型,或称为函数。当一个智能体调用交接函数时,系统会立即在被交接的目标智能体上开始执行,并同时传递最新的对话状态。

这种模式涉及使用多个地位平等的智能体,其中一个智能体可以直接将工作流控制权交接给另一个智能体。这种模式允许每个智能体根据需要接管执行过程并直接与用户交互。

下面是使用Agents SDK为一个同时处理销售、客户支持和订单管理服务的示例:

在上面的示例中,初始用户消息被发送给 triage_agent(分诊智能体)。该智能体识别到输入内容涉及最近的一笔购买,便会调用一个交接函数,将控制权移交给 order_management_agent(订单管理智能体)。

这种模式在诸如对话分诊等场景中特别有效,或者在你希望由专门的智能体完全接管某些任务、而原始智能体无需继续参与的情况下也非常适用。可选地,你可以为第二个智能体配备一个“返回交接”功能,使其在必要时能够将控制权再次转回原始智能体。

6.总结

本文介绍了OpenAI智能体设计的基本原则,包括智能体的核心组件(模型、工具和指令)、单智能体和多智能体的选型以及如何构建单智能体和多智能体,希望对你所有启发。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐