pydantic-ai-model-integration について
PydanticAI 開発者向けのモデル連携ガイドです。モデル文字列、設定、フォールバックモデル、動的選択、ストリーミングを扱います。利用量の追跡と制限、設定やテストでのモデル検証の遅延方法も説明します。
主な機能
- 01プロバイダーとモデル文字列の形式
- 02モデル設定と動的選択
- 03フォールバックモデルの連鎖
- 04ストリーミングと構造化レスポンス
- 05利用量の追跡と制限
- 06モデル検証の遅延
活用シーン
- 01環境に応じたモデル選択
- 02リクエスト用フォールバックの設定
- 03ストリーミング構造化レスポンスの処理
- 04トークン利用量の追跡または制限
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ existential-birds/ beagle --skill pydantic-ai-model-integrationインストール後、Claude Code で/pydantic-ai-model-integrationを入力して読み込まれたか確認します。
詳細
PydanticAI モデル統合
プロバイダーモデル文字列
形式:provider:model-name
from pydantic_ai import Agent
# OpenAI
Agent('openai:gpt-4o')
Agent('openai:gpt-4o-mini')
Agent('openai:o1-preview')
# Anthropic
Agent('anthropic:claude-sonnet-4-5')
Agent('anthropic:claude-haiku-4-5')
# Google (API Key)
Agent('google-gla:gemini-2.0-flash')
Agent('google-gla:gemini-2.0-pro')
# Google (Vertex AI)
Agent('google-vertex:gemini-2.0-flash')
# Groq
Agent('groq:llama-3.3-70b-versatile')
Agent('groq:mixtral-8x7b-32768')
# Mistral
Agent('mistral:mistral-large-latest')
# Other providers
Agent('cohere:command-r-plus')
Agent('bedrock:anthropic.claude-3-sonnet')
モデル設定
from pydantic_ai import Agent
from pydantic_ai.settings import ModelSettings
agent = Agent(
'openai:gpt-4o',
model_settings=ModelSettings(
temperature=0.7,
max_tokens=1000,
top_p=0.9,
timeout=30.0, # Request timeout
)
)
# Override per-run
result = await agent.run(
'Generate creative text',
model_settings=ModelSettings(temperature=1.0)
)
フォールバックモデル
耐障害性を高めるために、モデルを連結します。
from pydantic_ai.models.fallback import FallbackModel
# Try models in order until one succeeds
fallback = FallbackModel(
'openai:gpt-4o',
'anthropic:claude-sonnet-4-5',
'google-gla:gemini-2.0-flash'
)
agent = Agent(fallback)
result = await agent.run('Hello')
# Custom fallback conditions
from pydantic_ai.exceptions import ModelAPIError
def should_fallback(error: Exception) -> bool:
"""Only fallback on rate limits or server errors."""
if isinstance(error, ModelAPIError):
return error.status_code in (429, 500, 502, 503)
return False
fallback = FallbackModel(
'openai:gpt-4o',
'anthropic:claude-sonnet-4-5',
fallback_on=should_fallback
)
ストリーミング応答
async def stream_response():
async with agent.run_stream('Tell me a story') as response:
# Stream text output
async for chunk in response.stream_output():
print(chunk, end='', flush=True)
# Access final result after streaming
print(f"\nTokens used: {response.usage().total_tokens}")
構造化出力のストリーミング
from pydantic import BaseModel
class Story(BaseModel):
title: str
content: str
moral: str
agent = Agent('openai:gpt-4o', output_type=Story)
async with agent.run_stream('Write a fable') as response:
# For structured output, stream_output yields partial JSON
async for partial in response.stream_output():
print(partial) # Partial Story object as parsed
# Final validated result
story = response.output
動的なモデル選択
import os
# Environment-based selection
model = os.getenv('PYDANTIC_AI_MODEL', 'openai:gpt-4o')
agent = Agent(model)
# Runtime model override
result = await agent.run(
'Hello',
model='anthropic:claude-sonnet-4-5' # Override default
)
# Context manager override
with agent.override(model='google-gla:gemini-2.0-flash'):
result = agent.run_sync('Hello')
モデルチェックの遅延
テストのためにモデルの検証を遅らせます。
# Default: Validates model immediately (checks env vars)
agent = Agent('openai:gpt-4o')
# Deferred: Validates only on first run
agent = Agent('openai:gpt-4o', defer_model_check=True)
# Useful for testing with override
with agent.override(model=TestModel()):
result = agent.run_sync('Test') # No OpenAI key needed
使用状況の追跡
result = await agent.run('Hello')
# Request usage (last request)
usage = result.usage()
print(f"Input tokens: {usage.input_tokens}")
print(f"Output tokens: {usage.output_tokens}")
print(f"Total tokens: {usage.total_tokens}")
# Full run usage (all requests in run)
run_usage = result.run_usage()
print(f"Total requests: {run_usage.requests}")
使用制限
from pydantic_ai.usage import UsageLimits
# Limit token usage
result = await agent.run(
'Generate content',
usage_limits=UsageLimits(
total_tokens=1000,
request_tokens=500,
response_tokens=500,
)
)
プロバイダー固有の機能
OpenAI
from pydantic_ai.models.openai import OpenAIModel
model = OpenAIModel(
'gpt-4o',
api_key='your-key', # Or use OPENAI_API_KEY env var
base_url='https://custom-endpoint.com' # For Azure, proxies
)
Anthropic
from pydantic_ai.models.anthropic import AnthropicModel
model = AnthropicModel(
'claude-sonnet-4-5',
api_key='your-key' # Or ANTHROPIC_API_KEY
)
一般的なモデルのパターン
| ユースケース | 推奨 |
|---|---|
| 汎用 | openai:gpt-4o または anthropic:claude-sonnet-4-5 |
| 高速/低コスト | openai:gpt-4o-mini または anthropic:claude-haiku-4-5 |
| 長いコンテキスト | anthropic:claude-sonnet-4-5(200k)または google-gla:gemini-2.0-flash |
| 推論 | openai:o1-preview |
| コスト重視の本番環境 | 高速モデルを先頭にした FallbackModel |
出荷前にチェックゲートを確認する
明らかな設定ミスを防げる場合にのみ使用してください。統合テストの代わりにはなりません。
- フォールバックチェーンの順序: 合格:
FallbackModel(...)に渡す最初のモデルが意図したプライマリモデルであり、その後の各モデルが意図的なフォールバックモデルである(誤って順序を逆にしていない)。 - シークレット: 合格: 本番環境および共有スクリプトでは、環境変数またはプラットフォームのシークレットストアから API キーを読み込み、実際のキーをコミットしていない(例ではプレースホルダーのみを使用)。
コメント
Markdown 対応