Pydantic AI エージェント・フレームワーク : イントロダクション

Pydantic AI は、生成 AI を使用した実稼働レベルのアプリケーションの構築を容易にするように設計された Python エージェントフレームワークです。
FastAPI は Pydantic Validation を基盤として、革新的で使いやすい設計を提供することで Web 開発に革命をもたらしましたが、その FastAPI の感覚を GenAI app 開発にもたらすという単純な目的で Pydantic AI は構築されています。

Pydantic AI エージェント・フレームワーク : イントロダクション

作成 : クラスキャット・セールスインフォメーション
作成日時 : 08/17/2025
バージョン : Pydantic AI v0.7.2

* 本記事は ai.pydantic.dev の以下のページを独自に翻訳した上で、補足説明を加えてまとめ直しています :

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス ⭐️ リニューアルしました 😉

クラスキャット は人工知能に関する各種サービスを提供しています。お気軽にご相談ください :

  • 人工知能導入個別相談会(無償)実施中! [詳細]

  • 人工知能研究開発支援 [詳細]
    1. 自社特有情報を含むチャットボット構築支援
    2. 画像認識 (医療系含む) / 画像生成

  • PoC(概念実証)を失敗させないための支援 [詳細]

お問合せ : 下記までお願いします。

  • クラスキャット セールス・インフォメーション
  • sales-info@classcat.com
  • ClassCatJP

 

 

Pydantic AI : エージェント・フレームワーク : イントロダクション


Agent Framework / shim to use Pydantic with LLMs

Pydantic AI は、生成 AI を使用した実稼働レベルのアプリケーションの構築を容易にするように設計された Python エージェントフレームワークです。

FastAPI は、Pydantic のバリデーション を基盤として、革新的で (人間工学的に) 使いやすい設計を提供することで、Web 開発に革命をもたらしました。

同様に、Python の事実上、ほぼすべてのエージェントフレームワークと LLM ライブラリは Pydantic Validation を使用していますが、Pydantic Logfire で LLM を使い始めた際は、同じ感覚を与えてくれるものを見つけられませんでした。

私たちは一つの単純な目的で Pydantic AI を構築しました : その FastAPI の感覚を GenAI app 開発にもたらすことです。

 

Why use Pydantic AI

  • Pydantic チームにより構築 : Pydantic Validation (OpenAI SDK、Anthropic SDK、LangChain、LlamaIndex、AutoGPT、Transformers、CrewAI、Instructor 等の validation 層)を手がけたチームによって構築されました。

  • モデル非依存 : OpenAI, Anthropic, Gemini, Deepseek, Ollama, Groq, Cohere と Mistral をサポートし、他のモデル のサポートを実装するための単純なインターフェイスもあります。

  • Pydantic Logfire 統合 : LLM により強化されたアプリケーションのリアルタイム・デバッグ、パフォーマンス監視、動作追跡のために Pydantic Logfire とシームレスに 統合 しています。

  • 型安全 : できる限り強力で有益な 型チェック を行うように設計されています。

  • Python-centric 設計 : Python の馴染みのある制御フローとエージェント構成を活用して AI 駆動型プロジェクトを構築し、どのような他のプロジェクトでも使用できる標準的な Python ベストプラクティスを簡単に適用できます。

  • 構造化レスポンス : Pydantic Validation のパワーを活用してモデル出力を 検証・構造化 して、実行全体に渡りレスポンスが一貫していることを保証します。

  • 依存性注入 (Injection) システム : エージェントの システムプロンプトツール出力 validators にデータとサービスを提供する、オプションの 依存性注入 システムを提供します。これはテストや評価駆動型の反復開発に役立ちます。

  • ストリーミングされた応答 : 即時検証を備えた、LLM 応答を継続的に ストリーミングする 機能を提供し、検証済み出力へのリアルタイム・アクセスを保証します。

  • グラフ・サポート : Pydantic Graph は型ヒントを使用してグラフを定義する強力な方法を提供しています、これは、標準的な制御フローがスパゲティ🍝コードに劣化する可能性がある複雑なアプリケーションで役立ちます。

 

Hello World の例

Pydantic AI の最小限の例が以下です :

hello_world.py

from pydantic_ai import Agent

# エージェントへのキーワード引数を使用して静的システムプロンプトを登録します。
agent = Agent(  
    'google-gla:gemini-1.5-flash',
    system_prompt='Be concise, reply with one sentence.',  
)

# エージェントを同期的に実行し、LLM との会話を行います。
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.
"""
「Hello, World」は、プログラミング初心者が最初に作成する基本的なプログラムの出力例として、1978年出版の『The C Programming Language』で広まりました。

(This example is complete, it can be run “as is”)

やり取りは非常に短いはずです: Pydantic AI はシステムプロンプトとユーザクエリを LLM に送信し、モデルはテキスト応答を返します。

それほど興味深いものではありませんが、「ツール」、動的システムプロンプト、構造化レスポンスを簡単に追加してより強力なエージェントを構築できます。

 

ツール & 依存性注入の例

Pydantic AI を使用して銀行のサポートエージェントを構築する簡潔な例が以下です :

bank_support.py

from dataclasses import dataclass

from pydantic import BaseModel, Field
from pydantic_ai import Agent, RunContext

from bank_database import DatabaseConn


@dataclass
class SupportDependencies:  
    customer_id: int
    db: DatabaseConn  


class SupportOutput(BaseModel):  
    support_advice: str = Field(description='Advice returned to the customer')
    block_card: bool = Field(description="Whether to block the customer's card")
    risk: int = Field(description='Risk level of query', ge=0, le=10)


# このエージェントは銀行における first-tier サポートとして機能します。
# エージェントは受け取る依存関係の型と返す出力型において汎用的です。
# この場合、support_agent の型は Agent[SupportDependencies, SupportOutput] になります。

# エージェントからの応答は SupportOutput であることが保証され、
# validation が失敗した場合、reflection はエージェントが再試行するように求められることを意味します。

# 静的システムプロンプトは、エージェントへの system_prompt キーワード引数で登録できます。
support_agent = Agent(  
    'openai:gpt-4o',  
    deps_type=SupportDependencies,
    output_type=SupportOutput,  
    system_prompt=(  
        'You are a support agent in our bank, give the '
        'customer support and judge the risk level of their query.'
    ),
)


@support_agent.system_prompt  
async def add_customer_name(ctx: RunContext[SupportDependencies]) -> str:
    customer_name = await ctx.deps.db.customer_name(id=ctx.deps.customer_id)
    return f"The customer's name is {customer_name!r}"


@support_agent.tool  
async def customer_balance(
    ctx: RunContext[SupportDependencies], include_pending: bool
) -> float:
    """Returns the customer's current account balance."""  
    return await ctx.deps.db.customer_balance(
        id=ctx.deps.customer_id,
        include_pending=include_pending,
    )


...  


async def main():
    deps = SupportDependencies(customer_id=123, db=DatabaseConn())
    result = await support_agent.run('What is my balance?', deps=deps)  
    print(result.output)  
    """
    support_advice='Hello John, your current account balance, including pending transactions, is $123.45.' block_card=False risk=1
    """

    result = await support_agent.run('I just lost my card!', deps=deps)
    print(result.output)
    """
    support_advice="I'm sorry to hear that, John. We are temporarily blocking your card to prevent unauthorized transactions." block_card=True risk=8
    """

 

以上