LangChain和Pydantic生成JSON格式的响应

云的事情不好说 2024-09-13 20:12:53

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, Fieldclass 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 格式的结构化响应,使得将语言模型集成到现代应用程序中变得更加容易。



0 阅读:1

云的事情不好说

简介:感谢大家的关注