( 教学 )Agent 构建 Prompt(提示词)2. CommaSeparatedListOutputParser

CommaSeparatedListOutputParser

CommaSeparatedListOutputParser逗号分隔列表输出解析器 是 LangChain中的一种专门的输出解析器,用于以逗号分隔列表的形式生成结构化输出。

它简化了提取和以清晰简洁的列表形式呈现数据的过程,特别适用于组织诸如数据点、名称、项目或其他结构化值等信息。通过利用这个解析器,用户可以提高数据的清晰度、确保格式的一致性,并提高工作流程的效率,尤其是在需要生成结构化输出的应用中。

如何使用 CommaSeparatedListOutputParser:

  1. 设置并初始化用于生成以逗号分隔列表的解析器
  2. 将其与提示模板和语言模型相结合
  3. 通过流式机制对结构化输出进行迭代处理

实现 CommaSeparatedListOutputParser

如果你需要生成以逗号分隔的列表形式的输出,LangChain的 CommaSeparatedListOutputParser可以简化这个过程。

以下是逐步实现的方法:

1. 导入所需模块

首先导入必要的模块并初始化 CommaSeparatedListOutputParser。

从解析器中获取格式化指令以指导输出结构。

python 复制代码
from langchain.output_parsers import CommaSeparatedListOutputParser

# 初始化解析器
output_parser = CommaSeparatedListOutputParser()

# 获取格式化指令
format_instructions = output_parser.get_format_instructions()

2. 创建提示模板

定义一个PromptTemplate来动态生成项目列表。

占位符主题将在执行过程中被替换为所需的主题。

python 复制代码
from langchain_core.prompts import PromptTemplate

# 定义提示模板
prompt = PromptTemplate(
    template="列出五个{subject}。\n {format_instructions}",
    input_variables=["subject"],  # 'subject' 将在运行时被动态替换
    partial_variables={
        "format_instructions": format_instructions
    },  # 使用解析器的格式说明
)
print(prompt)

结果

复制代码
input_variables=['subject'] 
input_types={} 
partial_variables={'format_instructions': 'Your response should be a list of comma separated values, eg: `foo, bar, baz` or `foo,bar,baz`'} 
template='列出五个{subject}。\n{format_instructions}'

3. 集成 ChatOpenAI并运行链式调用

将 PromptTemplate、ChatOpenAI模型和 CommaSeparatedListOutputParser组合成一个链式调用。最后,使用特定的 subject运行该链式调用以生成结果。

python 复制代码
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
import os

load_dotenv()
Qwen2_5_7B_Instruct_llm = ChatOpenAI(
    temperature=0.1,  # 控制输出的随机性和创造性,值越低输出越稳定可预测,值越高输出越有创意但可能偏离预期 (范围: 0.0 ~ 2.0)
    model_name="Qwen/Qwen2.5-7B-Instruct",  # 硅基流动支持的模型名称
    openai_api_key=os.getenv("SILICONFLOW_API_KEY"),  # 从环境变量获取API密钥
    openai_api_base="https://api.siliconflow.cn/v1"  # 硅基流动API的基础URL
)
# 将提示、模型和输出解析器组合成链
chain = prompt | Qwen2_5_7B_Instruct_llm | output_parser

# 使用特定主题运行链
result = chain.invoke({"subject": "中国著名地标"})
print(result)

测试结果:

复制代码
['北京', '上海', '广州', '深圳', '成都']

4. 使用Python索引访问数据

由于 CommaSeparatedListOutputParser会自动将输出格式化为Python列表,你可以轻松地使用索引来访问单个元素。

例如,要访问列表中的第一个元素(北京),可以使用 result[0]。

python 复制代码
print("第一个地标:", result[0])
print("第二个地标:", result[1])
print("最后一个地标:", result[-1])

测试结果:

复制代码
第一个地标: 北京
第二个地标: 上海
最后一个地标: 成都

使用流式输出

对于较大的输出或需要实时反馈的情况,你可以使用 stream方法来处理结果。这使你能够在数据生成时逐段处理数据。

python 复制代码
for output in chain.stream({"subject": "中国著名地标"}):
    print(output)

测试结果:

复制代码
[北京]
[上海]
[广州]
[深圳]
[成都]

应用方向

  • 数据提取:从文本中提取结构化数据,如姓名、地址、日期等。

  • 内容分类:将文本分类为不同的主题或类别。

  • 自动摘要:生成文本的摘要或关键词。

  • 问答系统:构建基于文本的问答系统,回答用户问题。

    成都

    应用方向

    • 数据提取:从文本中提取结构化数据,如姓名、地址、日期等。
    • 内容分类:将文本分类为不同的主题或类别。
    • 自动摘要:生成文本的摘要或关键词。
    • 问答系统:构建基于文本的问答系统,回答用户问题。
    • 内容生成:根据用户输入或主题生成新的文本内容。
相关推荐
我想问问天2 分钟前
AI 越来越会写代码,工程师的价值在哪里?
人工智能
桌管小李4 分钟前
终端安全一体化实战:AI 审计、行为分析、零信任、防拍照与远程运维全解析
运维·服务器·网络·人工智能·windows·安全·macos
麦序子6 分钟前
用 Python + python-docx 批量生成带表格样式的装修报价单 Word 文档(含合计公式)
开发语言·python·自然语言处理·word·python3.11
AI日报派送佬8 分钟前
2026年10月22日AI行业日报|AI智能体正面开战、云厂商模型生态洗牌、算力基建加速落地,同时智能体安全、高危漏洞风险持续拉响警报
人工智能·机器学习·openai·英伟达·ai安全·anthropic·ai日报
王晖_Oscar8 分钟前
如何搭建生产级的长链路 AI 工作流?
人工智能
田里的水稻13 分钟前
FA_CNN卷积神经网络十二_CIFAR10全流程PyTorch
人工智能·pytorch·深度学习·神经网络·cnn
水如烟14 分钟前
孤能子视角:姜还是老的辣?——年轻与资深的创新优势:"切"的锐度(高CD)与"续指"的厚度(高PD)
人工智能
1-1=016 分钟前
Python PyCharm
开发语言·python·pycharm
梦影_17 分钟前
Langchain简单快速上手教程(九)—— 核心组件之少样本提示
人工智能·python·自然语言处理·中间件·langchain
人工智能培训17 分钟前
边缘AI与大模型轻量化:让智能跑进每一个终端
大数据·人工智能·算法·重构·生活