LangChain(第6课)输出解析器学习笔记|豆包MarsCode AI 刷题

122 阅读3分钟

LangChain(第6课)输出解析器学习笔记

引言

在第5课中,我们学习了如何为一些鲜花及其价格生成吸引人的描述,并将这些描述和理由存储到一个CSV文件中。程序利用了OpenAI模型、结构化输出解析器以及数据处理工具。今天,我们将进一步研究LangChain中的输出解析器,并用Pydantic解析器重构上次的程序。这是模型I/O框架的最后一讲。


输出解析器的作用

语言模型的输出通常是为人类设计的文本,但实际应用中我们需要的是程序能够理解和操作的结构化信息。输出解析器正是为此而设计的工具,其核心功能包括:

  • get_format_instructions:生成模型输出的格式说明。
  • parse:将模型输出解析为特定的数据结构。
  • parse_with_prompt(可选):基于提示解析输出,用于修正或优化结果。

常见的解析器包括:

  1. 列表解析器:处理模型输出为列表。
  2. 日期时间解析器:解析日期和时间。
  3. 枚举解析器:确保输出属于预定义值范围。
  4. 结构化输出解析器:解析复杂结构化数据。
  5. Pydantic(JSON)解析器:验证和解析符合JSON格式的数据。
  6. 自动修复解析器:修复语法或拼写错误。
  7. 重试解析器:重新生成不符合要求的输出。

Pydantic(JSON)解析器实战

第一步:创建模型实例

我们首先通过环境变量设置OpenAI API密钥,并创建了一个模型实例:

python
复制代码
import os
from langchain import OpenAI

os.environ["OPENAI_API_KEY"] = "你的API密钥"
model = OpenAI(model_name="gpt-3.5-turbo-instruct")

第二步:定义输出数据格式

通过Pydantic库定义输出的格式:

python
复制代码
import pandas as pd
from pydantic import BaseModel, Field

# 空的DataFrame用于存储生成的描述
df = pd.DataFrame(columns=["flower_type", "price", "description", "reason"])

# 定义数据格式
class FlowerDescription(BaseModel):
    flower_type: str = Field(description="鲜花的种类")
    price: int = Field(description="鲜花的价格")
    description: str = Field(description="鲜花的描述文案")
    reason: str = Field(description="描述文案的理由")

Pydantic特点

  1. 自动验证数据类型。
  2. 支持数据转换(如将字符串“42”转换为整数42)。
  3. 易用性高,支持JSON数据处理。

第三步:创建输出解析器

我们使用LangChain的PydanticOutputParser创建解析器,并生成输出格式指示:

python
复制代码
from langchain.output_parsers import PydanticOutputParser

# 创建解析器
output_parser = PydanticOutputParser(pydantic_object=FlowerDescription)

# 获取格式指示
format_instructions = output_parser.get_format_instructions()
print("输出格式:", format_instructions)

格式指示清晰定义了输出的JSON Schema,描述了字段的类型及要求,确保模型输出符合指定格式。

第四步:创建提示模板

定义模板并加入格式指示,形成输入提示:

python
复制代码
from langchain import PromptTemplate

template = """您是一位专业的鲜花店文案撰写员。
对于售价为 {price} 元的 {flower} ,您能提供一个吸引人的简短中文描述吗?
{format_instructions}"""

prompt = PromptTemplate.from_template(template, 
       partial_variables={"format_instructions": format_instructions}) 

第五步:结合模型生成结果

将模板和解析器结合起来,生成结构化输出并存储:

python
复制代码
# 使用模型生成结果
result = model(prompt.format(flower="玫瑰", price="50"))

# 解析结果并存入DataFrame
parsed_result = output_parser.parse(result)
df = df.append(parsed_result.dict(), ignore_index=True)

总结

通过本课的学习,我们了解了输出解析器的作用及Pydantic解析器的使用方法。从定义数据格式到创建解析器,再到结合模型生成结构化数据,LangChain提供了一种高效且灵活的方式来处理语言模型的输出。掌握这些技能后,可以让模型的应用更加规范和强大!