用 LangChain 解析大模型输出

在大模型应用开发中,将模型的自然语言输出转化为结构化数据是核心需求之一。本文将以「提取指定国家的汽车品牌列表」为例,使用 LangChain 的 CommaSeparatedListOutputParser实现输出结构化解析,让非结构化的文本输出秒变可直接使用的 Python 列表。

一、逗号分隔列表

1.完整代码
python 复制代码
# 导入核心依赖
from langchain_openai import ChatOpenAI
from langchain.output_parsers import CommaSeparatedListOutputParser
from langchain.prompts import ChatPromptTemplate

# 1. 定义提示词模板
prompt = ChatPromptTemplate.from_messages([
    # 系统消息:传入解析器的格式要求
    ("system", "{parser_instructions}"),
    # 人类消息:用户的具体查询,包含动态参数subject
    ("human", "列出5个{subject}国家的汽车品牌。")
])

# 2. 初始化输出解析器并获取格式说明
output_parser = CommaSeparatedListOutputParser()
# 获取解析器要求的格式说明(自动生成,告诉模型要返回逗号分隔的列表)
parser_instructions = output_parser.get_format_instructions()
print("解析器格式要求:", parser_instructions)

# 3. 填充提示词参数
final_prompt = prompt.invoke({
    "subject": "中国", 
    "parser_instructions": parser_instructions
})

# 4. 初始化大模型(对接通义千问)
model = ChatOpenAI(
    model="qwen-plus",  # 通义千问增强版
    openai_api_key="sk-75e9a245c6054b4bb06a862aa50a0346",  # 替换为你的API Key
    openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1"  # 通义千问兼容接口
)

# 5. 调用模型并获取响应
response = model.invoke(final_prompt)
print("模型原始输出:", response.content)

# 6. 解析输出为Python列表
parsed_result = output_parser.invoke(response)
print("解析后的列表:", parsed_result)
print("列表类型:", type(parsed_result))
2.代码解析
(1)提示词模板定义
python 复制代码
prompt = ChatPromptTemplate.from_messages([
    ("system", "{parser_instructions}"),
    ("human", "列出5个{subject}国家的汽车品牌。")
])
  • 使用from_messages方法构建包含系统消息和人类消息的提示词模板

  • {parser_instructions}:动态填充解析器要求的格式说明,确保模型输出符合解析要求

  • {subject}:动态指定查询的国家,提升模板复用性

(2)输出解析器初始化
python 复制代码
output_parser = CommaSeparatedListOutputParser()
parser_instructions = output_parser.get_format_instructions()
  • CommaSeparatedListOutputParser会自动生成格式说明(如「Your response should be a list of comma separated values, eg: foo, bar, baz」)

  • 格式说明会告诉模型必须返回逗号分隔的列表,为后续解析提供基础

(3)模型调用与解析
python 复制代码
response = model.invoke(final_prompt)
parsed_result = output_parser.invoke(response)
  • model.invoke():将填充后的提示词传入模型,获取原始响应

  • output_parser.invoke():将模型响应解析为 Python 列表,无需手动处理字符串分割

(4)预期输出示例
python 复制代码
解析器格式要求: Your response should be a list of comma separated values, eg: foo, bar, baz
模型原始输出: 吉利,比亚迪,长城,奇瑞,长安
解析后的列表: ['吉利', '比亚迪', '长城', '奇瑞', '长安']
列表类型: <class 'list'>
相关推荐
迷途酱4 分钟前
RAG 从零到一:用 Python 给大模型接上你的私有知识库
python
我叫黑大帅7 分钟前
受保护的海报图片读取方案 - 在不公开静态资源目录下如何获取静态资源
后端·python·面试
思绪无限7 分钟前
YOLOv5至YOLOv12升级:农作物害虫检测系统的设计与实现(完整代码+界面+数据集项目)
人工智能·python·深度学习·目标检测·计算机视觉·yolov12·农作物害虫检测
爱学习的小囧8 分钟前
ESXi性能历史怎么监控?2种方法,图形化+命令行全覆盖
java·linux·运维·服务器·网络·esxi·esxi8.0
逻辑驱动的ken18 分钟前
Java高频面试考点场景题11
java·深度学习·面试·职场和发展·高效学习
码界筑梦坊18 分钟前
94-基于Python的商品物流数据可视化分析系统
开发语言·python·mysql·信息可视化·数据分析·毕业设计·fastapi
元Y亨H20 分钟前
Python 获取 Windows 设备信息笔记
windows·python
微刻时光23 分钟前
影刀RPA:For循环与ForEach循环深度解析与实战指南
人工智能·python·低代码·自动化·rpa·影刀实战
KIHU快狐32 分钟前
快狐KIHU|110寸壁挂触控一体机G+G电容屏安卓系统汽车展厅查询展示
android·python·汽车
学习3人组32 分钟前
面向对象编程:反射(Reflection)原理与应用详解
java