用 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'>
相关推荐
weelinking30 分钟前
【2026】08_Claude与版本控制:Git协作技巧
数据库·人工智能·git·python·数据挖掘·交互·cloudera
牧子川6 小时前
013-多模型API调用
大模型·api·封装api
budingxiaomoli6 小时前
Spring IoC &DI
java·spring·ioc·di
Spider Cat 蜘蛛猫6 小时前
Springboot SSO系统设计文档
java·spring boot·后端
scan7246 小时前
智能体多个工具调用
python
未若君雅裁6 小时前
MySQL高可用与扩展-主从复制读写分离分库分表
java·数据库·mysql
2401_867623986 小时前
CSS Flex布局中如何设置子元素间距_掌握gap属性的现代用法
jvm·数据库·python
即使再小的船也能远航6 小时前
【Python】安装
开发语言·python
weixin_421725266 小时前
Linux 编程语言全解析:C、C++、Python、Go、Rust 谁更强?
linux·python·go·c·编程语言
学习中.........6 小时前
从扰动函数的变化,感受红黑树带来的性能提升
java