pydantic-ai について
Pydantic AI は、型安全で本番運用を意識した生成 AI アプリケーションやエージェントを構築する Python フレームワークです。合成可能な機能、複数のモデルプロバイダー、ツール連携、可観測性を備え、構造化されたエージェントワークフローに対応します。
主な機能
- 01型安全なエージェント開発
- 02合成可能なエージェント機能
- 03複数のモデルプロバイダー
- 04依存性注入によるツール
- 05グラフと耐久性のあるワークフロー
- 06ストリーミングと評価
活用シーン
- 01構造化出力を使うエージェントの構築
- 02依存性注入によるツール接続
- 03複数段階のエージェントワークフロー設計
- 04本番環境での実行状況の監視
MCP 対応
Pydantic AI は、エージェントを MCP サーバーに接続する MCPToolset など、MCP クライアント連携を提供します。連携機能から MCP プロンプトの一覧取得と取得もできます。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ itechmeat/ llm-code --skill pydantic-aiインストール後、Claude Code で/pydantic-aiを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/agents.mdembeddings.mdevals.mdgraphs.mdinstallation.mdintegrations.mdmodels.mdtools.mdui.md詳細
Pydantic AI
「FastAPI のような感覚」で本番環境向けの GenAI アプリケーションを構築するための Python エージェントフレームワークです。
クイックナビゲーション
| トピック | リファレンス |
|---|---|
| エージェント | agents.md |
| 機能 | agents.md |
| ツール | tools.md |
| モデル | models.md |
| 埋め込み | embeddings.md |
| 評価 | evals.md |
| インテグレーション | integrations.md |
| グラフ | graphs.md |
| UI ストリーム | ui.md |
| インストール | installation.md |
使用する場面
- 構造化出力を使う AI エージェントを構築する場合
- 型安全で IDE に適したエージェント開発が必要な場合
- ツールに依存性注入が必要な場合
- 複数のモデルをサポートする場合(OpenAI、Anthropic、Gemini など)
- Logfire による本番環境でのオブザーバビリティが必要な場合
- グラフを使った複雑なワークフローが必要な場合
インストール
フルインストール/スリムインストールのオプションと、オプションの依存関係グループについては、references/installation.md を参照してください。Python 3.10 以降が必要です。
リリースの主な内容(2.40.0 -> 2.48.0)
- セキュリティ(アップグレード)(
2.44.0、1.107.6にバックポート):web_fetch_toolまたは OTel のインストルメンテーションを介して到達可能な 4 件の修正です。ローカル URL が許可されている場合の、IPv6 のゾーン識別子によるプライベート IP ブロックリストの回避、イベントループを停止させる可能性があったweb_fetchの HTML/文字セット処理の超線形的な計算量、リゾルバーによる正規化を行わずに比較されていたドメインブロックリスト、include_content=Falseの場合のスパン内容の漏えいに対応しています(GHSA-vmxc-h2x2-jmf3、GHSA-fpf4-vwcp-v4hp、GHSA-22h6-qm39-v87j、GHSA-4x9p-g9wm-8q7f)。 - リアルタイムセッション制御(
2.40.0/2.46.0):handle_barge_in=Trueとinterrupt(played_bytes=...)、帯域外プロンプト用のRealtimeSession.enqueue()、send()のrespond=、wait_for_playback()、および@agent.on_eventリスナーに対応しました。 - 画像生成(
2.41.0):組み込みツールに加えて、直接利用できるImageGeneratorAPI を追加しました。ImageGeneration/XSearchのfallback_modelは非推奨となり、fallback_subagent_modelが推奨されます。 - プロバイダーとモデル(
2.41.0/2.42.0/2.48.0):ChatGPT/Codex のサブスクリプション認証に対応するopenai-codexプロバイダーとGitHubCopilotProvider、および OpenAI のgpt-6-sol/gpt-6-lunaと Claude Opus 5.5(claude-opus-5-5)に対応しました。 - 料金(
2.40.0):pydantic_ai.prices.update_in_background()により、genai-pricesのデータをバックグラウンドで更新できます。 - Temporal(
2.46.0):TemporalDurabilityのevent_stream_topicにより、Workflow Streams を介してエージェントのイベントをストリーミングできます。
リリースの主な変更点(2.23.0 -> 2.39.0)
- リアルタイム音声間通信(
2.28.0):ブラウザーの WebRTC とサーバー側サイドバンドに対応したAgent.realtime()、azure_voice_live設定による Azure AI Voice Live(2.29.0)、非同期イテラブルを受け付けるRealtimeSession.send_audio()(2.36.0)。 - 実行のキャンセル(
2.26.0):AgentRun.cancel()、RunContext.cancel()、RunCancelled。stream_run_events()は、cancel()と実行状態へのアクセスを備えた公開のAgentRunEventsハンドルを返します。 - ツールの遅延公開(
2.23.0/2.26.0/2.30.0):ネイティブのtool_addition/additional_toolsに対応したToolAvailabilityDeltaPart。ツールは、各プロバイダーのネイティブな遅延公開/追加チャネルを通じて、ツール検索、load_capability、またはToolReturn.toolsによって公開されるまで非表示にできます。遅延公開されたツールは、呼び出す前に公開する必要があります。 - コストの追跡(
2.23.0):RunUsageのcostとUsageLimitsのcost_limit。コンテキストウィンドウ(2.38.0):ModelProfileのcontext_windowとRunContextのcontext_window_used。 - 型付きイベント(
2.38.0):アプリケーションコードとケイパビリティは、型付きのCustomEvent/CapabilityEventを実行イベントストリームに送信し、@on_eventでサブスクライブできます。永続的な実行(2.36.0):ケイパビリティ向けの@durable_operationと、サードパーティ製の永続実行エンジン向け公開バックエンド API。 - プロバイダーとモデル:Crusoe(
2.28.0)、Snowflake Cortex(2.27.0)、vLLM(2.38.0)の各プロバイダー。gemini-3.7-flash(2.30.0)、gemini-3.8-flash(2.38.0)、Claude Fable 5.1/Mythos 5.1(2.38.0)、OpenAIgpt-6-astra(2.39.0)、ZaiModelの GLM-5.3(2.34.0)、DeepSeek V4 Flash(2.26.0)。 - MCP および HTTP クライアント:
MCPToolsetは FastMCP 3 に加えて、FastMCP 4 と MCP SDK v2 に対応します(2.29.0)。ビルドではhttpx2クライアントに移行しました。pydantic-ai[anthropic]にはanthropic>=1.0.0が必要で、カスタムのAnthropicProviderのhttp_clientにはhttpx2.AsyncClientを指定する必要があります(2.32.0/2.33.0)。 claiCLI(2.36.0):--mcp-configとツール呼び出しのストリーミングに対応。OpenRouter(2.30.0/2.32.0):ウェブ検索用のopenrouter:web_searchと、provider_details["annotations"]内のウェブ検索ソースに対応。- セキュリティ(アップグレード):
2.24.0では、ローカルのweb_fetchツール/FileUrlによるメディアのダウンロードでメモリ使用量が無制限になる問題を修正しました(GHSA-v2xh-2vp8-57h8)。2.27.1では、include_content=Falseの場合にリトライ用プロンプトの秘匿化が漏れる低深刻度の問題を修正しました(GHSA-3gh4-cghq-f8v4)。2.28.0では、開発用ウェブチャット UI で Content-Type の検証が欠けていた高深刻度の問題を修正し、任意のクロスオリジンリクエストによってエージェントが実行されないようにしました(GHSA-h4xc-3qfq-jf93)。2.30.0では、開発用ウェブチャット UI にHostヘッダーの検証を導入して DNS リバインディングを修正し、ループバック以外のデプロイメント向けにオプトインのallowed_hostsを追加しました(GHSA-q2xc-rrxj-58x9)。
リリースの主な変更点(2.13.0 -> 2.22.0)
- 耐久性機能がラッパーエージェントに置き換わりました:
TemporalDurability、DBOSDurability、PrefectDurability(2.14.0)は、capabilities=[...]を介して通常のAgentに追加でき、非推奨となったTemporalAgent/DBOSAgent/PrefectAgentラッパークラス(v3 で削除)に置き換わります。既存のラッパーを使ったワークフローは、切り替え後も正しくリプレイされます。更新された Temporal/DBOS/Prefect の例については、integrations.mdを参照してください。 - 新しいモデル/プロバイダー:Claude Opus 5(
2.20.0)、gemini-3.6-flash/gemini-3.5-flash-lite(2.16.0)、Mistral のreasoning_effort(2.14.0)とmistral_prompt_cache_key(2.16.0)、gpt-5.6向け OpenAI の明示的なプロンプトキャッシュ(2.15.0)、BedrockMantleProvider(2.18.0)、Anthropic/OpenRouter 向け組み込みツールAdvisorTool(2.18.0)。 - 使用状況と制限:
RequestUsage/RunUsageのcache_hit_ratio(2.13.0)、リトライを消費しないモデルから確認可能な失敗を扱うToolFailed(2.16.0)、実行時に指定できる省略可能なrun_id=(2.16.0)、run/iter/override時のツール再試行予算の上書き(2.15.0)、UsageLimitsのper_request_input_tokens_limit(2.21.0)。 - エラー処理と計測:
ModelHTTPErrorに、各プロバイダーの SDK から取得したheadersと解析済みのretry_afterが含まれるようになりました(2.19.0)。RaiseContentFilterError機能とinclude_model_request_parameters計測設定(2.13.0)。メッセージごとの OTel シリアライズをキャッシュし、O(n^2)のコストを回避します(2.17.0)。 - 依存関係:
fastmcpオプショングループでfastmcp<4が制約されるようになりました(2.19.0)。
リリースの主な変更点(2.0.0 -> 2.12.0)
- V2 の安定版(
2.0.0):ハーネスを中心とした設計で、機能を中核的なプリミティブとしています。エージェントのツール、フック、指示、モデル設定をまとめた、単一の組み合わせ可能な単位です。V1 からの移行には公式アップグレードガイドが必要です。1.9x 系を通じて非推奨となった機能ベースの方法が、標準の方法になりました。 - メッセージ履歴と処理:
message_historyがツール呼び出しのペアリングを修正したうえでプロバイダーに対応し、HistoryProcessorがエクスポートされました。また、遅延ツール呼び出しイベントとEnqueuedMessagesEventが利用できるようになりました(2.10.0から2.12.0)。 - 新しいモデル/プロバイダー:Moonshot AI の
kimi-k3、OpenAI のバックグラウンドモード、Anthropic のstop_reason=pause_turn対応。Groq、DeepSeek、Cerebras 間で推論の強度を標準化して処理します。 - 埋め込みとトークン:埋め込み向けの Gemini 2 テキストプレフィックス条件付けと、使用状況追跡における出力音声トークンの累積。
- 修正:
ToolReturnPartのシリアライズでフィールドエイリアスを使用するようになりました。Anthropic/Bedrock のネイティブな出力スキーマ処理を修正し、使用量制限とツール再試行のエラーに具体的なヒントを追加しました。
リリースの主な変更点(1.96.1)
- V2 への準備:
Agent(..., prepare_tools=..., prepare_output_tools=..., event_stream_handler=...)は現在、非推奨の方法です。機能ベースの移行が新しい方針です。 - 機能への移行:コンストラクターの簡易指定でこれらの動作を設定する代わりに、
PrepareTools、PrepareOutputTools、ProcessEventStream機能を使用してください。 - OpenAI の修正:最新のパッチ系列では、
OpenAIResponsesModelのシステムプロンプトのロール処理と、画像生成リクエストの構成も改善されています。
リリースの主な変更点(1.97.0 -> 1.102.0)
- MCP の移行:新しい MCP 統合には
MCPToolsetを優先してください。FastMCPToolsetと従来のMCPServer*クライアントのインターフェースは、非推奨化の対象になりました。 - Google プロバイダーの分割:
GoogleProviderとGoogleCloudProviderが別々になり、モデル ID はgoogle-gla:/google-vertex:からgoogle:/google-cloud:に変更されます。 - ストリーミングの移行:
stream_responses()からstream_response()に移行してください。新しい API はModelResponseオブジェクトを直接返します。 - リトライの設定:従来のコンストラクターのリトライ設定より、
Agent(retries=...)またはAgentRetries(...)を優先してください。 - 新しいランタイムツール:
ctx.enqueue()と MCP のバックグラウンドタスクにより、現在の応答ターンに無理に含めることなく、後続の作業を簡単にキューに登録できます。
リリースの主な変更点(1.105.0 -> 1.107.0)
- 新しいモデル:Claude Fable 5 と Claude Mythos 5 に対応しました(1.107.0)。さらに、Grok 4.3 の
reasoning_effortと、更新された xAI モデル名にも対応しました(1.105.0)。 - 遅延読み込み:指示、ツール、モデル設定、フックを、エージェントの構築時にすべて読み込むのではなく、必要に応じて読み込めるようになりました(1.105.0)。
- モデルのイントロスペクション:
known_model_names()でKnownModelNameのメンバーを列挙できます(1.107.0)。 - OpenRouter のキャッシュ:OpenRouter に
CachePointとプロンプトキャッシュを実装しました(1.107.0)。 - xAI の設定:
XaiProviderにapi_hostとtimeoutが追加され、seedパラメーターのマッピングにも対応しました(1.106.0)。 - セキュリティ:
VercelAIAdapterのUploadedFile処理を強化し、confused-deputy によるファイル読み取りの脆弱性に対処しました(GHSA-h7p7-w5gc-xj3w、1.106.0)。 - 修正:
event_stream_handlerがストリームを消費しない場合のストリーミング応答の欠落、非 Base64 のデータ URI に対するfrom_data_uri、Temporal のgateway/モデル構築、GoogleModelSettings.google_cached_contentのリクエスト構成、Anthropic Bedrock のmessage=None開始イベント、ネイティブツール使用時のAnthropicModel.count_tokensを修正しました。
リリースの主な変更点(1.103.0 -> 1.104.0)
- MCP プロンプト:メンテナンスされている
McpServer統合で、list_promptsとget_promptを使ってプロンプトの一覧表示と取得ができるようになりました。従来のラッパーが必要な場合を除き、新しいクライアントコードでは引き続きMCPToolsetを優先してください。 - UI アダプター:
VercelAIAdapterはUIMessage.metadataを通じてメッセージのタイムスタンプを保持します。また、UIAdapter.sanitize_messagesはFileUrlパーツからクライアントが送信したforce_downloadを取り除きます。 - プロバイダー/モデルの更新:Claude Opus 4.8 に対応しました。
OpenRouterModelでanthropic_eager_input_streamingを使用できるほか、OpenRouter/xAI/Bedrock のハイブリッドルートでthinking=Falseが一貫して転送されるようになりました。 - Bedrock/ツールセットの修正:Bedrock は不正なモデル/ツール出力を
FinishReason.errorにマッピングし、アダプティブ思考を認識します。また、単一ツールのtool_choiceのキャッシュ動作を維持し、ツールセットの準備コールバックが誤ってNoneを返した場合に警告するようになりました。
リリースの主な変更点(1.75.0 -> 1.84.1)
- 機能:
CapabilityOrderingにより、複雑な機能スタックで明示的なラッピング/順序制御(innermost、outermost、wraps、wrapped_by、requires)が可能になりました。 - コンパクション:OpenAI と Anthropic に新しいサーバーサイドのコンパクション機能を追加しました。OpenAI ではステートフルなコンパクションモードにも対応しました。
- モデル:Claude Opus 4.7 に対応し、ネイティブの
OllamaModelパスを追加しました。また、構造化出力に関する Ollama の機能フラグを修正しました。 - ツール:単一の
BaseModelツールでは、ツールフックが検証済み引数を一貫して辞書形式で受け取るようになりました。また、内部出力ツールではフックの実行をスキップします。 - 堅牢性の強化:
1.83/1.84系列で Google のFileSearchToolの解析を強化するため、正規表現を改良しました。
リリースの主な変更点(1.71.0 → 1.74.0)
- Capabilities:ツール、ライフサイクルフック、指示、モデル設定を単一のクラスにまとめた、組み合わせ可能で再利用可能なエージェント動作の単位です。任意のエージェントに組み込むことで、最大限に再利用できます。
- AgentSpec:
Agent.from_fileを使って、YAML/JSON ファイルからエージェントを読み込みます。依存関係を参照するテンプレート化された指示に対応するTemplateStrをサポートします。 - Hooks capability:デコレーター(
@hooks.on_model_requestなど)を使ってフックを定義します。 - Thinking capability:推論に使う、プロバイダーをまたいで利用できる
thinkingモデル設定です。 - プロバイダーに適応するツール:
WebSearch、WebFetch、MCP、ImageGenerationは、組み込みの(プロバイダー)ツールからローカルツールへ自動的にフォールバックします。 - オンライン評価:
pydantic-evalsの評価基盤です。 TextContent:metadataを含むユーザープロンプトはモデルに送信されません。- CaseLifecycle フック:
Dataset.evaluateのライフサイクル用フックです。 - フックでのモデル切り替え:
before_model_requestフックとラップフックでは、ModelRequestContextを使ってモデルを切り替えられます。 - フックからの
ModelRetry:フックからModelRetryを発生させて、再試行の制御フローを実行できます。 - 同期ツール準備関数をサポートしました。
MCPcapability でurl=を明示的に指定する必要はなくなりました。
リリースの主な変更点(1.69.0 → 1.70.0)
- エージェント:計装が有効な場合、
Agent(description=...)によって、人が読める説明がgen_ai.agent.descriptionとして実行スパンに追加されます。 - モデル:
FallbackModelが、非ストリーミング実行におけるセマンティックエラー用の応答ベースのフォールバックハンドラーに対応しました。 - ツール:マルチモーダルなツールの結果は、常に追加のユーザーメッセージ部分に分割されるのではなく、プロバイダー API に直接渡されます。
- Bedrock:推論プロファイル ARN を介してリクエストをルーティングするため、モデル設定と埋め込み設定で
bedrock_inference_profileを利用できます。 - 安定性:OpenRouter での Anthropic モデルのマッチング、Cohere の埋め込み、Google の画像サイズ、Bedrock のツール名のサニタイズ、不正なツール呼び出しの再試行処理に関するプロバイダー向け修正が加わりました。
クイックスタート
基本的なエージェント
from pydantic_ai import Agent
agent = Agent(
'openai:gpt-4o',
instructions='Be concise, reply with one sentence.'
)
result = agent.run_sync('Where does "hello world" come from?')
print(result.output)
構造化出力を使う
from pydantic import BaseModel
from pydantic_ai import Agent
class CityInfo(BaseModel):
name: str
country: str
population: int
agent = Agent('openai:gpt-4o', output_type=CityInfo)
result = agent.run_sync('Tell me about Paris')
print(result.output) # CityInfo(name='Paris', country='France', population=2161000)
ツールと依存関係を使う
from dataclasses import dataclass
from pydantic_ai import Agent, RunContext
@dataclass
class Deps:
user_id: int
agent = Agent('openai:gpt-4o', deps_type=Deps)
@agent.tool
async def get_user_name(ctx: RunContext[Deps]) -> str:
"""Get the current user's name."""
return f"User #{ctx.deps.user_id}"
result = agent.run_sync('What is my name?', deps=Deps(user_id=123))
主な機能
| 機能 | 説明 |
|---|---|
| 型安全 | IDE の完全なサポートと型チェック |
| モデル非依存 | 30 以上のプロバイダーをサポート |
| 依存性注入 | コンテキストをツールに渡す |
| 構造化出力 | Pydantic モデルによる検証 |
| 埋め込み | 複数のプロバイダーに対応したベクトルサポート |
| Logfire 統合 | オブザーバビリティを標準搭載 |
| MCP サポート | 外部ツールとデータ |
| 評価 | 体系的なテスト |
| グラフ | 複雑なワークフローをサポート |
サポート対象のモデル
| プロバイダー | モデル |
|---|---|
| OpenAI | GPT-4o、GPT-4、o1、o3 |
| Anthropic | Claude Opus 5、Claude Opus 4.8、Claude 4、Claude 3.5 |
| Gemini 2.0、Gemini 1.5 | |
| xAI | Grok-4(ネイティブ SDK) |
| Groq | Llama、Mixtral |
| Mistral | Mistral Large、Codestral |
| Azure | Azure OpenAI |
| Bedrock | AWS Bedrock + Nova 2.0 |
| SambaNova | SambaNova モデル |
| Ollama | ローカルモデル |
ベストプラクティス
- 型ヒントを使う — IDE のサポートと検証が有効になります
- 出力型を定義する — 構造化された応答が保証されます
- 依存関係を使う — コンテキストをツールに注入します
- ツールに docstring を追加する — LLM はそれを説明として使用します
- Logfire を有効にする — 本番環境のオブザーバビリティに役立ちます
- 簡単なケースでは
run_syncを使う — 非同期処理にはrunを使います - テスト時に deps を上書きする —
agent.override(deps=...) - 使用制限を設定する —
UsageLimitsで無限ループを防ぎます
禁止事項
- コード内で API キーを公開しないでください
- 本番環境で出力の検証を省略しないでください
- ツールのエラーを無視しないでください
- 部分的な出力を処理せずに
run_streamを使用しないでください - MCP 接続を閉じ忘れないでください(
async with agent) - 複数のラッパーやフックが関係する場合、機能の順序が任意だと思い込まないでください。構成が重要な場合は、順序を明示的に定義してください。
一般的なパターン
ストリーミング応答
async with agent.run_stream('Query') as response:
async for text in response.stream_text():
print(text, end='')
フォールバックモデル
from pydantic_ai.models.fallback import FallbackModel
fallback = FallbackModel(openai_model, anthropic_model)
agent = Agent(fallback)
MCP 統合
from pydantic_ai.mcp import MCPToolset
toolset = MCPToolset(command='python', args=['mcp_server.py'])
agent = Agent('openai:gpt-4o', toolsets=[toolset])
TestModel によるテスト
from pydantic_ai.models.test import TestModel
agent = Agent(model=TestModel())
result = agent.run_sync('test') # Deterministic output
埋め込み
from pydantic_ai import Embedder
embedder = Embedder('openai:text-embedding-3-small')
# Embed search query
result = await embedder.embed_query('What is ML?')
# Embed documents for indexing
docs = ['Doc 1', 'Doc 2', 'Doc 3']
result = await embedder.embed_documents(docs)
プロバイダーと設定については、embeddings.md を参照してください。
xAI プロバイダー
from pydantic_ai import Agent
agent = Agent('xai:grok-4-1-fast-non-reasoning')
設定の詳細については、models.md を参照してください。
Exa ニューラル検索
import os
from pydantic_ai import Agent
from pydantic_ai.common_tools.exa import ExaToolset
api_key = os.getenv('EXA_API_KEY')
toolset = ExaToolset(api_key, num_results=5, include_search=True)
agent = Agent('openai:gpt-4o', toolsets=[toolset])
すべての Exa ツールについては、tools.md を参照してください。
リンク
コメント
Markdown 対応