先说结论
AI 数据合同要同时说明字段含义和允许的业务变化:哪个系统拥有主键,金额和时间如何表示,空值意味着什么,状态由谁更新,以及接口版本如何迁移。字段格式正确并不代表业务判断正确。
读完你会得到
- 同名字段要区分业务对象、权威来源和生效时间。
- 状态变化必须由系统校验,不让模型自行宣布成功。
- 数据合同变更需要样本回放和版本迁移记录。
“订单已完成”在销售系统里可能表示合同签署,在仓库系统里表示发货结束,在财务系统里表示款项结清。Agent 如果只看到一个 completed,就可能把三件事混为一谈。本文用订单演练说明如何把这些含义写进接口约定。
配套资料与延伸阅读
- 07|数据明明都在,为什么 Agent 还是用不好?(阅读)
相关方法与实施说明
- 企业 AI Agent 开发检查清单:从工具权限到上线评测(阅读)
相关方法与实施说明
- 企业 AI / FDE 服务(了解)
带上一个业务对象的接口样例和状态说明,可用于讨论数据接入与 Agent 执行边界。
先确定对象和权威来源
数据合同是提供方与使用方共同遵守的约定。对于 AI 项目,它不只是一份字段 JSON,还要告诉调用方何时可以依赖这个值。订单、客户、申请和工单应有稳定身份,不用名称或聊天里的称呼当主键。
如果 CRM 与 ERP 都有客户编号,建立映射关系并说明谁维护。租户或业务单位必须参与对象定位;不能因为两个部门都有订单 1001 就默认它们是同一条记录。查不到映射时返回待确认,不让模型选择最像的名称。
Anthropic 的工具设计文章强调输入名称和输出语义要明确。把这种原则扩展到主键和状态,是本文的业务接口设计建议。
本节依据: [1] Anthropic
字段表应包含使用条件
| 字段 | 约定 | 校验与异常 |
|---|---|---|
| order_id | 权威订单系统的稳定编号 | 与 tenant_id 共同定位,禁止按名称模糊写入 |
| amount_minor | 金额最小货币单位整数 | 必须同时提供 currency;退款不能超过允许余额 |
| delivered_at | 带时区的签收时间 | 未知时为 null,不使用接口读取时间代替 |
| fulfillment_status | 明确列出的履约状态 | 与付款状态分开,未知枚举停止关键动作 |
| source_version | 来源记录版本 | 更新时检查版本,避免覆盖他人修改 |
| observed_at | 当前接口获取记录的时间 | 用于判断陈旧程度,不等于业务生效时间 |
这张表是教学约定,不是要求所有企业采用这些字段名。关键是每个字段都有含义、格式、来源和异常处理。金额、百分比、重量等尤其要明确单位,不能让下游通过数值大小猜测。
空值、未知和未授权要分开
null 可能表示尚未签收,也可能表示系统没有保存签收时间。如果两种情况会触发不同动作,应该提供原因字段或明确的状态。空字符串、零和未知枚举也不能随意互换。
还要区分“没有这条记录”与“无权查看”。面向普通用户的提示可以统一以免泄露对象存在性,内部诊断记录则需要保留真实错误类型,并限制谁能读取。Agent 不应该把无权限理解为订单不存在,再创建重复记录。
当来源处于同步延迟中,返回数据更新时间和可接受的使用范围。例如历史状态可以用于解释查询,却不能用来放行新的退款。新鲜度标准由具体业务制定。
状态机规定什么动作才算完成
| 当前状态 | 允许的动作 | 完成证据 |
|---|---|---|
| draft | 补全材料并提交 | 申请记录与材料版本 |
| submitted | 授权人员审批或要求补充 | 审批记录绑定当前申请内容 |
| approved | 支付系统执行退款 | 支付请求标识与受理结果 |
| processing | 查询结果,不重复创建退款 | 支付系统的交易状态 |
| refunded | 登记结果并通知 | 最终交易标识与业务对账 |
模型可以提出“建议退款”,不能据此把状态改成 refunded。业务服务必须核对当前状态、操作者权限、金额和记录版本。外部执行结果尚不明确时保留 processing,避免把网络超时当作失败,也避免把受理当作到账。
状态图还应标出 rejected、cancelled 和 failed 的处理方式。不是所有失败都能返回上一状态;已经发生的外部动作可能需要独立补偿记录。
合同改变时怎样避免旧流程悄悄出错
一次字段变更的处理顺序
- 列出受影响的消费者
检索工作流、报表、提示词和缓存,确认谁仍读取旧字段。
- 给出兼容规则
改名、增加枚举或改变单位分别说明,不能只写“升级接口”。
- 用历史样本回放
保留正常、空值、旧枚举和并发更新案例,检查结果与动作是否变化。
- 设置迁移和退出条件
明确何时停用旧版本,谁确认迁移完成,出错时如何回退。
增加一个状态值也可能破坏旧逻辑。旧系统若把“不等于 cancelled”都当作可以执行,新加的 on_hold 就会被误放行。调用方应显式识别允许状态,并对未知值返回需要处理的错误。
用一条异常记录检查合同是否完整
拿一条付款已完成、履约尚未完成的订单做桌面演练。模型收到的结果应同时保留付款与履约状态,不能只得到“已完成”。继续模拟签收时间缺失、记录被他人更新、退款余额已变化,观察服务如何拒绝不满足条件的动作。
如果调用方遇到未知状态后仍能继续执行,合同缺少失败语义;如果金额由 100 变成 10000 后下游只能猜单位,合同缺少单位约定;如果重复查询返回不同来源,却没有版本信息,合同缺少可复核依据。问题应落实到具体字段或动作条件。
交付时保存一组合法与非法样例,不只保留成功示例。它们可以由提供方用于接口测试,也可以由使用方用于回归。数据合同因此成为持续检查的一部分,而不是一份上线后没人打开的附件。
开工前可以完成的一页检查
选一个最常用业务对象,逐项核对主键、租户、权威系统、金额单位、时间含义、状态转换、权限和版本。发现两个部门回答不一致,先处理语义冲突,再讨论向量库或模型选型。
这份合同适合有多个业务系统、需要 Agent 读取或修改记录的项目。只做公开资料问答时,复杂状态机未必必要,但文档身份、来源和版本仍要约定。数据合同不能替代业务负责人的确认,也不能保证来源本身没有错误。
常见问题
已经有接口文档,还要补数据合同吗?
看现有文档是否说明业务含义、来源、空值和状态约束。如果只有参数类型和成功返回示例,应补充这些内容;无需再复制一份重复文档。
可以把所有业务校验放在提示词里吗?
关键金额、对象权限、版本和状态转换应由服务端校验。提示词能帮助模型理解规则,但不能作为业务执行的唯一约束。
资料来源与核对说明
文章中的行业定义与技术方法尽量引用官方或标准组织资料;表格、清单和决策框架是基于这些资料形成的编辑性整理,不代表来源机构对本站服务的背书。
- Writing effective tools for agents — with agentsAnthropic
正文发表于 2025-09-11。用于工具输入、输出与错误信息的工程原则。
带上流程、样例和目标,添加企业微信沟通。先确定项目范围与验收方式,再安排实施。


