当前位置: 首页 > 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.xdnf.cn/news/1181341.html

相关文章:

  • Spring之SSM整合流程详解(Spring+SpringMVC+MyBatis)
  • 【Linux】常用命令(一)
  • 洛谷P1512 伊甸园日历游戏
  • SQL基础⑫ | 视图篇
  • C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(三)
  • 基于深度学习的图像分类:使用MobileNet实现高效分类
  • Python进阶第三方库之Matplotlib
  • 深度学习(鱼书)day01--感知机
  • LeetCode 23:合并 K 个升序链表
  • 【C++】使用中值滤波算法过滤数据样本中的尖刺噪声
  • rust-方法语法
  • C++STL系列之set和map系列
  • 基于python django的农业可视化系统,以奶牛牧场为例
  • 用 Function Call 让 AI 主动调用函数(超入门级示例)|保姆级大模型应用开发实战
  • SpringBoot航空订票系统的设计与实现
  • 进阶系统策略
  • 技术赋能多元探索:我的技术成长与行业洞察
  • Linux应用开发基础知识——进程学习2(exec函数、system函数、popen函数)(三)
  • 斐波那契数列策略
  • 人形机器人_双足行走动力学:Maxwell模型及在拟合肌腱特性中的应用
  • Java学习----原型模式
  • 使用Claude Code从零到一打造一个现代化的GitHub Star项目管理器
  • day46day47 通道注意力
  • 无源域自适应综合研究【2】
  • C++ 性能优化
  • 力扣 hot100 Day54
  • pytest中使用skip跳过某个函数
  • 无人机速度模块技术要点分析
  • 第三章:掌握 Redis 存储与获取数据的核心命令
  • MNIST 手写数字识别模型分析