Langchain:输出解释器

1)输出解释器定义:

        输出解释器是 LangChain 提供的一个模块,用于处理 LLM(如 ChatOllama、OpenAI 等)生成的原始文本输出,将其转换为结构化的数据格式(如字典、列表、JSON 或自定义对象)。它通常用于以下场景:

        LLM 的输出是自由文本,可能包含不规则的格式或多余内容。
        应用程序需要将 LLM 输出解析为特定结构,以便后续处理或使用。
        LangChain 提供多种内置的输出解释器,例如:

                StructuredOutputParser:解析为结构化数据(如 JSON)。
                PydanticOutputParser:将输出映射到 Pydantic 模型(强类型数据结构)。
                ListOutputParser:解析为列表格式。
                RegexParser:使用正则表达式提取特定字段。
                JsonOutputParser:确保输出为有效的 JSON 格式。

        2)输出解释器的作用:

                输出解释器在 LangChain 工作流中起到以下关键作用:

                        1、结构化输出:
                                将 LLM 的自由文本输出(如一段话)转换为结构化格式(如字典或对象),便于程序处理。例如,将 LLM 输出的“城市:深圳,天气:多云,温度:26-31°C”解析为 {"city": "深圳", "weather": "多云", "temperature": "26-31°C"}。
                        2、提高一致性:
                                确保 LLM 输出符合预定义的格式或模式,减少输出不一致导致的错误。
例如,强制 LLM 返回 JSON 格式,而不是不规则的文本。
                        3、错误处理:
                                提供解析错误反馈,提示 LLM 重新生成符合格式的输出。
                                例如,如果 LLM 输出不符合预期 JSON 结构,解释器可以抛出错误并触发重试。
                        4、简化下游处理:
                                结构化输出便于与数据库、API 或其他系统集成。例如,解析后的 JSON 数据可以直接存储到数据库或传递给前端。
                        5、增强提示词效果:
                                输出解释器通常与提示词模板(如 PromptTemplate 或 FewShotPromptTemplate)结合使用,通过明确指定输出格式,指导 LLM 生成符合预期的回答。

     3)输出解释器的工作原理:

                        1、定义输出格式:
                                使用解释器指定期望的输出结构(例如 JSON schema 或 Pydantic 模型)。在提示词中明确要求 LLM 按指定格式输出。
                        2、解析 LLM 输出:
                                LLM 生成原始文本后,解释器对其进行解析,提取所需字段或验证格式。如果输出不符合要求,解释器可能抛出错误或尝试修复。
                        3、返回结构化数据:
                                解释器将解析后的数据返回为 Python 对象(如字典、列表或 Pydantic 对象),供后续处理。

        4)使用场景:

                        1、问答系统:将 LLM 的回答解析为结构化格式(如 JSON),便于存储或显示。
                        2、数据提取:从 LLM 输出中提取特定字段(如名称、日期、数字)。
                        3、API 集成:将 LLM 输出转换为 API 所需的格式。
                        4、任务自动化:确保 LLM 输出符合特定任务的要求(如分类结果、翻译文本)。

          5)相关代码:

                

from langchain.output_parsers import ResponseSchema, StructuredOutputParser
from langchain_core.prompts import PromptTemplate

from langchain_app.unit3.exampleSelector import ExampleSelector


# 自定义输出解析器
# 输出解析器的作用:
class MyOutputParse(ExampleSelector):

    def __init__(self):
        super().__init__()

    __doc__ = "结构化输出解析器"

    def structOutput(self):
        response_schemas = [
            ResponseSchema(name="answer", description="用户问题的答案"),
            ResponseSchema(
                name="source",
                description="用于回答用户问题的来源,应为网站。",
            ),
        ]
        output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
        format_instructions = output_parser.get_format_instructions()
        prompt = PromptTemplate(
            template="尽可能最好地回答用户的问题。\n{format_instructions}\n{question}",
            input_variables=["question"],
            partial_variables={"format_instructions": format_instructions},
        )
        chain = prompt | self.llm | output_parser
        chain.invoke("马斯克的脑机怎么样?")

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值