在 ​LangChain​ 中,LineListOutputParser是一个用于解析 ​LLM 输出为列表(特别是按行分隔的列表)​​ 的工具类,属于 ​输出解析器(OutputParser)​​ 的一种。

它的主要作用是:

将大语言模型(LLM)返回的、按行分隔的文本内容,解析成一个 Python 的字符串列表(List[str])。​


一、基本介绍

📦 所属模块

通常位于:

from langchain.output_parsers import LineListOutputParser

(具体路径可能因 LangChain 版本略有不同,比如在 langchain_core.output_parserslangchain.output_parsers中,请根据你使用的 LangChain 版本调整导入方式)


二、作用与使用场景

✅ 适用场景举例:

假设你让 LLM 做如下任务:

“请列出三种常见的编程语言,每种语言占一行。”

你期望 LLM 返回如下格式的文本:

Python
JavaScript
Java

你希望 LangChain 把这个输出 ​自动解析成 Python 列表:​

["Python", "JavaScript", "Java"]

这时候,你就可以使用 LineListOutputParser来完成这个解析工作。


三、基本用法

1. 导入 OutputParser

from langchain.output_parsers import LineListOutputParser

⚠️ 注意:根据你使用的 LangChain 版本(比如 0.1.x 或 0.2.x 及以上),该解析器可能在不同的子模块中,比如:

  • langchain.output_parsers(旧版)

  • langchain_core.output_parsers(新版,LangChain 0.2+)

如果导入失败,可以尝试:

from langchain_core.output_parsers import LineListOutputParser

2. 创建解析器对象

parser = LineListOutputParser()

3. 解析 LLM 的原始输出

假设 LLM 返回的文本是:

Apple
Banana
Orange

你可以这样解析:

raw_output = """Apple
Banana
Orange"""

result = parser.parse(raw_output)
print(result)

🔽 ​输出将是:​

['Apple', 'Banana', 'Orange']

即:​将每一行作为一个元素,返回一个字符串列表。​


四、与 Prompt 搭配使用(推荐方式)

在实际使用中,你通常不会单独调用 parser.parse(),而是将 LineListOutputParser与 ​PromptTemplate​ 和 ​LLM Chain​ 配合使用,让整个流程自动化:

示例:让 LLM 列举水果,并自动解析为列表

from langchain.prompts import PromptTemplate
from langchain_core.output_parsers import LineListOutputParser
from langchain_community.llms import HuggingFaceHub  # 或其他 LLM

# 1. 定义输出解析器
parser = LineListOutputParser()

# 2. 定义 prompt,提示 LLM 按行输出
format_instructions = parser.get_format_instructions()
prompt_template = """
请列出三种你最喜欢的水果,每种水果占一行,不要编号,不要多余解释。
{format_instructions}
"""

prompt = PromptTemplate(
    template=prompt_template,
    input_variables=[],
    partial_variables={"format_instructions": format_instructions}
)

# 3. 模拟 LLM 输出(实际中会调用真正的 LLM)
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser

# 假定 LLM 返回的内容是:
raw_llm_output = """Apple
Banana
Orange"""

# 4. 解析输出
result_list = parser.parse(raw_llm_output)
print(result_list)
# 输出:['Apple', 'Banana', 'Orange']

✅ 提示:get_format_instructions()方法会返回一段说明文字,告诉 LLM 应该怎么输出(比如“每行一个”、“不要编号”等),建议将其通过 Prompt 传递给 LLM,这样能显著提高解析成功率。


五、format_instructions 输出示例

调用:

parser = LineListOutputParser()
print(parser.get_format_instructions())

可能会输出类似如下的说明(具体内容可能因版本略有不同):

Your response should be a list of items, with each item on a new line.

这段文字你可以加入到你的 Prompt 中,提示 LLM 按行输出内容,以方便后续解析。


六、实际应用场景举例

场景

说明

列举类任务

如“列出5种编程语言”、“列出你认为重要的会议议程”

分步骤说明

如“请列出搭建项目的步骤,每步一行”

提取清单

如从文本中提取要点、条目,每条一行

生成选项

如“列出可用的支付方式,每行一个”

配合 Prompt,让 LLM 按行输出,然后用 LineListOutputParser自动解析为 Python List,非常方便后续处理。


七、对比其他 OutputParser

解析器

作用

输出格式

LineListOutputParser

按行解析为列表

List[str],每行一个元素

CommaSeparatedListOutputParser

按逗号分隔解析为列表

List[str],如 "A, B, C"['A', 'B', 'C']

StrOutputParser

直接返回字符串

str

JSONOutputParser

解析为 JSON 对象

Dict/ List(要求 LLM 输出合法 JSON)

ListOutputParser(或其他自定义)

更复杂的列表结构

依实现而定


八、总结

✅ 一句话总结:

LineListOutputParser是 LangChain 提供的一个输出解析器,用于将 LLM 返回的、按行分隔的文本内容,自动解析为一个 Python 字符串列表(List[str]),非常适合用于让 LLM 生成清单、列表类内容的场景。​


🔧 使用步骤回顾:

  1. 导入解析器​:

    from langchain_core.output_parsers import LineListOutputParser
    parser = LineListOutputParser()
  2. ​(可选)获取格式提示并嵌入 Prompt​:

    format_instructions = parser.get_format_instructions()
  3. 让 LLM 按行输出内容​(通过 Prompt 引导)。

  4. 解析 LLM 原始输出​:

    result = parser.parse(llm_raw_output)  # 返回 List[str]

🧠 提示:

  • 如果你希望 LLM 输出的是 ​带序号的列表(如 1. Apple, 2. Banana)​,那么 LineListOutputParser不适用,你可能需要用正则或其他解析器提取内容。

  • 如果你希望输出是 ​JSON 格式的列表,可以考虑使用 JSONOutputParser,并要求 LLM 输出如 ["A", "B", "C"]


Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐