AI创想

标题: 【OpenAI 技术报告】构建智能体(Agent)实用指南 [打印本页]

作者: admin    时间: 2025-9-7 23:15
标题: 【OpenAI 技术报告】构建智能体(Agent)实用指南
【OpenAI 技术报告】构建智能体(Agent)实用指南



2025年4月,OpenAI 发布技术报告 【构建智能体(Agent)实用指南(A practical guide to building agents)】。
下载地址:【OpenAI-A practical guide to building agents】

1. 前言

大语言模型处理复杂多步骤任务的能力正在显著提升。随着推理能力、多模态处理和工具调用等技术的进步,由此催生出一类新型的智能系统——LLM智能体。
本指南专为计划开发首个智能体的产品与工程团队撰写,通过提炼众多客户部署案例中的经验,提供实用且可操作的最佳实践方案。内容包含:
通过本指南,您将获得构建首个智能体所需的核心知识体系,顺利开启智能体开发之旅。



2. 什么是 智能体(Agent)?

虽然传统软件能够帮助用户简化和自动化工作流程,但智能体能够以高度自主的方式代替用户执行这些工作流程。
智能体是能够独立代替用户完成任务的一种系统。
工作流程是指为达成用户目标而必须执行的一系列步骤,无论是解决客户服务问题、预订餐厅座位、提交代码变更,还是生成报告。
那些集成了LLM但未将其用于控制工作流程执行的应用程序(例如简单聊天机器人、单轮LLM或情感分类器)不属于智能体范畴。
更具体地说,真正的智能体必须具备能够可靠、持续代表用户采取行动的核心特征:
OpenAI 明确了 Agent 的核心特征:关键在于能够独立执行工作流。
那些仅仅进行信息处理而不控制整个流程的 LLM 应用,比如简单的问答机器人或情感分析工具,并不能算作 Agent。

3. 什么时候构建智能体(Agent)?

开发智能体需要重新思考系统如何决策并处理复杂性。与传统的自动化不同,智能体特别适合那些传统的确定性规则方法难以应对的工作流程。
以支付欺诈分析为例。传统的规则引擎就像一份检查清单,根据预设标准标记交易。而基于LLM的智能体则更像经验丰富的调查员,它能评估上下文、捕捉细微模式,甚至在交易未明确违反规则时也能识别可疑活动。正是这种精细的推理能力,使智能体能够有效处理复杂且模糊的情境。
在评估智能体的适用场景时,应优先考虑那些传统自动化难以实现的业务流程——特别是在现行方法面临显著阻力的环节。
实施前验证原则:
在采用智能体解决方案前,必须确认用例至少符合上述一项特征。若需求可通过预定义逻辑完全覆盖,传统确定性方案仍是更优选择。

3. 智能体(Agent)设计的基础框架

3.1 智能体的核心架构

智能体的核心架构由以下三大组件构成:




以下是使用 OpenAI 的 Agents SDK 时的代码示例。你也可以使用自己偏好的库或从头开始直接构建,来实现相同的概念。
  1. weather_agent = Agent(
  2.    name ="Weather agent",
  3.    instructions ="You are a helpful agent who can talk to users about the weather.",
  4.    tools=[get_weather],)
复制代码
OpenAI Agents SDK 是一个轻量级、易用且抽象层极少的工具包,可帮助您构建具备自主能力的AI应用。它是对我们此前实验性项目Swarm的正式生产级升级。该SDK仅包含少量核心组件:
结合Python语言,这些基础组件足以表达工具与智能体之间的复杂关系,让您无需陡峭的学习曲线即可构建实际应用。此外,该SDK还内置了追踪功能,可帮助您可视化调试智能体工作流、进行评估,甚至为您的应用微调模型。

3.2 模型选型的原则

不同模型在任务复杂度、延迟和成本方面各有优劣。正如我们将在接下来的"编排"部分中看到的,您可能需要考虑在工作流中针对不同任务使用多种模型。
并非每项任务都需要最强大的模型:
一个有效的实施方法是:1. 先用当前最强的模型构建智能体原型,确立性能基准;2. 再逐步尝试替换更小的模型,观察是否能维持可接受的效果。这种方法确保您不会过早限制智能体的能力,同时可精准分析小模型的适用场景。
模型选择三原则:
关于 OpenAI 模型选择的完整指南,可以查看【 OpenAI 模型选择】

3.3 工具的定义

工具通过使用底层应用程序或系统的API来扩展您的智能体能力。对于没有API的遗留系统,智能体可以依赖计算机使用模型,直接通过网络和应用程序界面与这些系统和应用交互——就像人类操作一样。
每个工具都应具有标准化定义,以实现工具与智能体之间灵活的多对多关系。经过完善文档记录、全面测试且可重复使用的工具能够提高可发现性,简化版本管理,并避免重复定义。
总体而言,智能体需要三种类型的工具:
设计工具时,OpenAI 强调要遵循标准化定义、文档清晰、充分测试和可复用的原则。这不仅能提高工具被发现和理解的可能性,还能简化版本管理,避免团队内部重复开发相似的功能。




例如,在使用 Agents SDK 时,可采用以下方式为前文定义的智能体配置一组工具:
  1. from agents import Agent, WebSearchTool, function_tool
  2. @function_tooldefsave_results(output):
  3.    db.insert({"output": output,"timestamp": datetime.time()})return"File saved"
  4. search_agent = Agent(
  5.    name ="Search agent",
  6.    instructions ="Help the user search the internet and save results if asked.",
  7.    tools=[WebSearchTool(),save_results],)
复制代码
随着所需工具数量的增加,应考虑将任务拆分给多个智能体(参见「编排」部分)。

3.4 配置文件指令

高质量的指令对于任何基于大语言模型(LLM)的应用都至关重要,对智能体而言更是关键所在。
清晰的指令能减少歧义,提升智能体的决策质量,从而实现更流畅的工作流执行和更少的错误。
以下是智能体指令设计的最佳实践:
**您可以使用高级模型(例如o1或o3-mini)来让它帮你把现有的文档自动转换成结构化的 Agent 指令!**以下是一个演示示例:
  1. “You are an expert in writing instructions for an LLM agent. Convert the
  2. following help center document into a clear set of instructions, written in
  3. a numbered list. The document will be a policy followed by an LLM. Ensure
  4. that there is no ambiguity, and that the instructions are written as
  5. directions for an agent. The help center document to convert is the
  6. following {{help_center_doc}}”
复制代码
“你是一位擅长为LLM智能体编写指令的专家。请将以下帮助中心文档转化为一套清晰的指令列表(使用数字编号)。该文档将成为LLM遵循的策略规范。请确保指令无歧义,并以直接指导智能体的方式撰写。需要转换的帮助中心文档如下:{{help_center_doc}}”

3.5 流程编排

当基础组件就位后,您可考虑采用编排模式,使您的智能体能够有效执行工作流。
虽然直接构建具有复杂架构的完全自主智能体颇具诱惑力,但客户通常采用渐进式方法能获得更大成功。
一般而言,编排模式可分为两类:
下面我们将详细探讨每种模式。

4. 单智能体与多智能体

4.1 单智能体系统

单智能体可通过逐步添加工具来处理多项任务,既保持复杂度可控,又简化评估与维护。每新增一个工具都能扩展其能力,而不必过早引入多智能体协调机制。



所有编排方案都需要"运行"的概念,通常实现为循环机制,使智能体持续运作直至满足退出条件。常见退出条件包括:工具调用,特定结构化输出,错误发生,达到轮次上限。
以Agents SDK为例,启动智能体后将持续调用LLM,直至出现以下任一情况:
使用示例:
  1. Agents.run(agent,[UserMessage("What's the capital of the USA?")])
复制代码
**while 循环的概念是智能体运行的核心机制。**在多智能体系统中,尽管可以有一系列工具调用和智能体间的任务交接,但仍允许模型持续运行多个步骤,直到满足退出条件为止。
**若不愿切换到多智能体框架,管理复杂度的有效策略是使用提示词模板。**与其为不同用例维护众多独立提示词,不如采用单一灵活的基础模板,并通过策略变量进行动态配置。这种模板方案能轻松适配多种场景,极大简化维护和评估工作。当出现新用例时,只需更新变量即可,无需重写整个工作流。
  1. """ You are a call center agent. You are interacting with
  2. {{user_first_name}} who has been a member for {{user_tenure}}. The user's
  3. most common complains are about {{user_complaint_categories}}. Greet the
  4. user, thank them for being a loyal customer, and answer any questions the
  5. user may have!
复制代码
4.2 何时应考虑创建多个智能体?

我们的通用建议是:优先最大化单个智能体的能力。虽然增加智能体可以带来概念上的直观分离,但也会引入额外复杂性和管理开销,因此在多数情况下,单个配备工具的智能体已经足够。
对于复杂工作流,将提示词和工具拆分到多个智能体中可以提高性能和可扩展性。如果你的智能体存在以下问题,可能需要进一步拆分系统并引入更多独立智能体:无法遵循复杂指令,频繁选择错误工具,智能体拆分的实用准则。

4.3 多智能体系统的架构

虽然多智能体系统可以根据特定工作流程和需求以多种方式设计,但我们与客户合作的经验突显了两种广泛适用的类别:
多智能体系统可以建模为图结构,其中智能体表示为节点。在管理者模式中,边代表工具调用;而在分布式模式中,边代表智能体之间转移执行的移交操作。
无论采用哪种协调模式,都应遵循相同原则:保持组件灵活性、可组合性,并由清晰、结构化的提示驱动。

4.4 集中模式的多智能体

该模式通过工具调用使一个中央LLM(即"管理者")能够无缝协调多个专业智能体网络。管理者不会丢失上下文或控制权,而是智能地在适当时机将任务委派给合适的智能体,并轻松将结果整合为连贯的交互。这确保了流畅统一的用户体验,同时保持专业能力随时可按需调用。
此模式特别适合以下场景:(1)需要单一智能体控制工作流执行;(2)要求直接面向终端用户。



例如,以下是通过Agents SDK实现该模式的代码示例:
  1. from agents import Agent, Runner
  2. manager_agent = Agent(
  3.    name ="manager_agent",
  4.    instructions =("You are a translation agent. You use the tools given to you to translate.""If asked for multiple translations, you call the relevant tools."),
  5.    tools=[
  6.       spanish_agent.as_tool(
  7.          tool_name="translate_to_spanish",
  8.             tool_description="Translate the user's message to Spanish",),
  9.       french_agent.as_tool(
  10.          tool_name="translate_to_french",
  11.             tool_description="Translate the user's message to French",),
  12.       italian_agent.as_tool(
  13.             tool_name="translate_to_italian",
  14.             tool_description="Translate the user's message to Italian",),],)asyncdefmain():
  15.    msg =input("Translate 'hello' to Spanish, French and Italian for me!")
  16.    orchestrator_output =await Runner.run(
  17.       manager_agent,msg)for message in orchestrator_output.new_messages:print(f"- Translation step: {message.content}")
复制代码
声明式 与 非声明式 工作流图
部分框架采用声明式范式,要求开发者预先通过节点(智能体)和边(确定性或动态任务移交)构成的图结构,显式定义工作流中的所有分支、循环和条件判断。虽然这种模式有利于可视化呈现,但随着工作流动态性和复杂度的提升,该方法会迅速变得冗赘且难以维护,通常还需要开发者掌握特定的领域专用语言。
相比之下,Agents SDK采用更灵活的代码优先方案。开发者可直接使用熟悉的编程语法表达工作流逻辑,无需预先定义完整图结构,从而实现更具动态性和适应性的智能体编排。

4.5 去中心化模式的多智能体

在去中心化模式中,智能体之间可通过"移交"(handoff)操作相互转移工作流执行权。移交是一种单向传输机制,允许智能体将任务委托给其他智能体。在Agents SDK中,移交被实现为一种特殊工具(函数)。当智能体调用移交函数时,系统会立即启动目标智能体的执行,并同步转移最新的会话状态。
该模式的核心在于多个智能体处于平等地位,任一智能体都可直接将工作流控制权移交给其他智能体。这种模式最适用于以下场景:(1)不需要单一智能体维持集中控制或结果整合;(2)需要各智能体按需接管执行流程并与用户直接交互。




例如,以下是通过Agents SDK实现客户服务流程(包含销售与支持)去中心化模式的代码示例:
  1. from agents import Agent, Runner         
  2. technical_support_agent = Agent(
  3.    name="Technical Support Agent",
  4.    instructions=("You provide expert assistance with resolving technical issues, system outages, or product troubleshooting."),
  5.    tools=[search_knowledge_base])
  6. sales_assistant_agent = Agent(
  7.    name="Sales Assistant Agent",
  8.    instructions=("You help enterprise clients browse the product catalog, recommend suitable solutions, and facilitate purchase transactions."),
  9.    tools=[initiate_purchase_order])
  10. order_management_agent = Agent(
  11.    name="Order Management Agent",
  12.    instructions=("You assist clients with inquiries regarding order tracking, delivery schedules, and processing returns or refunds."),
  13.    tools=[track_order_status, initiate_refund_process])
  14. triage_agent = Agent(
  15.    name="Triage Agent",
  16.    instructions="You act as the first point of contact, assessing customer queries and directing them promptly to the correct specialized agent."
  17.    handoffs=[technical_support_agent, sales_assistant_agent, order_management_agent],)await Runner.run(
  18.    triage_agent,input("Could you please provide an update on the delivery timeline for our recent purchase?"))
复制代码
在上面的示例中,用户的初始消息会被发送至分类代理(triage_agent)。当识别到输入内容涉及近期购买时,分类代理会调用一个移交(handoff)操作给订单管理代理(order_management_agent),将控制权转移给它。
这种模式特别适用于以下场景:(1)对话分类;(2)需要专业代理完全接管特定任务,而无需原始代理继续参与的情况。
您还可以选择为第二个代理配置一个返回原始代理的移交操作,使其在必要时能够再次转移控制权。

5. 防护机制 (Guardrails)

精心设计的防护机制能帮助管理数据隐私风险(例如防止系统提示泄露)和声誉风险(例如确保模型行为符合品牌准则)。
您可以为已识别的用例风险设置防护机制,并在发现新的漏洞时叠加额外的防护层。防护机制是任何基于LLM的部署中的关键组件,但应同时结合:(1)强健的身份验证与授权协议;(2)严格的访问控制;(3)标准的软件安全措施。
防护机制本质上是分层防御体系:单一防护措施通常难以提供充分保护,但多重专业化防护机制的组合能够构建更具韧性的智能体。
如下图所示,我们整合了:(1)基于LLM的防护机制;(2)基于规则的防护机制(如正则表达式);(3)OpenAI审核API
共同审查用户输入。




5.1 防护类型


5.2 构建防护机制

设置防护机制以应对您在用例中已识别的风险,并在发现新的漏洞时叠加额外的防护层。
我们总结出以下有效经验法则:

例如,以下是使用Agents SDK设置防护栏的代码示例:
  1. from agents import(
  2.    Agent,
  3.    GuardrailFunctionOutput,
  4.    InputGuardrailTripwireTriggered,
  5.    RunContextWrapper,
  6.    Runner,
  7.    TResponseInputItem,
  8.    input_guardrail,
  9.    Guardrail,
  10.    GuardrailTripwireTriggered
  11. )from pydantic import BaseModel
  12. classChurnDetectionOutput(BaseModel):
  13.    is_churn_risk:bool
  14.    reasoning:str
  15. churn_detection_agent = Agent(
  16.    name="Churn Detection Agent",
  17.    instructions="Identify if the user message indicates a potential customer churn risk.",
  18.    output_type=ChurnDetectionOutput,)@input_guardrailasyncdefchurn_detection_tripwire(
  19.    ctx: RunContextWrapper[None], agent: Agent,input:str|list[TResponseInputItem])-> GuardrailFunctionOutput:
  20.    result =await Runner.run(churn_detection_agent,input, context=ctx.context)return GuardrailFunctionOutput(
  21.    output_info=result.final_output,
  22.    tripwire_triggered=result.final_output.is_churn_risk,)
  23. customer_support_agent = Agent(
  24.    name="Customer support agent",
  25.    instructions="You are a customer support agent. You help customers with their questions.",
  26.    input_guardrails=[Guardrail(guardrail_function=churn_detection_tripwire),],)asyncdefmain():# This should be okawait Runner.run(customer_support_agent,"Hello!")print("Hello message passed")# This should trip the guardrailtry:await Runner.run(agent,"I think I might cancel my subscription")print("Guardrail didn't trip - this is unexpected")except GuardrailTripwireTriggered:print("Churn detection guardrail tripped")
复制代码
Agents SDK 将防护栏(guardrails)视为核心概念,默认采用积极执行模式。在此机制下,主智能体会主动生成输出,同时防护栏并行运行——一旦检测到约束违反即触发异常。
防护栏可通过函数或智能体形式实现,用于执行以下策略:
• 越狱攻击防护(jailbreak prevention)
• 相关性验证(relevance validation)
• 关键词过滤(keyword filtering)
• 禁用名单执行(blocklist enforcement)
• 安全分类(safety classification)
例如,智能体会积极处理数学问题输入,直至math_homework_tripwire防护栏识别违规并抛出异常。

5.3 规划人工干预机制

人工干预是一项关键保障措施,它能使您在不影响用户体验的前提下提升智能体的实际表现。这项措施在部署初期尤为重要,可帮助识别故障、发现边缘案例并建立完善的评估循环。
实施人工干预机制能让智能体在无法完成任务时顺利地移交控制权:(1)在客服场景,这意味着将问题转接给人工客服;(2)对于编程辅助智能体,则意味着将控制权交还用户;
通常有两大触发条件需要人工干预:

6. 结论

基于正确的基础设施和迭代方法,智能体不仅能自动化单一任务,更能以智能化和自适应方式实现整个工作流的自动化,创造真实商业价值。

7. 资源


版权声明:
youcans@xidian 作品,转载必须标注原文链接:
【OpenAI 技术报告】构建智能体(Agent)实用指南

Copyright 2025 youcans, XIDIAN
Crated:2025-04





欢迎光临 AI创想 (http://llms-ai.com/) Powered by Discuz! X3.4