构建高效NLP管道:PydanticOutputParser与Langchain的结合

news2025/1/13 7:57:31

PydanticOutputParser 是一个用于解析语言模型输出的实用工具,它允许用户指定一个 Pydantic 模型,并查询语言模型以生成符合该模型的 JSON 输出。这个工具特别有用,因为它可以帮助开发者确保从语言模型获得的结构化数据符合预期的格式,从而简化了数据处理和集成的过程。

使用 PydanticOutputParser 之前,你需要定义一个 Pydantic 模型,这个模型将作为数据的结构模板。Pydantic 的 BaseModel 类似于 Python 的数据类,但它提供了实际的类型检查和数据转换功能。你可以在模型中定义字段,并使用 Field 函数添加额外的元数据,如字段描述。此外,你还可以使用 validator 装饰器来添加自定义验证逻辑,确保数据的正确性。

例如,如果你想要解析一个关于笑话的数据结构,你可以创建一个包含 setup(笑话的铺垫)和 punchline(笑话的结尾)字段的 Pydantic 模型。然后,你可以使用 PydanticOutputParser 来指导语言模型生成符合这个模型的输出。

在实际应用中,你可以将 PydanticOutputParser 与语言模型和其他工具(如 PromptTemplate)结合使用,构建一个完整的数据处理流程。这样,你不仅可以获得结构化的数据输出,还可以通过模板化的方式控制语言模型的输入,使其更加灵活和强大。

总的来说,PydanticOutputParser 是一个强大的工具,它结合了 Pydantic 的数据模型能力和语言模型的生成能力,为开发者提供了一种高效的方式来处理和解析结构化数据。

from typing import List

from langchain.output_parsers import PydanticOutputParser
from langchain.prompts import ChatPromptTemplate
from langchain.schema import HumanMessage
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI


class BookInfo(BaseModel):
    book_name: str = Field(description="书籍的名字")
    author_name: str = Field(description="书籍的作者")
    genres: List[str] = Field(description="书籍的体裁")


output_parser = PydanticOutputParser(pydantic_object=BookInfo)  #BookInfo
# 查看输出解析器的内容,会被输出成json格式
print(output_parser.get_format_instructions())

prompt = ChatPromptTemplate.from_messages([
    ("system", "{parser_instructions} 你输出的结果请使用中文。"),
    ("human", "请你帮我从书籍的概述中,提取书名、作者,以及书籍的体裁。书籍概述会被三个#符号包围。\n###{book_introduction}###")
])

book_introduction = """
《朝花夕拾》原名《旧事重提》,是现代文学家鲁迅的散文集,收录鲁迅于1926年创作的10篇回忆性散文, [1]1928年由北京未名社出版,现编入《鲁迅全集》第2卷。
此文集作为“回忆的记事”,多侧面地反映了作者鲁迅青少年时期的生活,形象地反映了他的性格和志趣的形成经过。前七篇反映他童年时代在绍兴的家庭和私塾中的生活情景,后三篇叙述他从家乡到南京,又到日本留学,然后回国教书的经历;揭露了半殖民地半封建社会种种丑恶的不合理现象,同时反映了有抱负的青年知识分子在旧中国茫茫黑夜中,不畏艰险,寻找光明的困难历程,以及抒发了作者对往日亲友、师长的怀念之情 [2]。
文集以记事为主,饱含着浓烈的抒情气息,往往又夹以议论,做到了抒情、叙事和议论融为一体,优美和谐,朴实感人。作品富有诗情画意,又不时穿插着幽默和讽喻;形象生动,格调明朗,有强烈的感染力。
"""

model = ChatOpenAI(model="gpt-3.5-turbo",
                   openai_api_key="sk-BuQK7SGbqCZP2i2z7fF267AeD0004eF095AbC78d2f79E019",
                   openai_api_base="https://api.aigc369.com/v1")
final_prompt = prompt.invoke({"book_introduction": book_introduction,
                              "parser_instructions": output_parser.get_format_instructions()})
response = model.invoke(final_prompt)
print(response.content)
result = output_parser.invoke(response)
print(result)

PydanticOutputParser 被用来创建一个输出解析器,该解析器将根据 BookInfo 模型来解析语言模型的输出。get_format_instructions() 方法返回一个字符串,这个字符串描述了语言模型输出应该如何格式化以匹配 BookInfo 模型。

{
    "book_name": "书籍的名字",
    "author_name": "书籍的作者",
    "genres": "书籍的体裁"
}

代码能够成功执行,result预期的输出可能如下:

# 这是语言模型的原始响应,具体内容取决于模型的生成结果
{
    "book_name": "朝花夕拾",
    "author_name": "鲁迅",
    "genres": "散文集"
}
# 这是解析后的结果,它将是一个 BookInfo 模型的实例
BookInfo(book_name='朝花夕拾', author_name='鲁迅', genres=['散文集'])

这样输出了JSON数据方便对接数据的二期处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2075538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全面解析:四大LLM模型——预训练与后训练的新范式

导读 最初,大语言模型LLM的训练过程只关注于预训练,但如今已经扩展到包含预训练和后训练两个阶段。后训练通常包括监督指令微调和对齐,这一方法在ChatGPT发布后广泛流行! 翻译自:https://magazine.sebastianraschka.com/p/new-l…

NAT网关产品手册

产品用途 SG-NAT-410 网关支持 IP 地址跨网段和通讯端口的转换,为不方便修改参数的以太网通讯设备的信息化联网提供便捷的解决方案。网关有 1 个两口以太网交换机接口(LAN 口 ) 和 1 个单口以太网通讯接口 (WAN 口 ) 。不对原系统做任何硬件和软件修改&…

WAF一般是怎么防御SQL注入的

目录 参数化查询在防止SQL注入中起到什么作用? 为什么要限制数据库用户权限来预防SQL注入? WAF是如何检测SQL注入特征的? WAF防范SQL注入的主要策略包括: 参数化查询和预编译语句:使用参数化查询或预编译语句可以确…

虚拟试穿技术分享

虚拟试穿技术,通过计算机视觉和人工智能,允许用户在数字界面上试穿服装,无需实际穿戴。这项技术广泛应用于电子商务和时尚工业,使得消费者可以在购买前预览衣物在自己身上的样子。 基于扩散的方法:这种方法使用基于图像…

微波网络分析仪VNA原理详解:电磁波测量基础-测试狗科研测试

微波网络分析仪VNA原理详解:电磁波测量基础 微波网络分析仪(Vector Network Analyzer,简称VNA)是一种用于测试和测量微波频段元件和网络特性的电子测试设备。 一、电磁波 电磁波是由电场和磁场相互垂直并相互依赖振荡传播的波动现…

餐饮商标怎么注册自己的品牌!

餐饮行业是创业者选的比较多的行业,也有许多人从小做起,成为当地知名品牌,那企业或个体户如何注册餐饮行业的商标。 在餐饮行业首先是申请注册类别43类餐饮住宿,这个是餐饮的核心类别,开店、饭店都在这个类别&#xf…

学习之adb命令

adb命令作用: 用来操作手机系统的 类似于window的cmd,linux的bash 如果添加环境变量的adb不能识别设备通常是因为存在两个不同的版本 如下: adb devices 如果没有发现,可以尝试手动连接设备 需要先执行 adb kill-server adb start-server …

前端模块自动导入的插件

前言 开发中通常会有很多导入语句&#xff0c;如何确保一些通用的api和hook无需每次手动导入即可使用。 <script setup lang"ts"> import { ref, reactive } from "vue" import { useRoute, useRouter } from "vue-router" import { log…

【Spring】Cookie和Session

系列文章目录 第一章 初识Spring MVC 文章目录 系列文章目录前言一、Cookie和Session二、Cookie操作获取Cookie指定Cookie 三、Session操作设置Session数据获取Session数据 四、获取Header总结 前言 HTTP是"无状态"的协议&#xff0c;我们可以理解为它没有记忆力。…

UnrealEngine学习(02):虚幻引擎编辑器界面详解

学习一款软件&#xff0c;我个人建议是先学习怎么用&#xff0c;然后是学习怎么用的好&#xff0c;再研究源码。 上一篇文章详细描述了我们该如何安装虚幻5引擎&#xff1a; UnrealEngine学习(01)&#xff1a;安装虚幻引擎https://blog.csdn.net/zuodingquan666/article/deta…

Kubernetes存储Volume

数据是一个企业的发展核心,他涉及到数据存储和数据交换的内容。在生产环境中尤为重要的一部分&#xff0c;在 Kubernetes 中另一个重要的概念就是数据持久化 Volume。 一、Volume的概念 对于大多数的项目而言&#xff0c;数据文件的存储是非常常见的需求&#xff0c;比如存储用…

SEO优化租用站群服务器需要考虑哪些?

在SEO(搜索引擎优化)的背景下&#xff0c;站群服务器是一种运行多个网站的器&#xff0c;每个网站共享同一个IP地址&#xff0c;但也可拥有独立IP。下面将详细探讨SEO使用站群服务器租用需要考虑的各种因素&#xff0c;rak小编为您整理发布。 1. 网站内容的原创性与相关性 内容…

淘客系统源码的架构分析

淘客系统的架构分析可以从多个层面进行探讨&#xff0c;包括业务流程、技术选型、系统模块、安全性、可扩展性等方面。 业务流程&#xff1a;淘客返利系统的主要业务流程包括用户注册、商品推广、订单跟踪、返利结算等。用户注册成功后&#xff0c;将获得推广链接&#xff0c;…

html+css+js网页设计 电商 珠宝珠宝行业的专业领域应用先状、前沿及发展展望13个页面

htmlcssjs网页设计 电商 珠宝珠宝行业的专业领域应用先状、前沿及发展展望13个页面 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编…

Python新手必看!这个模块让Python的重试更加便捷灵活!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Python重试 📒📝 安装📝 使用📝 进阶使用⚓️ 相关链接 ⚓️📖 介绍 📖 在Python编程中,网络请求、数据库操作或任何可能因外部因素而失败的场景中,错误重试显得尤为重要。它能有效减少因暂时性问题导致的程序崩溃…

【Qt CMake】Qt5Widgets.dll:-1: error: LNK1107: 文件无效或损坏: 无法在 0x308 处读取

项目场景&#xff1a; CMake 编译QT 工程 编译报错 E:\tool\Qt5.15.2\5.15.2\msvc2019_64\bin\Qt5Widgets.dll&#x1f44e; error: LNK1107: 文件无效或损坏: 无法在 0x308 处读取 问题描述 Cmkae 报错&#xff1a; E:\tool\Qt5.15.2\5.15.2\msvc2019_64\bin\Qt5Widgets.dll…

大模型入门到精通——使用Embedding API及搭建本地知识库(二)

搭建并使用向量数据库 前序基础知识参考链接介绍&#xff1a;大模型入门到精通——使用Embedding API及搭建本地知识库(一) 搭建并使用向量数据库&#xff0c;因此读取数据后我们省去数据处理的环节直入主题 基于 LangChain 实现 README.md 相关文档的向数据库搭建&#xff…

小工具网址集合(不定期更新)

1、网络小说聚合工具 网址&#xff1a;https://502book.com/ 一个挺不错的搜索工具&#xff0c;聚合了多个网站的小说搜索工具&#xff0c;直接搜索就可以了&#xff0c;自动解析多个站点的内容&#xff0c;可以直接在网页上观看&#xff0c;比较方便。 2、图片水印工具 网址&a…

高效遍历受限秩树:DFS算法设计与C语言实现

高效遍历受限秩树:DFS算法设计与C语言实现 前言算法设计伪代码C语言代码示例算法分析扩展应用结论前言 给定一个树(或图),其中每个节点的秩(可以理解为子节点数量或某种复杂度度量)最多为 [lgn],其中 n 是树中节点的总数。我们需要设计一个算法来高效遍历或处理这样的树…

SAP如何定义跨不同服务器系统实现 表数据自动传输

一.首先定义一个表 二.定义表维护生成器生成视图 三.SOBJ更改传输配置 最后检查下业务配置情况即可 End&#xff1a;如果不能自动传输可以包请求传输 1.创建请求 2.选中要传输的数据 3.包含请求 点击保存 不点保存请求包的是空的&#xff08;示例图片是灰的是我没有创建请求&…