进阶
用 OpenAI Agents SDK 搭生产级 AI Agent(沙箱 + 工具 + MCP + 多 Agent 协作)
2026 年 4 月,OpenAI 把 Agents SDK 从「轻量编排工具」升级成了 「沙箱原生的 Agent 运行时」(v0.14+):内置模型原生 harness、原生沙箱执行、MCP 一等公民、AGENTS.md、handoffs 多 Agent 协作和 guardrails 护栏。一句话——它解决的是「怎么把 Agent 真跑进生产,而不是停在 demo」。本教程手把手用 Python 从零搭一个能读写文件、调工具、接 MCP、多 Agent 协作的生产级智能体,并补上护栏与可观测性。
🟢 本教程适合:会一点 Python、想把 Agent 真正放进业务系统(而不是直接问问答)的开发者。你只需要一台能联网的电脑和一个 OpenAI API Key。
先搞懂:Agents SDK 的 5 个核心原语
用一句话理解:Agent 是「有职责的员工」,Runner 是「派活儿的主管」,Tool 是「它能用的工具」,Handoff 是「甩锅给更专业的同事」,Guardrail 是「上岗前的安检」。
| 原语 | 通俗解释 | 典型场景 |
|---|---|---|
| Agent | 定义职责边界的智能体 | 写作助手、报表助手、代码助手 |
| Runner | 管理一次运行的生命周期 | 单轮执行、流式、断点恢复 |
| Tool | 函数调用 / MCP 服务 / 托管工具 | 查库、检索、执行命令 |
| Handoff | 多 Agent 间交接任务 | 研究 Agent 交给写作 Agent |
| Guardrail | 输入/输出约束与校验 | 合规审查、敏感操作拦截 |
别再用「一个超大 prompt」硬撑:先把能力拆成单一职责的 Agent,再用 handoff 串联,后期才容易维护和扩展。这是 Agents SDK 的设计哲学,也是生产稳定的前提。
Step 1:装好环境、拿到钥匙
1 一行命令安装 + 配置 API Key
# 安装(Python 3.10+)
pip install "openai-agents>=0.14.0"
# 设置环境变量(bash / zsh)
export OPENAI_API_KEY="sk-..."
# 验证安装
python -c "import agents; print(agents.__version__)"
💡 国内网络访问 OpenAI 不稳时,可设
OPENAI_BASE_URL 指向兼容网关;但 SandboxAgent、MCP 等核心能力不依赖网关,本教程示例均能在标准环境跑通。Step 2:跑通最小的 Agent
2 三行代码,第一个会干活的 Agent
import asyncio
from agents import Agent, Runner
async def main():
agent = Agent(
name="助理",
instructions="你是技术助手,优先给可执行步骤。",
)
result = await Runner.run(agent, "给我一个 Python 项目接入 MCP 的最小步骤")
print(result.final_output)
asyncio.run(main())
💡 到这里其实你已经有一个能对话、能推理的 Agent 了。Runner 会自动管理「模型输出 → 调工具 → 回灌结果 → 再推理」的循环,直到产出最终答案。
Step 3:给它装上「函数工具」
3 用 @function_tool 把任意 Python 函数变工具
函数名会变成工具名,docstring 变成工具描述,类型注解变成参数 schema——你几乎零额外声明:
from typing import Annotated
from agents import Agent, Runner, function_tool
@function_tool
def query_kb(keyword: str) -> str:
"""查询知识库并返回摘要。"""
fake_db = {"mcp": "MCP 用于让模型调用外部工具和资源。"}
return fake_db.get(keyword.lower(), "未找到相关内容")
agent = Agent(
name="研究助手",
instructions="先调用 query_kb,再给 3 条实践建议。",
tools=[query_kb],
)
result = Runner.run_sync(agent, "请解释 MCP")
print(result.final_output)
工具签名要稳:函数入参尽量收窄、加 Annotated 描述,避免模型反复试错调用。每个工具都要定义「失败返回格式」,方便 Agent 重试或降级。
Step 4:用 SandboxAgent 隔离执行(读写文件 / 跑命令)
4 让 Agent 在「隔离车间」里改文件、跑代码
这是 v0.14 最关键的能力:Agent 在受控沙箱里读写文件、执行命令,不污染你的真机。内置 shell 和 apply_patch 工具,免手写:
from agents import Agent, Runner
from agents.sandbox import SandboxAgent
agent = SandboxAgent(
name="代码助手",
instructions="根据需求修改文件,然后运行测试验证。",
sandbox={"backend": "local"}, # local / containerized / hosted
)
result = Runner.run_sync(
agent,
"在 /workspace 里创建 hello.py,写一个 add 函数和测试",
)
print(result.final_output)
💡 用
local 后端时务必确认工作目录隔离;生产环境推荐 containerized 或托管沙箱(Cloudflare、E2B、Modal 等),把「执行框架」与「算力」解耦,更安全也更省。Step 5:接上 MCP 工具(连外部系统)
5 把 MCP 服务当一等公民注册进来
from agents import Agent, Runner
from agents.mcp import MCPServerStdio
mcp_server = MCPServerStdio("python", args=["my_mcp_server.py"])
agent = Agent(
name="MCP Agent",
instructions="你可以调用 MCP 工具完成任务。",
mcp_servers=[mcp_server],
)
result = Runner.run_sync(agent, "查询数据库中的用户列表")
MCP 工具和函数工具共享同一个命名空间,Agent 自己决定调哪个;tracing 里会标注 MCP 调用,敏感数据自动脱敏。想复用现成工具生态,先看本中心《MCP 协议实战》《Composio 工具集成》两篇。
Step 6:多 Agent 协作(handoff)
6 一个 Router 调度多个专家 Agent
from agents import Agent, Runner
research = Agent(name="研究", instructions="只做资料检索与综述。")
writer = Agent(name="写作", instructions="只把研究结果写成报告。")
router = Agent(
name="协调",
instructions="先交给研究 Agent,再 handoff 给写作 Agent。",
handoffs=[research, writer],
)
result = Runner.run_sync(router, "调研 Agent 框架趋势并出一份简报")
💡 别把所有能力堆进一个超大 Agent。先拆成「单一职责」再 handoff 串联——这和阿里云 AgentTeams 的 Leader-Worker、Google ADK 的 Planner-Writer 思路一致,本中心都有对应教程可交叉参考。
Step 7:加护栏 + 上线(guardrails 与可观测性)
7 上岗前安检 + 全链路 tracing
from agents import Agent, Runner, input_guardrail
@input_guardrail
async def no_prompt_injection(ctx, agent, inp):
# 简单示例:拦截含「忽略以上指令」的输入
if "忽略" in inp:
raise GuardrailTripwire("检测到注入尝试")
agent = Agent(name="安全助手", instructions="...", input_guardrails=[no_prompt_injection])
# 默认开启 tracing,按 run_id 追踪每一步
🎉 恭喜!你已经完整跑通「装环境 → 最小 Agent → 函数工具 → 沙箱执行 → MCP → 多 Agent → 护栏上线」的生产级链路。下一步可补 AGENTS.md 项目指令、人工审批(human-in-the-loop)和 CI 集成,参考本中心《AI Agent 安全加固》《可观测性实战》两篇。
常见问题速查
| 你遇到的现象 | 大概率原因 & 解决 |
|---|---|
| 报缺少 openai-agents | Step 1 没装或装错 Python 环境,确认 pip 对应解释器 |
| Agent 反复调错工具 | 工具输入范围太宽,收窄入参并加 Annotated 描述 |
| 沙箱改到了真机文件 | local 后端工作目录没隔离,改用 containerized/hosted |
| 多 Agent 互相「抢答」 | 每个 Agent 职责边界不清,用 handoff 明确交接 |