Pydanticでリクエストを検証する
不正な入力がモデルに届く前に拒否します。
「Pydanticでリクエストを検証する」はCoddyKit上の無料MLOps Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはMLOps Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 MLOps Academyコースには全4レッスンが含まれています。
入力がでたらめなら出力もでたらめ
クライアントが間違ったフィールドや型を送ると、モデルは意味のないデータを受け取ります。悪い入力がモデルに届く前に拒否する必要があります。🛡️
Pydanticを使う
FastAPIはリクエストの検証にPydanticを使用します。Pythonクラスでデータの形を定義すると、検証が自動的に行われます。
スキーマを定義する
BaseModelを継承し、フィールドとその型を列挙します。このクラスが /predict リクエスト本文の契約になります。
from pydantic import BaseModel
class IrisInput(BaseModel):
sepal_length: float
petal_width: floatルートで使用する
エンドポイントの引数に、モデルの型アノテーションを付けます。FastAPIが解析と検証を行い、整ったオブジェクトを渡してくれます。
@app.post("/predict")
def predict(data: IrisInput):
...フィールドにアクセスする
関数内では、検証済みデータは通常のオブジェクトです。単純なドットアクセスで各値を読み取れます。
x = [data.sepal_length, data.petal_width]
pred = model.predict([x])422エラーを自動で返す
フィールドが欠けている場合や型が間違っている場合、FastAPIは明確なメッセージとともに422レスポンスを返します。エラー処理コードを書く必要はありません。
値の制約を追加する
Fieldを使って範囲を制限できます。ここでは測定値を0より大きくするため、負の値は自動的に拒否されます。
from pydantic import Field
sepal_length: float = Field(gt=0)行のリストを検証する
複数のサンプルを一度にスコアリングするには、モデルのlistを受け取ります。Pydanticがバッチ内のすべての項目を検証してくれます。
@app.post("/predict")
def predict(rows: list[IrisInput]):
...フィールドをドキュメント化する
フィールドに説明や例を追加すると、/docsページに表示されます。呼び出し側は何を送るべきか正確に把握できます。📘
sepal_length: float = Field(description="cm", examples=[5.1])レスポンスの形も定義する
response_modelを宣言すると、入力と同じように出力も検証およびドキュメント化できます。これにより、APIの契約を厳密に保てます。
@app.post("/predict", response_model=Prediction)
def predict(data: IrisInput):
...なぜ重要なのか
強力な入力検証は、本番環境における最初の防御線です。不正な形式のリクエストを阻止し、モデルが常に整った想定どおりのデータだけを受け取るようにします。✅
クイックチェック
クライアントが必須フィールドのないリクエストを送信しました。Pydanticのおかげで、FastAPIはどうしますか。
まとめ
BaseModelスキーマを定義し、それを使ってルートの型を指定し、フィールド制約を追加しました。FastAPIに明確な422エラーで不正な入力を自動的に拒否させています。クリーンなデータを受け取れます。🙌
よくある質問
「Pydanticでリクエストを検証する」レッスンは無料ですか?
はい。「Pydanticでリクエストを検証する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、MLOps Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 MLOps Academyコースには全4レッスンが含まれています。
「Pydanticでリクエストを検証する」で何を学びますか?
不正な入力がモデルに届く前に拒否します。 ブラウザで直接実行するハンズオンコードでMLOps Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
MLOps Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのMLOps Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Pydanticでリクエストを検証する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このMLOps Academyレッスンでコードを書いて実行できますか?
はい。すべてのMLOps Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 最初の/predictエンドポイント
- Pydanticでリクエストを検証する
- 起動時にモデルを一度だけ読み込む
- /healthレディネスチェックを追加する