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

2024-08-25 17:04

本文主要是介绍构建高效NLP管道:PydanticOutputParser与Langchain的结合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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

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

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

from typing import Listfrom 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 ChatOpenAIclass 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数据方便对接数据的二期处理。

这篇关于构建高效NLP管道:PydanticOutputParser与Langchain的结合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106134

相关文章

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者