调研日期:2026-07-17
调研对象:OpenAI Agents SDK for Python
参考版本openai-agents v0.18.3(调研时 GitHub 最新版本)
动态图OpenAI_Agents_SDK模块动态展示_重制版.gif

请添加图片描述


目录

  1. 框架定位
  2. 整体架构
  3. 核心对象与模块
  4. Runner 执行循环
  5. Tools 工具体系
  6. 多智能体编排
  7. Guardrails 与人工审批
  8. Context、Session 与状态管理
  9. 结构化输出、结果与流式事件
  10. Tracing 与可观测性
  11. Realtime Agent
  12. Sandbox Agent
  13. 快速入门示例
  14. 企业级参考架构
  15. 生产落地建议
  16. 与其他框架对比
  17. 选型结论
  18. 官方资料

1. 框架定位

OpenAI Agents SDK 是一个面向智能体应用的轻量级运行时与编排框架。它在模型 API 之上提供一套较少但清晰的抽象,由 SDK 负责管理:

  • 多轮 Agent 执行循环;
  • 函数、托管工具、MCP、计算机和 Shell 工具调用;
  • Agent 之间的 Handoff 或 Manager 式协作;
  • 输入、输出和函数工具 Guardrail;
  • 会话记忆、运行上下文与中断恢复;
  • 流式事件、结果对象和生命周期 Hook;
  • Trace、Span、调试与生产监控;
  • Realtime 语音智能体;
  • 文件、命令和代码任务所需的隔离 Sandbox。

对于 OpenAI 模型,SDK 默认使用 Responses API,但增加了更高层的运行时。二者的边界如下:

方式 适合场景
直接调用 Responses API 流程短、调用次数少;开发者希望自行管理 Tool Dispatch、状态和循环
使用 Agents SDK 多阶段任务、工具链、多 Agent、Guardrail、Session、审批、流式事件或可恢复运行
Agents SDK + Sandbox 需要真实文件系统、命令执行、代码修改、产出文件或长时间工作空间

核心判断:Agents SDK 更像“模型驱动的应用运行时”,而不是完整的 BPMN 工作流平台。对强确定性、跨系统事务和复杂补偿流程,仍应配合 Temporal、Celery、消息队列或企业工作流引擎。


2. 整体架构

┌──────────────────────────────────────────────────────────────┐
│                       Application Layer                      │
│       Web / App / API / Chat UI / Voice / Enterprise Bot     │
└──────────────────────────────┬───────────────────────────────┘
                               │
                    Runner.run / run_sync / run_streamed
                               │
┌──────────────────────────────▼───────────────────────────────┐
│                        Agents Runtime                        │
│  Agent │ Model │ Instructions │ Output Type │ Hooks          │
│  Tools │ Handoffs │ Guardrails │ Context │ Session           │
└──────────────┬───────────────┬──────────────┬────────────────┘
               │               │              │
        ┌──────▼──────┐ ┌─────▼──────┐ ┌────▼─────────────┐
        │ Model Layer │ │ Tool Layer │ │ State / Control  │
        │ Responses   │ │ Function   │ │ Session / HITL   │
        │ Realtime    │ │ Hosted/MCP │ │ RunState         │
        └──────┬──────┘ │ Shell/Code │ └────┬─────────────┘
               │        └─────┬──────┘      │
               └──────────────┼─────────────┘
                              │
                    Trace / Span / Evaluation

一条典型请求会经过:

用户输入
  → Runner 启动当前 Agent
  → 输入 Guardrail
  → 模型生成文本、Tool Call 或 Handoff
  → 执行工具或切换 Agent
  → 将观察结果写回模型上下文
  → 重复循环
  → 输出 Guardrail
  → 返回 RunResult
  → 写入 Session 与 Trace

3. 核心对象与模块

3.1 Agent

Agent 是 SDK 的核心配置对象,本质上是一个带运行行为的模型角色。

常见字段:

字段 作用
name Agent 名称
instructions 静态或动态系统指令
prompt OpenAI 平台托管的 Prompt 模板
model 模型名称或模型对象
model_settings 温度、Top-P、Tool Choice 等
tools Agent 可调用的工具
mcp_servers MCP 工具来源
handoffs 可移交的目标 Agent
input_guardrails 首次输入检查
output_guardrails 最终输出检查
output_type Pydantic、dataclass、TypedDict 等结构化输出类型
hooks Agent 生命周期回调
tool_use_behavior 工具结果如何进入下一轮或结束运行

简化定义:

from agents import Agent

agent = Agent(
    name="Technical Assistant",
    instructions=(
        "你是企业技术助手。先核对事实,再使用工具;"
        "无法确认时明确说明,不得伪造工具结果。"
    ),
)

3.2 Runner

Runner 负责执行 Agent 循环,提供三种常见入口:

await Runner.run(agent, input)
Runner.run_sync(agent, input)
Runner.run_streamed(agent, input)

输入可以是:

  • 普通字符串;
  • Responses API 格式的 Input Item 列表;
  • 用于恢复中断任务的 RunState

Runner 还负责:

  • 最大轮数;
  • Tool 并发;
  • Session 读写;
  • Guardrail;
  • Handoff;
  • 审批中断;
  • Trace;
  • Model、Tool 和错误策略覆盖。

3.3 Model

对于 OpenAI 模型,SDK 默认走 Responses API。框架也提供模型抽象,便于使用兼容提供商或自定义 Model Provider。

企业工程中建议:

  • 将模型选择放入配置中心;
  • 不在业务代码中硬编码模型;
  • 按任务分层使用强模型和轻量模型;
  • 对模型降级、超时、重试和限流进行集中治理。

3.4 RunContextWrapper

Context 是一次运行内的依赖注入对象。数据库连接、当前用户、租户、权限、业务 ID 和服务客户端都可以通过 Context 传递,而不是写入 Prompt。

from dataclasses import dataclass
from agents import Agent, RunContextWrapper, function_tool

@dataclass
class UserContext:
    user_id: str
    tenant_id: str
    can_refund: bool

@function_tool
def query_order(ctx: RunContextWrapper[UserContext], order_id: str) -> str:
    return f"tenant={ctx.context.tenant_id}, order={order_id}"

注意:Context 是本地运行时对象,模型不会自动看到其中的数据。需要由 Tool、动态 Instructions 或其他代码显式读取并决定哪些内容可以暴露给模型。


4. Runner 执行循环

Runner 的核心循环可以概括为:

1. 使用当前 Agent 和当前输入调用模型
2. 检查模型输出:
   a. 有最终输出 → 结束
   b. 有 Handoff → 切换当前 Agent,再执行
   c. 有 Tool Call → 执行工具,把结果加入输入,再执行
3. 超过 max_turns → 抛出 MaxTurnsExceeded

伪代码:

current_agent = starting_agent
items = input_items

while turns < max_turns:
    response = model(current_agent, items)

    if response.has_handoff:
        current_agent = response.target_agent
        items += response.handoff_items
        continue

    if response.has_tool_calls:
        observations = execute_tools(response.tool_calls)
        items += response.tool_calls + observations
        continue

    return RunResult(final_output=response.output)

4.1 为什么需要限制轮数

模型可能出现:

  • 工具选择循环;
  • 无效参数反复重试;
  • 多 Agent 互相转移;
  • 读取大量资料后迟迟不结束。

因此生产环境应为不同任务设置:

result = await Runner.run(
    agent,
    user_input,
    max_turns=8,
)

同时还应设置:

  • Tool 超时;
  • API 总超时;
  • 最大 Token;
  • 最大并行工具数;
  • 最大预算;
  • 中止与取消机制。

5. Tools 工具体系

当前 Python SDK 将工具大致分为五类。

类别 说明 示例
OpenAI Hosted Tools 在 OpenAI 服务端运行 Web Search、File Search、Code Interpreter、Hosted MCP、Image Generation
Local/Runtime Tools 在应用或受控环境执行 Computer、Shell、Apply Patch
Function Tools 将 Python 函数封装为工具 数据库查询、HTTP API、算法服务
Agents as Tools 将子 Agent 暴露成 Manager 可调用工具 翻译 Agent、研究 Agent、审核 Agent
Experimental Codex Tool 在工作区执行 Codex 任务 代码分析、修改和验证

5.1 Function Tool

SDK 可以从函数签名、类型注解和 Docstring 自动构建 JSON Schema,并通过 Pydantic 验证输入。

from agents import Agent, Runner, function_tool

@function_tool(timeout=5.0)
async def get_inventory(sku: str, warehouse_id: str) -> dict:
    """查询库存。

    Args:
        sku: 商品编码。
        warehouse_id: 仓库编码。
    """
    return {
        "sku": sku,
        "warehouse_id": warehouse_id,
        "available": 128,
    }

agent = Agent(
    name="Inventory Agent",
    instructions="必须调用库存工具后再回答库存问题。",
    tools=[get_inventory],
)

result = await Runner.run(
    agent,
    "查询 SKU-001 在 WH-SZ-01 的可用库存。",
)
print(result.final_output)

生产工具建议做到:

  • 参数类型严格;
  • 工具名语义明确;
  • Docstring 描述准确;
  • 返回稳定、可序列化的结构;
  • 对业务错误与系统错误分层;
  • 设置超时、幂等键和重试策略;
  • 不向模型返回密钥、原始 SQL、内部堆栈或敏感字段。

5.2 Hosted Tool

Hosted Tool 适合快速获得检索、文件分析和代码执行能力,但仍需关注:

  • 哪些数据会离开本地环境;
  • 数据保留策略;
  • 文件权限;
  • 搜索来源可靠性;
  • 工具费用;
  • 网络和地区可用性。

5.3 MCP

Agent 可通过 mcp_servers 接入 MCP 工具。MCP 适合把企业内部能力标准化为可发现、可调用的工具接口,例如:

  • Git、代码仓库;
  • CRM、ERP、工单系统;
  • 数据仓库;
  • 文件和知识库;
  • 自动化平台;
  • 机器人、视觉和算法服务。

企业 MCP Gateway 应增加:

身份认证
→ 租户隔离
→ Tool 白名单
→ 参数校验
→ 最小权限
→ 审批策略
→ 限流和超时
→ 调用审计
→ 输出脱敏

MCP 只是连接协议,不等于安全边界。远程 MCP Server 的工具说明和返回内容也可能包含恶意或误导性文本。

5.4 Agent as Tool

Manager 模式下,主 Agent 保留控制权,子 Agent 只返回阶段结果。

Manager Agent
 ├─ research_agent.as_tool()
 ├─ sql_agent.as_tool()
 └─ reviewer_agent.as_tool()

它适合:

  • 统一生成最终答案;
  • 控制子任务输入;
  • 聚合多个专家结果;
  • 保留集中式策略与审批。

6. 多智能体编排

SDK 支持两种主要模式。

6.1 Manager:Agents as Tools

用户
  ↓
Manager Agent
  ├─ 调用检索 Agent
  ├─ 调用数据 Agent
  ├─ 调用审核 Agent
  └─ 汇总最终结果

特点:

  • Manager 始终面向用户;
  • 子 Agent 类似专业工具;
  • 适合中心化编排、结果汇总和统一权限控制;
  • 子 Agent 的上下文可以被严格裁剪。

6.2 Handoff

用户
  ↓
Triage Agent
  ├─ transfer_to_billing_agent
  ├─ transfer_to_refund_agent
  └─ transfer_to_technical_agent

Handoff 会把当前会话控制权交给目标 Agent。对模型而言,Handoff 以工具形式呈现。

from agents import Agent, Runner

billing_agent = Agent(
    name="Billing Agent",
    handoff_description="处理账单、发票和扣费问题。",
    instructions="只处理账单相关问题。",
)

technical_agent = Agent(
    name="Technical Agent",
    handoff_description="处理产品故障和技术排查。",
    instructions="先收集环境、版本和错误日志。",
)

triage_agent = Agent(
    name="Triage Agent",
    instructions="判断问题类别并移交给正确的专家。",
    handoffs=[billing_agent, technical_agent],
)

result = await Runner.run(
    triage_agent,
    "升级后服务启动失败,日志提示连接池初始化异常。",
)

6.3 选择原则

需求 推荐模式
主 Agent 统一汇总 Manager
专家直接接管后续对话 Handoff
高风险业务统一决策 Manager
客服路由、语言路由 Handoff
需要并行收集多个结果 Manager + Agents as Tools
需要确定性流程 外部工作流引擎控制,Agent 作为节点

7. Guardrails 与人工审批

7.1 Guardrail 类型

类型 执行位置
Input Guardrail Agent 链的首次用户输入
Output Guardrail 最终输出形成之后
Tool Input Guardrail Function Tool 执行前
Tool Output Guardrail Function Tool 执行后

Guardrail 可以:

  • 允许继续;
  • 替换工具输出;
  • 跳过工具;
  • 触发 Tripwire;
  • 抛出异常并停止运行。

典型检查:

  • 敏感信息;
  • 越权指令;
  • Prompt Injection;
  • 高危操作;
  • 数据格式;
  • 业务合规;
  • 输出中是否存在未验证结论。

需要注意:

  • Tool Guardrail 主要适用于 function_tool
  • Handoff、Hosted Tool 和部分内置执行工具不经过相同的 Tool Guardrail 管线;
  • 不能只配置一个 Guardrail 就认为所有工具都被保护。

7.2 Human-in-the-loop

删除数据、支付、发送外部消息、修改权限和控制设备等操作,应使用审批门。

模型提出 Tool Call
        ↓
参数预检查
        ↓
生成审批中断
        ↓
人工批准 / 拒绝 / 修改
        ↓
恢复 RunState
        ↓
再次校验并执行

高风险工具设计建议:

@function_tool
async def delete_records(
    table: str,
    record_ids: list[str],
    approval_token: str,
) -> dict:
    ...

真正的权限校验必须在工具服务端完成,不能仅依靠 Agent Instructions。


8. Context、Session 与状态管理

8.1 Context

Context 适合保存一次运行内的本地依赖和状态:

  • 用户与租户身份;
  • 权限对象;
  • 数据库连接;
  • 服务客户端;
  • Request ID;
  • 预算;
  • 运行时缓存。

8.2 Session

Session 是跨多次 Agent Run 的对话记忆层。SDK 会在运行前读取历史,在运行后写入新产生的用户消息、模型输出和工具项。

内置或扩展的实现包括:

Session 适用场景
SQLiteSession 本地开发、小型应用
AsyncSQLiteSession 异步 SQLite
RedisSession 多实例、低延迟共享会话
SQLAlchemySession 接入现有关系型数据库
OpenAI Conversations Session OpenAI 托管的会话历史
Encrypted Session 加密和 TTL 包装
自定义 Session 企业自有存储和治理

基本示例:

from agents import Agent, Runner, SQLiteSession

agent = Agent(
    name="Assistant",
    instructions="回答简洁,并利用已有会话上下文。",
)

session = SQLiteSession(
    "tenant-a:user-1001:conversation-42",
    "agent_sessions.db",
)

result1 = await Runner.run(
    agent,
    "我的部署目标是 Jetson Orin NX。",
    session=session,
)

result2 = await Runner.run(
    agent,
    "刚才说的目标设备是什么?",
    session=session,
)

8.3 三种状态不要混淆

状态 生命周期 用途
Context 单次 Run 依赖注入和本地业务状态
Session 多次 Run 对话历史和短期记忆
RunState 中断到恢复 审批、可恢复执行、暂停任务

企业还需要单独建设长期记忆和业务状态,例如:

  • PostgreSQL 业务表;
  • Redis 缓存;
  • 向量数据库;
  • 用户画像;
  • 知识图谱;
  • 任务状态机。

不要把所有状态都塞进聊天历史。


9. 结构化输出、结果与流式事件

9.1 Structured Output

通过 output_type 可以要求最终输出满足类型约束。

from pydantic import BaseModel, Field
from agents import Agent, Runner

class IncidentReport(BaseModel):
    severity: str
    root_cause: str
    evidence: list[str]
    actions: list[str]
    confidence: float = Field(ge=0, le=1)

agent = Agent(
    name="Incident Analyst",
    instructions="只根据输入日志生成事故分析,不确定内容必须降低置信度。",
    output_type=IncidentReport,
)

result = await Runner.run(agent, "日志内容……")
report: IncidentReport = result.final_output

适用于:

  • API 返回;
  • 工单字段;
  • 任务计划;
  • 检测结果;
  • 审批请求;
  • 数据抽取。

结构化输出能约束形状,但不能自动保证事实正确,仍需业务校验。

9.2 RunResult

常用结果面:

属性/方法 用途
final_output 最终文本或结构化对象
last_agent 最终完成任务的 Agent
new_items 本次运行产生的消息、Tool、Handoff 等项
to_input_list() 生成可用于下一轮的本地完整历史
Guardrail Results 查看输入/输出校验
Raw Responses 查看底层模型响应
Context / Usage 查看上下文和使用量
Run State 恢复中断任务

由于 Handoff 可能改变最终 Agent,final_output 的静态类型在框架层面可能是 Any,业务代码应结合最终 Agent 或约定的公共 Output Schema 处理。

9.3 Streaming

Runner.run_streamed().stream_events() 可以接收:

  • 模型流式 Token;
  • Tool Call 事件;
  • Tool Result;
  • Handoff;
  • Agent 切换;
  • 最终输出。

适合:

  • Chat UI;
  • 长任务进度;
  • 实时日志;
  • 语音和多媒体交互。

10. Tracing 与可观测性

Tracing 默认开启,用于记录一次工作流的完整执行轨迹。

Trace 中包含多个 Span:

Trace
 └─ Task Span
    ├─ Turn Span
    │  ├─ Agent Span
    │  ├─ Generation Span
    │  ├─ Function Span
    │  ├─ Guardrail Span
    │  └─ Handoff Span
    └─ Custom Span

可观测内容包括:

  • 模型输入输出;
  • 每轮耗时;
  • 工具参数与结果;
  • Agent 切换;
  • Guardrail 结果;
  • 错误;
  • Token 和使用量;
  • 自定义业务事件。

生产环境建议把 Trace 与以下信息关联:

request_id
tenant_id
user_id
session_id
workflow_name
business_object_id
model
prompt_version
tool_version
release_version

安全注意:

  • 不记录 API Key 和凭证;
  • 对 Tool 参数、文件内容和客户数据脱敏;
  • 配置 Trace 数据访问权限和保留周期;
  • Zero Data Retention 场景需核对 Tracing 可用性;
  • 将业务审计日志与调试 Trace 分开保存。

11. Realtime Agent

Realtime 模块用于低延迟语音或实时会话,主要对象包括:

  • RealtimeAgent:实时专家 Agent;
  • RealtimeRunner:创建实时会话;
  • RealtimeSession:管理连接、事件、历史与工具;
  • RealtimeModel:传输抽象。

典型能力:

  • 音频输入输出;
  • 自动打断检测;
  • 实时 Tool Calling;
  • Handoff;
  • 上下文管理;
  • Guardrail;
  • 使用量与事件监听。

适合:

  • 实时语音客服;
  • 车载助手;
  • 会议助手;
  • 设备操作指导;
  • 低延迟多模态交互。

Realtime 的连接、音频播放和打断状态与普通文本 Runner 不同,应单独设计状态机和前端事件协议。


12. Sandbox Agent

2026 年的 Agents SDK 增强了 Sandbox 能力,用于在受控工作空间内完成真实文件和命令任务。

当任务具有以下特征时适合使用 Sandbox:

  • 需要读取一个目录或代码仓库;
  • 需要创建、修改和保存文件;
  • 需要运行命令、依赖、脚本或测试;
  • 输出 Markdown、CSV、JSONL、网页、截图等制品;
  • 需要暴露本地预览服务端口;
  • 人工审核后继续使用同一个工作区。
Agent Harness(编排)
        │
        ├─ Trusted Services / Model / Policy
        │
        └─ Sandbox Session(执行)
             ├─ Filesystem
             ├─ Shell / Process
             ├─ Packages
             ├─ Ports
             └─ Stateful Workspace

推荐将编排 Harness 与执行 Sandbox 分离:

  • Harness 在可信基础设施中运行;
  • Sandbox 只获得任务需要的文件、网络、命令和凭证;
  • 使用 Manifest 描述初始工作区;
  • 使用 Capability 声明沙箱能力;
  • 对外部网络、挂载、环境变量和端口采用最小权限。

Sandbox 不等于绝对安全。仍需容器隔离、内核安全、网络策略、密钥代理、文件扫描、资源限额和销毁策略。


13. 快速入门示例

13.1 安装

python -m venv .venv
source .venv/bin/activate

pip install -U openai-agents

export OPENAI_API_KEY="YOUR_API_KEY"

13.2 单 Agent + Function Tool + 结构化输出

import asyncio
from pydantic import BaseModel, Field
from agents import Agent, Runner, function_tool


class DeploymentAdvice(BaseModel):
    platform: str
    recommended_runtime: str
    actions: list[str]
    risk_level: str
    confidence: float = Field(ge=0.0, le=1.0)


@function_tool(timeout=5.0)
async def query_device_profile(device: str) -> dict:
    """查询设备的部署画像。

    Args:
        device: 设备型号。
    """
    profiles = {
        "Jetson Orin NX 16GB": {
            "memory_gb": 16,
            "runtime": ["TensorRT", "ONNX Runtime", "CUDA"],
            "notes": "适合边缘视觉和中小型多模态模型。",
        }
    }
    return profiles.get(device, {"error": "device_not_found"})


agent = Agent(
    name="Edge Deployment Architect",
    instructions=(
        "根据工具返回的真实设备信息提出部署建议。"
        "禁止编造不存在的硬件参数。"
    ),
    tools=[query_device_profile],
    output_type=DeploymentAdvice,
)


async def main() -> None:
    result = await Runner.run(
        agent,
        "为 Jetson Orin NX 16GB 设计轻量视觉模型部署方案。",
        max_turns=6,
    )
    print(result.final_output.model_dump_json(indent=2))


if __name__ == "__main__":
    asyncio.run(main())

13.3 多 Agent Handoff

from agents import Agent, Runner

vision_agent = Agent(
    name="Vision Deployment Agent",
    handoff_description="负责 ONNX、TensorRT、MNN 和视觉模型部署。",
    instructions="给出可落地的模型转换、预后处理和性能验证方案。",
)

robot_agent = Agent(
    name="Robot Integration Agent",
    handoff_description="负责 ROS2、传感器、控制接口和机器人系统集成。",
    instructions="重点考虑 ROS2 接口、时序、坐标系和安全控制。",
)

triage_agent = Agent(
    name="Engineering Triage Agent",
    instructions="识别工程问题类型,并移交给最合适的专家。",
    handoffs=[vision_agent, robot_agent],
)

result = await Runner.run(
    triage_agent,
    "如何把 PointPillars ONNX 推理接入 ROS2 点云节点?",
)
print(result.final_output)

14. 企业级参考架构

┌─────────────────────────────────────────────────────────────┐
│ Web / App / 企业微信 / API / Voice                         │
└──────────────────────────┬──────────────────────────────────┘
                           │
                 API Gateway / IAM / WAF
                           │
┌──────────────────────────▼──────────────────────────────────┐
│                   Agent Application Service                 │
│  FastAPI / OpenAI Agents SDK / Prompt Registry             │
│  Runner / Agents / Handoff / Guardrails / HITL             │
└────────────┬─────────────┬─────────────┬────────────────────┘
             │             │             │
       ┌─────▼─────┐ ┌────▼──────┐ ┌────▼─────────────┐
       │Model GW   │ │Tool/MCP GW│ │State & Workflow │
       │Routing    │ │Auth/Policy│ │Redis/PostgreSQL │
       │Fallback   │ │Rate Limit │ │Queue/Temporal   │
       └─────┬─────┘ └────┬──────┘ └────┬────────────┘
             │             │             │
       OpenAI Models   ERP/CRM/DB    Session/RunState
                       RAG/Vector DB
                       Vision/C++ SDK
                       ROS2/Devices
                           │
┌──────────────────────────▼──────────────────────────────────┐
│ Observability & Governance                                  │
│ Trace / Eval / Audit / Cost / PII Redaction / Alert         │
└─────────────────────────────────────────────────────────────┘

对于算法和机器人项目,建议将底层能力封装为确定性工具:

Agent
  → Tool Gateway
      → Python Algorithm Service
      → C++ Inference Runtime
      → ROS2 Service / Action
      → Database / Object Storage

Agent 负责理解意图、组织任务和生成解释;C++、ROS2、规则引擎负责确定性执行与安全约束。


15. 生产落地建议

15.1 Tool Contract

每个工具都应定义:

名称
用途
输入 Schema
输出 Schema
身份权限
租户范围
幂等策略
超时
重试
副作用等级
审批要求
审计字段
错误码

15.2 风险分级

等级 示例 策略
L0 只读 搜索、查询、总结 自动执行
L1 可逆写入 创建草稿、添加标签 自动或事后确认
L2 外部影响 发邮件、更新工单 执行前确认
L3 高风险 支付、删除、权限修改 强身份 + 人工审批 + 双重校验
L4 物理控制 机器人运动、工业设备 Agent 仅建议,安全控制器最终裁决

15.3 Prompt Injection 防护

需要组合防护:

  • 不把外部文档当作系统指令;
  • 工具白名单;
  • 参数 Schema;
  • 权限在服务端校验;
  • 检索内容与控制指令分离;
  • 对 URL、文件和 MCP 输出标记来源;
  • 高风险工具审批;
  • 限制 Agent 可访问的密钥和网络;
  • 对关键决策增加规则引擎。

15.4 Evaluation

至少评测:

任务完成率
事实正确率
工具选择准确率
工具参数正确率
Handoff 路由准确率
Guardrail 召回率和误杀率
平均轮数
延迟
Token 和工具成本
中断恢复成功率
人工接管率

为 Prompt、Tool Schema、模型和代码建立版本号,使用固定数据集做回归测试。

15.5 不建议的做法

  • 让模型直接拼接 SQL 并连接生产库;
  • 把管理员 Token 放进 Context 后直接交给任意工具;
  • 用 Prompt 代替权限控制;
  • 所有工具都开放给所有 Agent;
  • 不设置最大轮数和超时;
  • 把 Session 当作业务数据库;
  • 不记录 Agent、模型、Prompt 和 Tool 版本;
  • 让 Agent 绕过设备安全控制器直接驱动执行机构。

16. 与其他框架对比

维度 OpenAI Agents SDK LangGraph CrewAI Dify
核心定位 轻量 Agent Runtime 状态图与持久化编排 角色式多 Agent 低代码 AI 应用平台
开发方式 Python/TypeScript SDK Python/TS 图结构 Python Role/Crew/Flow 可视化工作流
OpenAI 集成 最紧密 良好 良好 良好
确定性复杂流程
Handoff 原生 可实现 角色协作 节点路由
Session 原生多后端 Checkpoint/Store Memory 平台会话
Guardrail 输入/输出/函数工具 自定义节点/中间件 Guardrail 平台策略与节点
Tracing 原生 LangSmith 等 平台/第三方 平台日志
Sandbox 原生增强 外部组合 外部组合 代码节点/外部执行
低代码
适合 OpenAI 优先、工具型、多 Agent、实时和 Sandbox 应用 长流程、状态机、人工审批、恢复 内容、研究和角色协作 知识助手与快速业务应用

选择建议:

  • OpenAI 模型优先、需要 Tool/Handoff/Realtime/Sandbox:OpenAI Agents SDK;
  • 复杂状态图、长流程和强确定性:LangGraph;
  • 快速角色化多智能体原型:CrewAI;
  • 业务人员配置知识库和流程:Dify;
  • 大型企业流程:Agents SDK + 外部工作流引擎,而不是单独依赖 Agent 循环。

17. 选型结论

OpenAI Agents SDK 的核心优势是:

  1. 抽象少,入门和集成成本较低;
  2. Runner 自动管理模型、Tool、Handoff 和 Guardrail 循环;
  3. Function Tool、Hosted Tool、MCP、Agent as Tool 和 Sandbox 覆盖较完整;
  4. 原生支持结构化输出、Session、Streaming 和 Tracing;
  5. 与 Responses API、Realtime 和 OpenAI 模型能力演进同步;
  6. 既能构建单 Agent,也能构建中心化或去中心化多 Agent。

主要限制是:

  1. 它不是完整的企业工作流和事务引擎;
  2. 权限、租户、审计、成本和工具治理仍需业务侧建设;
  3. 模型控制流具有概率性;
  4. Guardrail 的覆盖范围因 Tool 类型而异;
  5. 复杂长期记忆需要外部存储和检索体系;
  6. 高风险操作仍必须由服务端规则和人工审批控制。

推荐企业组合:

OpenAI Agents SDK
+ FastAPI
+ Pydantic
+ Tool/MCP Gateway
+ PostgreSQL / Redis
+ RAG / File Search
+ Human Approval
+ Trace / Eval / Audit
+ Temporal 或消息队列(复杂长流程)
+ Sandbox(文件、命令和代码任务)

对于视觉、C++ 推理和 ROS2 项目:

Agents SDK 负责意图理解与任务编排
Tool Gateway 负责鉴权与协议转换
Python/C++/ROS2 服务负责确定性执行
规则引擎与安全控制器负责最终约束

18. 官方资料

  1. OpenAI Agents SDK Python 文档
    https://openai.github.io/openai-agents-python/

  2. Agents
    https://openai.github.io/openai-agents-python/agents/

  3. Running Agents
    https://openai.github.io/openai-agents-python/running_agents/

  4. Tools
    https://openai.github.io/openai-agents-python/tools/

  5. Handoffs
    https://openai.github.io/openai-agents-python/handoffs/

  6. Guardrails
    https://openai.github.io/openai-agents-python/guardrails/

  7. Sessions
    https://openai.github.io/openai-agents-python/sessions/

  8. Tracing
    https://openai.github.io/openai-agents-python/tracing/

  9. Sandbox Agents
    https://developers.openai.com/api/docs/guides/agents/sandboxes

  10. OpenAI Agents SDK GitHub
    https://github.com/openai/openai-agents-python

  11. 2026 年 Agents SDK Sandbox 演进说明
    https://openai.com/index/the-next-evolution-of-the-agents-sdk/


说明:SDK 更新较快。生产项目应锁定依赖版本,并在升级前检查 Release Notes、运行回归测试和验证 Tool/Session/Sandbox 兼容性。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐