[Daily morning study] AI Agent์ Tool Use ๊ฐ๋
#daily morning study
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-cache | KV ์บ์ | ์ด์ ํ๋กฌํํธ ์ฌ์ฌ์ฉ |
์ค์๊ฐ์ผ๋ก ์ ๋ณด๋ฅผ ๋์ ํด์ผ ํ๋ ์ฅ๊ธฐ ์ธ์ ์์๋ External ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ทน ํ์ฉํ๋ค.
์์ด์ ํธ ๊ตฌํ ์ ๊ณ ๋ ค์ฌํญ
ํ ๋ฃจ์๋ค์ด์ ๋ฐฉ์ง: ๋๊ตฌ ๊ฒฐ๊ณผ์ ๊ทผ๊ฑฐํด์ ๋ต๋ณํ๋๋ก ๊ฐ์ ํ๊ณ , ๊ทผ๊ฑฐ ์๋ ์ถ๋ก ์ ํ์ง ์๋๋ก ์์คํ ํ๋กฌํํธ๋ก ์ ๋ํ๋ค.
๋ฌดํ ๋ฃจํ ๋ฐฉ์ง: ์ต๋ ์คํ ์(max_iterations)๋ฅผ ์ค์ ํด์ผ ํ๋ค. ๋ชฉํ์ ๋๋ฌํ์ง ๋ชปํ ์ฑ ๊ณ์ ๋๊ตฌ๋ฅผ ํธ์ถํ๋ ์ํฉ์ ๋ง๊ธฐ ์ํด์๋ค.
๋๊ตฌ ์ค๋ฅ ์ฒ๋ฆฌ: ๋๊ตฌ ํธ์ถ์ด ์คํจํ์ ๋ ์์ด์ ํธ๊ฐ ์ฌ์๋ ๋๋ ๋์์ ์ ํํ ์ ์๋๋ก ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ช ํํ ์ ๋ฌํด์ผ ํ๋ค.
๋น์ฉ ๋ฐ ๋ ์ดํด์: ๋๊ตฌ ํธ์ถ๋ง๋ค LLM API ์์ฒญ์ด ๋ฐ์ํ๋ค. ๋ณ๋ ฌ ํธ์ถ ๊ฐ๋ฅํ ๋๊ตฌ๋ ๋์์ ์คํํด์ ์๋ณต ํ์๋ฅผ ์ค์ด๋ ๊ฒ ์ค์ํ๋ค.
์ค์ ์ฌ๋ก
- ์ฝ๋ ์์ด์ ํธ: ์ฌ์ฉ์๊ฐ โ์ด CSV ํ์ผ ๋ถ์ํด์คโ๋ผ๊ณ ํ๋ฉด, ์์ด์ ํธ๊ฐ ํ์ผ ์ฝ๊ธฐ โ ์ฝ๋ ์์ฑ โ ์คํ โ ๊ฒฐ๊ณผ ํด์์ ์ ๊ณผ์ ์ ์์จ์ ์ผ๋ก ์ฒ๋ฆฌ.
- ๋ฆฌ์์น ์์ด์ ํธ: ๋ ผ๋ฌธ ์ฃผ์ ๋ฅผ ์ฃผ๋ฉด, ์น ๊ฒ์ โ ๋ฌธ์ ์์ฝ โ ๋น๊ต ๋ถ์ โ ๋ณด๊ณ ์ ์์ฑ ํ๋ฆ์ ์๋ํ.
- ๊ณ ๊ฐ ์ง์ ์์ด์ ํธ: ์ฃผ๋ฌธ ์กฐํ, ํ๋ถ ์ฒ๋ฆฌ, FAQ ๊ฒ์ ๋ฑ์ ๋๊ตฌ๋ฅผ ๊ฐ์ถ๊ณ ๊ณ ๊ฐ ์์ฒญ์ ์์จ ์ฒ๋ฆฌ.
์ ๋ฆฌ
- AI Agent = LLM + ๋๊ตฌ ํธ์ถ + ๋ฐ๋ณต์ ์ถ๋ก ๋ฃจํ
- Tool Use๋ LLM์ด ๊ตฌ์กฐํ๋ ์ถ๋ ฅ์ผ๋ก ์ธ๋ถ ํจ์๋ฅผ ํธ์ถํ๋ ๋ฉ์ปค๋์ฆ
- ReAct ํจํด์ผ๋ก ์ถ๋ก (Thought) โ ํ๋(Action) โ ๊ด์ฐฐ(Observation)์ ๋ฐ๋ณต
- ๋ณต์กํ ํ์คํฌ๋ ๋ฉํฐ ์์ด์ ํธ๋ก ๋ถ์ฐ ์ฒ๋ฆฌ
- ๋ฌดํ ๋ฃจํ, ํ ๋ฃจ์๋ค์ด์ , ๋น์ฉ ๊ด๋ฆฌ๊ฐ ์ค์ ๊ตฌํ์ ํต์ฌ ๊ณผ์