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 モデル)を定義します。
- 長時間のタスクにはストリーミングを使用してユーザーエクスペリエンスを向上させます。
- 大規模なツールセットにはオンデマンド機能ローディングを実装します。
- エージェントの信頼性を確保するためにテストを記述します。
- 複雑なワークフローを管理するためにマルチエージェントパターンを検討します。