跳到主要内容

第 1.9.1 节:用 Pydantic 统一模型、工具和接口的数据契约

Pydantic 与数据不能只停留在口头约定,还需要落实为字段、校验和失败处理。完成本节后,你应该能够把 Pydantic 与数据落成字段表、校验规则、错误处理和验收样例。

本章要解决什么问题​

第 1.4 章讲过 Structured Output(结构化输出),第 1.6 章讲过 Tool Calling(工具调用)。到这一章,读者会遇到一个更隐蔽但更真实的工程问题:字段看起来都有了,但每一层对字段的理解不一样。

在企业客服知识库与工单 Agent(智能体)工作台里,模型可能输出 intent(意图)、risk_level(风险等级)和 next_action(下一步动作);工具调用需要 tool_name(工具名称)和 tool_args(工具参数);后端 API(应用程序接口)要返回 validation_status(校验状态);前端要根据状态显示“等待用户补充信息”“已转人工”“工具不可用”;日志系统要记录 trace_id(追踪编号)和失败原因;测试用例还要验收同一批字段是否稳定。

如果这些字段没有统一契约,系统会出现很多看似小、实际很致命的问题:

  • 模型输出 refund,后端期望 refund_request,流程无法进入退款工单。
  • 前端把 high 风险当成黄色提醒,后端却认为必须转人工。
  • 工具参数缺少订单编号,系统仍然执行了工具调用。
  • 校验失败后模型重新生成了一个看似合理但没有依据的结果。
  • 日志里没有追踪编号,线上问题无法复盘。

所以本章的核心观点是:

Pydantic(数据校验库) 在本书里不是语法课,而是数据契约治理工具。它帮助团队统一字段含义,拦住不合格数据,并把失败导向重试、降级、转人工或拒绝执行。

本章不会教 BaseModel(基础数据模型)的写法,不会提供 Python(编程语言)、TypeScript(类型化脚本语言)、JavaScript(脚本语言)或 JSON(结构化数据格式)语法代码。你要学的是:在一个可交付的 Agent 项目里,哪些边界需要契约、字段如何命名和解释、校验失败如何处理、面试时如何把它讲成工程能力。

学习目标​

读完本章后,你应该能够:

  • 用人话解释数据契约为什么比“字段能跑通”更重要。
  • 说明 Pydantic(数据校验库)在 AI Agent 项目中的位置。
  • 把模型结构化输出、工具输入、API 请求响应、前端状态、日志字段和验收用例放到同一套字段语义下。
  • 为客服工作台设计核心字段契约,包括 schema_version(契约版本)、intent(意图)、risk_level(风险等级)、next_action(下一步动作)、missing_fields(缺失字段)、tool_name(工具名称)、tool_args(工具参数)、validation_status(校验状态)、validation_error(校验错误)、retry_allowed(是否允许重试)、fallback_action(兜底动作)和 trace_id(追踪编号)。
  • 判断校验失败后应该重试、追问、降级、转人工,还是拒绝工具执行。
  • 设计数据契约相关的权限、状态、日志和验收样例。
  • 避免把 Pydantic(数据校验库)学成孤立语法,而是把它用在业务边界治理上。
  • 在面试中清楚回答“为什么 AI(人工智能)项目不能到处传自由字典”“结构化输出失败怎么办”“字段契约如何支撑前后端协作”。

贯穿业务场景​

本章继续使用“企业客服知识库与工单 Agent 工作台”。

用户进入客服窗口后,可能会说:

我上周买的设备用了两天就坏了,订单号我忘了。你们要么给我退钱,要么我就投诉。

这句话对人来说不难理解,但对系统来说,它必须被拆成稳定字段:

系统需要理解的内容可能字段为什么重要
用户想做什么intent(意图)决定是售后咨询、退款申请、投诉,还是普通问答。
风险高不高risk_level(风险等级)涉及退款和投诉,不能完全自动处理。
还缺什么信息missing_fields(缺失字段)缺订单编号,不能直接查订单或发起退款审批。
下一步做什么next_action(下一步动作)可能是追问订单号、让用户选择订单、创建投诉工单或转人工。
是否要调用工具tool_name(工具名称)和 tool_args(工具参数)只有字段合格、权限通过后才允许查订单或建工单。
校验是否通过validation_status(校验状态)防止不完整或不可信结果进入业务动作。
出错怎么办validation_error(校验错误)、retry_allowed(是否允许重试)、fallback_action(兜底动作)决定重试、追问、降级、转人工或拒绝执行。
如何复盘trace_id(追踪编号)把用户输入、模型输出、工具调用、前端展示和日志串起来。

这个例子说明:Pydantic(数据校验库)的价值不在于“定义一个模型类”,而在于让系统每一层都能围绕同一批字段做判断。

在客服工作台里,数据契约至少穿过 6 个地方:

位置需要契约的原因
模型结构化输出模型必须输出可解析、可校验、可驱动流程的字段。
工具输入工具执行前必须确认参数、权限和风险。
API 请求响应前后端不能靠口头约定猜字段含义。
前端状态页面要知道展示草稿、追问、错误、转人工还是工具结果。
日志字段线上问题要能按追踪编号复盘。
验收用例测试要验证字段值、状态转移和兜底路径。

新手为什么会卡住​

很多新手第一次接触 Pydantic(数据校验库)时,会把它当成“Python(编程语言)里的类型工具”。这种理解没有错,但远远不够。AI Agent 项目里的数据问题通常不是“字段有没有类型提示”,而是“字段能不能稳定支撑业务流程”。

常见误解项目后果正确理解
Pydantic(数据校验库)就是写 BaseModel(基础数据模型)学了语法,但不知道放在哪些边界本章关注模型输出、工具输入、API、前端状态、日志和测试之间的契约统一。
模型能返回结构化结果就够了字段值漂移、字段缺失、枚举不一致结构化输出必须经过契约校验,失败要有处理路径。
字段名差不多就行前后端、工具和日志理解不一致字段名、含义、取值范围和使用场景都要统一。
校验失败再让模型改一下高风险动作可能被错误重试重试要有限制,写入和高风险工具失败时常常应拒绝执行或转人工。
日志只记录报错文本出问题无法追踪整条链路日志必须包含 trace_id(追踪编号)、字段校验状态、工具和兜底动作。
前端状态可以自己判断页面会和后端状态漂移前端展示也应该消费同一套状态契约。
测试只测接口是否成功无法发现风险误判和兜底缺失验收用例要覆盖正常、缺字段、越权、工具失败和高风险场景。

本章的重点就是帮你从“会写校验模型”升级到“会治理数据边界”。

继续学习​