当前位置:首页 > 技术分析 > 正文内容

LangChain 和 Pydantic 生成 JSON 格式的响应

ruisui883个月前 (01-23)技术分析22

Pydantic 1 的生命周期结束于 2024 年 6 月。LangChain 将很快停止对 Pydantic 1 的支持,并可能在内部迁移到 Pydantic 2。这个变化预计将在 9 月发生,届时主 langchain 包的版本将小幅提升至 0.3.x。



从 langchain>=0.0.267 版本开始,LangChain 允许用户安装 Pydantic V1 或 V2。

内部来说,LangChain 继续通过 Pydantic 2 的 v1 命名空间使用 Pydantic V1。

由于 Pydantic 不支持混合使用 .v1 和 .v2 对象,用户在使用 LangChain 与 Pydantic 时应该注意一些问题。


尽管 LangChain 在某些 API 中支持 Pydantic v2 对象,但建议用户在 LangChain 0.3 版本发布之前继续使用 Pydantic v1 对象。


本文将体验生成 JSON 格式的结构化响应的能力。


一、JSON 格式的优势

JSON(JavaScript Object Notation)格式无疑是开发者首选的标准,原因有多个:

  • 可读性:对人类和机器来说都易于阅读和理解。
  • 兼容性:被大多数编程语言和平台支持。
  • 灵活性:能够简单而简洁地表示复杂的数据结构。
  • 集成性:能够轻松地与 RESTful API、NoSQL 数据库等许多现代技术集成。


二、使用 Pydantic 定义模型

下面使用 Pydantic,这是一个允许我们在 Python 中创建强类型数据模型的库。这些模型随后可以用于数据验证和序列化。与其他验证库不同,Pydantic 使用注解自动执行数据验证和强制转换。


下面尝试生成具有文本和一些标签的社交媒体帖子:

from langchain_core.pydantic_v1 import BaseModel, Field

class SocialPost(BaseModel):
 """社交媒体帖子"""
 tags: str = Field(description="帖子标签")
 text: str = Field(description="帖子的纯文本")


上面定义一个通用 SocialPost 类:

  • 使用了描述类本身目的的文档字符串;
  • 扩展了 Pydantic 的 BaseModel,它代表了验证框架的基类;
  • 使用了 Field 函数来定义对象属性,并附带了额外的元信息(例如描述、默认值等)。


三、在 LangChain 中使用 Pydantic 模型

在定义了想要使用的输出 JSON 模板之后,接下来在 LangChain 应用程序中使用它:

# 导入ChatOpenAI类,用于与OpenAI聊天模型交互
from langchain_openai import ChatOpenAI
# 导入BaseModel和Field类,用于定义结构化数据模型
from langchain_core.pydantic_v1 import BaseModel, Field

# 定义SocialPost类,表示社交媒体帖子的数据模型
class SocialPost(BaseModel):
 """社交媒体帖子"""
 # 定义tags字段,表示帖子的标签
 tags: str = Field(description="帖子标签")
 # 定义text字段,表示帖子的纯文本内容
 text: str = Field(description="帖子的纯文本")

# 创建一个使用gpt-4o模型的ChatOpenAI实例
llm = ChatOpenAI(model="gpt-4o")
# 为ChatOpenAI实例设置输出结构化为SocialPost模型
structured_llm = llm.with_structured_output(SocialPost)

# 调用invoke方法生成关于海滩假期的帖子,并将响应结果存储在response变量中
response = structured_llm.invoke("你能写一篇关于海滩假期的帖子吗?")
# 打印响应结果
print(response)


输出内容:



代码中使用了 with_structured_output 方法来生成符合 SocialPost 类定义格式的结构化输出。


LangChain 提供了一个强大而灵活的解决方案,用于生成 JSON 格式的结构化响应,使得将语言模型集成到现代应用程序中变得更加容易。

#记录我的9月生活#

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/497.html

分享给朋友:

“LangChain 和 Pydantic 生成 JSON 格式的响应” 的相关文章

Python 幕后:Python导入import的工作原理

更多互联网精彩资讯、工作效率提升关注【飞鱼在浪屿】(日更新)Python 最容易被误解的方面其中之一是import。Python 导入系统不仅看起来很复杂。因此,即使文档非常好,它也不能让您全面了解正在发生的事情。唯一方法是研究 Python 执行 import 语句时幕后发生的事情。注意:在这篇文...

VIM配置整理

一、基本配色set number set showcmd set incsearch set expandtab set showcmd set history=400 set autoread set ffs=unix,mac,dos set hlsearch set shiftwidth=2 s...

摄影后期必看 | PS插件camera raw 16.4教程 | 范围蒙版

范围蒙版Camera Raw 【蒙版】模块中提供了三个范围蒙版工具,可以通过特定的范围来创建蒙版。此次新增的【范围蒙版】大大加强了acr插件对局部调整的能力。点击下拉小箭头可以看到【颜色范围】,可用于快速选择想要编辑的颜色。快捷键:Shift + C【明亮度范围】,可用于快速选择想要调整的明亮度。快...

vue-router是如何解析query参数呢? #前端

vue-router 中的 query 解析。1. 大家好,我是龙仔。今天来分享 vue-router 是如何解析快乐参数的,因为使用 vue 路由会传 query 参数和快乐参数,所以从 vue 的角度来看如何解析传递的快乐参数。2. 基础知识大家应知道,快乐参数结构如:a、b、c、a、b、c、a...

一起学Vue:路由(vue-router)

前言学习vue-router就要先了解路由是什么?前端路由的实现原理?vue-router如何使用?等等这些问题,就是本篇要探讨的主要问题。vue-router是什么路由是什么?大概有两种说法:从路由的用途上来解释路由就是指随着浏览器地址栏的变化,展示给用户的页面也不相同。从路由的实现原理上来解释路...

微信企业号首款永久免费应用问世

7月14日,微信企业号移动办公应用领跑者——办公逸宣布:其所研发的微信办公应用将永久免费,企事业单位只要拥有微信企业号都可以免费安装办公逸各项应用,此举标志着微信办公免费时代现已到来!据悉,办公逸(www.bangongyi.com)现已推出四大微信办公套件,分别为:移动办公管理套件、客户关系管理套...