๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[1์ฃผ์ฐจ] LLM ํ˜ธ์ถœ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2026. 3. 22.

1. ์‹ค์Šต ๋ชฉํ‘œ์™€ ๊ตฌ์„ฑ

1) ๊ฐœ์š”

์ด๋ฒˆ ์‹ค์Šต์˜ ๋ชฉํ‘œ๋Š” LLM API๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•ด๋ณด๋ฉฐ ์š”์ฒญ(Request)๊ณผ ์‘๋‹ต(Response)์˜ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ , structured output ๋ฐฉ์‹์˜ ํ•„์š”์„ฑ๊ณผ ํ™œ์šฉ ๋ฐฉ๋ฒ•์„ ์ตํžˆ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๊ณ ๊ฐ ๋ฌธ์˜ ํ‹ฐ์ผ“ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ LLM์„ ํ™œ์šฉํ•œ ์ •๋ณด ์ถ”์ถœ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 
2) ํƒœ์Šคํฌ(LLM์ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋ชฉ์ )

 ์ž…๋ ฅ : 

  • ๊ณ ๊ฐ ๋ฌธ์˜ ํ‹ฐ์ผ“ ํ…์ŠคํŠธ 12๊ฑด

์ถœ๋ ฅ :

  • ์•„๋ž˜ JSON ์Šคํ‚ค๋งˆ๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๊ตฌ์กฐํ™” ๊ฒฐ๊ณผ
{
  "intent": "order_change | shipping_issue | payment_issue | refund_exchange | other",
  "urgency": "low | medium | high",
  "needs_clarification": true,
  "route_to": "order_ops | shipping_ops | billing_ops | returns_ops | human_support"
}

 

3) ์Šคํ‚ค๋งˆ ์ •์˜
intent

  • order_change: ์ฃผ๋ฌธ ์ˆ˜์ •, ์ทจ์†Œ, ์ฃผ์†Œ ๋ณ€๊ฒฝ, ์˜ต์…˜ ๋ณ€๊ฒฝ
  • shipping_issue : ์ถœ๊ณ , ๋ฐฐ์†ก ์ง€์—ฐ, ๋ฐฐ์†ก ๋ˆ„๋ฝ, ๋ฐฐ์†ก ์™„๋ฃŒ ์˜คํ‘œ์‹œ
  • payment_issue : ๊ฒฐ์ œ ์‹คํŒจ, ์ค‘๋ณต ๊ฒฐ์ œ, ์ฒญ๊ตฌ ์ด์ƒ
  • refund_exchange : ๋ฐ˜ํ’ˆ, ํ™˜๋ถˆ, ๊ตํ™˜, ๋ถˆ๋Ÿ‰ ์ ‘์ˆ˜
  • other : ์œ„๋กœ ๋‹จ์ •ํ•˜๊ธฐ ์–ด๋ ต๊ฑฐ๋‚˜ ๋งฅ๋ฝ์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ

urgency

  • low : ์ผ๋ฐ˜ ๋ฌธ์˜, ์ฆ‰์‹œ ์žฅ์•  ์•„๋‹˜
  • medium : ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ ๊ธด๊ธ‰ ์žฅ์•  / ๊ธˆ์ „ ๋ฆฌ์Šคํฌ๋Š” ์•„๋‹˜
  • high : ๊ฒฐ์ œ ์ด์ƒ, ๋ถ„์‹ค / ์˜ค๋ฐฐ์†ก, ๊ณ ๊ฐ ๋ถˆ๋งŒ ๊ณ ์กฐ, ์ˆ˜๋™ ํ™•์ธ์ด ์‹œ๊ธ‰ํ•จ

needs_clarification

  • true : ํ˜„์žฌ ํ…์ŠคํŠธ๋งŒ์œผ๋กœ intent ๋˜๋Š” ์ฒ˜๋ฆฌ ๋ฐฉํ–ฅ์„ ๋‹จ์ •ํ•˜๊ธฐ ์–ด๋ ค์›€
  • false : ํ˜„์žฌ ์ •๋ณด๋งŒ์œผ๋กœ 1์ฐจ ๋ถ„๋ฅ˜ ๊ฐ€๋Šฅ

route_to

  • order_ops : ์ฃผ๋ฌธ / ์ˆ˜์ • ๋‹ด๋‹น
  • shipping_ops : ๋ฐฐ์†ก ๋‹ด๋‹น
  • billing_ops : ๊ฒฐ์ œ / ์ฒญ๊ตฌ ๋‹ด๋‹น
  • returns_ops : ํ™˜๋ถˆ / ๊ตํ™˜ ๋‹ด๋‹น
  • human_support : ๋งฅ๋ฝ ๋ถ€์กฑ, ๋‹ค๋ถ€์„œ ์ด์Šˆ, ์—์Šค์ปฌ๋ ˆ์ด์…˜ ํ•„์š”

 

4) ๊ตฌํ˜„ ์š”๊ตฌ ์‚ฌํ•ญ
 ํ•„์ˆ˜

  1. SDK๋ฅผ ์‚ฌ์šฉํ•ด LLM์„ ์ง์ ‘ ํ˜ธ์ถœํ•  ๊ฒƒ
  2. system ๋ฉ”์‹œ์ง€์™€ user ๋ฉ”์‹œ์ง€๋ฅผ ๋ถ„๋ฆฌํ•  ๊ฒƒ
  3. model, temperature, max_tokens ๋ฅผ ์ฝ”๋“œ์— ๋ช…์‹œํ•  ๊ฒƒ
  4. prompt v1, prompt v2 ๋‘ ๋ฒ„์ „์„ ์‹คํ—˜ํ•  ๊ฒƒ
  5. ์‘๋‹ต์„ JSON์œผ๋กœ ํŒŒ์‹ฑํ•˜๊ณ  ์ฝ”๋“œ์—์„œ ๊ฒ€์ฆํ•  ๊ฒƒ
  6. 12๊ฑด ์ „์ฒด์— ๋Œ€ํ•ด ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ๊ฒƒ
  7. v1๊ณผ v2์˜ ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•œ ์งง์€ ๋ฆฌํฌํŠธ๋ฅผ ์ž‘์„ฑํ•  ๊ฒƒ
  8. LLM API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Python์œผ๋กœ ์ฝ”๋“œ ๋งŒ๋“ค์–ด์„œ ์ง„ํ–‰ ํ•  ๊ฒƒ

 


2. ์‹ค์Šต ์ง„ํ–‰

 

1. ์‚ฌ์šฉํ•œ ๋ชจ๋ธ, SDK, ์‹คํ–‰ ํ™˜๊ฒฝ

  • SDK : google-genai Python SDK
  • Language : Python 3.12.13
  • ์‹คํ–‰ ํ™˜๊ฒฝ : local macOS terminal (venv -> ๊ฐ€์ƒํ™”๋ฅผ ํ†ตํ•ด ๊ฒฉ๋ฆฌํ™”) 

2. ์‹ค์ œ ์š”์ฒญ ๊ตฌ์กฐ ์„ค๋ช… 

  • Model : gemini-3-flash-preview
  • temperature : 0
    • ์ถœ๋ ฅ ๋žœ๋ค์„ฑ ์ •๋„ 0์€ ๊ฐ€์žฅ ์ตœ์†Œํ™” ํŠนํžˆ ์ด๋ฒˆ ์‹ค์Šต์—์„œ๋Š” ์ฐฝ์˜์„ฑ๋ณด๋‹ค ์ผ๊ด€์„ฑ์ด ์ค‘์š”ํ•˜๋‹ˆ๊นŒ 0์ด ์ข‹์Œ
  • max_output_token : 256 
    • ๋ชจ๋ธ์ด ์ƒ์„ฑํ•  ์ตœ๋Œ€ ์ถœ๋ ฅ ๊ธธ์ด ์ œํ•œ, ๋‹จ์œ„๋Š” ํ† ํฐ 1ํ† ํฐ์€ ๋Œ€๋žต 0.75 ๋‹จ์–ด (์˜์–ด ๊ธฐ์ค€) ํ•ด๋‹น ๊ธฐ์ค€์œผ๋กœ api ๋น„์šฉ ์ฒญ๊ตฌ ๋จ
  • v1, v2 system ๋ฉ”์‹œ์ง€ : ํŽ˜๋ฅด์†Œ๋‚˜์™€ ๋ฉ”ํƒ€์ธ์ง€, MoE ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰

v1 (system ๋ฉ”์‹œ์ง€)

 
v2 (system ๋ฉ”์‹œ์ง€)

 

  • Pydnatic ์‚ฌ์šฉ
    • ํŒŒ์ด์ฌ์—์„œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๊ณ  ์ž๋™ ๊ฒ€์ฆํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

 
 

3. ์‹ค์ œ ์‘๋‹ต ๊ตฌ์กฐ
 
v1๊ณผ v2์˜ 12๊ฐœ ๋ฐ์ดํ„ฐ์…‹ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋‚˜์˜ด 
 
์˜ˆ์‹œ) 

 
 

4. v1 ์—์„œ v2๋กœ ๋ฐ”๋€์ 
 

๊ฐœ์š” :
v1 ํ”„๋กฌํ”„ํŠธ๋Š” ์ผ๋ถ€ ํŒ๋‹จ ๊ธฐ์ค€์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์•„ ๋ชจ๋ธ์ด ํ•ญ๋ชฉ์„ ์ถ”๋ก ์— ์˜์กดํ•ด์•ผ ํ–ˆ๋‹ค. 
v2 ์—์„œ๋Š” ๋ชจํ˜ธํ•จ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์ผ๋ถ€ ํ•„๋“œ๋Š” ์ถ”๋ก ์ด ์•„๋‹ˆ๋ผ ๊ณ ์ • ๋งคํ•‘ ๋ฐฉ์‹์œผ๋กœ ๋ฐ”๊พธ์—ˆ๋‹ค.
 
1. urgency ๊ทœ์น™ ์ถ”๊ฐ€
 
v1

  • urgency ํŒ๋‹จ ๊ธฐ์ค€์ด ์—†์Œ
  • ๋”ฐ๋ผ์„œ ๋ชจ๋ธ์ด ๋ฌธ๋งฅ๋งŒ ๋ณด๊ณ  urgency๋ฅผ ์ž„์˜๋กœ ๊ฒฐ์ •ํ•ด์•ผ ํ•จ

v2

  • intent๋ณ„ urgency ๊ธฐ์ค€์„ ์ผ๋ถ€ ๋ช…์‹œํ•จ
  • order_change -> medium
  • payment_issue -> high

2. route_to๋ฅผ ์ถ”๋ก ์—์„œ ๋งคํ•‘์œผ๋กœ ๋ณ€๊ฒฝ
 
v1

  • ๋ชจ๋ธ์ด intent๋ฅผ ๋ณด๊ณ  ์ ์ ˆํ•œ route_to๋ฅผ ์ถ”๋ก ํ•ด์•ผ ํ–ˆ์Œ
  • ์ฆ‰, intent์™€ route_to์˜ ๊ด€๊ณ„๊ฐ€ ํ”„๋กฌํ”„ํŠธ์— ๊ฐ„์ ‘์ ์œผ๋กœ ๋“œ๋Ÿฌ๋‚จ

v2

  • intent์™€ route_to ๊ด€๊ณ„๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋งคํ•‘ ํ˜•ํƒœ๋กœ ์ œ์‹œํ•จ
  • order_change -> order_ops
  • payment_issue -> billing_ops

 
3. needs_clarification ๊ธฐ์ค€ ๋ช…์‹œ
 
v1

  • ์–ธ์ œ needs_clarification = true ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ธฐ์ค€์ด ์—†์Œ
  • ๋ชจ๋ธ์ด ์• ๋งคํ•œ ์ƒํ™ฉ์„ ์ผ๊ด€๋˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์›€

v2

  • clarification์ด ํ•„์š”ํ•œ ๋Œ€ํ‘œ ์ƒํ™ฉ์„ ๋ช…์‹œ
  • ํ™˜๋ถˆ์ธ์ง€ ๊ตํ™˜์ธ์ง€ ๋ถˆ๋ช…ํ™•ํ•œ ๊ฒฝ์šฐ -> true
  • ์ฃผ๋ฌธ ๋ฌธ์ œ์ธ์ง€ ๊ฒฐ์ œ ๋ฌธ์ œ์ธ์ง€ ๋ถˆ๋ช…ํ™•ํ•œ ๊ฒฝ์šฐ -> true

์ •๋ฆฌ :
 
v2์˜ ํ•ต์‹ฌ์€ ๋ชจ๋ธ์ด ์ž์œ ๋กญ๊ฒŒ ์ถ”๋ก ํ•˜๋˜ ๋ถ€๋ถ„์„ ์ค„์ด๊ณ , ๋ช…์‹œ์ ์ธ ๊ทœ์น™๊ณผ ๋งคํ•‘์„ ์ถ”๊ฐ€ํ•ด ์ถœ๋ ฅ์˜ ์ผ๊ด€์„ฑ๊ณผ ์ •ํ™•๋„๋ฅผ ๋†’์ธ ๊ฒƒ์ด๋‹ค.
 
 

5. ๊ฒฐ๊ณผ ๋น„๊ต
 

v1

 

v2

  1.  

 
๋น„๊ต ์š”์•ฝ

  • ํŒŒ์‹ฑ ์„ฑ๊ณต๋ฅ  : v1 66.7% -> v2 100.0%
  • exact match : v1 6๊ฐœ -> v2 9๊ฐœ

 

6. ์ƒ์„ธ ์ฝ”๋“œ
 

ํ…Œ์ŠคํŠธ ๊นƒํ—ˆ๋ธŒ ์ฃผ์†Œ

https://github.com/jasonpark112/aiagent-repo/tree/jasonpark112/week-1/jasonpark112

 

aiagent-repo/week-1/jasonpark112 at jasonpark112 · jasonpark112/aiagent-repo

Contribute to jasonpark112/aiagent-repo development by creating an account on GitHub.

github.com

 

 


3. LLM ๋™์ž‘ ์›๋ฆฌ์™€ ๋น„์šฉ์„ ์ค„์ด๋Š” ๋ฒ•

https://platform.claude.com/docs/en/build-with-claude/context-windows?ref=blog.aibox.today

 

LLM ๋™์ž‘ ์›๋ฆฌ

  1. ์ด์ „ ๋Œ€ํ™” + ํ˜„์žฌ ์ž…๋ ฅ์„ ๋ชจ๋‘ LLM์— ๋„ฃ์Œ
  2. ๊ทธ๊ฑธ ๊ธฐ๋ฐ˜์œผ๋กœ ์‘๋‹ต ์ƒ์„ฑ
  3. LLM์€ ์ด๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š์•„์„œ ๋งค๋ฒˆ ์‹œ์Šคํ…œ์—์„œ ์ด์ „ ์ž…๋ ฅ์„ ์ €์žฅํ•ด๋’€๋‹ค๊ฐ€ ์ž…๋ ฅ๊ฐ’๊ณผ ์ „๋ถ€ ๋‹ค์‹œ ๋„ฃ์–ด์คŒ

์ด๋Ÿฌํ•œ LLM ๋™์ž‘ ์›๋ฆฌ ๋ฌธ์ œ์ 

  • ๋Œ€ํ™” ๊ธธ์–ด์งˆ์ˆ˜๋ก ํ† ํฐ ์ฆ๊ฐ€
  • ์ปจํ…์ŠคํŠธ ์ œํ•œ ์กด์žฌ

ํ•ด๊ฒฐ

  • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์กฐํ™” (Structured Output)์ด ํ•„์š”ํ•˜๋‹ค.
  • ๊ตฌ์กฐํ™”๋ฅผ ํ†ตํ•ด
    • ๋ถˆํ•„์š”ํ•œ ํ† ํฐ ๊ฐ์†Œ
    • ์ค‘๋ณต ์ •๋ณด ์ œ๊ฑฐ
    • ๋ถˆ์•ˆ์ •ํ•œ ์‘๋‹ต ์ œ๊ฑฐ

๊ฒฐ๋ก 
 

LLM์€ ๊ธฐ์–ต์ด ์•„๋‹ˆ๋ผ ์ž…๋ ฅ ๋ˆ„์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด์ „ ๋Œ€ํ™”๋ฅผ ๊ณ„์† ํฌํ•จํ• ์ˆ˜๋ก ํ† ํฐ์ด ์ฆ๊ฐ€ํ•˜๊ณ  ์ปจํ…์ŠคํŠธ ํ•œ๊ณ„์— ๋„๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์กฐํ™”(Structured Output)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋Œ€ํ™”๋ฅผ ์ƒํƒœ(state)๋กœ ์••์ถ•ํ•˜๊ณ , ๋ถˆํ•„์š”ํ•œ ํ† ํฐ์„ ์ œ๊ฑฐํ•˜๋ฉฐ ํ•ต์‹ฌ ์ •๋ณด๋งŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๊ณ , ์‘๋‹ต์˜ ์ผ๊ด€์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ, ํŒ๋‹จ ๊ธฐ์ค€์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ•œ ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ์€ ๋ชจ๋ธ์˜ ์ •ํ™•๋„๋ฅผ ๋†’์ด๊ณ , ํ”„๋กฌํ”„ํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ๋น„์šฉ(ํ† ํฐ)๊ณผ ์‘๋‹ต ์‹œ๊ฐ„ ๋ชจ๋‘๋ฅผ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋Œ“๊ธ€