当前位置: 首页 > news >正文

AI实践:Pydantic

Pydantic

Pydantic是一个用于数据解析和验证的 Python 库,它基于 Python 的类型提示系统,能有效确保数据符合预期的格式和类型。

简单数据模型定义

from pydantic import BaseModelclass User(BaseModel):name: strage: intemail: strtry:user1 = User(name="Alice", age=30, email="alice@example.com")print(user1)user2 = User(name="Bob", age="twenty", email="bob@example.com")
except ValueError as e:print(f"验证错误: {e}")

在这里插入图片描述
定义了一个User类,它继承自BaseModel。User类有三个属性:name(字符串类型)、age(整数类型)和email(字符串类型)。这些属性的类型声明是 Pydantic 进行数据验证的基础。

创建user1实例时,传入的数据符合定义的类型,所以实例化成功。而在创建user2实例时,age传入的是字符串"twenty",不符合整数类型的要求,因此会引发ValueError。

访问模型属性

from pydantic import BaseModelclass User(BaseModel):name: strage: intemail: strtry:user1 = User(name="Alice", age=30, email="alice@example.com")print(user1)user2 = User(name="Bob", age="twenty", email="bob@example.com")
except ValueError as e:print(f"验证错误: {e}")print(user1.name)
print(user1.age)
print(user1.email)

在这里插入图片描述

模型转换为字典

from pydantic import BaseModelclass User(BaseModel):name: strage: intemail: strtry:user1 = User(name="Alice", age=30, email="alice@example.com")print(user1)print("---------------")
except ValueError as e:print(f"验证错误: {e}")user_dict = user1.dict()
print(user_dict)

在这里插入图片描述

dict()方法将 Pydantic 模型实例转换为 Python 字典,方便数据的进一步处理,如存储到数据库或作为 API 响应返回。

模型转换为 JSON 字符串

import json
from pydantic import BaseModelclass User(BaseModel):name: strage: intemail: struser1 = User(name="Alice", age=30, email="alice@example.com")
user_json = user1.model_json_schema() 
print(json.dumps(user_json))

在这里插入图片描述
model_json_schema()是pydantic中BaseModel类实例的方法,它返回一个字典,该字典描述了这个数据模型的 JSON 模式(JSON Schema)。JSON 模式是一种用于定义 JSON 数据结构的格式、类型、约束等的标准。例如,对于User模型,它会描述name是字符串类型,age是整数类型等信息。

可选字段

from pydantic import BaseModel, Field
from typing import Optionalclass Product(BaseModel):name: strprice: floatdescription: Optional[str] = Field(None, title="产品描述", max_length=200)product1 = Product(name="手机", price=999.99)
print(product1)
product2 = Product(name="计算器",description="处理数据", price=999.99)
print(product2)

在这里插入图片描述

古诗词小能手

import os
from langchain.chat_models import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplateos.environ['OPENAI_API_KEY'] = os.getenv("DASHSCOPE_API_KEY")
os.environ['OPENAI_BASE_URL'] = "https://dashscope.aliyuncs.com/compatible-mode/v1"llm = ChatOpenAI(temperature=0, model_name='qwen-plus')# 定义系统消息模板
system_template = "你是一位古诗词小能手,根据用户输入的关键词,输出相关的古诗词诗句。请按照以下格式输出:{format_instructions}"# 这里假设 format_instructions 是某种格式化指令,比如 "诗句:<诗句内容>"
format_instructions = "诗句:<诗句内容>"prompt_template = ChatPromptTemplate.from_messages([("system", system_template), ("user", "{text}")]
)keyword = "春天"
prompt = prompt_template.format_prompt(text=keyword, format_instructions=format_instructions)
messages = prompt.to_messages()
response = llm.invoke(messages)
print(response.content)

在这里插入图片描述

使用pydantic

import os
from langchain.chat_models import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain.output_parsers import PydanticOutputParser
from pydantic import BaseModelclass AncientPoetryInfo(BaseModel):verse: strauthor: strpoem_title: strparser = PydanticOutputParser(pydantic_object=AncientPoetryInfo)os.environ['OPENAI_API_KEY'] = os.getenv("DASHSCOPE_API_KEY")
os.environ['OPENAI_BASE_URL'] = "https://dashscope.aliyuncs.com/compatible-mode/v1"llm = ChatOpenAI(temperature=0, model_name='qwen-plus')# 定义系统消息模板
system_template = "你是一位古诗词小能手,根据用户输入的关键词,输出相关的古诗词诗句。请按照以下格式输出:{format_instructions}"
# 获取格式化指令
format_instructions = parser.get_format_instructions()prompt_template = ChatPromptTemplate.from_messages([("system", system_template), ("user", "{text}")]
)keyword = "春天"
prompt = prompt_template.format_prompt(text=keyword, format_instructions=format_instructions)
messages = prompt.to_messages()
response = llm.invoke(messages)try:poetry_info = parser.parse(response.content)print(poetry_info)
except Exception as e:print(f"解析错误: {e}")

在这里插入图片描述
AncientPoetryInfo的 Pydantic 模型,用于表示古诗词的信息,包括诗句(verse)、作者(author)和诗歌标题(poem_title)。
创建一个PydanticOutputParser实例,指定要解析成的 Pydantic 模型为AncientPoetryInfo。这个解析器将用于把模型的输出解析成AncientPoetryInfo对象。
format_instructions通过parser.get_format_instructions()获取,这是解析器生成的格式化指令,用于指导模型输出符合AncientPoetryInfo模型的格式。

@field_validator

从pydantic库导入BaseModel和field_validator。
定义AncientPoetryInfo类,包含verse、author和poem_title三个字符串类型的字段。
使用@field_validator装饰器来定义验证函数not_empty。这个装饰器接受一个或多个字段名作为参数,表示该验证函数将应用于这些字段。
not_empty函数检查传入的值是否为空,如果为空则抛出ValueError异常,否则返回该值。这样可以确保verse、author和poem_title字段都不为空。

import os
from langchain.chat_models import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain.output_parsers import PydanticOutputParser
from pydantic import BaseModel, field_validatorclass AncientPoetryInfo(BaseModel):verse: strauthor: strpoem_title: str@field_validator('verse', 'author', 'poem_title')def not_empty(cls, v):if not v:raise ValueError('不能为空')return vparser = PydanticOutputParser(pydantic_object=AncientPoetryInfo)os.environ['OPENAI_API_KEY'] = os.getenv("DASHSCOPE_API_KEY")
os.environ['OPENAI_BASE_URL'] = "https://dashscope.aliyuncs.com/compatible-mode/v1"llm = ChatOpenAI(temperature=0, model_name='qwen-plus')# 定义系统消息模板
system_template = "你是一位古诗词小能手,根据用户输入的关键词,输出相关的古诗词诗句。请按照以下格式输出:{format_instructions}"
# 获取格式化指令
format_instructions = parser.get_format_instructions()prompt_template = ChatPromptTemplate.from_messages([("system", system_template), ("user", "{text}")]
)keyword = "夏天天"
prompt = prompt_template.format_prompt(text=keyword, format_instructions=format_instructions)
messages = prompt.to_messages()
response = llm.invoke(messages)try:poetry_info = parser.parse(response.content)print(poetry_info)
except Exception as e:print(f"解析错误: {e}")

在这里插入图片描述

http://www.dtcms.com/a/295803.html

相关文章:

  • 大模型Prompt优化工程
  • pdf文件的属性值怎么修改?修改PDF内部的属性创建时间和修改时间
  • Lua(垃圾回收)
  • omofun官网网站入口,动漫在线看|官方下载
  • AI服务器给一体成型电感带来多大的市场空间
  • 网络编程——聊天程序实现
  • FreeSWITCH 简单图形化界面45 - 收集打包的一些TTS
  • 复矩阵与共轭转置矩阵乘积及其平方根矩阵
  • 【建模与仿真】融合共现网络特征与知识增强语义梯度提升电子邮件分类
  • HttpServletRequest深度解析:Java Web开发的核心组件
  • LLM中的位置嵌入矩阵(Position Embedding Matrix)是什么
  • [语言模型训练]基于 PyTorch 的双向 LSTM 文本分类器实现:基于旅店的评论分类语言模型
  • LeetCode 2563.统计公平数对的数目
  • Edwards爱德华泵软件 支持nEXT85和nXDS系列泵,包括nXRi, nRVi和nXLi增强型 nEXT nXDS nXLi
  • 【自动化测试】JMeter+Jenkins自动化接口与性能测试环境部署指南
  • Java学习第七十部分——微服务架构
  • JavaWeb_原始项目初识(一)
  • ubuntu25.04+4070+cuda+docker安装
  • 进程通信————命名管道
  • Python-初学openCV——图像预处理(二)
  • 怎么样知道服务端是否支持sse服务?
  • 在 Ubuntu 20.04 上轻松安装和使用中文输入法
  • ZooKeeper 是什么?
  • day20 双向链表
  • 基于CloudBase+React+CodeBudddy的云上智能睡眠应用开发实践
  • 网易大模型算法面经总结第一篇
  • uni-app小程序云效持续集成
  • C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(三)
  • MYSQL中NOT IN和NOT EXISTS
  • vscode 的 settings.json