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

LangChain 和 Pydantic 生成 JSON 格式的响应

ruisui885个月前 (01-23)技术分析38

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

企业如何高效进行费控管理?

作为一个职场人,无论是普通员工、财务人员还是企业管理人,都无法避开报销,而报销,就涉及到了企业成本费用控制,即费控。其控制的内容包括材料消耗成本控制、工资成本控制、费用成本控制。但在实际工作中,员工不知道如何规范化提交报销申请,报销容易频频被打回,导致报销周期长;财务人员也面临着报表滞后、账实不符、...

vue:组件中之间的传值

一、父子组件之间的传值----props/$emit1、父组件向子组件传值--props2.子组件想父组件传值-this.$emit('select',item)二、父组件向下(深层)子组件传值----provide/injectprovide:Object | () => O...

学无止境:Git 如何优雅地回退代码

来源:https://zhenbianshu.github.io前言从接触编程就开始使用 Git 进行代码管理,先是自己玩 Github,又在工作中使用 Gitlab,虽然使用时间挺长,可是也只进行一些常用操作,如推拉代码、提交、合并等,更复杂的操作没有使用过,看过的教程也逐渐淡忘了,有些对不起 L...

HTML5最新版本介绍

HTML5是HTML4.01和XHTML1.0之后超文本标记语言的最新版本,由一群自由思想者设计,最终实现了多媒体支持、交互性、更智能的表单和更好的语义标注。 HTML 5不只是 HTML规范的最新版本,它是用于生成现代 Web内容的一系列相关技术的总称,其中最重要的三个技术是:HTML5核心规范...

一文让你彻底搞懂 vue-Router

路由是网络工程里面的专业术语,就是通过互联把信息从源地址传输到目的地址的活动。本质上就是一种对应关系。分为前端路由和后端路由。后端路由:URL 的请求地址与服务器上的资源对应,根据不同的请求地址返回不同的资源。前端路由:在单页面应用中,根据用户触发的事件,改变URL在不刷新页面的前提下,改变显示内容...

精品微信小程序在线考试系统+后台管理系统|前后...

《微信小程序在线考试系统+后台管理系统|前后分离VUE》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等本系统包含微信小程序前台和Java做的后台管理系统,该后台采用前后台前后分离的形式使用Java+VUE微信小程序——前台涉及技术:WXML 和 WXSS、JavaScript...