当前位置: 首页 > 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.lryc.cn/news/623606.html

相关文章:

  • CSS中linear-gradient 的用法
  • 【Python】Python 面向对象编程详解​
  • 多线程—飞机大战(加入播放音乐功能版本)
  • macos 安装nodepad++ (教程+安装包+报错后的解决方法)
  • Sentinel和12.5米高程的QGIS 3D效果
  • scikit-learn/sklearn学习|套索回归Lasso解读
  • scikit-learn RandomizedSearchCV 使用方法详解
  • scikit-learn 中的均方误差 (MSE) 和 R² 评分指标
  • .NET 中的延迟初始化:Lazy<T> 与LazyInitializer
  • 『搞笑名称生成器』c++小游戏
  • Spring Cloud整合Eureka、ZooKeeper、原理分析
  • 云计算-k8s实战指南:从 ServiceMesh 服务网格、流量管理、limitrange管理、亲和性、环境变量到RBAC管理全流程
  • 【Kubernetes系列】Kubernetes中的resources
  • 脉冲计数实现
  • vue3 ref和reactive的区别和使用场景
  • Nightingale源码Linux进行跨平台编译
  • 数学建模 15 逻辑回归与随机森林
  • 大模型微调【2】之使用AutoDL进行模型微调入门
  • 工具测试 - marker (Convert PDF to markdown + JSON quickly with high accuracy)
  • 深入理解 uni-app 页面导航:switchTab、navigateTo、redirectTo、reLaunch 与 navigateBack
  • 回溯剪枝的 “减法艺术”:化解超时危机的 “救命稻草”(一)
  • 基于径向基函数神经网络的数据回归预测 RBF
  • 【Jenkins】02 - 自动化部署配置
  • Matlab数字图像处理——梯度稀疏性和泊松方程求解的反光/倒影去除系统
  • C#中List、Path、字符串操作等常用方法总结
  • Git登录配置的详细方法
  • Python入门第7课:异常处理机制:让你的程序更健壮(try-except详解)
  • uniapp中uni.showToast和 uni.showLoading同时使用时出现提示中断冲突问题。
  • 《告别 if-else 迷宫:Python 策略模式 (Strategy Pattern) 的优雅之道》
  • 【Tech Arch】Hive技术解析:大数据仓库的SQL桥梁