0Pricing
Learn AI with Python · レッスン

リクエストとレスポンスのためのPydanticスキーマ

BaseModel、フィールド検証、型ヒント、response_model、検証エラーの処理について学習します。

「リクエストとレスポンスのためのPydanticスキーマ」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

スキーマを使う理由

生のdictはエラーの原因になりやすいものです。Pydanticモデルを使うと、リクエストとレスポンスの正確な構造を定義でき、型を自動的に検証しながらAPIのドキュメントも作成できます。FastAPIはPydanticモデルをネイティブにサポートしています。

BaseModel

PydanticのスキーマはBaseModelを継承します。型を指定した各属性が検証済みのフィールドになり、型が正しくない値はコードが実行される前に拒否されます。

from pydantic import BaseModel

class PredictRequest(BaseModel):
    features: list[float]

リクエストスキーマ

クライアントが送信する必要のある内容を定義します。ここではfeaturesを浮動小数点数のリストにする必要があります。モデルのバージョンやリクエストIDなどのフィールドを追加することもできます。

class PredictRequest(BaseModel):
    features: list[float]
    model_version: str = "latest"

レスポンススキーマ

APIが返す内容を定義することで、クライアントに安定した、ドキュメント化された契約を提供できます。

class PredictResponse(BaseModel):
    prediction: float
    probability: float

エンドポイントでスキーマを使う

リクエストモデルでパラメーターの型を指定すると、FastAPIがJSONボディを自動的に解析・検証し、型付きオブジェクトに変換します。

from fastapi import FastAPI
app = FastAPI()

@app.post("/predict")
def predict(req: PredictRequest):
    pred = model.predict([req.features])[0]
    return {"prediction": pred, "probability": 0.92}

response_modelパラメーター

ルートデコレーターにresponse_modelを渡します。FastAPIは出力を検証してスキーマに合うようにフィルタリングし、余分なフィールドを削除します。また、レスポンスを/docsにドキュメント化します。

@app.post("/predict", response_model=PredictResponse)
def predict(req: PredictRequest) -> PredictResponse:
    return PredictResponse(prediction=1.0, probability=0.92)

特徴量ベクトルに使うlist[float]

特徴量をlist[float]として型指定すると、推論の前にPydanticが文字列や異なる型の混在を拒否します。これにより、モデルコードの奥深くではなく、入力の境界で不正なデータを検出できます。

エラーに使うHTTPException

型の検証には通ってもビジネスルールに違反する場合(特徴量の数が違う、未知のモデルなど)は、ステータスコードとメッセージを指定したHTTPExceptionを送出します。

from fastapi import HTTPException

@app.post("/predict")
def predict(req: PredictRequest):
    if len(req.features) != 4:
        raise HTTPException(status_code=422,
            detail="Expected exactly 4 features")
    return {"prediction": model.predict([req.features])[0]}

フィールドバリデーター

field_validatorを使うと、エンドポイントのロジックが実行される前に、空の特徴量リストを拒否するなど、フィールドに対するカスタムルールを適用できます。

from pydantic import BaseModel, field_validator

class PredictRequest(BaseModel):
    features: list[float]

    @field_validator("features")
    @classmethod
    def not_empty(cls, v):
        if not v:
            raise ValueError("features cannot be empty")
        return v

フィールド制約

Fieldを使うと、最小長や数値の範囲などの宣言的な制約を指定できます。これらの制約は自動生成されるドキュメントにも表示されます。

from pydantic import BaseModel, Field

class PredictRequest(BaseModel):
    features: list[float] = Field(min_length=1)

422レスポンスの自動生成

リクエストがPydanticの検証に失敗すると、FastAPIは追加のコードなしで、詳細なエラーボディを含む422 Unprocessable Entityを自動的に返します。これはFastAPIの生産性を大きく高める特長の一つです。

クイックチェック

Pydanticスキーマに関する知識を確認しましょう。

まとめ

リクエストとレスポンス用のBaseModelスキーマを定義し、特徴量にlist[float]を使い、response_modelを適用しました。また、ビジネス上のエラーにはHTTPExceptionを送出し、field validatorsを追加しました。FastAPIは無効な入力に対して422を自動的に返します。次は、モデルの読み込みとサービングです。

よくある質問

「リクエストとレスポンスのためのPydanticスキーマ」レッスンは無料ですか?

はい。「リクエストとレスポンスのためのPydanticスキーマ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「リクエストとレスポンスのためのPydanticスキーマ」で何を学びますか?

BaseModel、フィールド検証、型ヒント、response_model、検証エラーの処理について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「リクエストとレスポンスのためのPydanticスキーマ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. MLエンジニアのためのFastAPI入門
  2. リクエストとレスポンスのためのPydanticスキーマ
  3. MLモデルの読み込みと提供
  4. モデルAPIのDocker化
← Learn AI with Pythonに戻る