mcpField
P
pydantic-ai-model-integration

pydantic-ai-model-integration

github.com/existential-birdsエージェントワークフロー85120 回インストール11 週間前に更新
リポジトリ

pydantic-ai-model-integration について

PydanticAI 開発者向けのモデル連携ガイドです。モデル文字列、設定、フォールバックモデル、動的選択、ストリーミングを扱います。利用量の追跡と制限、設定やテストでのモデル検証の遅延方法も説明します。

主な機能

  1. 01プロバイダーとモデル文字列の形式
  2. 02モデル設定と動的選択
  3. 03フォールバックモデルの連鎖
  4. 04ストリーミングと構造化レスポンス
  5. 05利用量の追跡と制限
  6. 06モデル検証の遅延

活用シーン

  1. 01環境に応じたモデル選択
  2. 02リクエスト用フォールバックの設定
  3. 03ストリーミング構造化レスポンスの処理
  4. 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 キーを読み込み、実際のキーをコミットしていない(例ではプレースホルダーのみを使用)。

コメント