本文へスキップ
Markdown で表示

PydanticAI

PydanticAI はモデルオブジェクトの上にエージェントを作ります。OpenAI のモデルは、base URL とキーから作ったプロバイダーを受け取ります。エージェントの定義でほかに変える箇所はありません。

インストール

bash
pip install pydantic-ai

接続

python
import os
from pydantic_ai import Agent
from pydantic_ai.models.openai import OpenAIChatModel
from pydantic_ai.providers.openai import OpenAIProvider

model = OpenAIChatModel(
    "qwen3-32b",
    provider=OpenAIProvider(
        base_url="https://api.bricksum.com/v1",
        api_key=os.environ["KILN_API_KEY"],  # sk-bk-...
    ),
)

agent = Agent(model, system_prompt="Answer briefly.", model_settings={"max_tokens": 800})
print(agent.run_sync("Write a haiku about kilns.").output)

Kiln での違い

  • OpenAIModel ではなく OpenAIChatModel PydanticAI ではクラス名が変わり、古いガイドには今も OpenAIModel が残っています。下の注記のバージョンではその import が失敗するため、OpenAIProvider とともに OpenAIChatModel を使ってください。
  • max_tokens は model_settings に リクエストの設定はモデルではなくエージェントが保持します。reasoning トークンもこの上限に含まれ、回答のテキストが出る前に上限に達すると、PydanticAI は空の結果を返さずに UnexpectedModelBehavior を送出します。余裕を確保してください。例の 800 はこのモデルで測定していない初期値のため、実行が UnexpectedModelBehavior を送出したら増やしてください。

base URL、認証、すべてのエンドポイントが共通で受け取るリクエストパラメータ、レスポンスの形式、ストリーミング、エラーコードは、どの SDK を使っても同じです。これらは API リファレンスに一度だけまとめています。 上の呼び出しが到達するエンドポイントは Chat completionsです。 モデル ID は API が現在提供しているものである必要があります。一覧の取得方法と、目的の ID が一覧にない場合の対処は モデル のページにあります。 SDK に関係なくこのモデルが対応していない機能は OpenAI からの移行 のページにまとめています。

メモ
このページのスニペットは 2026-09-21 に pydantic-ai 2.46.0 の環境で Kiln API に対して実行し、動作を確認しています。 未確認の項目: その実行は gpt-oss-120b で行いました。ページは現在 qwen3-32b を使っており、このモデルではまだ再実行していません。上のエージェントの実行は確認しています。型付きの出力、ツール、ストリーミングは Kiln では確認していません。