openai-agents-python Guardrail 实战指南:多智能体输入输出校验的 3 个卡口一次讲清

openai-agents-python Guardrail 实战指南:多智能体输入输出校验的 3 个卡口一次讲清 openai-agents-python Guardrail 实战指南多智能体输入输出校验的 3 个卡口一次讲清【免费下载链接】openai-agents-pythonA lightweight, powerful framework for multi-agent workflows项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-python生产环境的智能体被用户一句“把我的地址发我”问得原样回了手机号和邮箱直接怼进 200 人的客户群。这类翻车做多智能体的人多半都踩过。openai-agents-python 内置的 Guardrail 防护机制就是冲着这个问题来的本文带你把输入、工具调用、输出三个卡口都配上检查从此敏感数据出不了你的智能体。Guardrail 到底在防什么把它想象成机场安检。你的智能体是一架航班用户输入是进港旅客最终回答是出港旅客——两个方向各设一道检查输入防护Input Guardrail只在整个链条的入口 agent 上跑用户输入刚进来就拦。官方用“防用户让智能体做数学作业”做例子本质是过滤恶意请求、跑题请求让贵的模型别为垃圾输入烧 token。输出防护Output Guardrail只在产出最终输出的 agent 上跑回答返回给用户之前过一遍典型用途是查敏感数据PII、查合规格式。工具防护Tool Guardrail挂在你自己写的 function tool 上每次调用前后各查一次。多智能体里有 handoff、有子 agent 时中间的每一次工具调用都不在“入口/出口”的检查范围内只有工具防护能覆盖——这是新手最容易漏的一层。关于“会不会拖慢主流程”默认情况下输入防护和主模型并行执行两者同时起跑主流程几乎不感知延迟代价是如果 tripwire 触发主模型可能已经消耗了部分 token。把输入防护设为run_in_parallelFalse就是阻塞模式检查不过主 agent 根本不启动token 和工具副作用全省了。怎么选看你更怕慢还是更怕烧钱。按环节给智能体加装防护三类防护挂在不同位置触发时机各不相同。官方完整说明见 docs/guardrails.md核心源码在 src/agents/guardrail.py 和 src/agents/tool_guardrails.py。下面只留骨架。输入侧防护怎么加触发时机用户输入到达入口 agent 时即刻执行默认与主模型并行。骨架就是一个小模型 agent 一个装饰过的函数小模型输出结构化判断你只关心那个布尔值from agents import Agent, GuardrailFunctionOutput, Runner from agents.decorators import input_guardrail guardrail_agent Agent( nameGuardrail check, instructionsCheck if the user is asking for math homework., output_typeMathHomeworkOutput, ) input_guardrail async def math_guardrail(ctx, agent, input): result await Runner.run(guardrail_agent, input, contextctx.context) return GuardrailFunctionOutput( output_inforesult.final_output, tripwire_triggeredresult.final_output.is_math_homework)点评guardrail 本质也是个 agent拿便宜的小模型干重活就行tripwire 触发时抛InputGuardrailTripwireTriggered你 catch 住回一句礼貌拒绝用户永远看不到裸异常。完整交互版在 examples/agent_patterns/input_guardrails.py。工具调用侧防护怎么配触发时机每次自定义 function tool 被调用时输入防护在工具执行前跑输出防护在执行后跑。工具防护的结果有两种风格reject_content只驳回这一次调用附理由主流程继续走raise_exception直接停线from agents import ToolGuardrailFunctionOutput from agents.decorators import tool, tool_input_guardrail tool_input_guardrail def block_secrets(data): args json.loads(data.context.tool_arguments or {}) if sk- in json.dumps(args): return ToolGuardrailFunctionOutput.reject_content( Remove secrets before calling this tool.) return ToolGuardrailFunctionOutput.allow() tool(tool_input_guardrails[block_secrets]) def classify_text(text: str) - str: Internal text routing. return flength:{len(text)}点评驳回和停线怎么选取决于你能不能容忍“带着错误参数继续跑”。examples/basic/tool_guardrails.py 里两种都演示了SSN 直接停线手机号软驳回。输出侧防护怎么加触发时机产出最终输出的 agent 完成后、结果返回用户前执行。形态和输入侧完全对称——把final_output喂给小模型查一遍发现手机号等 PII 就抛OutputGuardrailTripwireTriggered。官方示例 examples/agent_patterns/output_guardrails.py 就是一个查“回复里有没有电话号码”的完整实现。点评输出侧是对外发言的最后一道关规则建议放最严的另外注意它没有并行选项永远在 agent 跑完之后执行。不同业务的防护配方不是所有业务都要全副武装下面四组组合是项目 examples/ 里真实跑过的业务场景推荐防护组合关键设置参考示例客服对话输入防护拦跑题/恶意请求 输出查 PII输入侧用run_in_parallelFalse省钱examples/agent_patterns/input_guardrails.py金融/个人数据查询工具输入 工具输出双防护reject_content软驳回raise_exception停线examples/basic/tool_guardrails.py内容生成输出防护查格式与敏感信息output_type结构化输出 tripwire 布尔判断examples/agent_patterns/output_guardrails.py流式长文本流式输出中每 N 字符查一次坏输出早停每 300 字符触发一次检查任务examples/agent_patterns/streaming_guardrails.py多智能体编排场景下防护跟着 agent 和工具走由 runner 统一调度⚠️ 上线前自检清单别等生产环境给你上课发布前把这份清单走一遍执行模式选对了在意 token 和工具副作用输入侧改run_in_parallelFalse在意首字延迟保持默认并行。每个 tripwire 都写了降级话术InputGuardrailTripwireTriggered和OutputGuardrailTripwireTriggered都能 catch用户只该看到一句礼貌拒绝不该看到裸 traceback。误判可追溯guardrail 输出结构化判断bool reasoning线上误判时直接看output_info里的 reasoning别凭感觉改规则。建了回归测试集正常输入和恶意输入混在一起跑一轮两边通过率都记下来作为规则变更前的基线。多语言跑过至少一轮只测过中文或只测过英文的 guardrail prompt不敢直接上生产。工具防护覆盖面确认过官方文档明确 hosted 工具WebSearch、FileSearch 等和内置执行工具不走工具防护流水线用到这类工具的检查得写在工具内部。性能基线测过了开防护前后端到端延迟对比一下guardrail 本身比主模型还慢说明该换更小的模型了。流式场景单独验证输出防护只对完整输出生效长文本流式输出照抄每 N 字符检查的做法别等全文生成完才查。落地首步先做输入侧挑一个便宜小模型阻塞模式部署一条拦恶意输入的 guardrail先保证“无论怎么输贵模型不做危险的事”再按痛感依次补工具侧和输出侧。【免费下载链接】openai-agents-pythonA lightweight, powerful framework for multi-agent workflows项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-python创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考