内容参考于:图灵AI大模型全栈
LangChain输出解释器,大模型的返回数据是可以进行限制的,之前是使用的提示词进行的限制,就是说可以让大模型给我们返回XML、JSON、CSV(以列表形式返回)
大模型的返回的响应数据的类型是很重要的,我们之前只考虑在一些平台上使用这些AI工具,但是没有考虑AI工具会调用多轮,会调用各种各样的AI大模型
输出解释器
就是用来检查数据返回的对不对,就是比如我们要的是JSON数据,大模型它意识不到没有返回JSON数据,返回的是纯文本,这就需要验证一下这个流程是不是对的
用到的库
shellpip install defusedxml #使用国内镜像下载 pip install defusedxml -i https://pypi.tuna.tsinghua.edu.cn/simple如果不安装defusedxml库,会报下图的错误
它的调用逻辑是,我们拼接提示词,然后把提示词给大模型,大模型返回后把响应的数据给LangChain的输出解析器,然后输出解析器再给我们
输出解析器代码
效果图:
效果图:它返回的数据格式还是通过提示词来决定的,输出解释器只是用来检查返回的数据结构,如果返回的数据一直不通过就要一直调整提示词,但是有些模型它就是处理这些固定格式有问题(比如JSON格式它会缺括号),这就需要用的使用慢慢研究了
pythonfrom 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,它已经弃用了
如下图,它通过这种管道的方式来调用,它的顺序有要求,这个后续会写
pythonfrom 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)





