12.LangChain框架4-输出解释器

内容参考于:图灵AI大模型全栈

LangChain输出解释器,大模型的返回数据是可以进行限制的,之前是使用的提示词进行的限制,就是说可以让大模型给我们返回XML、JSON、CSV(以列表形式返回)

大模型的返回的响应数据的类型是很重要的,我们之前只考虑在一些平台上使用这些AI工具,但是没有考虑AI工具会调用多轮,会调用各种各样的AI大模型

输出解释器

就是用来检查数据返回的对不对,就是比如我们要的是JSON数据,大模型它意识不到没有返回JSON数据,返回的是纯文本,这就需要验证一下这个流程是不是对的

用到的库

shell 复制代码
pip install defusedxml
#使用国内镜像下载
pip install defusedxml -i https://pypi.tuna.tsinghua.edu.cn/simple

如果不安装defusedxml库,会报下图的错误

它的调用逻辑是,我们拼接提示词,然后把提示词给大模型,大模型返回后把响应的数据给LangChain的输出解析器,然后输出解析器再给我们

输出解析器代码

效果图:

效果图:它返回的数据格式还是通过提示词来决定的,输出解释器只是用来检查返回的数据结构,如果返回的数据一直不通过就要一直调整提示词,但是有些模型它就是处理这些固定格式有问题(比如JSON格式它会缺括号),这就需要用的使用慢慢研究了

python 复制代码
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
# 创建解析器:专门用来"格式化"模型输出的结果
from langchain_core.output_parsers import JsonOutputParser, StrOutputParser, XMLOutputParser
from langchain_classic.chains import LLMChain  # 旧版链式调用方式
from dotenv import load_dotenv
import os

load_dotenv()

# 初始化语言模型(通义千问兼容OpenAI格式)
model = ChatOpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    model="qwen-plus",
)

# ====================== 输出解析器 三选一 ======================
# 【1】StrOutputParser:最基础 → 只输出纯字符串(默认就是它)
# output_parser = StrOutputParser()

# 【2】JsonOutputParser:强制输出 JSON → 自动把模型回答转成字典格式
# output_parser = JsonOutputParser()

# 【3】XMLOutputParser:强制输出 XML 格式 → 标签化结构化输出
xml_parser = XMLOutputParser()

# ====================== 提示模板 ======================
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个专业的程序员"),  # 系统角色
    ("user", "{input}")  # 用户问题占位符
])

# ====================== 旧版 LLMChain 链式调用 ======================
chain = LLMChain(
    prompt=prompt,        # 使用的提示词模板
    llm=model,            # 使用的大模型
    output_parser=xml_parser  # 指定输出解析器(决定返回什么格式)
)

# 调用链,传入用户问题
res = chain.invoke({"input": "langchain是什么?"})
# res = chain.invoke({"input": "langchain是什么? 问题用question 回答用ans 返回一个JSON格式"})
# res = chain.invoke({"input": "大模型中的langchain是什么?"})

# 打印最终结果
print(res)

下图框起来的位置它有一段警告

意思是不推荐我们使用LLMChain,它已经弃用了

如下图,它通过这种管道的方式来调用,它的顺序有要求,这个后续会写

python 复制代码
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
# 导入输出解析器:用来把大模型的输出转成 字符串 / JSON / XML
from langchain_core.output_parsers import JsonOutputParser, StrOutputParser, XMLOutputParser
# 旧版链(你现在没用它)
from langchain_classic.chains import LLMChain
from dotenv import load_dotenv
import os

# 加载 .env 文件里的 API Key
load_dotenv()

# 初始化大模型(通义千问,兼容 OpenAI 格式)
model = ChatOpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    model="qwen-plus",
)

# ====================== 输出解析器 三选一 ======================
# 1. StrOutputParser():输出普通字符串(最常用)
# output_parser = StrOutputParser()

# 2. JsonOutputParser():输出 JSON 格式(字典格式)
output_parser = JsonOutputParser()

# 3. XMLOutputParser():输出 XML 标签格式
# xml_parser = XMLOutputParser()

# ====================== 提示词模板 ======================
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个专业的程序员"),  # 系统提示:设定角色
    ("user", "{input}")                # 用户输入占位符
])

# ====================== 【重点:顺序必须是这个!】 ======================
# 顺序绝对不能乱:
# 1. 先组装提示词 prompt
# 2. 再把提示词传给模型 model
# 3. 最后解析模型输出 output_parser
# 管道符 | 表示 数据流向:从左 → 右 依次执行
# ======================================================================
chain = prompt | model | output_parser

# 调用链,传入参数
# {input} 必须和上面模板里的占位符名字完全一致
res = chain.invoke({"input": "langchain是什么? 使用json格式输出"})

# 下面是你写的其他测试语句,效果一样
# res = chain.invoke({"input": "langchain是什么? 问题用question 回答用ans 返回一个JSON格式"})
# res = chain.invoke({"input": "大模型中的langchain是什么?"})

# 打印最终结果(JSON 格式)
print(res)

相关推荐
我叫张土豆8 小时前
向量库原理与 Qdrant 实现详解
人工智能·机器学习
要加油GW8 小时前
DeepSeek V4 + Claude Code thinking mode 400 错误修复方案
人工智能
梦想三三8 小时前
【OpenCV四大边缘检测算法】Sobel、Scharr、Laplacian、Canny 详解
人工智能·opencv·计算机视觉
cci8 小时前
Moveit2 第一个C++规划程序
人工智能
YOLO数据集集合9 小时前
智慧农业|农田作物杂草识别数据集|航拍巡检|YOLO实例分割|深度学习训练集|智能除草视觉数据集
人工智能·深度学习·yolo·目标检测·无人机
code_pgf9 小时前
相机-雷达标定:ChArUco / ArUco + 四圆孔刚性板
人工智能·机器人
星越华夏9 小时前
YOLO v11蚊子数据集训练
人工智能·python·深度学习·yolo