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

LangChain 和 Pydantic 生成 JSON 格式的响应

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

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 格式的响应” 的相关文章

2024年10 大 Linux 桌面发行版推荐

年已过半,现在是探究 2024 年最流行的 Linux 发行版的最佳时机。Linux 是一个开源操作系统,构建在 Linux 内核上,并集成了 GNU shell 实用程序、桌面环境、应用程序、包管理系统。由于其通用性、安全性、用户友好性和多样性,它的受欢迎程度超过了其他操作系统。在本文中,我们将从...

Beta版Linux Mint“Xia”发行版22.1发布

IT之家 12 月 13 日消息,Beta 版 Linux Mint“Xia” 22.1 昨日(12 月 12 日)发布,新版本基于 Ubuntu 24.04,内核版本为 Linux 6.8,长期支持将持续到 2029 年,为用户提供可靠稳定的使用体验。新版本在软件包管理方面,主要弃用了传统的 ap...

vue3中父子组件之间传值的详解

首先我们回顾一下vue2中父子组件是怎么传值的,然后对比vue3进行详解。一、vue2中父子组件传值<!-- 父组件 --> <template> <div> // name:父组件把值传给子组件test-child // childFn:...

vue 3 学习笔记 (八)——provide 和 inject 用法及原理

在父子组件传递数据时,通常使用的是 props 和 emit,父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或多个孙组件使用时,就需要传很多次,会很麻烦。像这种情况,可以使用 provide 和 inject 解决这种问题,不论组件嵌套...

10个实例小练习,快速入门熟练 Vue3 核心新特性(一)

作者:xuying 全栈修炼转发链接:https://mp.weixin.qq.com/s/_n2seDbbiO5hXQfuUGbUCQ前言Vue3.0 发 beta 版都有一段时间了,正式版也不远了,所以真的要学习一下 Vue3.0 的语法了。本篇文章总共分两部分,望小伙伴们认真阅读。下一篇:10...

深度解析!AI智能体在To B领域应用,汽车售后服务落地全攻略

在汽车售后服务领域,AI智能体的应用正带来一场效率和专业度的革命。本文深度解析了一个AI智能体在To B领域的实际应用案例,介绍了AI智能体如何通过提升服务顾问和维修技师的专业度及维修效率,优化汽车售后服务流程。上周我分享了AI智能体+AI小程序To C的AI应用场景《1000%增长!我仅用一个小时...