跳到主内容

OpenAI Agents SDK 入门实战:Agent、Handoff 与 Guardrail 三件套跑通第一个智能体

100%
OpenAI Agents SDK 入门实战:Agent、Handoff 与 Guardrail 三件套跑通第一个智能体

OpenAI Agents SDK 三句话讲完:Agent 定义角色,Handoff 转交任务,Guardrail 拦危险输入

OpenAI Agents SDK 是官方开源的轻量智能体框架(Python 端 pip install openai-agents),它的设计哲学是「原语少但正交」:Agent 管配置,Runner 管循环,Handoff 管接力,Guardrail 管围栏。本文带你把四个原语串起来,跑通第一个生产可用的智能体。

最小可运行示例

from agents import Agent, Runner

agent = Agent(name="助手", instructions="你是一个简洁的中文助手")
result = Runner.run_sync(agent, "用一句话解释递归")
print(result.final_output)

Runner 有三个入口:run_sync() 同步阻塞、run() 异步、run_streamed() 流式。底层是一个固定循环:调 LLM → 有工具调用就执行再回填 → 有 handoff 就切换当前智能体再来一轮 → 产出最终输出就结束,超过 max_turns 抛 MaxTurnsExceeded。理解这个循环,后面所有行为都能推出来。

Handoff:让专业的事交给专业的智能体

Handoff 是一次「控制权移交」:前台智能体判断当前问题属于哪个专域,把对话连同输入一起交给对方。典型用法是分诊模式:

from agents import Agent

refund = Agent(name="退款专员", instructions="只处理退款流程")
billing = Agent(name="账单专员", instructions="只处理账单查询")
triage = Agent(
    name="前台",
    instructions="识别用户意图并转交对应专员",
    handoffs=[refund, billing],
)

转交时可用 handoff_input_filter 清洗传给下一个智能体的输入,比如剥掉内部系统提示。深层的模式拆解可以参考本站的智能体任务移交一文。

Guardrail:在 LLM 跑起来之前先拦一道

护栏和 handoff 是独立机制:护栏在输入进入主循环前(或输出离开前)执行校验,不通过直接触发 tripwire 中止。官方推荐用一个小模型做判断:

from agents import Agent, Runner, InputGuardrail, GuardrailFunctionOutput
from pydantic import BaseModel

class Check(BaseModel):
    is_valid: bool
    reasoning: str

guard_agent = Agent(
    name="问题筛选",
    instructions="判断问题是否属于业务范围,不属于则 is_valid=False",
    output_type=Check,
)

async def guard(ctx, agent, input_data):
    r = await Runner.run(guard_agent, input_data, context=ctx.context)
    return GuardrailFunctionOutput(
        output_info=r.final_output_as(Check),
        tripwire_triggered=not r.final_output.is_valid,
    )

main = Agent(name="客服", instructions="...", input_guardrails=[InputGuardrail(guardrail_function=guard)])

捕获 InputGuardrailTripwireTriggered 异常即可优雅拒绝越界请求。注意护栏是智能体级的,要全组织统一策略时官方另提供了集中式 Guardrails 库。

可观测性:Tracing 默认全开

SDK 内置追踪,默认记录 LLM 生成、工具调用、 handoff 、护栏触发全过程,可直接在 Traces 面板里看瀑布图。三件事值得知道:

  • 整次 Runner.run() 自动包一个 trace,多次调用想合并进同一 trace 就用 with trace("工作流名"): 包住;
  • 环境变量 OPENAI_AGENTS_DISABLE_TRACING=1 可全局关闭,ZDR(零数据保留)组织默认不可用;
  • 长驻 worker(Celery/FastAPI 后台任务)里要即时上报,在 trace 结束后调 flush_traces()。
调试智能体的第一动作永远是看 trace 而不是改提示词——循环卡在哪一轮、工具返回了什么,trace 里都有。

什么时候选 Agents SDK

  • 选它:代码优先、要自己控制工具实现与部署、 Python/TypeScript 技术栈、需要 handoff 与护栏这类结构化编排;
  • 不选它:只想可视化拖拽搭流程(用 Coze/Dify 更快),或需要托管运行时(看 Agents API)。两者对比可参考本站的智能体编排架构文。

延伸阅读(站内)

Agents SDK 免费吗?
SDK 本身开源免费,但底层调用 OpenAI 模型按 API 用量计费。护栏若用小模型判断,也会产生相应调用量。

Handoff 和「把子智能体当工具调用」有什么区别?
Handoff 是控制权完全移交,对话由接手的智能体接管并产出最终回复;智能体当工具(agent-as-tool)则是主智能体保留控制权,拿到子智能体的返回值继续自己跑。前者适合分诊,后者适合委托查询。

max_turns 该设多少?
默认有限值可防失控循环。简单问答 5-10 足够;带多步工具调用的任务按「每次工具往返算一轮」估算再留 50% 余量。确需长跑可设 None,但务必配合护栏与人工审批点。

参考来源:openai.github.io/openai-agents-python 官方文档(Running agents / Tracing);OpenAI Cookbook 治理指南。本文为原创整理。

这篇有帮助吗?
云上的幻象
云上的幻象查看主页

七彩云博客,分享 WordPress 建站实战与 AI 工具测评,覆盖服务器运维、站长工具、软件资源与电商运营干货,专注原创实用的主题插件、网站加速与安全优化教程。

892文章4评论

相关文章

评论 (0)

欢迎你,新朋友,感谢参与互动!文明发言,理性交流 · 首次评论将在审核后展示