Agent๋ฅผ ์˜ค๋ž˜ ์šด์˜ํ•˜๋ ค๋ฉด โ€œ๋Œ€์ถฉ ํ…์ŠคํŠธ ๋ฐ›๊ธฐโ€์—์„œ ๋ฒ—์–ด๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. PydanticAI์—์„œ ๊ทธ ์ถœ๋ฐœ์ ์ด deps_type๊ณผ output_type์ž…๋‹ˆ๋‹ค. ์ด ๋‘˜์„ ๋จผ์ € ์žก์œผ๋ฉด, ๋‚˜์ค‘์— ๊ธฐ๋Šฅ์„ ๋Š˜๋ ค๋„ ์ฝ”๋“œ๊ฐ€ ๋œ ํ”๋“ค๋ฆฝ๋‹ˆ๋‹ค.

AI ํ™œ์šฉ ์•ˆ๋‚ด: ์ด ๋ฌธ์„œ๋Š” ์ƒ์„ฑํ˜• AI๋ฅผ ํ™œ์šฉํ•ด ์ž‘์„ฑํ–ˆ์œผ๋ฉฐ, Pydantic AI ๊ณต์‹ ๋ฌธ์„œ๋ฅผ 1์ฐจ ์ถœ์ฒ˜๋กœ ๊ฒ€ํ† ํ•ด ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ณต์‹๋ฌธ์„œ ํ๋ฆ„ ์ ๊ฒ€ (๊ฐœ์š” ๋ณด์™„)

  • ํ๋ฆ„: dependencies ์„ ์–ธ/์ฃผ์ž… โ†’ ๋™๊ธฐยท๋น„๋™๊ธฐ ์˜์กด์„ฑ ๋ถ„๋ฆฌ โ†’ output ๋ชจ๋“œ ์„ ํƒ(๊ตฌ์กฐํ™”/ํ•จ์ˆ˜ํ˜•) โ†’ ์ถœ๋ ฅ ๊ฒ€์ฆ๊ธฐ(output validator)๋กœ ํ’ˆ์งˆ ๊ณ ์ •.
  • ์ด๋ฒˆ ํŽธ์—์„œ ๋น ์ง€๋ฉด ์•ˆ ๋˜๋Š” ํฌ์ธํŠธ:
    • deps๋Š” ๋‹จ์ˆœ ์„ค์ •๊ฐ’์ด ์•„๋‹ˆ๋ผ ์‹คํ–‰ ๋ฌธ๋งฅ ์ฃผ์ž… ๋ ˆ์ด์–ด๋กœ ์„ค๋ช…ํ•œ๋‹ค.
    • output_type + ๊ฒ€์ฆ ์‹คํŒจ ์‹œ ์žฌ์‹œ๋„/๋ณด์ • ํ๋ฆ„์„ ํ•จ๊ป˜ ๋‹ค๋ฃฌ๋‹ค.
    • dependency override(ํ…Œ์ŠคํŠธ/ํ™˜๊ฒฝ ์ „ํ™˜)๋ฅผ ๊ฐœ์š”์— ๋ช…์‹œํ•œ๋‹ค.
  • ๊ณต์‹ ๋ฌธ์„œ ์ฒดํฌ ๋งํฌ:

์™œ deps/output๋ถ€ํ„ฐ ์žก์•„์•ผ ํ•˜๋‚˜

deps_type์€ ๋Ÿฐํƒ€์ž„์— Agent๊ฐ€ ์‚ฌ์šฉํ•  ์˜์กด์„ฑ(์˜ˆ: user_id, DB connection)์„ ํƒ€์ž…์œผ๋กœ ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค. output_type์€ ๋ชจ๋ธ์ด ๋งˆ์ง€๋ง‰์— ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ณต์‹ ๋ฌธ์„œ:

flowchart TD
  A[RunContext๋กœ deps ์ „๋‹ฌ] --> B[Tool/Instructions์—์„œ ์‚ฌ์šฉ]
  B --> C[๋ชจ๋ธ ์‘๋‹ต ์ƒ์„ฑ]
  C --> D[output_type ๊ฒ€์ฆ]
  D --> E[ํ†ต๊ณผ ์‹œ ์ตœ์ข… ๋ฐ˜ํ™˜]
  D --> F[์‹คํŒจ ์‹œ ์žฌ์‹œ๋„/์ˆ˜์ • ์œ ๋„]

์ตœ์†Œ ์‹ค์ „ ์˜ˆ์‹œ

from dataclasses import dataclass
from pydantic import BaseModel, Field
from pydantic_ai import Agent, RunContext
 
@dataclass
class Deps:
    customer_id: int
 
class Out(BaseModel):
    answer: str = Field(description='๊ณ ๊ฐ ์•ˆ๋‚ด ๋ฌธ๊ตฌ')
    risk: int = Field(ge=0, le=10)
 
agent = Agent('openai:gpt-5.2', deps_type=Deps, output_type=Out)

ํ•ต์‹ฌ์€ โ€œ๋ฆฌ๋ทฐ๊ฐ€ ์‰ฌ์šด ๊ฒฐ๊ณผโ€๋ฅผ ๊ฐ•์ œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฏธ๋‹ˆ ์‚ฌ๋ก€ A: ์šด์˜์ž๊ฐ€ ๋ฆฌ์Šคํฌ ๋ ˆ๋ฒจ์„ ๋ชป ๋ฏฟ์—ˆ๋˜ ๋ฌธ์ œ

์˜ˆ์ „์—๋Š” ๋ชจ๋ธ์ด ์ƒํ™ฉ์— ๋”ฐ๋ผ โ€œ์œ„ํ—˜/๋‚ฎ์Œโ€์ฒ˜๋Ÿผ ์ œ๊ฐ๊ฐ ํ‘œํ˜„ํ•ด์„œ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. risk: int(0~10)๋กœ ๊ณ ์ •ํ•˜๋‹ˆ ๋ฃฐ ์—”์ง„ ์—ฐ๊ฒฐ์ด ์‰ฌ์›Œ์กŒ์Šต๋‹ˆ๋‹ค.

๋ฏธ๋‹ˆ ์‚ฌ๋ก€ B: ๊ณ ๊ฐ ์ •๋ณด ์ฃผ์ž…์ด ๋ถˆ์•ˆ์ •ํ–ˆ๋˜ ๋ฌธ์ œ

ํ”„๋กฌํ”„ํŠธ์— ๊ณ ๊ฐ ์ •๋ณด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ถ™์ด๋˜ ๋ฐฉ์‹์€ ๋ˆ„๋ฝ์ด ์žฆ์•˜์Šต๋‹ˆ๋‹ค. deps_type์œผ๋กœ ๊ฐ•์ œํ•ด RunContext์—์„œ ๊บผ๋‚ด ์“ฐ๊ฒŒ ๋ฐ”๊พธ๋‹ˆ ๋ˆ„๋ฝ ์ผ€์ด์Šค๊ฐ€ ์ค„์—ˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋ฐ”๋กœ ์ ์šฉ ์ˆœ์„œ

  1. ๊ธฐ์กด Agent ์ถœ๋ ฅ์—์„œ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ํ•„๋“œ 2~3๊ฐœ๋ฅผ ๋จผ์ € ํ™•์ •
  2. output_type ๋ชจ๋ธ ์ •์˜
  3. ์™ธ๋ถ€ ์ƒํƒœ๊ฐ’(user/team/db)์„ deps_type์œผ๋กœ ์ด๋™
  4. ๊ฐ™์€ ์ž…๋ ฅ 3ํšŒ ํ…Œ์ŠคํŠธ ํ›„ ํ•„๋“œ ์ผ๊ด€์„ฑ ํ™•์ธ

์„ฑ๊ณต ํŒ์ •:

  • ๊ฒฐ๊ณผ JSON/๊ฐ์ฒด ํ•„๋“œ๊ฐ€ ๊ณ ์ •๋๋‹ค
  • ์‚ฌ๋žŒ์ด ์•„๋‹Œ ์ฝ”๋“œ๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค
  • deps ๋ˆ„๋ฝ ์‹œ ์ฆ‰์‹œ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค

๋‹ค์Œ ๊ธ€