您好,欢迎来到华佗养生网。
搜索
您的当前位置:首页LangChain实战 | OutputParser:让大模型输出从 “鸡肋” 变 “瑰宝” 的关键!

LangChain实战 | OutputParser:让大模型输出从 “鸡肋” 变 “瑰宝” 的关键!

来源:华佗养生网

LangChain 的 OutputParser 是一种强大工具,用于将大模型的原始输出转换为结构化、可操作的数据格式,如 JSON 或 Python 对象。本文介绍了 OutputParser 的核心功能、应用场景及其在实际业务中的实现方法,包括使用 JsonOutputParser 和 Pydantic 定义数据结构,从而高效格式化输出内容以满足业务需求。

1. 什么是输出解析器(OutputParser)?

在大模型应用中,原始输出通常只是处理的开端,尽管这些输出能够提供很好的内容,但是根据下游使用场景,语言模型生成的原始文本很大概率需要被进一步处理才能使用。

输出解析器(OutputParser)是 LangChain 中的一种工具,用于帮助将语言模型的文本响应转化为实用的格式化输出。

2. OutputParser的用途是什么?

输出解析器有两个主要用途:

3. 例子:大模型返回响应后,以JSON格式返回给客户端(JsonOutputParser)

我们需要大模型生成一个小说,内容以json返回,在这个基础上,增加一些其他业务数据后,给客户端以json格式返回:

{
  作者:"xx",
  年龄:"80",
  标题:"xxx",
  摘要:"xxxx",
  正文:"xxxxxx",
}

OutputParser示例流程

3.1 引入相关的包

import os  # 导入操作系统模块
import json  # 导入json模块

os.environ['OpenAI_API_KEY'] = 'hk-iwtb91e427'  # 设置OpenAI API密钥

from langchain_core.output_parsers import PydanticOutputParser, JsonOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_openai import OpenAI, ChatOpenAI
from pydantic import BaseModel, Field, model_validator

3.2 定义模型

model = ChatOpenAI(  # 创建ChatOpenAI的实例
    model="gpt-4o-mini",  # 指定模型
    temperature=0,  # 设置温度
    base_url="https://api.openai-hk.com/v1"  # 设置基础URL
)

3.3 定析器

使用pydantic定义所需的数据结构,和基本的格式校验逻辑,并作为JsonOutputParser的参数

# 使用pydantic定义所需的数据结构
class Story(BaseModel):# 创建Story类,继承自BaseModel
    title: str = Field(description="标题")  # 科幻小说的标题
    summary: str = Field(description="摘要")  # 科幻小说的摘要
    content: str = Field(description="正文")  # 科幻小说的正文

    # 可以轻松添加自定义验证逻辑
    @model_validator(mode="before")  # 在模型验证之前进行验证
    @classmethod
    def validate_story(cls, values: dict) -> dict:# 定义验证方法
        # 这里可以添加对标题、摘要和正文的验证逻辑
        return values  # 返回验证后的值

# 设置解析器
parser = JsonOutputParser(pydantic_object=Story)  # 创建JsonOutputParser实例

3.4 定义提示词(指导怎么格式化输出)

解析器通过 get_format_instructions() 方法,返回用于提示的格式化文本指令,然后向提示注入指令,指导语言模型如何格式化响应(见运行日志)。

# 创建提示模板
prompt = PromptTemplate(  # 创建提示模板
    template="请按用户要求返回文章,包括标题、摘要和正文。\n{format_instructions}\n{query}\n",  # 模板内容
    input_variables=["query"],  # 输入变量
    partial_variables={"format_instructions": parser.get_format_instructions()},  # 部分变量
)

# 定义查询
story_query = "请给我一个100字的科幻小说。"# 查询内容

# 打印最终模板结果
final_template = prompt.format(format_instructions=parser.get_format_instructions(), query=story_query)  # 格式化最终模板
print("=================================提示词开始========================================")
print(final_template)  # 打印最终模板结果
print("=================================提示词结束========================================")

这是生成的指导提示词:

The output should be formatted as a JSON instance that conforms to the JSON schema below.

As an example, for the schema {"properties": {"foo": {"title": "Foo", "description": "a list of strings", "type": "array", "items": {"type": "string"}}}, "required": ["foo"]}
the object {"foo": ["bar", "baz"]} is a well-formatted instance of the schema. The object {"properties": {"foo": ["bar", "baz"]}} is not well-formatted.

Here is the output schema:

{"properties": {"title": {"description": "标题", "title": "Title", "type": "string"}, "summary": {"description": "摘要", "title": "Summary", "type": "string"}, "content": {"description": "正文", "title": "Content", "type": "string"}}, "required": ["title", "summary", "content"]}

3.5 调用大模型生成格式化输出

放到链的最后,用来格式化输出:output = prompt | model | parser

# 创建一个查询,旨在提示语言模型生成科幻小说
output = prompt | model | parser  # 将提示和模型结合
story_output = output.invoke({"query": story_query})  # 调用模型并传入查询
print("模型输出结果 :")
print(story_output)  # 打印输出
print()

3.6 在返回给用户前,增加其他业务数据

# 拼接作者和年龄信息
final_json = {
    "title": story_output['title'],
    "summary": story_output['summary'],
    "content": story_output['content'],
    "author": "AI取经人",  # 作者
    "age": 18  # 年龄
}

# 打印最终的 JSON 结果
print("最终的 JSON 结果:")
print(json.dumps(final_json, ensure_ascii=False, indent=4))  # 格式化打印JSON结果

3.7 最终的json数据

{
    "title": "穿越时空的信号",
    "summary": "在未来的某一天,科学家通过先进的量子技术接收到了来自20世纪的神秘信号。这一信号揭示了一段被遗忘的历史,改变了人类对时间的理解。",
    "content": "当信号首次被接收时,整个实验室都陷入了震惊。信号中包含着关于平行宇宙的知识和未来人类的命运。科学家们决定通过量子隧道进行实验,试图与过去的自己交流。在这个过程中,他们不仅面对科技的诱惑,也直面人性的挣扎。最终,他们意识到,改变历史的代价是不可承受的,但仍旧摆在他们面前。",
    "author": "AI取经人",
    "age": 18
}

3.8 运行日志


如何系统学习掌握AI大模型?

AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。

学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

4. 2024行业报告

行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

5. 大模型项目实战

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

6. 大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo7.cn 版权所有 湘ICP备2022005869号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务