# 客户合同能关掉 OpenAI Agents SDK 的追踪

> 三款 Agent SDK 怎么选，看的不是评分表，而是客户的约束：开工前先问清四个问题。

原文: https://fdetimes.net/zh/analysis/choosing-claude-openai-google-agent-sdk/

OpenAI Agents SDK 的文档写明，追踪功能默认开启。同一份文档也写明，在零数据保留（Zero Data Retention）政策下使用 OpenAI API 的组织不能使用追踪功能。客户合同里的一条条款，就足以拿掉一项默认功能。

这个细节说明了真实项目中 Agent SDK 是怎么选出来的。没有人照着评分表挑选。客户提出的约束会一步步缩小候选范围。这些约束往往在第一次工作会议上就会出现，而且通常是在任何人打开编辑器之前。

对前线部署工程师（FDE）来说，这是一项值钱的能力。第一周选错框架，到第六周就得重写可观测性层、权限层，有时连模型调用层也要重写。下面四个问题可以帮助在 Claude Agent SDK、OpenAI Agents SDK 和 Google ADK 之间做取舍，并附上各自的陷阱。

## 智能体在哪运行，由谁运维？

先问这个问题，因为答案决定了系统出故障时谁来值班。根据 Anthropic 的文档，Claude Agent SDK 把 Claude Code 内部运行的智能体循环、工具集和上下文管理打包成了 Python 和 TypeScript 库。

智能体嵌入在你的应用中，运行在你运维的进程里。OpenAI Agents SDK 同样是用 pip 安装的 Python 库，运行在你的进程中。它还提供沙箱智能体（sandbox agents），在隔离的工作空间中执行任务。

如果客户什么都不想运维，Anthropic 另有一款产品叫 Managed Agents。这是一个托管的运行框架，负责运行智能体循环。会话既可以运行在 Anthropic 管理的云端沙箱中，也可以运行在客户基础设施上的自托管沙箱中。

和客户沟通时，务必把这两款产品分清楚。把它们混为一谈，是在数据存放位置上做出错误承诺的最快途径。

Google ADK 是开源的，设计上可以部署到任何地方。你可以把它容器化，运行在自己的基础设施上，也可以用一条命令部署到 Google Cloud。所以三者都能运行在项目团队控制的基础设施上，差别在于语言支持。

设想一家银行只允许软件运行在自有数据中心，内部团队写 Java。ADK 提供 Python、TypeScript、Go、Java 和 Kotlin 版本，所以应排在首位。

Claude Agent SDK 只提供 Python 和 TypeScript 库。对于其他语言，Anthropic 的文档建议以子进程方式运行 Claude Code CLI 并读取其 JSON 输出。这条路走得通，但客户团队就要多维护一层集成。

## 客户选定模型了吗，还是想保留切换的余地？

很多客户已经和某家模型厂商签了合同，另一些客户则希望保留日后切换的可能。这两类客户需要不同的建议。

OpenAI Agents SDK 通过 Any-LLM 和 LiteLLM 支持非 OpenAI 模型，但文档把这两项集成都标为 beta，只提供尽力而为的支持。

如果客户用的是其他模型，在做出任何承诺之前，你必须在项目的实际工作流上亲自验证该厂商的模型。相比之下，ADK 称自己通过针对各厂商的适配器，可以配合几乎任何生成式模型使用，而不只是 Gemini。

Claude Agent SDK 围绕 Claude Code 自己的智能体构建。最好把它看作已经确定使用 Claude 的客户的选项，而不是用来来回切换模型的一层。建议很简单：如果客户说“还没想好用哪个模型”，就不要因为团队偏好某个 SDK 而选它，然后寄希望于适配器不出问题。

## 谁有权拦截危险操作？

能调用工具的智能体可以做实事：写文件、调用 API、修改数据。所以客户的安全团队会问：靠什么防止它做错事？Anthropic 的文档对此回答得非常精确。

根据 Anthropic 的权限文档，每次工具调用都严格按以下顺序判定：hooks、deny 规则、ask 规则、权限模式、allow 规则，最后是 canUseTool 回调。Hooks 先于一切执行。

即使智能体处于 bypassPermissions 模式，deny hook 依然生效。对于无界面（headless）智能体，Anthropic 建议把 allowedTools 与 permissionMode "dontAsk" 结合使用，锁定允许调用的工具集合。

**要点:** 选择 Agent SDK，本质上是在决定谁掌握数据、谁掌握权限、谁来读错误。

OpenAI Agents SDK 追求极简，只有少数几个原语：智能体、handoffs（一个智能体把工作交给另一个）、护栏（guardrails）和内置追踪。陷阱就在护栏上。输入护栏只在链条中的第一个智能体上运行，输出护栏只在最后一个智能体上运行。

设想一个由三个智能体组成的客服链条，中间那个智能体可以办理退款。如果你把检查放在输入护栏里，并以为它覆盖了整条链，那么中间的智能体根本不会被检查。

解决办法是把检查放在退款工具本身上。SDK 正好为此提供了工具护栏（tool guardrails）。根据文档，每次调用挂载了护栏的函数工具时，工具护栏都会运行：工具执行前检查输入，执行后检查输出。

在发给客户的设计文档里把这一点写清楚。客户的安全团队一定会问这个问题，你应该在他们开口之前就准备好答案。

## 谁来看追踪数据，如何衡量质量？

第四个问题常常拖到第二个月才被提起，那时客户会问智能体上周二为什么给出了错误答案。三款 SDK 的回答各不相同。

OpenAI Agents SDK 内置追踪，默认开启，调试很方便。但如开头所说，采用零数据保留政策的客户用不了这项功能。对这类客户，你必须从第一天起自建可观测性层。

根据 Google Cloud 的文档，ADK 内置评测工具，另有合作伙伴工具，可以检查智能体的执行轨迹。也就是说，不只检查最终答案对不对，还检查智能体走了哪些步骤。

对于必须证明智能体遵循了正确流程的客户，比如申请审批流程，这是实实在在的优势。

Claude Agent SDK 提供 hooks，可以在智能体生命周期的关键节点运行代码，另外还有会话、子智能体和 MCP。Hooks 是挂接可观测性的天然位置。

使用 Claude Agent SDK 的一种做法是：用一个 hook 把每次工具调用记录到客户的日志系统，再基于这些数据构建测试集。搭建需要一些工夫，但数据完全留在客户手里。

## 四个问题，三种答案

每家厂商的文档只讲自家产品。只有把它们放在同样的问题下并排比较，才能看出各自的强项在哪里，哪些地方还需要追问。

| 向客户提的问题 | Claude Agent SDK | OpenAI Agents SDK | Google ADK |
|---|---|---|---|
| 智能体在哪运行，由谁运维？ | Python/TypeScript 库，运行在项目团队运维的进程中；需要托管则用 Managed Agents | Python 库，运行在项目团队的进程中，另有沙箱智能体 | 开源，有 Go 和 Java 版本；容器化后运行在自有基础设施或 Google Cloud 上 |
| 用哪个模型，能否切换？ | 围绕 Claude Code 的智能体构建 | 通过 beta 适配器支持非 OpenAI 模型，尽力而为 | 可配合几乎任何生成式模型使用 |
| 谁拦截危险操作？ | Hooks 先于每一步执行；deny hook 在 bypassPermissions 下依然生效 | 输入护栏只作用于第一个智能体，输出护栏只作用于最后一个；工具护栏在每次调用其挂载的工具时运行 | 概览文档未说明工具拦截机制；做出承诺前先在客户自己的工作流上测试 |
| 谁来看追踪数据，如何衡量质量？ | Hooks 在关键节点运行代码，可记录每次工具调用 | 追踪默认开启，但在零数据保留政策下不可用 | 内置执行轨迹评测工具 |

这张表不评出赢家，它展示的是哪个问题会排除哪个 SDK。如果客户受零数据保留政策约束，同时又需要可观测性，OpenAI Agents SDK 就需要再斟酌。

如果客户需要 Go 或 Java，ADK 优势明显，而 Claude Agent SDK 只能通过调用 CLI 间接使用。如果客户已经选定 Claude，安全团队要求又高，那就重点介绍 Anthropic 有明确判定顺序的权限模型。

## 接下来练什么

一篇教程指出，做完一个演示就停下，是为 FDE 工作学习智能体最没用的方式。

最有效的练习是用两个 SDK 构建同一个智能体，然后有意去破坏它：让一个危险工具绕过护栏、关掉追踪、换一个模型。

看岗位描述时，留意“on-prem”“data residency”“Zero Data Retention”“GCP”或“Java”这类字眼。正是这些约束决定了最终选哪个 SDK。

在简历上，与其写“熟悉 LangChain 和智能体框架”，不如写这样一行：“根据数据保留要求和工具调用权限控制需求，为文档处理智能体选定 SDK”。

这一行说明你真正和客户坐下来谈过。

框架每次发版都会变，这四个问题却变化不大。写代码之前先问这四个问题的 FDE，往往也是返工最少的人。

**本周动手试试:**

- 打开一份客户需求简报（真实或假设的均可），在提到任何 SDK 之前，先用一行字分别回答本文的四个问题。
- 用 Claude Agent SDK 和 OpenAI Agents SDK 分别构建同一个带两个工具的小型智能体。在每个版本中都尝试拦截一个危险工具：Claude 一侧用 deny hook，OpenAI 一侧把工具护栏直接挂在工具上，而不是依赖输入护栏。记录哪里拦住了，哪里有漏网之鱼。
- 用四问对照表写一页决策记录，并在简历的项目经历部分附上链接。

## 信源

- [Agent SDK overview](https://code.claude.com/docs/en/agent-sdk/overview)

- [Configure permissions](https://code.claude.com/docs/en/agent-sdk/permissions)

- [OpenAI Agents SDK](https://openai.github.io/openai-agents-python/)

- [Guardrails - OpenAI Agents SDK](https://openai.github.io/openai-agents-python/guardrails/)

- [Models - OpenAI Agents SDK](https://openai.github.io/openai-agents-python/models/)

- [Tracing - OpenAI Agents SDK](https://openai.github.io/openai-agents-python/tracing/)

- [Agent Development Kit (Google Cloud docs)](https://docs.cloud.google.com/agent-builder/agent-development-kit/overview)

- [Agent Development Kit (ADK)](https://adk.dev/)
