返回 Papers
AI 底层逻辑 / 经典论文

AI Contract-First Tool/API:契约优先集成

Contract-first AI integration 的核心是: 先定义 tool/API/event 的结构、权限、副作用、错误、版本和证据要求, 再让模型或 agent 在这些受控契约内行动。

350ai-foundations/papers/89-contract-first-ai-tool-api-design-openapi-asyncapi.md

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

SourceLink用途
OpenAPI Specificationhttps://spec.openapis.org/oas/latest.html参考 HTTP API 契约描述, 用于 tool/API 的 operation、schema、security、response 设计(当前最新 v3.2.0,发布 2025-09)
AsyncAPI Specificationhttps://www.asyncapi.com/docs/reference/specification/latest参考事件驱动和消息系统契约, 用于 agent event、workflow event、notification event(当前参考规范为 v3.1.0,访问日期: 2026-07-01)
JSON Schemahttps://json-schema.org/参考结构化输入输出、tool arguments、event payload、model response schema(现行稳定版本 draft 2020-12,访问日期: 2026-07-01)
CloudEventshttps://cloudevents.io/参考事件 metadata 一致性, 支撑跨系统事件追踪和路由(访问日期: 2026-07-01)
OpenTelemetryhttps://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 contractAgent 可调用什么工具, 输入输出和副作用是什么OpenAPI operation、JSON Schema、tool card
Event contractAgent/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 recordOpenTelemetry spans、audit event schema

只定义 API schema 不够。AI-ready contract 必须同时定义结构、权限、副作用、错误、审批、幂等、版本和证据。

OpenAPI for tools

OpenAPI 适合描述同步 HTTP API 和 tool operations。一个 AI tool operation 应被看作业务动作, 而不是普通接口。

FieldExample
tool_idcase.create_note
operationIdCreateCaseNote
business purpose为争议 case 添加运营备注
input schemacaseId, noteText, source, confidence, traceId
output schemanoteId, createdAt, status
side effect写入 case management system
risk levelmedium
required permissioncase:write_note
approvalinternal note 不需要; customer-visible note 需要
idempotencyIdempotency-Key required
audit eventcase.note.created
eval coverageparameter correctness、unsafe note refusal、duplicate prevention

AI tool contract 通常需要普通 API contract 没有的扩展信息:

Extension说明
x-ai-risk-levelread、draft、low-risk-write、high-risk-write、irreversible
x-ai-human-approvalnone、sampled、required、dual-control
x-ai-side-effectnone、reversible、compensatable、irreversible
x-ai-data-classificationpublic、internal、confidential、restricted
x-ai-policy-profile决定 allow/block/approve 的 policy profile
x-ai-evidence-requiredtrace 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。

事件契约需要表达:

FieldExample
channelcase.dispute.triage.requested
producercase management system
consumerdispute agent workflow
payload schemacase id、customer segment、amount band、reason code、priority
CloudEvents metadataid、source、type、subject、time、traceparent
orderingper case id
retryexponential backoff, DLQ after 5 attempts
idempotencyevent id + case id
privacyno full PAN, no unnecessary PII
auditevent stored with workflow trace

常见 agent event:

EventMeaning
agent.workflow.startedworkflow 启动
agent.tool.proposed模型提出工具调用
agent.policy.blockedpolicy 阻断
agent.approval.requested需要人工审批
agent.approval.completed审批完成
agent.tool.executed工具执行
agent.workflow.completedworkflow 完成
agent.workflow.failedworkflow 失败
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 classAgent behavior
validation_error修正参数或请求澄清
authorization_error停止调用并升级人工
policy_block向用户说明无法执行或进入审批
business_rule_violation根据规则提示替代路径
transient_error有预算地重试
dependency_timeout降级或排队
conflict_duplicate使用 idempotency result

错误契约必须进入 eval, 否则“失败路径”只存在于开发文档。

Versioning and compatibility

ChangeCompatibilityRequired action
Add optional fieldbackward compatibleupdate docs and tests
Add required fieldbreakingnew version, agent update, eval rerun
Rename enum valuebreakingmigration and compatibility layer
Relax validationriskysecurity/risk review
Tighten validationmay break agentregression eval
Change side effecthigh riskADR, approval, release gate
Change policy requirementhigh riskrisk signoff, evidence update

Contract versioning 对 AI agent 更敏感, 因为模型行为、tool selection、eval trajectory 和 policy decision 都可能受影响。

Contract testing

TestPurpose
Schema validation参数和响应符合 contract
Mock server testAgent 能在 contract 下完成任务
Negative test不合法参数、越权场景、禁止动作被拒绝
Policy test不同 role/risk/data 下 allow/block/approve 正确
Idempotency test重试不会重复执行副作用
Error behavior testAgent 不编造结果, 能升级或降级
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/tasktool registry query log、available tool list
Schema validationvalidation result、schema version、rejected payload
Authorization and policyactor、scope、risk tier、policy decision、reason
Human approvalapproval id、approver、timestamp、decision
Idempotencyidempotency key、dedupe result、retry count
Side-effect auditbefore/after state、audit event、compensation link
Event traceabilityCloudEvents id、traceparent、workflow id、contract version
Release readinesscontract review record、negative tests、trajectory eval、trace sample

Contract review 不应只由工程完成。需要同时检查真实任务支持、边界可复用性、攻击面、数据分类、高风险动作、错误处理、重试、SLO、审计和变更影响。

AI产品/金融零售场景

Dispute resolution agent

Agent 可做:

  • 读取交易详情。
  • 读取争议政策。
  • 生成 case summary。
  • 创建内部 note。
  • 请求人工审批。

Agent 不可做:

  • 自动退款。
  • 直接发送客户通知。
  • 修改监管报告。
  • 查看无关客户数据。

Tool contract matrix:

ToolRiskContractPolicyEvidence
transaction.lookupreadOpenAPI read operationcustomer/case scopetrace span
policy.searchreadretrieval schemaapproved source onlycitation ids
case.summarizedraftstructured output schemano customer sendsummary eval
case.create_notemedium writeOpenAPI write operationcase:write_noteaudit event
approval.requestworkflowevent contractrequired for high-riskapproval id
refund.executehigh-risk writeunavailable to agenthuman-onlyseparate 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 可以查询交易”, 而要写:

DimensionExample
Business capabilityAgent supports dispute triage by collecting relevant transaction and policy evidence
Allowed actionRead transaction details for the active case only
Prohibited actionAgent cannot initiate refund or customer notification
ContractMust use approved transaction.lookup OpenAPI operation
Data boundaryNo full card number in prompt or trace
Error behaviorIf lookup fails, escalate to human and do not infer transaction details
EvalTool selection and argument correctness meet threshold
EvidenceTool 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 surpriseAPI 改了, 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错误只有自然语言 messageerror 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.mddocs/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.mddocs/AI_AGENT_PROTOCOLS_MCP_A2A_PLAYBOOK.md