【LLM】 BaseModel的作用

在 Python 里,BaseModel 是 pydantic 库提供的一个基类,pydantic 是用于数据验证和设置管理的强大库。BaseModel 主要有以下作用:

1. 数据验证

BaseModel 能对输入的数据进行验证,保证数据符合定义的类型和约束。要是输入的数据不满足要求,pydantic 会抛出异常。

python 复制代码
from pydantic import BaseModel, Field

class User(BaseModel):
    name: str = Field(..., min_length=2, max_length=50)
    age: int = Field(..., gt=0, lt=120)

# 验证通过
user1 = User(name="Alice", age=25)
print(user1)

# 验证失败,抛出异常
try:
    user2 = User(name="A", age=150)
except Exception as e:
    print(e)

输出结果:

cmd 复制代码
name='Alice' age=25
2 validation errors for User
name
  String should have at least 2 characters [type=string_too_short, input_value='A', input_type=str]
    For further information visit https://errors.pydantic.dev/2.5/v/string_too_short
age
  Input should be less than 120 [type=number_too_big, input_value=150, input_type=int]
    For further information visit https://errors.pydantic.dev/2.5/v/number_too_big

2. 数据解析

BaseModel 可以把不同格式的数据(像字典、JSON 等)解析成 Python 对象,同时进行类型转换。

示例代码:

python 复制代码
from pydantic import BaseModel

class Book(BaseModel):
    title: str
    price: float

# 从字典解析数据
book_data = {"title": "Python Crash Course", "price": 29.99}
book = Book(**book_data)
print(book)

输出结果:

cmd 复制代码
title='Python Crash Course' price=29.99

3. 数据序列化

BaseModel 支持将 Python 对象序列化为字典或 JSON 字符串,方便数据的存储和传输。

py 复制代码
from pydantic import BaseModel

class Product(BaseModel):
    name: str
    quantity: int

product = Product(name="Laptop", quantity=10)

# 序列化为字典
product_dict = product.model_dump()
print(product_dict)

# 序列化为 JSON 字符串
product_json = product.model_dump_json()
print(product_json)

输出结果:

cmd 复制代码
{'name': 'Laptop', 'quantity': 10}
{"name": "Laptop", "quantity": 10}

4. 类型提示

借助 BaseModel 定义数据结构,能为代码提供清晰的类型提示,增强代码的可读性和可维护性。

在你当前编辑的代码里,Fetch 类继承自 BaseModel,目的是定义获取 URL 的参数,对输入参数进行验证和解析:

py 复制代码
class Fetch(BaseModel):
    """Parameters for fetching a URL."""

    url: Annotated[AnyUrl, Field(description="URL to fetch")]
    max_length: Annotated[
        int,
        Field(
            default=5000,
            description="Maximum number of characters to return.",
            gt=0,
            lt=1000000,
        ),
    ]
    start_index: Annotated[
        int,
        Field(
            default=0,
            description="On return output starting at this character index, useful if a previous fetch was truncated and more context is required.",
            ge=0,
        ),
    ]
    raw: Annotated[
        bool,
        Field(
            default=False,
            description="Get the actual HTML content of the requested page, without simplification.",
        ),
    ]
相关推荐
武子康5 小时前
AI-调查研究-107-具身智能 强化学习与机器人训练数据格式解析:从状态-动作对到多模态轨迹标准
人工智能·深度学习·机器学习·ai·系统架构·机器人·具身智能
沫儿笙5 小时前
KUKA库卡焊接机器人二氧化碳节气
人工智能·机器人
TDengine (老段)5 小时前
连接 TDengine 遇到报错 “failed to connect to server, reason: Connection refused” 怎么办?
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
insight^tkk5 小时前
【Docker】记录一次使用docker部署dify网段冲突的问题
运维·人工智能·docker·ai·容器
攻城狮7号5 小时前
AI+大数据时代:如何从架构到生态重构时序数据库的价值?
大数据·人工智能·时序数据库·apache iotdb·sql大模型
智能化咨询5 小时前
AI+大数据时代:时序数据库的生态重构与价值跃迁——从技术整合到行业落地
人工智能
paopaokaka_luck5 小时前
基于SpringBoot+Vue的社区诊所管理系统(AI问答、webSocket实时聊天、Echarts图形化分析)
vue.js·人工智能·spring boot·后端·websocket
工藤学编程5 小时前
零基础学AI大模型之RAG系统链路解析与Document Loaders多案例实战
人工智能
大千AI助手5 小时前
加权分位数直方图:提升机器学习效能的关键技术
人工智能·机器学习·xgboost·直方图·加权直方图·特征分裂
江太翁5 小时前
Kotlin 与 Java 互操作中常用注解
java·python·kotlin