当前位置: 首页 > news >正文

第四章:大模型(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 输出的 可控性与可靠性

  • 常见类型包括 StrOutputParserRegexParserPydanticOutputParserStructuredOutputParser

  • 实际开发中,推荐 Pydantic + StructuredOutputParser,能最大程度保证结果的准确性与安全性。

http://www.dtcms.com/a/336145.html

相关文章:

  • 模型提取的相关经验
  • 库制作与原理(下)
  • 端到端测试:复杂系统的终极体检术
  • 【C2000】德州仪器C2000产品开发板的原理图如何找到?
  • 反向代理、负载均衡器与API网关选型决策
  • 《MutationObserver深度解构:重塑自动化视觉回归测试的底层逻辑》
  • B站 韩顺平 笔记 (Day 21)
  • [python学习记录2]变量
  • 【Unity3D实例-功能-拔枪】角色拔枪(二)分割上身和下身
  • vue封装请求拦截器 响应拦截器
  • 定时器输出PWM波配置(呼吸灯)
  • 平行双目视觉-动手学计算机视觉18
  • C++ Building Blocks 构建块 Or 构件块
  • SVN客户端下载与安装
  • 「数据获取」《中国教育统计年鉴》(1949-2023)(获取方式看绑定的资源)
  • 【嵌入式基础知识梳理#11】Modbus-RTU工业总线协议
  • Spring IOC 学习笔记
  • Canny边缘检测
  • Python异步编程实战:爬虫案例
  • 【Python】-- 机器学习项目 - 基于KNN算法的鸢尾花分类
  • 【自动化运维神器Ansible】Playbook中的when条件判断:精细化控制任务执行
  • 【Linux系列】常见查看服务器 IP 的方法
  • Python 基本语法(二)
  • 数据结构初始知识
  • 利用标准IO实现寻找文件中字符出现最多次数
  • 问津集 #5:Crystal: A Unified Cache Storage System for Analytical Databases
  • 6-服务安全检测和防御技术
  • gitee SSH配置
  • 探索分子世界:结构、性质、反应与前沿进展
  • 编程算法实例-求一个整数的所有因数