building-pydantic-ai-agents
Pydantic AIを使ってAIエージェントを構築します。ツールの追加、構造化出力、ストリーミング、テスト、マルチエージェントパターンに対応しています。ユーザーがPydantic AIに言及したり、`pydantic_ai`をインポートする場合、またはAIエージェントの構築・ツール追加・出力ストリーミング・YAMLからのエージェント定義・エージェントのテストについて質問する際に使用します。
description の原文を見る
Build AI agents with Pydantic AI — tools, capabilities, structured output, streaming, testing, and multi-agent patterns. Use when the user mentions Pydantic AI, imports pydantic_ai, or asks to build an AI agent, add tools/capabilities, stream output, define agents from YAML, or test agent behavior.
SKILL.md 本文
Pydantic AI でビルドする AI エージェント
Pydantic AI は、本番グレードの生成 AI アプリケーションを構築するための Python エージェント フレームワークです。 このスキルは、Pydantic AI でアプリケーションを構築するためのパターン、アーキテクチャ ガイダンス、および検証済みのコード例を提供します。
このスキルを使用する場合
次の場合にこのスキルを呼び出してください:
- ユーザーが AI エージェントの構築、LLM を活用したアプリの作成、または Pydantic AI についてメンションしている
- ユーザーがエージェントにツール、キャパビリティ (思考、ウェブ検索)、または構造化出力を追加したい
- ユーザーが YAML/JSON 仕様からエージェントを定義するか、テンプレート文字列を使用したい
- ユーザーがエージェント イベントのストリーミング、エージェント間の委譲、またはエージェント動作のテストを望んでいる
- コードが
pydantic_aiをインポートするか、Pydantic AI クラス (Agent、RunContext、Tool) を参照している - ユーザーがフック、ライフサイクル インターセプション、または Logfire によるエージェント可観測性について質問している
このスキルを使用しない場合:
- Pydantic 検証ライブラリのみ (
pydantic/BaseModelなしエージェント) - 他の AI フレームワーク (LangChain、LlamaIndex、CrewAI、AutoGen)
- AI エージェントに関連しない一般的な Python 開発
クイックスタート パターン
基本的なエージェントを作成する
from pydantic_ai import Agent
agent = Agent(
'anthropic:claude-sonnet-4-6',
instructions='Be concise, reply with one sentence.',
)
result = agent.run_sync('Where does "hello world" come from?')
print(result.output)
"""
The first known use of "hello, world" was in a 1974 textbook about the C programming language.
"""
エージェントにツールを追加する
import random
from pydantic_ai import Agent, RunContext
agent = Agent(
'google-gla:gemini-3-flash-preview',
deps_type=str,
instructions=(
"You're a dice game, you should roll the die and see if the number "
"you get back matches the user's guess. If so, tell them they're a winner. "
"Use the player's name in the response."
),
)
@agent.tool_plain
def roll_dice() -> str:
"""Roll a six-sided die and return the result."""
return str(random.randint(1, 6))
@agent.tool
def get_player_name(ctx: RunContext[str]) -> str:
"""Get the player's name."""
return ctx.deps
dice_result = agent.run_sync('My guess is 4', deps='Anne')
print(dice_result.output)
#> Congratulations Anne, you guessed correctly! You're a winner!
Pydantic モデルを使用した構造化出力
from pydantic import BaseModel
from pydantic_ai import Agent
class CityLocation(BaseModel):
city: str
country: str
agent = Agent('google-gla:gemini-3-flash-preview', output_type=CityLocation)
result = agent.run_sync('Where were the olympics held in 2012?')
print(result.output)
#> city='London' country='United Kingdom'
print(result.usage())
#> RunUsage(input_tokens=57, output_tokens=8, requests=1)
依存性注入
from datetime import date
from pydantic_ai import Agent, RunContext
agent = Agent(
'openai:gpt-5.2',
deps_type=str,
instructions="Use the customer's name while replying to them.",
)
@agent.instructions
def add_the_users_name(ctx: RunContext[str]) -> str:
return f"The user's name is {ctx.deps}."
@agent.instructions
def add_the_date() -> str:
return f'The date is {date.today()}.'
result = agent.run_sync('What is the date?', deps='Frank')
print(result.output)
#> Hello Frank, the date today is 2032-01-02.
TestModel を使用したテスト
from pydantic_ai import Agent
from pydantic_ai.models.test import TestModel
my_agent = Agent('openai:gpt-5.2', instructions='...')
async def test_my_agent():
"""Unit test for my_agent, to be run by pytest."""
m = TestModel()
with my_agent.override(model=m):
result = await my_agent.run('Testing my agent...')
assert result.output == 'success (no tool calls)'
assert m.last_model_request_parameters.function_tools == []
キャパビリティを使用する
キャパビリティは、ツール、フック、命令、およびモデル設定をバンドルする、再利用可能で構成可能なエージェント動作の単位です。
from pydantic_ai import Agent
from pydantic_ai.capabilities import Thinking, WebSearch
agent = Agent(
'anthropic:claude-opus-4-6',
instructions='You are a research assistant. Be thorough and cite sources.',
capabilities=[
Thinking(effort='high'),
WebSearch(),
],
)
ライフサイクル フックを追加する
Hooks を使用して、デコレーターでモデル リクエスト、ツール呼び出し、実行をインターセプトします。サブクラス化は不要です。
from pydantic_ai import Agent, RunContext
from pydantic_ai.capabilities.hooks import Hooks
from pydantic_ai.models import ModelRequestContext
hooks = Hooks()
@hooks.on.before_model_request
async def log_request(ctx: RunContext[None], request_context: ModelRequestContext) -> ModelRequestContext:
print(f'Sending {len(request_context.messages)} messages')
return request_context
agent = Agent('openai:gpt-5.2', capabilities=[hooks])
YAML 仕様からエージェントを定義する
Agent.from_file を使用して、YAML または JSON からエージェントを読み込みます。Python エージェント構築コードは不要です。
from pydantic_ai import Agent
# agent.yaml:
# model: anthropic:claude-opus-4-6
# instructions: You are a helpful research assistant.
# capabilities:
# - WebSearch
# - Thinking:
# effort: high
agent = Agent.from_file('agent.yaml')
タスク ルーティング テーブル
最初に最も関連性の高いリファレンスのみを読み込みます。タスクが複数の領域にまたがっている場合にのみ、追加のリファレンスを読みます。
| 実行したいこと | リファレンス |
|---|---|
| エージェントを作成・設定、出力タイプを選択、deps を使用、仕様を定義、実行メソッドを選択 | Agents Core |
| 再利用可能な動作をバンドルするか、ライフサイクル イベントをインターセプト | Capabilities and Hooks |
| 関数ツール、ツールセット、MCP サーバー、または明示的な検索ツールを追加 | Tools Core |
| プロバイダー ネイティブ ウェブ検索、ウェブ フェッチ、またはコード実行を使用 | Built-in Tools |
承認、再試行、ToolReturn、バリデーター、タイムアウト、ツール検索などの高度なツール機能を使用 | Tools Advanced |
| マルチモーダル入力、メッセージ履歴、またはコンテキスト トリミングを処理 | Input and History |
| エージェント動作をテストまたはデバッグ | Testing and Debugging |
| 複数のエージェントを調整するか、グラフ ワークフローを構築 | Orchestration and Integrations |
| モデルを直接呼び出す、A2A を公開、永続的な実行、埋め込み、evals、または第三者統合を使用 | Orchestration and Integrations |
| 抽象化、出力モード、デコレーター、またはモデル文字列パターンを比較 | Architecture and Decision Guide |
古いリンクで COMMON-TASKS.md をフォロー | Task Reference Map |
アーキテクチャと決定
ユーザーが抽象化を選択している場合、または比較表と決定ツリーが必要な場合にのみ、Architecture and Decision Guide を読み込みます:
| トピック | カバーする内容 |
|---|---|
| 決定ツリー | ツール登録、出力モード、マルチエージェント パターン、キャパビリティ、テスト アプローチ、拡張性 |
| 比較表 | 出力モード、モデル プロバイダー プレフィックス、ツール デコレーター、ビルトイン キャパビリティ、エージェント メソッド |
| アーキテクチャ概要 | 実行フロー、ジェネリック型、構築パターン、ライフサイクル フック、モデル文字列フォーマット |
クイック リファレンス — モデル文字列フォーマット: "provider:model-name" (例:"openai:gpt-5.2"、"anthropic:claude-sonnet-4-6"、"google-gla:gemini-3-pro-preview")
クイック リファレンス — キー エージェント メソッド: run()、run_sync()、run_stream()、run_stream_sync()、run_stream_events()、iter()
キー プラクティス
- Python 3.10+ 互換性が必須
- 可観測性: Pydantic AI は Logfire との第一級統合を備えており、エージェント実行、ツール呼び出し、モデル リクエストをトレースします。
logfire.instrument_pydantic_ai()で追加します。より深い HTTP レベルの可視性については、logfire.instrument_httpx(capture_all=True)がモデル プロバイダーに送信される正確なペイロードをキャプチャします。 - テスト: 確定的なテスト用に
TestModelを使用、カスタム ロジック用にFunctionModelを使用
よくある落とし穴
これらは Pydantic AI でエージェントが一般的に犯す間違いです。これらを間違うと、サイレント フェーラーまたは混乱するエラーが発生します。
@agent.toolは最初のパラメーターとしてRunContextを必須にします。@agent.tool_plainはそれを持つことはできません。これらを混同するとランタイム エラーが発生します。deps、usage、またはメッセージが不要な場合はtool_plainを使用します。- モデル文字列にはプロバイダー プレフィックスが必要:
'gpt-5.2'ではなく'openai:gpt-5.2'。プレフィックスがないと、Pydantic AI はプロバイダーを解決できません。 TestModelはagent.override()を必須にします:agent.modelを直接設定しないでください。常にコンテキスト マネージャーを使用します:with agent.override(model=TestModel()):。output_typeのstrにより、プレーン テキストが実行を終了できる:ユニオンにstrが含まれている場合 (またはoutput_typeが設定されていない場合)、モデルは構造化出力の代わりにプレーン テキストを返す可能性があります。構造化出力を強制するには、ユニオンからstrを省略します。- フック デコレーター名は
.onにありon_を繰り返さない:hooks.on.on_run_errorではなくhooks.on.run_errorとhooks.on.model_request_errorを使用します。 history_processorsは複数形:Agent パラメーターはhistory_processor=ではなくhistory_processors=[...]です。
タスク ファミリー リファレンス
タスクが複数のファミリーに明確にまたがっている場合を除き、これらの 1 つだけを読み込みます:
| タスク ファミリー | リファレンス |
|---|---|
| コア エージェント セットアップ、出力、deps、仕様、モデル、実行メソッド | Agents Core |
| キャパビリティ、フック、再利用可能な動作 | Capabilities and Hooks |
| 関数ツール、ツールセット、MCP、明示的な検索ツール | Tools Core |
| プロバイダー ネイティブ ビルトイン ツール | Built-in Tools |
| 承認、再試行、バリデーター、タイムアウト、リッチ ツール リターン、遅延読み込み | Tools Advanced |
| マルチモーダル入力、メッセージ履歴、履歴プロセッサー | Input and History |
| テスト、リクエスト検査、Logfire デバッグ | Testing and Debugging |
| マルチエージェント パターン、グラフ、直接 API、A2A、永続的な実行、埋め込み、evals、第三者統合 | Orchestration and Integrations |
古いリンクとの互換性が必要な場合、または古いセクション名から新しいファイルへのポインターが必要な場合にのみ、Task Reference Map を使用します。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- pydantic
- リポジトリ
- pydantic/skills
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/pydantic/skills / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。