Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Pydantic(AI)とJSONの詳細解説

 Pydantic(AI)とJSONの詳細解説

92ページにわたって、生成AI時代に必要なPydanticとJSONについて丁寧に解説しています。

Avatar for MIKIO KUBO

MIKIO KUBO

May 18, 2025
Tweet

More Decks by MIKIO KUBO

Other Decks in Education

Transcript

  1. 目次 1. PydanticとJSONとは 2. JSONの基礎 3. PythonでのJSON操作 4. Pydanticの基本 5.

    PydanticとJSONの連携 6. バリデーション・型安全性 7. 応用例・よくある質問 8. まとめ 2
  2. PythonでJSONを読み込む import json json_str = '{"name": "Taro", "age": 20}' data

    = json.loads(json_str) print(data) # {'name': 'Taro', 'age': 20} 16
  3. PythonでJSONを書き出す import json data = {'name': 'Taro', 'age': 20} json_str

    = json.dumps(data) print(json_str) # {"name": "Taro", "age": 20} 17
  4. モデルのネストとJSON class Address(BaseModel): city: str zip: str class Person(BaseModel): name:

    str address: Address json_str = '{"name": "Taro", "address": {"city": "Tokyo", "zip": "100-0001"}}' p = Person.parse_raw(json_str) 41
  5. リストを含むJSONとPydantic from typing import List class Group(BaseModel): members: List[Person] json_str

    = '{"members": [{"name": "Taro", "age": 20}, {"name": "Hanako", "age": 18}]}' g = Group.parse_raw(json_str) 42
  6. カスタムバリデーション from pydantic import validator class Person(BaseModel): name: str age:

    int @validator('age') def check_age(cls, v): if v < 0: raise ValueError('age must be positive') return v 50
  7. Pydanticでデータの変換 class Person(BaseModel): name: str age: int data = {"name":

    "Taro", "age": "20"} p = Person(**data) # ageは自動でintに変換 62
  8. Enum型の利用 from enum import Enum class Color(Enum): RED = "red"

    BLUE = "blue" class Item(BaseModel): color: Color 67
  9. デフォルトファクトリー from typing import List from pydantic import Field class

    Group(BaseModel): members: List[str] = Field(default_factory=list) 69
  10. PydanticAIの簡単な使い方 from pydantic_ai import Agent agent = Agent( 'openai:gpt-4o-mini', system_prompt='あなたは大阪のおばちゃんです。ユーザと大阪弁で楽しく会話します。'

    ) result = agent.run_sync('競馬の楽しさを5つリストアップして') print(result.data) モデル・プロンプトを指定してエージェントを作成 run_sync や run でLLMに問い合わせ、結果を取得 86
  11. Function Calling(ツール呼び出し)の例 agent = Agent( "openai:gpt-4o-mini", system_prompt="サイコロゲームをします。" ) @agent.tool_plain def

    roll_die() -> str: return str(random.randint(1, 6)) @agent.tool def get_player_name(ctx: RunContext[str]) -> str: return ctx.deps async def main(): result = await agent.run("私の予想は「4」です", deps="たかし") print(result.data) print(result.all_messages()) @agent.tool_plain や @agent.tool で関数をツールとして登録 LLMが必要に応じてこれらの関数を呼び出せる 87