第四章:大模型(LLM)】06.langchain原理-(7)LangChain 输出解析器(Output Parser)
第四章:大模型(LLM)
第六部分:LangChain 原理
第七节:LangChain 输出解析器(Output Parser)
在使用大模型时,模型往往会返回自然语言文本结果,而实际应用中,我们更需要 结构化的结果(如 JSON、数值、标签、SQL 查询语句等)。
LangChain 提供了 输出解析器(Output Parser),用于将模型输出的自然语言解析成所需的结构化数据。
1. 输出解析器的作用
将文本转为结构化格式(如 JSON、字典、列表)。
限制模型的输出风格(例如必须是 JSON 格式)。
保证应用能安全调用下游模块(如数据库接口、API、工具调用)。
如果没有输出解析器,模型输出可能会包含多余的说明、注释,导致程序无法直接解析。
2. LangChain 内置的输出解析器
LangChain 提供了一些常用的解析器类:
StrOutputParser
:直接输出字符串(最简单)。RegexParser
:基于正则表达式提取结果。PydanticOutputParser
:利用Pydantic
数据模型进行验证和结构化。StructuredOutputParser
:利用 JSON Schema 定义输出格式。
3. 示例代码
(1) 基础字符串解析
from langchain.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI# 模型
llm = ChatOpenAI(model="gpt-3.5-turbo")# 解析器
parser = StrOutputParser()# 调用链
result = llm.invoke("请用一句话介绍Python语言。")
parsed = parser.parse(result.content)print(parsed)
👉 StrOutputParser
仅仅返回模型输出的字符串。
(2) 使用正则解析
import re
from langchain.output_parsers import RegexParser# 定义正则匹配:假设我们需要提取一个数字
parser = RegexParser(regex=r"(\d+)", output_keys=["number"]
)text = "Python有30年的历史"
parsed = parser.parse(text)
print(parsed) # {'number': '30'}
👉 利用正则,可以快速提取数值、关键词等。
(3) 使用 Pydantic 解析
from pydantic import BaseModel, Field
from langchain.output_parsers import PydanticOutputParser# 定义数据结构
class Person(BaseModel):name: str = Field(description="姓名")age: int = Field(description="年龄")# 解析器
parser = PydanticOutputParser(pydantic_object=Person)# 获取提示模板
format_instructions = parser.get_format_instructions()prompt = f"""
请生成一个人的信息。
{format_instructions}
"""# 模拟LLM输出
llm_output = '{"name": "张三", "age": 25}'# 解析
parsed = parser.parse(llm_output)
print(parsed) # Person(name='张三', age=25)
👉 Pydantic 提供了 数据校验 和 强类型约束,非常适合需要严格数据格式的场景。
(4) 使用 StructuredOutputParser
from langchain.output_parsers import StructuredOutputParser, ResponseSchema# 定义输出字段
schemas = [ResponseSchema(name="name", description="人物的姓名"),ResponseSchema(name="age", description="人物的年龄"),
]parser = StructuredOutputParser.from_response_schemas(schemas)
format_instructions = parser.get_format_instructions()print("输出格式要求:", format_instructions)
👉 它会生成一个 JSON Schema 规范,要求 LLM 输出必须严格遵循 JSON 格式。
4. 输出解析器在实际应用中的价值
知识问答系统:将模型输出的回答解析成结构化结果(如
{"answer": "...", "source": "..."}
)。数据库查询:模型生成 SQL 语句后,用解析器抽取并校验 SQL。
对话机器人:确保 LLM 输出符合 JSON 结构,便于后续调用工具或 API。
多模态应用:解析模型输出的标签、坐标、分类结果。
5. 总结
输出解析器是 LangChain 中的关键组件,能保证 LLM 输出的 可控性与可靠性。
常见类型包括
StrOutputParser
、RegexParser
、PydanticOutputParser
、StructuredOutputParser
。实际开发中,推荐 Pydantic + StructuredOutputParser,能最大程度保证结果的准确性与安全性。