pydantic/building-pydantic-ai-agents

Pydantic AI を使って AI エージェントを構築 — ツール、機能(オンデマンドローディングを含む)、構造化出力、ストリーミング、テスト、マルチエージェントパターンをサポート。ユーザーが Pydantic AI に言及した場合、pydantic_ai をインポートした場合、または AI エージェントの構築、ツール/機能の追加、機能ローディングの延期、出力のストリーミング、YAML からのエージェント定義、エージェントの動作テストを依頼した場合に使用します。

building-pydantic-ai-agents とは?

このスキルは、Pydantic AI を使用して AI エージェントを構築するための包括的な機能を提供します。ユーザーが Pydantic AI に関連するタスク(エージェントの構築、ツールや機能の追加、オンデマンドでの機能ローディング、構造化出力、ストリーミング、YAML からのエージェント定義、テスト、マルチエージェントパターン)を依頼した際に自動的に適用されます。スキルは、pydantic_ai ライブラリを活用して、型安全でテスト可能なエージェントを作成し、複雑なワークフローを効率的に実装します。主に開発者や AI エンジニアを対象としており、Claude Code、Cursor、Codex などの AI エージェントプラットフォームで使用できます。SKILL.md には、Pydantic AI の主要な概念(Agent、RunContext、Tool、Dependencies など)の説明、基本的なエージェント定義から高度なマルチエージェントシステムまでの実装例、およびテスト手法が含まれています。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/pydantic/skills/tree/main/skills/building-pydantic-ai-agents

Installed? Explore more 生産性&コラボレーション skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

building-pydantic-ai-agents は何をしますか?

Pydantic AI を使って AI エージェントを構築 — ツール、機能(オンデマンドローディングを含む)、構造化出力、ストリーミング、テスト、マルチエージェントパターンをサポート。ユーザーが Pydantic AI に言及した場合、pydantic_ai をインポートした場合、または AI エージェントの構築、ツール/機能の追加、機能ローディングの延期、出力のストリーミング、YAML からのエージェント定義、エージェントの動作テストを依頼した場合に使用します。

概要

このスキルは、Pydantic AI ライブラリを使用して AI エージェントを構築するためのガイドを提供します。ツールの定義、構造化出力、ストリーミング、テスト、およびマルチエージェントワークフローを含む、エージェントベースのアプリケーション開発の主要な側面をカバーします。

Pydantic AI の核心理念

  • Agent: システムプロンプト、ツール、および出力型をカプセル化した主要な構成要素です。
  • RunContext: エージェントの実行中にツールがアクセスできる依存関係と状態を含みます。
  • Tool: エージェントが特定のタスクを実行するために呼び出すことができる関数です。
  • Dependencies: エージェントの実行間に受け渡される外部の依存関係(例:データベース接続、API クライアント)です。
  • Result: エージェントの構造化された型安全な出力です。

基本的なエージェントの例

from pydantic_ai import Agent

agent = Agent(
    "openai:gpt-4o",
    system_prompt="あなたは役立つアシスタントです。"
)

result = agent.run_sync("こんにちは、世界!")
print(result.data)

ツールの追加

from pydantic_ai import Agent, RunContext

agent = Agent("openai:gpt-4o")

@agent.tool
def get_weather(ctx: RunContext, location: str) -> str:
    """指定された場所の天気を返します。"""
    return f"{location} の天気は晴れです。"

result = agent.run_sync("東京の天気は?")
print(result.data)

構造化出力

from pydantic import BaseModel
from pydantic_ai import Agent

class CityWeather(BaseModel):
    city: str
    temperature: float
    condition: str

agent = Agent("openai:gpt-4o", result_type=CityWeather)

result = agent.run_sync("東京の天気を教えてください。")
print(result.data)
# 出力例: city='Tokyo' temperature=22.5 condition='晴れ'

ストリーミング

from pydantic_ai import Agent

agent = Agent("openai:gpt-4o")

async with agent.run_stream("長い物語を教えてください。") as stream:
    async for chunk in stream:
        print(chunk, end="")

オンデマンド機能ローディング

from pydantic_ai import Agent

agent = Agent("openai:gpt-4o")

@agent.tool(retry=1)
def load_plugin(ctx, plugin_name: str) -> str:
    """必要に応じてプラグイン機能をロードします。"""
    plugins = {
        "calculator": "計算機能がロードされました。",
        "translator": "翻訳機能がロードされました。"
    }
    return plugins.get(plugin_name, "不明なプラグイン")

result = agent.run_sync("電卓プラグインをロードして、5 + 3 を計算してください。")
print(result.data)

YAML からのエージェント定義

import yaml
from pydantic_ai import Agent

config = yaml.safe_load("""
name: my_agent
model: openai:gpt-4o
system_prompt: "あなたは役立つアシスタントです。"
tools:
  - name: get_time
    description: 現在時刻を取得します。
""")

agent = Agent(config["model"], system_prompt=config["system_prompt"])

# ツールを動的に追加(実際の実装はもっと複雑になる可能性があります)
for tool_config in config.get("tools", []):
    @agent.tool
    def dynamic_tool(ctx, **kwargs):
        return f"{tool_config['name']} が実行されました。"

print(f"エージェント '{config['name']}' が作成されました。")

マルチエージェントパターン

from pydantic_ai import Agent

research_agent = Agent("openai:gpt-4o", system_prompt="あなたはリサーチアシスタントです。")
summary_agent = Agent("openai:gpt-4o", system_prompt="あなたは要約アシスタントです。")

research_result = research_agent.run_sync("AI エージェントの最新動向を調査してください。")
summary = summary_agent.run_sync(f"次のテキストを要約してください:{research_result.data}")
print(summary.data)

テスト

from pydantic_ai import Agent

agent = Agent("openai:gpt-4o")

def test_agent_response():
    result = agent.run_sync("2 + 2 は?")
    assert "4" in result.data
    print("テスト合格:エージェントが正しく応答しました。")

test_agent_response()

ベストプラクティス

  • 依存関係には RunContext を使用し、依存関係を明示的に管理します。
  • 複雑な出力には常に構造化出力(Pydantic モデル)を定義します。
  • 長時間のタスクにはストリーミングを使用してユーザーエクスペリエンスを向上させます。
  • 大規模なツールセットにはオンデマンド機能ローディングを実装します。
  • エージェントの信頼性を確保するためにテストを記述します。
  • 複雑なワークフローを管理するためにマルチエージェントパターンを検討します。

関連スキル