LangChain 输出解析器与 LCEL 链构建实战指南
本文详细介绍 LangChain 中 OutputParser 的使用,以及如何基于 LangChain Expression Language (LCEL) 构建高效的 链。通过结构化输出和链式调用,可以显著提升大模型应用的稳定性和可维护性。
1. 输出解析器 OutputParser
1.1 为什么需要 OutputParser
在常规使用 LangChain 构建 LLM 应用的流程中,通常遵循 Prompt 输入 -> 调用 LLM -> LLM 输出 的步骤。然而,很多时候我们需要 LLM 返回的数据是格式化的(例如 JSON、列表或特定对象),以便后续程序进行逻辑处理或数据库存储。
虽然可以在 Prompt 中要求 LLM 输出特定格式,但直接依赖 LLM 的文本生成往往不够稳定。这时就需要引入输出解析器。LLM 的输出内容会先传给输出解析器,解析器负责校验并转换数据为预期的 Python 对象格式。
1.2 代码实践:系统自带解析器
示例 1:逗号分隔列表
将调用 LLM 的结果解析为逗号分隔的列表。例如询问某个城市有 N 个著名景点。
from langchain_openai import ChatOpenAI
from langchain.output_parsers import CommaSeparatedListOutputParser
from langchain.prompts import ChatPromptTemplate
# 定义提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "{parser_instructions}"),
("human", "列出{cityName}的{viewPointNum}个著名景点。")
])
# 初始化解析器
output_parser = CommaSeparatedListOutputParser()
# 获取解析器所需的指令格式
parser_instructions = output_parser.get_format_instructions()
print("解析器指令:\n", parser_instructions)
# 组装最终提示词
final_prompt = prompt.invoke({
"cityName": "南京",
"viewPointNum": 3,
"parser_instructions": parser_instructions
})
# 调用模型
model = ChatOpenAI(
model="gpt-3.5-turbo",
openai_api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
openai_api_base="https://api.aigc369.com/v1"
)
response = model.invoke(final_prompt)
print(, response.content)
ret = output_parser.invoke(response)
(, ret)


