Learn
Langchain.js/05-output-parsers

输出解析器 Output Parsers

输出解析器(Output Parsers)是 Model I/O 中的 Output 部分——把模型返回的纯文本,转换成你的代码能直接消费的结构。

1. StringOutputParser

最常用:剥掉多余包装,直接拿到字符串。

import { StringOutputParser } from "@langchain/core/output_parsers";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { ChatOpenAI } from "@langchain/openai";
 
const chain = ChatPromptTemplate.fromTemplate("{q}")
  .pipe(new ChatOpenAI())
  .pipe(new StringOutputParser());
 
const text = await chain.invoke({ q: "用一句话解释 Token" });
ℹ️为什么需要它

模型 invoke 返回的是 AIMessage 对象,.content 才是文本。StringOutputParser 帮你省掉 .content 这一步,并兼容流式。

2. JsonOutputParser

当模型应返回 JSON(如提取字段、生成配置)时使用,自动 JSON.parse 并可选 schema 校验:

import { JsonOutputParser } from "@langchain/core/output_parsers";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { ChatOpenAI } from "@langchain/openai";
 
const parser = new JsonOutputParser();
 
const prompt = ChatPromptTemplate.fromTemplate(
  "提取以下句子的信息,返回 JSON:\n{text}\n{format_instructions}"
);
 
const chain = prompt.pipe(new ChatOpenAI()).pipe(parser);
 
const result = await chain.invoke({
  text: "张三,28 岁,来自上海。",
  format_instructions: parser.getFormatInstructions(),
});
 
console.log(result); // { name: "张三", age: 28, city: "上海" }

parser.getFormatInstructions() 会自动把「请输出如下 JSON 格式」的指令注入提示词,降低模型跑偏概率。

3. StructuredOutputParser

基于 Zod schema 定义结构,并生成人类可读的格式说明:

import { StructuredOutputParser } from "@langchain/core/output_parsers";
import { z } from "zod";
 
const parser = StructuredOutputParser.fromZodSchema(
  z.object({
    sentiment: z.enum(["正面", "负面", "中性"]),
    confidence: z.number().min(0).max(1),
  })
);
 
const chain = prompt.pipe(model).pipe(parser);
const out = await chain.invoke({ text: "这家店服务太差了" });
// { sentiment: "负面", confidence: 0.96 }
⚠️别完全信任模型 JSON

模型偶尔会输出非法 JSON 或字段不符。生产环境务必包裹 try/catch,并对关键字段做二次校验(如 Zod .safeParse)。

4. 解析器对比

解析器适用场景关键点
StringOutputParser普通文本、流式最轻量
JsonOutputParser返回 JSON自动 parse + 格式指令
StructuredOutputParser强结构 + 校验依赖 Zod schema
🎯练习

用 StructuredOutputParser + Zod,写一个「从用户评价里抽取 商品、评分、是否推荐」的链。

小结

  • StringOutputParser:文本 → 字符串,最常用的收尾一环
  • JsonOutputParser:自动解析 JSON,配合 getFormatInstructions()
  • StructuredOutputParser + Zod:强类型结构化输出
  • 解析结果务必做容错校验
  • 下章把多个组件串成完整 Chain →