リクエストとレスポンスのための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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- MLエンジニアのためのFastAPI入門
- リクエストとレスポンスのためのPydanticスキーマ
- MLモデルの読み込みと提供
- モデルAPIのDocker化