LangChain学习(五)

156 阅读4分钟

我正在参加「豆包MarsCode AI练中学体验活动」详情请看:掘金小册上线 AI练中学功能 | 你的 AI 编程助教喊你免费领小册啦!

解析输出

输出解析器负责获取 LLM 的输出并将其转换为更合适的格式。借助LangChain的输出解析器重构程序,使模型能够生成结构化回应,并可以直接解析这些回应。

  • get_format_instructions:返回指导如何格式化语言模型输出的字符串,指导如何构建和组织回答。
  • parse:接受一个字符串(语言模型输出),将其解析为特定的数据结构或格式。
  • parse_with_prompt:可选方法,接受一个字符串(语言模型输出)和一个提示(生成输出的提示),将其解析为特定数据结构。

输出解析器

CSV解析器

模型的输出以逗号分隔,以列表形式返回输出

from langchain_core.prompts import PromptTemplate
from langchain_openai import OpenAI

# 初始化语言模型
model = OpenAI(model_name="gpt-3.5-turbo-instruct", temperature=0.0)

# 创建解析器
from langchain.output_parsers import CommaSeparatedListOutputParser

output_parser = CommaSeparatedListOutputParser()

# 提示模板
template = "Generate a list of 5 {text}.\n\n{format_instructions}"
# 根据提示模板创建LangChain提示模板
chat_prompt = PromptTemplate.from_template(template)
# 提示模板与输出解析器传递输出
chat_prompt = chat_prompt.partial(format_instructions=output_parser.get_format_instructions())
# 将提示和模型合并以进行调用
chain = chat_prompt | model | output_parser
res = chain.invoke({"text": "colors"})
print(res)

日期时间解析器

可用于将 LLM 输出解析为日期时间格式

枚举解析器

用于处理预定义的一组值,确保模型的输出在这些预定义值之中 可用于将 LLM 输出解析为日期时间格式 1.创建枚举类型的输出解析器,首先定义Colors枚举类,然后创建EnumOutputParser实例,传入Colors枚举类。 2.在提示模板中使用person和instructions占位符,instructions获取EnumOutputParser输出的枚举值的格式说明。 3.构建聊天处理链,从提示模板开始,依次连接ChatOpenAI模块和刚创建的parser。最后调用了链的 invoke 方法

from langchain.output_parsers.enum import EnumOutputParser  # 导入枚举类型的输出解析器
from langchain_core.prompts import PromptTemplate  # 导入提示模板
from langchain_openai import ChatOpenAI  # 导入与OpenAI的聊天模块
from enum import Enum  # 导入枚举类型


# 定义一个枚举类Colors,包含三个颜色选项
class Colors(Enum):
    RED = "红色"
    GREEN = "绿色"
    BLUE = "蓝色"


# 创建一个 EnumOutputParser 实例,传入 Colors 枚举类
parser = EnumOutputParser(enum=Colors)

# 创建一个提示模板,包含一个名为 person 的占位符和一个名为 instructions 的占位符
prompt = PromptTemplate.from_template(
    """这个人的眼睛是什么颜色的?

> 人物: {person}

指示: {instructions}"""
).partial(instructions=parser.get_format_instructions())  # 使用 parser 获取枚举值格式的说明

# 构建聊天处理链,以 prompt 开始,连接 ChatOpenAI,最后连接 parser
chain = prompt | ChatOpenAI() | parser

# 调用链的 invoke 方法,并传入一个字典,包含 person 变量
res = chain.invoke({"person": "Frank Sinatra"})
print(res)

JSON 解析器

确保输出符合特定JSON对象格式。利用Pydantic库,解析器能验证数据并构建复杂数据模型,以确保输出符合预期数据模型。

OpenAI 中的解析

使用OpenAI函数调用来结构化其输出。只能与支持函数调用的模型一起使用

  • JsonOutputFunctionsParser:以 JSON 形式返回函数调用的参数
  • PydanticOutputFunctionsParser:将函数调用的参数作为 Pydantic 模型返回
  • JsonKeyOutputFunctionsParser:以 JSON 形式返回函数调用中特定键的值
  • PydanticAttrOutputFunctionsParser:以 Pydantic 模型的形式返回函数调用中特定键的值

自动修复解析器

输出解析器包装了另一个输出解析器,如果第一个解析器失败,它会调用另一个LLM来修复任何错误。

Pandas DataFrame解析器

允许用户指定任意的Pandas DataFrame,并查询LLMs以获取以格式化字典形式提取数据的数据

Pydantic解析器

Pydantic是一个Python库,它旨在简化数据验证和解析的过程。它提供了一种简单而强大的方式来定义数据模型,并使用这些模型来验证数据的有效性并进行解析。Pydantic通过在数据类中定义属性的类型和验证规则,使得数据模型的创建和验证变得非常容易。这个库还支持自动生成文档、序列化和反序列化等功能,使得数据处理变得更加高效和可靠。Pydantic通常用于构建Web应用程序、API服务以及数据处理任务中。

重试解析器

LangChain的重试解析器利用大型模型的推理能力,根据原始提示来找回相关信息,帮助解析数据。

结构化输出解析器

用于处理复杂的、结构化的输出。当应用需要模型生成具有特定结构的复杂回答时,可使用结构化输出解析器来实现