LangChain入门:11.Pydantic(JSON)解析器实战

news2025/1/19 14:20:32
摘要

在数字化营销的浪潮中,自动化内容生成成为了提升效率和用户参与度的利器。本文将详细介绍如何利用LangChain的自然语言处理能力和Pydantic的数据验证特性,构建一个自动化的花店文案生成器。通过这个工具,您可以快速为各种花卉生成吸引人的描述和推荐理由,从而提升营销效果和客户体验。

环境准备

在开始之前,请确保您的Python环境中已安装以下库:langchain_openaipandaspydantic。如果尚未安装,可以通过以下命令一次性完成安装:

pip install langchain_openai pandas pydantic
Pydantic库简介

Pydantic是一个开源的Python库,用于数据验证和设置管理。它通过使用Python类型提示来验证输入数据,确保数据符合预期的格式和结构。Pydantic特别适合于处理来自API、数据库或其他数据源的输入,因为它可以自动生成数据模型,并在数据不符合预期时提供清晰的错误信息。

创建模型实例

首先,我们需要创建一个OpenAI模型实例,这里选用gpt-3.5-turbo模型,它以生成高质量文本而闻名。

from langchain_openai import ChatOpenAI

# 从环境变量中读取OpenAI API密钥
api_key = os.getenv("OPENAI_API_KEY")
llm = ChatOpenAI(
    openai_api_key=api_key,
    base_url="https://api.chatanywhere.tech/v1",
    model="gpt-3.5-turbo",
    temperature=0,
)
定义数据结构

使用Pydantic库定义我们期望的数据格式,确保模型输出的一致性和可验证性。

from pydantic import BaseModel

class FlowerDescription(BaseModel):
    flower_type: str
    price: int
    description: str
    reason: str
创建输出解析器

创建一个输出解析器,确保模型的输出符合我们定义的FlowerDescription格式。

from langchain.output_parsers import PydanticOutputParser

output_parser = PydanticOutputParser(pydantic_object=FlowerDescription)
format_instructions = output_parser.get_format_instructions()
构建提示模板

定义一个提示模板,指导模型生成符合我们期望格式的输出。

from langchain import PromptTemplate

prompt_template = """
您是一位专业的花店文案撰写人。
对于售价为{price}的{flower},您能提供一个吸引人的描述和一个推荐的理由吗?
{format_instructions}
"""
生成并解析输出

使用定义好的模板和解析器生成文案,并解析模型的输出。

import pandas as pd

# 创建DataFrame来存储结果
df = pd.DataFrame(columns=["flower_type", "price", "description", "reason"])

# 数据准备
flowers = ["玫瑰", "康乃馨", "郁金香", "百合", "向日葵"]
prices = [10, 15, 20, 25, 30]

# 循环处理每种花卉
for flower, price in zip(flowers, prices):
    input_prompt = prompt_template.format(flower=flower, price=price)
    output = llm.invoke(input_prompt)
    
    # 解析模型输出
    parsed_output = output_parser.parse(output.content)
    parsed_output_dict = parsed_output.dict()

    # 将结果添加到DataFrame
    df = df.append(parsed_output_dict, ignore_index=True)

# 打印结果
print(df.to_dict(orient="records"))
效果展示

以下是一个成功生成的花卉文案示例:
在这里插入图片描述
图2: 自动生成的花卉文案展示。

效果与结论

通过上述步骤,我们成功构建了一个自动化的花店文案生成器。这个工具不仅可以节省宝贵的时间,还能确保内容的质量和一致性。利用LangChain和Pydantic库,我们不仅确保了输出数据的准确性,还提高了数据处理的效率。

这个项目展示了LangChain在处理和生成复杂数据结构方面的强大能力,以及Pydantic在数据验证和设置管理中的实用性。

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

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

相关文章

LLM:检索增强生成(RAG)

1 Embedding技术 简单地说,嵌入(Embedding)思想可以视为一种尝试通过用向量来表示所有东西的“本质”的方法,其特性是“相近的事物”由相近的数表示。 1.1 文本向量(Text Embedding) 在GPT中,文本嵌入(Text Embedding)是通过将输入文本中的每…

哲♂学家带你用顺序表实现通讯录

实现通讯录能使我们进一步加深对顺序表的理解,接下来就由本哲♂学家带你手把手实现通信录。 其中需要用到顺序表的知识可以点击下面链接了解:http://t.csdnimg.cn/9SjGd话不多说,我们♂开始吧。 一、通讯录头文件声明 由于我们前面已经写过…

随机生成Long全范围数

随机生成Long全范围数 前言实现思路主要代码分区随机生成过程案例:随机生成100个数 朴素的比较总结 前言 使用自带的Random.nextLong()函数生成Long型的长整数,范围比较小,如下图。100个随机数没看见10以内的数字。所以考虑实现随机化生成大…

基于注意力整合的超声图像分割信息在乳腺肿瘤分类中的应用

基于注意力整合的超声图像分割信息在乳腺肿瘤分类中的应用 摘要引言方法 Segmentation information with attention integration for classification of breast tumor in ultrasound image 摘要 乳腺癌是世界范围内女性最常见的癌症之一。基于超声成像的计算机辅助诊断&#x…

scp和rsync

引言 我们平时总会有在不同的设备之间传输文件的需要,好友同事间可以用微信、QQ、网盘等,还是比较方便安全的。而在linux的操作系统中,我们经常需要两台机器之间拷贝文件,或者由于业务需要备份文件,那就不得不用到scp和…

【React】基于JS 3D引擎库实现关系图(图graph)

主角:3D Force-Directed Graph 简介:一个使用ThreeJS/WebGL进行3D渲染的Graph图库 GitHub: https://github.com/vasturiano/3d-force-graph Ps: 较为复杂或节点巨大时,对GPU>CPU消耗较大,同量级节点对比下优于AntV G6和Echarts…

C语言之分支语句和循环语句

前言 一、什么是语句? 二、分支语句(选择结构) 2.1 if语句 2.2 switch语句 三、循环语句 3.1 while循环 3.2 break与continue语句 3.3 getchar()与putchar() 3.3.1 缓冲区 3.4 for循环 3.4.1 一些for循环的变种 3.5 do...while循…

java运行时内存

从jdk1.7以及以后,静态变量和常量池存在堆空间。

【TSP旅行商问题】改进的大邻域搜索算法LNS

课题名称:基于改进的大规模邻域搜索算法LNS求解TSP问题 版本时间:2024-04-01 程序运行:直接运行LNS_TSP.m 文件即可 代码获取方式: QQ:491052175 VX:Matlab_Lover 模型介绍: 第一步&…

[AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试

目录 关键词平台说明背景一、需求二、配置2.1 NvMBlockDescriptors2.2 NvMFeeRef2.3 FeeBlockConfigurations 三、code3.1 声明和定义3.2 调试 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector , EB芯片厂商TI 英飞凌编…

SpringBoot -- 外部化配置

我们如果要对普通程序的jar包更改配置,那么我们需要对jar包解压,并在其中的配置文件中更改配置参数,然后再打包并重新运行。可以看到过程比较繁琐,SpringBoot也注意到了这个问题,其可以通过外部配置文件更新配置。 我…

钉钉事件订阅前缀树算法gin框架解析

当钉钉监测到发生一些事件,如下图 此处举例三个事件user_add_org、user_change_org、user_leave_org,传统的做法是,我们写三个if条件,类似下图 这样字符串匹配效率比较低,于是联想到gin框架中的路由匹配算法&#xff0…

利用Spark将Kafka数据流写入HDFS

利用Spark将Kafka数据流写入HDFS 在当今的大数据时代,实时数据处理和分析变得越来越重要。Apache Kafka作为一个分布式流处理平台,已经成为处理实时数据的事实标准。而Apache Spark则是一个强大的大数据处理框架,它提供了对数据进行复杂处理…

Linux操作系统之nfs网络文件系统

目录 一、NFS简介 1.2 安装配置NFS 一、NFS简介 nfs类似于windows文件共享 将linux的一个目录共享到网络中,网络中的其他所有主机都可以使用这个共享目录中的文件 samba 文件共享 可以在linux中通过samba共享一个目录,然后在linux中可以访问这个共享 …

55 npm run serve 和 npm run build 的分包策略

前言 这里我们来看一下 vue 这边 打包的时候的一些 拆分包的一些策略 我们经常会使用到 npm run build 进行服务的打包 然后 打包出来的情况, 可能如下, 可以看到 chunk-vendors 是进行了包的拆分, 我们这里就是 来看一下 这里 npm run build 的时候的, 一个分包的策略 测试…

【HTML】简单制作一个唱片动画效果

目录 前言 开始 HTML部分 CSS部分 效果图 总结 前言 无需多言,本文将详细介绍一段代码,具体内容如下: 开始 首先新建文件夹,创建两个文本文档,其中HTML的文件名改为[index.html],CSS的…

Matlab|储能辅助电力系统调峰的容量需求研究

目录 1 主要内容 目标函数 约束条件 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《储能辅助电力系统调峰的容量需求研究》,主要是对火电、风电和储能等电力设备主体进行优化调度,在调峰能力达不到时采用弃负荷,程序以…

第十四届省赛大学B组(C/C++)子串简写

原题链接:子串简写 程序猿圈子里正在流行一种很新的简写方法: 对于一个字符串,只保留首尾字符,将首尾字符之间的所有字符用这部分的长度代替。 例如 internationalization 简写成 i18n,Kubernetes 简写成 K8s&#…

【贪玩巴斯】Mac的M芯片(M1/2...)下载homebrew方法(24年最新且已验证可行)

1. 按照目前广为流传的方法(M1会出现一些问题): 终端输入: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 使用国内镜像下载。 2. 输入后按照要求步骤执行即可&#xff…

docker-compose运行springinitializr用来创建springboot2

前言 spring initializr官方的地址是: https://start.spring.io/ ,这是一个用来创建springboot脚手架的一个工具,但是目前这个工具已经更新到springboot3,而我还没学springboot3,目前还想继续创建springboot2,我就想能…