ツール出力の検証(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.0Validate 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' # fallbackLLMの構造化出力を検証
モデルが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 v1Pydanticから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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- べき等なツールと副作用
- 指数バックオフによる再試行
- タイムアウトとサーキットブレーカー
- ツール出力の検証(Pydantic)