跳到主要内容

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容易产生虚假引用

练习任务

  1. 04-structured-output.ts 增加一个非法输出样本,捕获并解释错误。
  2. confidence 改成枚举等级,比较测试断言变化。
  3. 在企业知识库项目中验证 citation 必须来自检索结果。