用 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'>
相关推荐
_日拱一卒2 小时前
LeetCode(力扣):只出现一次的数字
java·数据结构·算法
小箌2 小时前
JavaWeb_02
java·数据库·maven·mybatis
gxy1990262 小时前
【springboot】Spring 官方抛弃了 Java 8!新idea如何创建java8项目
java·spring boot·spring
阿杰真不会敲代码2 小时前
Elasticsearch 入门到实战:安装 + CRUD + 查询
java·大数据·elasticsearch·搜索引擎
老邋遢2 小时前
干货篇|02. 纯AI Coding商业应用
java·人工智能
阴暗扭曲实习生2 小时前
135编辑器开放平台架构解析:企业级富文本接入方案的技术实现
java·开发语言·中间件
3DVisionary2 小时前
装配检测丨蓝光三维扫描技术用于精密零部件3D检测与虚拟装配
python·3d·应变测量·金属3d打印·dic精度检验方法·各向异性·xtom蓝光三维扫描仪扫描
盐水冰2 小时前
【烘焙坊项目】后端搭建(7)- 套餐管理界面
java·学习
XiaoHu02072 小时前
C/C++数据结构与算法(第二弹)
java·开发语言·数据结构