[1์ฃผ์ฐจ] LLM ํธ์ถ์ ํ ์คํธํ๊ณ ์ดํดํ๊ธฐ
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) ๊ตฌํ ์๊ตฌ ์ฌํญ
ํ์
- SDK๋ฅผ ์ฌ์ฉํด LLM์ ์ง์ ํธ์ถํ ๊ฒ
- system ๋ฉ์์ง์ user ๋ฉ์์ง๋ฅผ ๋ถ๋ฆฌํ ๊ฒ
- model, temperature, max_tokens ๋ฅผ ์ฝ๋์ ๋ช ์ํ ๊ฒ
- prompt v1, prompt v2 ๋ ๋ฒ์ ์ ์คํํ ๊ฒ
- ์๋ต์ JSON์ผ๋ก ํ์ฑํ๊ณ ์ฝ๋์์ ๊ฒ์ฆํ ๊ฒ
- 12๊ฑด ์ ์ฒด์ ๋ํด ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ๊ฒ
- v1๊ณผ v2์ ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํ ์งง์ ๋ฆฌํฌํธ๋ฅผ ์์ฑํ ๊ฒ
- 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 ๋ฐฉ์์ผ๋ก ์งํ
- ํ๋ฅด์๋์ ๋ฉํ์ธ์ง, 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

๋น๊ต ์์ฝ
- ํ์ฑ ์ฑ๊ณต๋ฅ : 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 ๋์ ์๋ฆฌ์ ๋น์ฉ์ ์ค์ด๋ ๋ฒ

LLM ๋์ ์๋ฆฌ
- ์ด์ ๋ํ + ํ์ฌ ์ ๋ ฅ์ ๋ชจ๋ LLM์ ๋ฃ์
- ๊ทธ๊ฑธ ๊ธฐ๋ฐ์ผ๋ก ์๋ต ์์ฑ
- LLM์ ์ด๋ฅผ ๊ธฐ์ตํ์ง ์์์ ๋งค๋ฒ ์์คํ ์์ ์ด์ ์ ๋ ฅ์ ์ ์ฅํด๋๋ค๊ฐ ์ ๋ ฅ๊ฐ๊ณผ ์ ๋ถ ๋ค์ ๋ฃ์ด์ค
์ด๋ฌํ LLM ๋์ ์๋ฆฌ ๋ฌธ์ ์
- ๋ํ ๊ธธ์ด์ง์๋ก ํ ํฐ ์ฆ๊ฐ
- ์ปจํ ์คํธ ์ ํ ์กด์ฌ
ํด๊ฒฐ
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ตฌ์กฐํ (Structured Output)์ด ํ์ํ๋ค.
- ๊ตฌ์กฐํ๋ฅผ ํตํด
- ๋ถํ์ํ ํ ํฐ ๊ฐ์
- ์ค๋ณต ์ ๋ณด ์ ๊ฑฐ
- ๋ถ์์ ํ ์๋ต ์ ๊ฑฐ
๊ฒฐ๋ก
LLM์ ๊ธฐ์ต์ด ์๋๋ผ ์
๋ ฅ ๋์ ์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์, ์ด์ ๋ํ๋ฅผ ๊ณ์ ํฌํจํ ์๋ก ํ ํฐ์ด ์ฆ๊ฐํ๊ณ ์ปจํ
์คํธ ํ๊ณ์ ๋๋ฌํ๊ฒ ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ตฌ์กฐํ(Structured Output)๋ฅผ ํ์ฉํ์ฌ ๋ํ๋ฅผ ์ํ(state)๋ก ์์ถํ๊ณ , ๋ถํ์ํ ํ ํฐ์ ์ ๊ฑฐํ๋ฉฐ ํต์ฌ ์ ๋ณด๋ง ์ ์งํ๋ ๊ฒ์ด ์ค์ํ๋ค.
์ด๋ฅผ ํตํด ํ ํฐ ์ฌ์ฉ๋์ ์ค์ด๊ณ , ์๋ต์ ์ผ๊ด์ฑ๊ณผ ์์ ์ฑ์ ํ๋ณดํ ์ ์๋ค.
๋ํ, ํ๋จ ๊ธฐ์ค์ ๋ช
ํํ ์ ์ํ ๊ตฌ์กฐํ๋ ์ถ๋ ฅ์ ๋ชจ๋ธ์ ์ ํ๋๋ฅผ ๋์ด๊ณ , ํ๋กฌํํธ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ค๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๋น์ฉ(ํ ํฐ)๊ณผ ์๋ต ์๊ฐ ๋ชจ๋๋ฅผ ์ต์ ํํ ์ ์๋ค.
'AI > AI agent' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [3์ฃผ์ฐจ] RAG์ ๊ตฌ์ฑ ์์์ ์ค์ต (0) | 2026.04.05 |
|---|---|
| [2์ฃผ์ฐจ] ํ๋กฌํํธ ์์ง๋์ด๋ง ๊ธฐ๋ฒ ์กฐ์ฌ ๋ฐ ์ค์ต (2) | 2026.03.29 |
๋๊ธ