[Daily morning study] AI Agent์™€ Tool Use ๊ฐœ๋…

#daily morning study

Image


AI Agent๋ž€

AI Agent๋Š” ๋‹จ์ˆœํžˆ ์งˆ๋ฌธ์— ๋‹ตํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด์„œ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์Šค์Šค๋กœ ํ–‰๋™์„ ๊ณ„ํšํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์‹œ์Šคํ…œ์ด๋‹ค. ์‚ฌ์šฉ์ž์˜ ๊ณ ์ˆ˜์ค€ ๋ชฉํ‘œ๋ฅผ ๋ฐ›์•„ ์ด๋ฅผ ์—ฌ๋Ÿฌ ํ•˜์œ„ ํƒœ์Šคํฌ๋กœ ๋ถ„ํ•ดํ•˜๊ณ , ํ•„์š”ํ•œ ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ค์Œ ํ–‰๋™์„ ๊ฒฐ์ •ํ•œ๋‹ค.

LLM(Large Language Model)์„ ์—์ด์ „ํŠธ์˜ โ€œ๋‘๋‡Œโ€๋กœ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด ์ผ๋ฐ˜์ ์ด๋ฉฐ, ๋ชจ๋ธ์ด ์–ด๋–ค ๋„๊ตฌ๋ฅผ ์–ธ์ œ ์“ธ์ง€ ํŒ๋‹จํ•œ๋‹ค.


ReAct ํŒจํ„ด

์—์ด์ „ํŠธ์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋™์ž‘ ํŒจํ„ด์€ ReAct(Reasoning + Acting)๋‹ค.

Thought: ํ˜„์žฌ ์ƒํ™ฉ์„ ๋ถ„์„ํ•˜๊ณ  ๋ฌด์—‡์„ ํ•ด์•ผ ํ• ์ง€ ์ถ”๋ก 
Action: ๋„๊ตฌ ํ˜ธ์ถœ (์–ด๋–ค ๋„๊ตฌ๋ฅผ, ์–ด๋–ค ์ธ์ž๋กœ)
Observation: ๋„๊ตฌ ํ˜ธ์ถœ ๊ฒฐ๊ณผ ํ™•์ธ
Thought: ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ค์‹œ ์ถ”๋ก 
Action: ๋‹ค์Œ ํ–‰๋™ ๊ฒฐ์ •
...
Final Answer: ์ตœ์ข… ๋‹ต๋ณ€ ๋„์ถœ

์ด ๋ฃจํ”„๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ์—์ด์ „ํŠธ๋Š” ๋ณต์žกํ•œ ํƒœ์Šคํฌ๋ฅผ ๋‹จ๊ณ„์ ์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค.


Tool Use (Function Calling)

Tool Use๋Š” LLM์ด ์™ธ๋ถ€ ํ•จ์ˆ˜๋‚˜ API๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ๋ชจ๋ธ์€ ํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹ , ํŠน์ • ํ˜•์‹์˜ ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ์„ ๋ฑ‰์–ด์„œ ์–ด๋–ค ๋„๊ตฌ๋ฅผ ์–ด๋–ค ์ธ์ž๋กœ ํ˜ธ์ถœํ• ์ง€ ํ‘œํ˜„ํ•œ๋‹ค.

๋™์ž‘ ํ๋ฆ„

1. ์‚ฌ์šฉ์ž ๋ฉ”์‹œ์ง€ + ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ ๋ชฉ๋ก โ†’ LLM
2. LLM โ†’ tool_call ์‘๋‹ต (๋„๊ตฌ ์ด๋ฆ„ + ์ธ์ž)
3. ๋Ÿฐํƒ€์ž„์ด ์‹ค์ œ ํ•จ์ˆ˜ ์‹คํ–‰
4. ์‹คํ–‰ ๊ฒฐ๊ณผ โ†’ LLM์— ๋‹ค์‹œ ์ „๋‹ฌ
5. LLM โ†’ ์ตœ์ข… ์‘๋‹ต ์ƒ์„ฑ

์˜ˆ์‹œ (OpenAI / Anthropic ์Šคํƒ€์ผ)

๋„๊ตฌ ์ •์˜:

{
  "name": "get_weather",
  "description": "ํŠน์ • ๋„์‹œ์˜ ํ˜„์žฌ ๋‚ ์”จ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค",
  "parameters": {
    "type": "object",
    "properties": {
      "city": {
        "type": "string",
        "description": "๋‚ ์”จ๋ฅผ ์กฐํšŒํ•  ๋„์‹œ ์ด๋ฆ„"
      }
    },
    "required": ["city"]
  }
}

LLM์˜ ์‘๋‹ต:

{
  "type": "tool_use",
  "name": "get_weather",
  "input": { "city": "Seoul" }
}

์‹ค์ œ๋กœ get_weather("Seoul")์„ ์‹คํ–‰ํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ๋ชจ๋ธ์— ๋„˜๊ธฐ๋ฉด ๋ชจ๋ธ์ด ์ž์—ฐ์–ด๋กœ ์ตœ์ข… ๋‹ต๋ณ€์„ ๋งŒ๋“ ๋‹ค.


์ฃผ์š” ๋„๊ตฌ ์œ ํ˜•

์œ ํ˜•์˜ˆ์‹œ
๊ฒ€์ƒ‰์›น ๊ฒ€์ƒ‰, ๋ฒกํ„ฐ DB ๊ฒ€์ƒ‰, ๋ฌธ์„œ ๊ฒ€์ƒ‰
์ฝ”๋“œ ์‹คํ–‰Python ์ธํ„ฐํ”„๋ฆฌํ„ฐ, SQL ์‹คํ–‰
์™ธ๋ถ€ API๋‚ ์”จ API, ๊ฒฐ์ œ API, ์บ˜๋ฆฐ๋” API
ํŒŒ์ผ I/OํŒŒ์ผ ์ฝ๊ธฐ/์“ฐ๊ธฐ, ์Šคํฌ๋ฆฐ์ƒท ์บก์ฒ˜
๋‹ค๋ฅธ ์—์ด์ „ํŠธ์„œ๋ธŒ ์—์ด์ „ํŠธ ํ˜ธ์ถœ (๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ)

์‹ฑ๊ธ€ ์—์ด์ „ํŠธ vs ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ

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

๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ๋Š” ์—ฌ๋Ÿฌ ์—์ด์ „ํŠธ๊ฐ€ ์—ญํ• ์„ ๋‚˜๋ˆ  ํ˜‘์—…ํ•˜๋Š” ๊ตฌ์กฐ๋‹ค. ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ ์—์ด์ „ํŠธ๊ฐ€ ์ „์ฒด ํ”Œ๋กœ์šฐ๋ฅผ ์กฐ์œจํ•˜๊ณ , ์„œ๋ธŒ ์—์ด์ „ํŠธ๋“ค์ด ํŠนํ™”๋œ ํƒœ์Šคํฌ(๊ฒ€์ƒ‰, ์ฝ”๋“œ ์ž‘์„ฑ, ๊ฒ€์ฆ ๋“ฑ)๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค.

Orchestrator
  โ”œโ”€ Research Agent  (์›น ๊ฒ€์ƒ‰, ๋ฌธ์„œ ์š”์•ฝ)
  โ”œโ”€ Coder Agent     (์ฝ”๋“œ ์ƒ์„ฑ, ์‹คํ–‰)
  โ””โ”€ Critic Agent    (๊ฒฐ๊ณผ ๊ฒ€์ฆ, ํ”ผ๋“œ๋ฐฑ)

๋ณต์žกํ•œ ํƒœ์Šคํฌ๋Š” ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ๋กœ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•˜๋ฉด ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.


์—์ด์ „ํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

์—์ด์ „ํŠธ๋Š” ๋„ค ๊ฐ€์ง€ ๋ฉ”๋ชจ๋ฆฌ ์œ ํ˜•์„ ํ™œ์šฉํ•œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์œ ํ˜•์„ค๋ช…์˜ˆ์‹œ
In-contextํ˜„์žฌ ๋Œ€ํ™”์ฐฝ ๋‚ด ์ •๋ณด์ด๋ฒˆ ์„ธ์…˜ ํžˆ์Šคํ† ๋ฆฌ
External์™ธ๋ถ€ ์ €์žฅ์†Œ์—์„œ ๊ฒ€์ƒ‰๋ฒกํ„ฐ DB, ๊ด€๊ณ„ํ˜• DB
In-weightsํŒŒ์ธํŠœ๋‹์œผ๋กœ ๋‚ด์žฌํ™”๋„๋ฉ”์ธ ํŠนํ™” ์ง€์‹
In-cacheKV ์บ์‹œ์ด์ „ ํ”„๋กฌํ”„ํŠธ ์žฌ์‚ฌ์šฉ

์‹ค์‹œ๊ฐ„์œผ๋กœ ์ •๋ณด๋ฅผ ๋ˆ„์ ํ•ด์•ผ ํ•˜๋Š” ์žฅ๊ธฐ ์„ธ์…˜์—์„œ๋Š” External ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ๊ทน ํ™œ์šฉํ•œ๋‹ค.


์—์ด์ „ํŠธ ๊ตฌํ˜„ ์‹œ ๊ณ ๋ ค์‚ฌํ•ญ

ํ• ๋ฃจ์‹œ๋„ค์ด์…˜ ๋ฐฉ์ง€: ๋„๊ตฌ ๊ฒฐ๊ณผ์— ๊ทผ๊ฑฐํ•ด์„œ ๋‹ต๋ณ€ํ•˜๋„๋ก ๊ฐ•์ œํ•˜๊ณ , ๊ทผ๊ฑฐ ์—†๋Š” ์ถ”๋ก ์€ ํ•˜์ง€ ์•Š๋„๋ก ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๋กœ ์œ ๋„ํ•œ๋‹ค.

๋ฌดํ•œ ๋ฃจํ”„ ๋ฐฉ์ง€: ์ตœ๋Œ€ ์Šคํ… ์ˆ˜(max_iterations)๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค. ๋ชฉํ‘œ์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•œ ์ฑ„ ๊ณ„์† ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ƒํ™ฉ์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ๋‹ค.

๋„๊ตฌ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ: ๋„๊ตฌ ํ˜ธ์ถœ์ด ์‹คํŒจํ–ˆ์„ ๋•Œ ์—์ด์ „ํŠธ๊ฐ€ ์žฌ์‹œ๋„ ๋˜๋Š” ๋Œ€์•ˆ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ช…ํ™•ํžˆ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค.

๋น„์šฉ ๋ฐ ๋ ˆ์ดํ„ด์‹œ: ๋„๊ตฌ ํ˜ธ์ถœ๋งˆ๋‹ค LLM API ์š”์ฒญ์ด ๋ฐœ์ƒํ•œ๋‹ค. ๋ณ‘๋ ฌ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ๋Š” ๋™์‹œ์— ์‹คํ–‰ํ•ด์„œ ์™•๋ณต ํšŸ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๊ฒŒ ์ค‘์š”ํ•˜๋‹ค.


์‹ค์ œ ์‚ฌ๋ก€

  • ์ฝ”๋“œ ์—์ด์ „ํŠธ: ์‚ฌ์šฉ์ž๊ฐ€ โ€œ์ด CSV ํŒŒ์ผ ๋ถ„์„ํ•ด์ค˜โ€๋ผ๊ณ  ํ•˜๋ฉด, ์—์ด์ „ํŠธ๊ฐ€ ํŒŒ์ผ ์ฝ๊ธฐ โ†’ ์ฝ”๋“œ ์ž‘์„ฑ โ†’ ์‹คํ–‰ โ†’ ๊ฒฐ๊ณผ ํ•ด์„์˜ ์ „ ๊ณผ์ •์„ ์ž์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ.
  • ๋ฆฌ์„œ์น˜ ์—์ด์ „ํŠธ: ๋…ผ๋ฌธ ์ฃผ์ œ๋ฅผ ์ฃผ๋ฉด, ์›น ๊ฒ€์ƒ‰ โ†’ ๋ฌธ์„œ ์š”์•ฝ โ†’ ๋น„๊ต ๋ถ„์„ โ†’ ๋ณด๊ณ ์„œ ์ž‘์„ฑ ํ๋ฆ„์„ ์ž๋™ํ™”.
  • ๊ณ ๊ฐ ์ง€์› ์—์ด์ „ํŠธ: ์ฃผ๋ฌธ ์กฐํšŒ, ํ™˜๋ถˆ ์ฒ˜๋ฆฌ, FAQ ๊ฒ€์ƒ‰ ๋“ฑ์˜ ๋„๊ตฌ๋ฅผ ๊ฐ–์ถ”๊ณ  ๊ณ ๊ฐ ์š”์ฒญ์„ ์ž์œจ ์ฒ˜๋ฆฌ.

์ •๋ฆฌ

  • AI Agent = LLM + ๋„๊ตฌ ํ˜ธ์ถœ + ๋ฐ˜๋ณต์  ์ถ”๋ก  ๋ฃจํ”„
  • Tool Use๋Š” LLM์ด ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ์œผ๋กœ ์™ธ๋ถ€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜
  • ReAct ํŒจํ„ด์œผ๋กœ ์ถ”๋ก (Thought) โ†’ ํ–‰๋™(Action) โ†’ ๊ด€์ฐฐ(Observation)์„ ๋ฐ˜๋ณต
  • ๋ณต์žกํ•œ ํƒœ์Šคํฌ๋Š” ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ๋กœ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ
  • ๋ฌดํ•œ ๋ฃจํ”„, ํ• ๋ฃจ์‹œ๋„ค์ด์…˜, ๋น„์šฉ ๊ด€๋ฆฌ๊ฐ€ ์‹ค์ „ ๊ตฌํ˜„์˜ ํ•ต์‹ฌ ๊ณผ์ œ