LangChain --- 输出解析
深入浅出 LangChain 输出解析 - 让 AI 输出更优雅
大家好!今天我想和你分享一个在使用大语言模型时非常重要但又容易被忽视的话题 - 输出解析。如果你曾经被 AI 返回的混乱文本困扰过,或者为处理非结构化输出头疼,那这篇文章正是为你准备的。
输出解析的必要
你让 AI 生成了一段产品描述,但它返回的是一大段不带格式的文本。如果你需要提取其中的价格、特性等信息,就不得不手动解析...这显然不是一个好方案。
这就是为什么 LangChain 提供了输出解析器(Output Parser)。它像一个翻译官,能够:
- 告诉 AI 该如何组织输出格式
- 将 AI 的自然语言响应转换为程序可以直接使用的结构化数据
解析器家族大集合
LangChain 为我们准备了一系列强大的解析器工具:
- 列表解析器: 完美处理列表类型的输出
- 日期时间解析器: 专门解析时间相关的内容
- 枚举解析器: 处理有限选项的场景
- 结构化输出解析器: 应对复杂的结构化数据
- Pydantic 解析器: 基于 Pydantic 模型的 JSON 解析
- 自动修复解析器: 能够自动修正格式错误
- 重试解析器: 遇到问题时会尝试重新获取正确输出
Pydantic 解析器
实际的例子: 假设我们要让 AI 生成一些商品描述,并且需要提取特定字段
python复制代码from pydantic import BaseModel, Field
from langchain.output_parsers import PydanticOutputParser
# 定义我们想要的输出格式
class FlowerDescription(BaseModel):
flower_type: str = Field(description="花的种类")
price: int = Field(description="花的价格")
description: str = Field(description="花的描述文案")
reason: str = Field(description="文案理由")
# 创建解析器
parser = PydanticOutputParser(pydantic_object=FlowerDescription)
# 获取格式说明
format_instructions = parser.get_format_instructions()
# 创建提示模板
prompt = PromptTemplate(
template="为{price}元的{flower}写一段描述\n{format_instructions}",
input_variables=["flower", "price"],
partial_variables={"format_instructions": format_instructions}
)
# 获取并解析输出
output = model(prompt.format(flower="玫瑰", price=50))
result = parser.parse(output)
输出出错的解决
有时 AI 可能会返回格式不正确的输出。别担心,LangChain 为我们提供了两个救星:
自动修复解析器
对于简单的格式错误:
python复制代码from langchain.output_parsers import OutputFixingParser
fix_parser = OutputFixingParser.from_llm(
parser=parser,
llm=ChatOpenAI()
)
# 即使格式有误也能解析
bad_output = "{'name': 'rose', 'price': '50'}"
result = fix_parser.parse(bad_output)
重试解析器
处理更复杂的错误:
python复制代码from langchain.output_parsers import RetryWithErrorOutputParser
retry_parser = RetryWithErrorOutputParser.from_llm(
parser=parser,
llm=OpenAI()
)
result = retry_parser.parse_with_prompt(bad_output, prompt_value)
如何选择合适的解析器?
根据你的具体需求:
- 处理简单文本列表? → 列表解析器
- 需要复杂的数据结构? → Pydantic 解析器
- 经常遇到格式错误? → 自动修复解析器
- 输出不完整需要补充? → 重试解析器
写在最后
通过合理使用输出解析器,我们可以:
- 让 AI 输出更规范
- 轻松获取结构化数据
- 优雅处理各种错误
- 提高应用的稳定性
本文来自博客园,作者:ling-yuan,转载请注明原文链接:https://www.cnblogs.com/ling-yuan/p/19053248

浙公网安备 33010602011771号