0Pricing
AI Agents · レッスン

ツール出力の検証(Pydantic)

すべてのツール出力をPydanticモデルで解析し、不正なレスポンスがあれば明確に失敗させます。

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

このレッスンの一部はまだ翻訳されておらず、英語で表示されています。

信頼してから検証

ツールの出力は、API、Webページ、モデルなど、外部の世界から取得されます。不正な形式または予期しないレスポンスによってエージェントがクラッシュしたり、さらに悪い場合には、不正なデータが気付かないうちにLLMへ渡されたりする可能性があります。

すべてのツール出力をスキーマに照らして検証します。

Pydanticモデル

期待するデータの形を定義します。

from pydantic import BaseModel, HttpUrl

class SearchResult(BaseModel):
    title: str
    url: HttpUrl
    snippet: str
    score: float = 0.0

Validate at the Boundary

from pydantic import ValidationError

def search(query):
    raw = requests.post('https://api.tavily.com/search', json={'query': query}).json()
    results = []
    for r in raw.get('results', []):
        try:
            results.append(SearchResult.model_validate(r))
        except ValidationError as e:
            log.warning('Bad search result skipped: %s', e)
    return results

モデル検証付きのリスト

レスポンス全体を検証します。

from pydantic import BaseModel
class SearchResponse(BaseModel):
    results: list[SearchResult]

response = SearchResponse.model_validate(raw)

フィールドバリデーター

フィールド内でカスタムチェックを行います。

from pydantic import field_validator

class SearchResult(BaseModel):
    score: float

    @field_validator('score')
    @classmethod
    def score_in_range(cls, v):
        if not 0 <= v <= 1:
            raise ValueError('score out of [0,1]')
        return v

厳格な検証と寛容な検証

デフォルトでは、Pydanticは型を変換します(可能であればstringからintへ変換します)。厳格に検証するには、次のようにします。

from pydantic import StrictInt

class User(BaseModel):
    age: StrictInt   # rejects '25' (string)

Default Values for Missing Fields

class Tool(BaseModel):
    name: str
    description: str = 'No description provided'   # fallback

LLMの構造化出力を検証

モデルがPydanticスキーマに適合するJSONを返すようにします。詳しくはStructured Outputsのレッスンを参照してください。多層防御として、境界でもう一度検証します。

ツール引数を検証

実行前に、モデルのtool_call.argumentsを検証します。

class SearchArgs(BaseModel):
    query: str
    k: int = 5

args = SearchArgs.model_validate_json(tool_call.function.arguments)
results = search(args.query, args.k)

ツールの結果としてバリデーションエラーを返す

検証に失敗した場合は、モデルが引数を修正してリトライできるよう、エラーをモデルに返します。

try:
    args = SearchArgs.model_validate_json(...)
except ValidationError as e:
    return {'error': f'Invalid arguments: {e}'}

スキーマのバージョン管理

ツールの出力スキーマを変更するときは、バージョンを付けます。

class SearchResultV2(BaseModel):
    title: str
    url: HttpUrl
    relevance: float       # was 'score' in v1

PydanticからJSON Schemaを生成

ツールのスキーマ定義には、Pydanticクラスから派生させます。

schema = SearchArgs.model_json_schema()
# Use directly as the 'parameters' for an OpenAI tool definition.

検証の目的

すべてのツール出力にPydanticを使用するのはなぜですか。

まとめ

すべての境界にPydanticを配置します。入力されるツール引数、出力されるツール結果、LLMの構造化出力を検証します。気付ける形での失敗は、気付かないデータ破損より優れています。

よくある質問

「ツール出力の検証(Pydantic)」レッスンは無料ですか?

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

「ツール出力の検証(Pydantic)」で何を学びますか?

すべてのツール出力をPydanticモデルで解析し、不正なレスポンスがあれば明確に失敗させます。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「ツール出力の検証(Pydantic)」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. べき等なツールと副作用
  2. 指数バックオフによる再試行
  3. タイムアウトとサーキットブレーカー
  4. ツール出力の検証(Pydantic)
← AI Agentsに戻る