AI Contract-First Tool/API:契约优先集成
Contract-first AI integration 的核心是: 先定义 tool/API/event 的结构、权限、副作用、错误、版本和证据要求, 再让模型或 agent 在这些受控契约内行动。
Contract-First AI Tool / API Design with OpenAPI / AsyncAPI 解读
配对阅读:本篇的操作手册版(模板/RACI/门禁/runbook)是
docs/AI_CONTRACT_FIRST_TOOL_API_DESIGN_OPENAPI_ASYNCAPI_PLAYBOOK.md。第一遍读本篇建立原理与架构判断;第二遍做案例时再用 playbook 查表落地,两者不需要重复精读。
核心问题: AI agent 不能靠 prompt 文本“请调用正确工具”安全集成企业系统。工具、API、事件、结构化输出、权限、审批、幂等和审计都需要契约优先设计。
Source Anchors
| Source | Link | 用途 |
|---|---|---|
| OpenAPI Specification | https://spec.openapis.org/oas/latest.html | 参考 HTTP API 契约描述, 用于 tool/API 的 operation、schema、security、response 设计(当前最新 v3.2.0,发布 2025-09) |
| AsyncAPI Specification | https://www.asyncapi.com/docs/reference/specification/latest | 参考事件驱动和消息系统契约, 用于 agent event、workflow event、notification event(当前参考规范为 v3.1.0,访问日期: 2026-07-01) |
| JSON Schema | https://json-schema.org/ | 参考结构化输入输出、tool arguments、event payload、model response schema(现行稳定版本 draft 2020-12,访问日期: 2026-07-01) |
| CloudEvents | https://cloudevents.io/ | 参考事件 metadata 一致性, 支撑跨系统事件追踪和路由(访问日期: 2026-07-01) |
| OpenTelemetry | https://opentelemetry.io/docs/ | 参考 trace、metrics、logs, 把契约执行连接到 runtime observability 和 evidence(访问日期: 2026-07-01) |
核心导读
Contract-first AI integration 的核心是: 先定义 tool/API/event 的结构、权限、副作用、错误、版本和证据要求, 再让模型或 agent 在这些受控契约内行动。
Prompt 可以提出意图, 但不能成为企业系统边界。真正的边界应由 OpenAPI、AsyncAPI、JSON Schema、policy、approval、idempotency、telemetry 和 contract testing 共同形成。否则 agent 只是把自然语言不确定性直接接到了核心系统。
金融零售场景下, 契约优先尤其关键: 查询、写备注、发通知、退款、冻结、报送监管材料都不是同一类动作。每个动作必须被分级、授权、验证、审计, 并能在变更时跑回归。
问题定义
低成熟度的工具调用设计通常像这样:
System prompt: You can call account lookup, refund, email, and case update tools.
这种做法把最关键的控制边界放进自然语言约定, 会产生一组系统性风险:
| 风险 | 说明 |
|---|---|
| Tool boundary 模糊 | 模型不知道每个工具的真实权限、副作用、业务限制和禁止场景 |
| 参数不稳定 | 自然语言无法保证字段、类型、枚举、必填项、格式和范围 |
| 错误处理弱 | timeout、partial failure、validation error、business error 没有统一语义 |
| 审批缺失 | 高风险动作是否需要人工审批不能只靠 prompt 保证 |
| 版本不可控 | API 变化后 prompt、eval、调用端和审批规则可能不同步 |
| 审计困难 | 无法证明当时使用的 contract、policy、payload、approval 和结果 |
| 安全暴露 | prompt injection 可能诱导越权调用、扩大工具发现范围或泄露数据 |
企业 AI agent 的集成原则应是:
Prompt proposes.
Contract constrains.
Policy authorizes.
Telemetry proves.
Human approves when risk requires.
架构模型/核心原理
六类 AI 契约
AI 系统至少需要六类契约共同工作:
| Contract type | 描述 | 代表技术/产物 |
|---|---|---|
| Tool contract | Agent 可调用什么工具, 输入输出和副作用是什么 | OpenAPI operation、JSON Schema、tool card |
| Event contract | Agent/workflow 发布或消费什么事件 | AsyncAPI、CloudEvents |
| Structured output contract | 模型必须返回什么结构 | JSON Schema、constrained decoding、validator |
| Policy contract | 哪些角色、数据、场景、风险等级允许调用 | OPA/Cedar/DMN、policy matrix |
| Eval contract | 契约如何被测试和回归验证 | test cases、mock server、trajectory eval |
| Evidence contract | 调用后必须产生哪些 trace、log、approval、audit record | OpenTelemetry spans、audit event schema |
只定义 API schema 不够。AI-ready contract 必须同时定义结构、权限、副作用、错误、审批、幂等、版本和证据。
OpenAPI for tools
OpenAPI 适合描述同步 HTTP API 和 tool operations。一个 AI tool operation 应被看作业务动作, 而不是普通接口。
| Field | Example |
|---|---|
| tool_id | case.create_note |
| operationId | CreateCaseNote |
| business purpose | 为争议 case 添加运营备注 |
| input schema | caseId, noteText, source, confidence, traceId |
| output schema | noteId, createdAt, status |
| side effect | 写入 case management system |
| risk level | medium |
| required permission | case:write_note |
| approval | internal note 不需要; customer-visible note 需要 |
| idempotency | Idempotency-Key required |
| audit event | case.note.created |
| eval coverage | parameter correctness、unsafe note refusal、duplicate prevention |
AI tool contract 通常需要普通 API contract 没有的扩展信息:
| Extension | 说明 |
|---|---|
x-ai-risk-level | read、draft、low-risk-write、high-risk-write、irreversible |
x-ai-human-approval | none、sampled、required、dual-control |
x-ai-side-effect | none、reversible、compensatable、irreversible |
x-ai-data-classification | public、internal、confidential、restricted |
x-ai-policy-profile | 决定 allow/block/approve 的 policy profile |
x-ai-evidence-required | trace id、approval id、actor、source citations、reason |
x-ai-eval-suite | 必须通过的 tool trajectory eval |
这些字段可以嵌入 OpenAPI extension, 也可以维护在 tool registry 中, 但不能只存在于 prompt 或会议记录。
AsyncAPI and event contracts
Agent workflow 不一定都是同步请求。很多企业 AI 场景是事件驱动:
- 文档上传后触发 extraction。
- 风险告警触发 investigation assistant。
- 客户投诉触发 triage workflow。
- 人工审批完成后恢复 agent workflow。
- model/prompt/eval 版本变更触发 regression run。
事件契约需要表达:
| Field | Example |
|---|---|
| channel | case.dispute.triage.requested |
| producer | case management system |
| consumer | dispute agent workflow |
| payload schema | case id、customer segment、amount band、reason code、priority |
| CloudEvents metadata | id、source、type、subject、time、traceparent |
| ordering | per case id |
| retry | exponential backoff, DLQ after 5 attempts |
| idempotency | event id + case id |
| privacy | no full PAN, no unnecessary PII |
| audit | event stored with workflow trace |
常见 agent event:
| Event | Meaning |
|---|---|
agent.workflow.started | workflow 启动 |
agent.tool.proposed | 模型提出工具调用 |
agent.policy.blocked | policy 阻断 |
agent.approval.requested | 需要人工审批 |
agent.approval.completed | 审批完成 |
agent.tool.executed | 工具执行 |
agent.workflow.completed | workflow 完成 |
agent.workflow.failed | workflow 失败 |
agent.workflow.escalated | 升级人工 |
这些事件让 agent 从黑盒推理变成可观测工作流。
关键机制
JSON Schema for structured IO
结构化输出契约可用于工具参数、模型回答、分类结果、风险分级、eval judge 输出、人工复核表单和事件 payload。
| Schema design | 作用 |
|---|---|
| enum | 对关键 decision 使用枚举, 不让模型自由造词 |
| required | 对审计和执行必须字段强制 required |
| format | 对日期、email、uri、id 等指定格式 |
| min/max | 对金额、分数、置信度和步数设边界 |
| additionalProperties | 高风险 payload 默认关闭 |
| reason | 允许 explanation, 但不得作为执行依据 |
| source_refs | 需要引用时强制列出 source id/version |
结构化输出的关键不是方便解析, 而是把 AI 输出变成 contract-bound object, 可以验证、审计、回归测试和版本管理。
Error contract
AI agent 必须理解错误类别, 否则会盲目重试或编造结果。
| Error class | Agent behavior |
|---|---|
| validation_error | 修正参数或请求澄清 |
| authorization_error | 停止调用并升级人工 |
| policy_block | 向用户说明无法执行或进入审批 |
| business_rule_violation | 根据规则提示替代路径 |
| transient_error | 有预算地重试 |
| dependency_timeout | 降级或排队 |
| conflict_duplicate | 使用 idempotency result |
错误契约必须进入 eval, 否则“失败路径”只存在于开发文档。
Versioning and compatibility
| Change | Compatibility | Required action |
|---|---|---|
| Add optional field | backward compatible | update docs and tests |
| Add required field | breaking | new version, agent update, eval rerun |
| Rename enum value | breaking | migration and compatibility layer |
| Relax validation | risky | security/risk review |
| Tighten validation | may break agent | regression eval |
| Change side effect | high risk | ADR, approval, release gate |
| Change policy requirement | high risk | risk signoff, evidence update |
Contract versioning 对 AI agent 更敏感, 因为模型行为、tool selection、eval trajectory 和 policy decision 都可能受影响。
Contract testing
| Test | Purpose |
|---|---|
| Schema validation | 参数和响应符合 contract |
| Mock server test | Agent 能在 contract 下完成任务 |
| Negative test | 不合法参数、越权场景、禁止动作被拒绝 |
| Policy test | 不同 role/risk/data 下 allow/block/approve 正确 |
| Idempotency test | 重试不会重复执行副作用 |
| Error behavior test | Agent 不编造结果, 能升级或降级 |
| Telemetry test | 每次调用都有 trace、span、audit event |
| Compatibility test | 新版本不破坏已批准 workflow |
Contract testing 是把“agent 会正确使用工具”的希望, 转成可回归验证的证据。
证据与控制
Contract-first AI 的控制链可以表达为:
tool/event discovery
-> schema validation
-> policy decision
-> approval if required
-> idempotent execution
-> telemetry/audit event
-> eval and runtime evidence
| Control | 证据 |
|---|---|
| Capability discovery by role/risk/task | tool registry query log、available tool list |
| Schema validation | validation result、schema version、rejected payload |
| Authorization and policy | actor、scope、risk tier、policy decision、reason |
| Human approval | approval id、approver、timestamp、decision |
| Idempotency | idempotency key、dedupe result、retry count |
| Side-effect audit | before/after state、audit event、compensation link |
| Event traceability | CloudEvents id、traceparent、workflow id、contract version |
| Release readiness | contract review record、negative tests、trajectory eval、trace sample |
Contract review 不应只由工程完成。需要同时检查真实任务支持、边界可复用性、攻击面、数据分类、高风险动作、错误处理、重试、SLO、审计和变更影响。
AI产品/金融零售场景
Dispute resolution agent
Agent 可做:
- 读取交易详情。
- 读取争议政策。
- 生成 case summary。
- 创建内部 note。
- 请求人工审批。
Agent 不可做:
- 自动退款。
- 直接发送客户通知。
- 修改监管报告。
- 查看无关客户数据。
Tool contract matrix:
| Tool | Risk | Contract | Policy | Evidence |
|---|---|---|---|---|
transaction.lookup | read | OpenAPI read operation | customer/case scope | trace span |
policy.search | read | retrieval schema | approved source only | citation ids |
case.summarize | draft | structured output schema | no customer send | summary eval |
case.create_note | medium write | OpenAPI write operation | case:write_note | audit event |
approval.request | workflow | event contract | required for high-risk | approval id |
refund.execute | high-risk write | unavailable to agent | human-only | separate workflow |
Event flow:
case.dispute.triage.requested
-> agent.workflow.started
-> agent.tool.proposed(transaction.lookup)
-> agent.tool.executed
-> agent.tool.proposed(policy.search)
-> agent.tool.executed
-> agent.output.generated(case_summary)
-> agent.approval.requested if high amount
-> agent.workflow.completed or escalated
每个 event 都应带 traceparent、case id、workflow id、contract version、policy decision、actor/agent identity。
需求表达也要契约化。不要只写“Agent 可以查询交易”, 而要写:
| Dimension | Example |
|---|---|
| Business capability | Agent supports dispute triage by collecting relevant transaction and policy evidence |
| Allowed action | Read transaction details for the active case only |
| Prohibited action | Agent cannot initiate refund or customer notification |
| Contract | Must use approved transaction.lookup OpenAPI operation |
| Data boundary | No full card number in prompt or trace |
| Error behavior | If lookup fails, escalate to human and do not infer transaction details |
| Eval | Tool selection and argument correctness meet threshold |
| Evidence | Tool call span includes trace id、case id、policy decision、response status |
Release gate 应检查 tool cards、schemas、side-effect matrix、permission tests、prompt injection tests、trajectory eval、negative cases、error behavior、retry/DLQ、idempotency、dashboard、risk approval、trace sample 和 rollback plan。
反模式
| 反模式 | 表现 | 修正 |
|---|---|---|
| Prompt-only tools | 工具边界只写在 prompt 里 | 建立 tool registry + schema + policy |
| Schema without side effect | 只定义字段, 不定义风险 | 加入 risk、approval、idempotency、audit |
| No negative cases | 只测成功调用 | 测越权、错误参数、policy block、timeout、business rule |
| Breaking change surprise | API 改了, agent 没跑回归 | versioning + compatibility eval |
| Event without trace | 事件能跑但无法查证 | CloudEvents metadata + trace context |
| Agent sees too many tools | 工具暴露过宽 | capability discovery by role/risk/task |
| Audit afterthought | 上线后才补日志 | evidence contract before implementation |
| Error as free text | 错误只有自然语言 message | error taxonomy + agent behavior contract |
最终心智模型
Contract-first AI tool/API design 可以用一条执行链理解:
Intent
-> contract
-> policy
-> approval
-> execution
-> telemetry
-> evidence
-> regression
判断一个 AI tool 是否 enterprise-ready, 看它是否回答了这些问题:
| 问题 | 成熟答案 |
|---|---|
| 能做什么 | operation、input/output、business purpose 清楚 |
| 不能做什么 | prohibited action、scope、risk boundary 清楚 |
| 谁能调用 | identity、role、case scope、policy profile 清楚 |
| 调用有什么副作用 | side-effect classification、idempotency、compensation 清楚 |
| 失败时怎么办 | error taxonomy、retry、DLQ、human escalation 清楚 |
| 如何证明 | trace、audit event、approval id、contract version 清楚 |
| 如何演进 | versioning、compatibility、deprecation、regression eval 清楚 |
成熟的 AI agent 不是“会调用很多工具”, 而是只能发现和调用当前任务、权限、风险等级允许的工具, 并且每次调用都能被验证、阻断、审批、追踪和复盘。
SOTA 检查 (2026-07-01)
- OpenAPI 现役版本为 v3.2.0(2025-09 发布):在 3.1 基础上新增嵌套 tags、流式媒体类型(SSE / JSON Lines / JSON Seq)、原生 QUERY HTTP method、OAuth 2.0 Device Authorization Flow——其中流式媒体类型对描述 LLM/agent 的 streaming tool 响应直接相关。OpenAPI 4.0 "Moonwalk" 仍处设计阶段、未发布,本篇以 OAS 为 tool contract 载体的主线不受影响。
- MCP 已成为 tool contract 的事实分发层:现行稳定版为 2025-11-25 修订版;2026-07-28 新版规范的 Release Candidate 已发布(含 breaking changes),其中 tool 的
inputSchema/outputSchema提升为完整 JSON Schema 2020-12(支持 oneOf/anyOf/allOf、条件、$ref/$defs),structuredContent可为任意 JSON 值——这正是本篇 "Structured output contract" 一节主张的官方化。落地时注意本仓库 AIPA 纪律:MCP server 构建应排在 2026-07-28 最终规范之后(详见docs/aipa/day44-mcp-final-spec.md、docs/aipa/day50-mcp-server-build.md)。 - OpenAPI→MCP 自动生成已是主流工程路径(2025-2026):Speakeasy、FastMCP(
gofastmcp.com的 OpenAPI 集成)、openapi-mcp 等工具把 OpenAPI 文档作为唯一 source of truth 生成 MCP server,避免 MCP 与 OpenAPI 契约双源分叉——印证本篇"契约不能只存在于 prompt 或 registry 之外"的判断;但社区共识也提醒直接 1:1 暴露 endpoint 语义常太细碎,仍需按业务动作(本篇的 tool card)重新聚合。 - AsyncAPI 侧结论仍成立:AsyncAPI 3.x(当前参考规范 v3.1.0)原生支持 request/reply 关联语义;2025 年社区年报显示 spec 包年下载量 54M,且官方明确把「哪些 agent 能向哪些 channel 发布、如何审计 agent 通信」列为 AsyncAPI 在企业 AI 治理中的定位——与本篇 event contract + evidence contract 的框架一致。
- 不随版本过时的框架性结论:六类契约模型(tool/event/structured output/policy/eval/evidence)、"Prompt proposes / Contract constrains / Policy authorizes / Telemetry proves" 执行链、错误分类学、幂等与审批分级、契约回归测试——这些与具体规范版本解耦,是本篇的长期价值;具体扩展字段(
x-ai-*)与协议版本号需按上面三条持续复查。落地模板见配对的docs/AI_CONTRACT_FIRST_TOOL_API_DESIGN_OPENAPI_ASYNCAPI_PLAYBOOK.md与docs/AI_AGENT_PROTOCOLS_MCP_A2A_PLAYBOOK.md。