PydanticAI๋Š” โ€œLLM ๋ฐ๋ชจ ์ฝ”๋“œโ€๋ฅผ โ€œ์šด์˜ ๊ฐ€๋Šฅํ•œ ์—์ด์ „ํŠธ ์ฝ”๋“œโ€๋กœ ๋ฐ”๊ฟ€ ๋•Œ ํŠนํžˆ ๊ฐ•ํ•œ ์„ ํƒ์ง€์ž…๋‹ˆ๋‹ค. ํ•ต์‹ฌ์€ ๋‹จ์ˆœํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž…์œผ๋กœ ์ž…๋ ฅยท๋„๊ตฌยท์ถœ๋ ฅ์„ ๊ณ„์•ฝ์ฒ˜๋Ÿผ ๊ณ ์ •ํ•ด์„œ, ์‹คํ–‰ํ• ์ˆ˜๋ก ํ’ˆ์งˆ์ด ํ”๋“ค๋ฆฌ๋Š” ๋ฌธ์ œ๋ฅผ ์ค„์ด๋Š” ๋ฐ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” Agent ํ•˜๋‚˜๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๊ณ , ์ดํ›„ ToolยทMCPยทGraphยทEvalsยทDurable Execution์œผ๋กœ ์ ์ง„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ž‘๊ฒŒ ์‹œ์ž‘ํ•ด์„œ ํฌ๊ฒŒ ์šด์˜ํ•˜๊ธฐ ์ข‹์€ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

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

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

  • ํ๋ฆ„: index ํฌ์ง€์…”๋‹ โ†’ install ์„ค์น˜ ๋ถ„๊ธฐ(์ผ๋ฐ˜/slim) โ†’ agent ์‹คํ–‰ ๋ฐฉ์‹(run_sync/run, Run vs Conversation) โ†’ models/overview ๊ณต๊ธ‰์žยทํด๋ฐฑยท๋™์‹œ์„ฑ โ†’ logfire ๊ด€์ธก.
  • ์ด๋ฒˆ ํŽธ์—์„œ ๋น ์ง€๋ฉด ์•ˆ ๋˜๋Š” ํฌ์ธํŠธ:
    • Runs vs. Conversations๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์„ค๋ช…ํ•œ๋‹ค.
    • ๋ชจ๋ธ ์—ฐ๊ฒฐ์€ โ€œ๋ชจ๋ธ๋ช…โ€์ด ์•„๋‹ˆ๋ผ Provider + ๋ชจ๋ธ + ์˜ˆ์™ธ/ํด๋ฐฑ ๊ด€์ ์œผ๋กœ ์„ค๋ช…ํ•œ๋‹ค.
    • ๊ด€์ธก(Tracing)๊ณผ ๋””๋ฒ„๊น…์„ ์ž…๋ฌธ ๋‹จ๊ณ„์—์„œ ํ•จ๊ป˜ ์†Œ๊ฐœํ•œ๋‹ค.
  • ๊ณต์‹ ๋ฌธ์„œ ์ฒดํฌ ๋งํฌ:

ํ•ต์‹ฌ ์š”์•ฝ

  • PydanticAI์˜ ์ค‘์‹ฌ์€ Agent์ด๋ฉฐ, ์ด Agent๋Š” instructions / tools / output_type / deps_type / model์„ ํ•˜๋‚˜์˜ ์‹คํ–‰ ๋‹จ์œ„๋กœ ๋ฌถ์Šต๋‹ˆ๋‹ค.
    ๊ณต์‹ ๋ฌธ์„œ: https://ai.pydantic.dev/agent/
  • ์„ค์น˜๋Š” ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ ๊ฐ€๋Šฅํ•˜๊ณ (pip install pydantic-ai), ํ•„์š” ์‹œ pydantic-ai-slim[...]์œผ๋กœ ์˜์กด์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ๊ณต์‹ ๋ฌธ์„œ: https://ai.pydantic.dev/install/
  • ๋ชจ๋ธ์€ ํŠน์ • ๋ฒค๋”์— ๋ฌถ์ด์ง€ ์•Š๋Š” ๊ตฌ์กฐ๋ผ์„œ OpenAI, Anthropic, Gemini ๋“ฑ์œผ๋กœ ๋ผ์šฐํŒ…์„ ๋ฐ”๊พธ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.
    ๊ณต์‹ ๋ฌธ์„œ: https://ai.pydantic.dev/models/overview/
  • ์ด ์‹œ๋ฆฌ์ฆˆ์˜ ๋ชฉํ‘œ๋Š” โ€œ์ฝ”๋“œ๊ฐ€ ๋Œ์•„๊ฐ„๋‹คโ€์—์„œ ๋๋‚˜์ง€ ์•Š๊ณ  โ€œํ…Œ์ŠคํŠธ/๊ด€์ธก/๋ณต๊ตฌ๊ฐ€ ๋œ๋‹คโ€๊นŒ์ง€ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์™œ ์ง€๊ธˆ PydanticAI์ธ๊ฐ€

์—์ด์ „ํŠธ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ดˆ๋ฐ˜์— ๋ง๊ฐ€์ง€๋Š” ์ด์œ ๋Š” ๋ชจ๋ธ ์„ฑ๋Šฅ ์ž์ฒด๋ณด๋‹ค, ์šด์˜ ๊ณ„์•ฝ์ด ๋А์Šจํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ํ”„๋กฌํ”„ํŠธ๋Š” ๊ธธ์–ด์ง€๋Š”๋ฐ ์ถœ๋ ฅ ํ˜•์‹์€ ๋งค๋ฒˆ ๋‹ฌ๋ผ์ง€๊ณ , ๋„๊ตฌ ์ธ์ž ๊ฒ€์ฆ์ด ์•ฝํ•ด์„œ ์žฌ์‹œ๋„๊ฐ€ ํญ๋ฐœํ•˜๋Š” ํŒจํ„ด์ด ์ž์ฃผ ๋‚˜์˜ต๋‹ˆ๋‹ค.

PydanticAI๋Š” ์ด ๊ตฌ๊ฐ„์„ โ€œํƒ€์ž… ๊ธฐ๋ฐ˜ ๊ณ„์•ฝโ€์œผ๋กœ ๋‹น๊ฒจ์˜ต๋‹ˆ๋‹ค. deps_type์œผ๋กœ ๋Ÿฐํƒ€์ž„ ์˜์กด์„ฑ(์˜ˆ: DB ์—ฐ๊ฒฐ, ์‚ฌ์šฉ์ž ID)์„ ๋ช…์‹œํ•˜๊ณ , output_type์œผ๋กœ ์ตœ์ข… ๊ฒฐ๊ณผ ๊ตฌ์กฐ๋ฅผ ๊ณ ์ •ํ•˜๋ฉฐ, Tool ์ž…๋ ฅ๋„ ์Šคํ‚ค๋งˆ๋กœ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

๊ณต์‹ ๋ฌธ์„œ์—์„œ Agent๋ฅผ โ€œinstructions, tools, structured output, dependencies, model์˜ ์ปจํ…Œ์ด๋„ˆโ€๋กœ ์„ค๋ช…ํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฐ”๋กœ ์—ฌ๊ธฐ์ž…๋‹ˆ๋‹ค.
๊ณต์‹ ๋ฌธ์„œ: https://ai.pydantic.dev/agent/

flowchart TD
  A[์š”์ฒญ ์ž…๋ ฅ] --> B[Agent ๊ณ„์•ฝ: instructions + deps + tools]
  B --> C[๋ชจ๋ธ ํ˜ธ์ถœ]
  C --> D[๋„๊ตฌ ํ˜ธ์ถœ/์žฌ์‹œ๋„]
  D --> E[output_type ๊ฒ€์ฆ]
  E --> F[์•ˆ์ •๋œ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜]

ํ˜„์žฅ ๋ฏธ๋‹ˆ ์‚ฌ๋ก€ 2๊ฐœ

์‚ฌ๋ก€ 1) ๊ณ ๊ฐ์ง€์› ๋ด‡: ๋‹ต๋ณ€์€ ๊ทธ๋Ÿด๋“ฏํ•œ๋ฐ ์กฐ์น˜๊ฐ€ ๋“ค์ญ‰๋‚ ์ญ‰ํ•œ ๋ฌธ์ œ

์ดˆ๊ธฐ์—๋Š” โ€œ์นœ์ ˆํ•˜๊ฒŒ ๋‹ต๋ณ€ํ•ดโ€ ์ˆ˜์ค€์˜ ํ”„๋กฌํ”„ํŠธ๋งŒ ์‚ฌ์šฉํ•ด, ๊ฐ™์€ ์งˆ๋ฌธ์—์„œ๋„ ์นด๋“œ ์ •์ง€ ์—ฌ๋ถ€ ๊ฐ™์€ ํ•ต์‹ฌ ์กฐ์น˜๊ฐ€ ๋งค๋ฒˆ ๋‹ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

๊ฐœ์„ ์€ ์„ธ ๋‹จ๊ณ„์˜€์Šต๋‹ˆ๋‹ค.

  1. ์ถœ๋ ฅ์„ support_advice / block_card / risk ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๊ณ ์ • (output_type)
  2. ๊ณ ๊ฐ ID์™€ DB ์—ฐ๊ฒฐ์„ deps_type์œผ๋กœ ๋ถ„๋ฆฌ
  3. ์ž”์•ก ์กฐํšŒ/์œ„ํ—˜ ํŒ์ • ๋กœ์ง์„ Tool๋กœ ๋ถ„๋ฆฌ

์ดํ›„์—๋Š” ๋ฆฌ๋ทฐ ํฌ์ธํŠธ๊ฐ€ โ€œ๋ฌธ์žฅ ํ†คโ€์ด ์•„๋‹ˆ๋ผ โ€œrisk ๊ธฐ์ค€์ด ๋งž๋Š”๊ฐ€โ€๋กœ ์ด๋™ํ–ˆ๊ณ , QA ์‹œ๊ฐ„์ด ์ค„์—ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์˜ˆ์ œ(๊ณต์‹): https://ai.pydantic.dev/examples/bank-support/

์‚ฌ๋ก€ 2) ์‚ฌ๋‚ด ๋ฆฌ์„œ์น˜ ์—์ด์ „ํŠธ: ๋ชจ๋ธ ๊ต์ฒด ๋•Œ๋งˆ๋‹ค ์ฝ”๋“œ๊ฐ€ ๊นจ์ง€๋Š” ๋ฌธ์ œ

ํ•œ ๋ชจ๋ธ์— ํ•˜๋“œ์ฝ”๋”ฉ๋œ SDK ํ˜ธ์ถœ์ด ๋งŽ์•„์„œ, ๊ณต๊ธ‰์ž ๋ณ€๊ฒฝ ์‹œ ์ฝ”๋“œ ์ˆ˜์ • ๋ฒ”์œ„๊ฐ€ ์ปค์กŒ์Šต๋‹ˆ๋‹ค.

PydanticAI๋กœ ์ „ํ™˜ ํ›„์—๋Š” <provider>:<model> ํ˜•ํƒœ๋กœ ๋ชจ๋ธ ๋ผ์šฐํŒ…์„ ๋ฐ”๊พธ๊ณ , ํ•„์š”ํ•  ๋•Œ๋งŒ Provider/Model ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ชจ๋ธ ๊ต์ฒด ์‹คํ—˜ ์ฃผ๊ธฐ๊ฐ€ ์งง์•„์กŒ๊ณ , ์žฅ์•  ์‹œ ๋Œ€์ฒด ๊ฒฝ๋กœ ์„ค๊ณ„๊ฐ€ ์‰ฌ์›Œ์กŒ์Šต๋‹ˆ๋‹ค.

๊ณต์‹ ๋ฌธ์„œ: https://ai.pydantic.dev/models/overview/

์šฉ์–ด๋ฅผ ์‰ฌ์šด ๋น„์œ ๋กœ ์ •๋ฆฌ

  • Agent: ๋งค์žฅ ์ ์žฅ(์ „์ฒด ์šด์˜ ๊ทœ์น™ ๋‹ด๋‹น)
  • Tool: ์ ์žฅ์ด ํ˜ธ์ถœํ•˜๋Š” ์ง์›(๊ฒ€์ƒ‰, DB ์กฐํšŒ, ๊ณ„์‚ฐ)
  • deps_type: ์˜ค๋Š˜ ๊ทผ๋ฌดํ‘œ(๋ˆ„๊ฐ€ ์–ด๋–ค ๊ถŒํ•œ/๋ฐ์ดํ„ฐ๋ฅผ ๋“ค๊ณ  ๋“ค์–ด์˜ค๋Š”์ง€)
  • output_type: ๊ณ ๊ฐ์—๊ฒŒ ๊ฑด๋„ค๋Š” ์˜์ˆ˜์ฆ ์–‘์‹(ํ˜•์‹์ด ๋งค๋ฒˆ ๋ฐ”๋€Œ๋ฉด ์•ˆ ๋จ)

์ด ๋น„์œ ๋ฅผ ๊ธฐ์–ตํ•˜๋ฉด, โ€œํ”„๋กฌํ”„ํŠธ๋ฅผ ๋” ๊ธธ๊ฒŒ ์“ธ๊นŒ?โ€๋ณด๋‹ค โ€œ๊ณ„์•ฝ์ด ๋น„์–ด ์žˆ๋Š” ๊ณณ์ด ์–ด๋””์ง€?โ€๋ฅผ ๋จผ์ € ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

10๋ถ„ ์‹ค์Šต (๋ˆ„๊ฐ€/๋ฌด์—‡์„/์ˆœ์„œ)

๊ฐœ๋ฐœ์ž 1๋ช…์ด ๋กœ์ปฌ์—์„œ ๋ฐ”๋กœ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ์ž…๋ฌธ ๋ฃจํ‹ด์ž…๋‹ˆ๋‹ค.

  1. ์„ค์น˜
  2. ์ฒซ Agent ์‹คํ–‰
    • Agent(...) ์ƒ์„ฑ ํ›„ run_sync()๋กœ ๋‹จ์ผ ์งˆ์˜ ์‹คํ–‰
  3. ์ถœ๋ ฅ ๊ณ„์•ฝ ์ถ”๊ฐ€
    • ๊ฐ„๋‹จํ•œ Pydantic ๋ชจ๋ธ์„ output_type์œผ๋กœ ์ง€์ •
  4. ๊ฒ€์ฆ
    • ๊ฐ™์€ ์ž…๋ ฅ 3ํšŒ ๋ฐ˜๋ณต ์‹คํ–‰ํ•ด ๊ฒฐ๊ณผ ๊ตฌ์กฐ๊ฐ€ ์œ ์ง€๋˜๋Š”์ง€ ํ™•์ธ

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

  • ์‹คํ–‰์€ 1ํšŒ๊ฐ€ ์•„๋‹ˆ๋ผ 3ํšŒ ๋ฐ˜๋ณตํ•ด๋„ ๊ฒฐ๊ณผ ๊ตฌ์กฐ๊ฐ€ ์œ ์ง€๋œ๋‹ค
  • ์ž์œ  ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ ํ•ฉ์˜ํ•œ ํ•„๋“œ ๊ตฌ์กฐ๋กœ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค
  • ๋‹ค์Œ ํŽธ(01ํŽธ)์—์„œ ๊ทธ๋Œ€๋กœ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์ตœ์†Œ ์ฝ”๋“œ๊ฐ€ ๋‚จ๋Š”๋‹ค

์น ํŒ ์น˜ํŠธ์‹œํŠธ

  1. PydanticAI๋Š” โ€œํ”„๋กฌํ”„ํŠธ ํ”„๋ ˆ์ž„์›Œํฌโ€๋ณด๋‹ค โ€œ์šด์˜ ๊ณ„์•ฝ ํ”„๋ ˆ์ž„์›Œํฌโ€์— ๊ฐ€๊น๋‹ค
  2. Agent = instructions + tools + deps + output + model
  3. ์ฒ˜์Œ๋ถ€ํ„ฐ output_type์„ ์žก์•„์•ผ ์žฌ์ž‘์—…์ด ์ค„์–ด๋“ ๋‹ค
  4. ๋ชจ๋ธ ๊ต์ฒด ๊ฐ€๋Šฅ์„ฑ์„ ์—ด์–ด๋‘๋ฉด ์‹คํ—˜ ์†๋„๊ฐ€ ๋นจ๋ผ์ง„๋‹ค
  5. ๋ชฉํ‘œ๋Š” ๋ฐ๋ชจ ์„ฑ๊ณต์ด ์•„๋‹ˆ๋ผ ๋ฐ˜๋ณต ์šด์˜ ์„ฑ๊ณต์ด๋‹ค

๋‹ค์Œ ๊ธ€