03-结构化输出与Schema
核对日期:2026-05-18
官方资料:Structured output https://docs.langchain.com/oss/javascript/langchain/structured-output。
官方概念
Structured output 用 schema 约束模型返回结构,适合抽取、分类、路由、表单填充和可程序化消费的 Agent 结果。它提升可解析性,但不等于事实正确,也不替代业务校验。
机制
结构化输出的关键链路是:定义 schema、约束模型输出、解析、失败兜底、业务校验、记录 eval。schema 失败必须作为正常路径处理。
TypeScript 写法
const answerSchema = z.object({
answer: z.string().min(1),
confidence: z.number().min(0).max(1),
citations: z.array(z.string()).min(1),
});
对应案例:src/examples/04-structured-output.ts。企业知识库项目也会对最终答案做结构化校验。
Python 差异
Python 文档常用 TypedDict、Pydantic 或 provider 原生 structured output;TypeScript 常用 zod。差异主要在 schema 语法,不在工程要求:都要处理解析失败、缺字段、枚举越界和 provider 不支持。
工程边界
- 对外 API 返回结构必须版本化。
- 不要把
confidence当真实概率,除非有校准评测。 - 引用字段必须来自检索结果,不允许模型自由生成来源。
常见反模式
| 反模式 | 后果 |
|---|---|
| 解析失败后直接重试无限次 | 成本不可控,仍可能失败 |
| schema 只约束类型不约束范围 | 空字符串、非法枚举进入业务 |
| 让模型生成 citation URL | 容易产生虚假引用 |
练习任务
- 给
04-structured-output.ts增加一个非法输出样本,捕获并解释错误。 - 把
confidence改成枚举等级,比较测试断言变化。 - 在企业知识库项目中验证 citation 必须来自检索结果。