ai agent ๊ตฌํํ๊ธฐ: โ์ค์ค๋ก ์ผํ๋โ ๊ฐ๋ฐ ํํธ๋ ๋ง๋ค๊ธฐ
ai agent ๊ตฌํํ๊ธฐ: โ์ค์ค๋ก ์ผํ๋โ ๊ฐ๋ฐ ํํธ๋ ๋ง๋ค๊ธฐ ์์ฆ ๊ฐ๋ฐ ํ์ฅ์์ ์์ฃผ ๋ฃ๋ ๋ง์ด ์์ต๋๋ค. โ๊ทธ๊ฑฐ ์์ด์ ํธ๋ก ๋๋ฆฌ๋ฉด ๋...
ai agent ๊ตฌํํ๊ธฐ: โ์ค์ค๋ก ์ผํ๋โ ๊ฐ๋ฐ ํํธ๋ ๋ง๋ค๊ธฐ
์์ฆ ๊ฐ๋ฐ ํ์ฅ์์ ์์ฃผ ๋ฃ๋ ๋ง์ด ์์ต๋๋ค. โ๊ทธ๊ฑฐ ์์ด์ ํธ๋ก ๋๋ฆฌ๋ฉด ๋์ง ์์๊น?โ ๋จ์ ์ฑ๋ด์ ๋์ด, ๋ชฉํ๋ฅผ ์ฃผ๋ฉด ์ค์ค๋ก ๊ณํํ๊ณ ๋๊ตฌ๋ฅผ ์จ์ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋๋ ํ๋ก๊ทธ๋จ์ด ๋ฐ๋ก AI Agent์ ๋๋ค. ์ด๋ฒ ๊ธ์์๋ โ๋ฉ์์ด ๋ณด์ด๋๊นโ๊ฐ ์๋๋ผ, ์ค์ ๋ก ๊ตฌํ ๊ฐ๋ฅํ ๊ตฌ์กฐ์ ์ฝ๋๋ก ai agent๋ฅผ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
ai agent๋ ๋ฌด์์ธ๊ฐ
ai agent๋ ํฌ๊ฒ 4๊ฐ์ง ์์๋ก ์ค๋ช ํ๋ฉด ์ดํด๊ฐ ๋นจ๋ผ์ง๋๋ค.
- Goal(๋ชฉํ): ์ฌ์ฉ์๊ฐ ์ํ๋ ๊ฒฐ๊ณผ(์: โ์๋ฌ ์์ธ ์ฐพ์์ ์์ ์ ์ ์โ)
- Planner(๊ณํ): ๋ชฉํ๋ฅผ ์์ ๋จ์๋ก ์ชผ๊ฐ๋ ๋จ๊ณ
- Tools(๋๊ตฌ): ํ์ผ ์ฝ๊ธฐ/์ฐ๊ธฐ, ๊ฒ์(๋ด๋ถ), ์คํ, DB ์กฐํ ๋ฑ
- Memory(๊ธฐ์ต): ์์ ๋งฅ๋ฝ, ์ค๊ฐ ๊ฒฐ๊ณผ, ๊ฒฐ์ ์ด์ ๋ฅผ ์ ์ฅ ์ฆ, โ๋ํโ๊ฐ ์ค์ฌ์ธ ์ฑ๋ด๊ณผ ๋ฌ๋ฆฌ, ์์ด์ ํธ๋ ํ๋(action)์ด ์ค์ฌ์ ๋๋ค.
๊ตฌํ ์ ๋ต: ์๊ฒ ๋ง๋ค๊ณ , ์ ์ ํค์ฐ๊ธฐ
์ฒ์๋ถํฐ ๋ณต์กํ ํ๋ ์์ํฌ๋ฅผ ๋ถ์ด๋ฉด ๋๋ฒ๊น ์ด ์ด๋ ต์ต๋๋ค. ์ ๋ ๋ค์ ์์๋ก ์ถ์ฒํฉ๋๋ค.
- ๋จ์ผ ๋ฃจํ ์์ด์ ํธ(๊ณํโํ๋โ๊ด์ฐฐโ๊ฐฑ์ )๋ถํฐ
- ๋๊ตฌ๋ฅผ 2~3๊ฐ๋ง ๋ถ์ฌ์ ์ฑ๊ณต ๊ฒฝํ ํ๋ณด
- ๋ง์ง๋ง์ ๋ฉ๋ชจ๋ฆฌ/๊ฐ๋๋ ์ผ/์ฌ์๋ ์ ์ฑ ์ถ๊ฐ
์์ด์ ํธ์ ๊ธฐ๋ณธ ๋ฃจํ(ํต์ฌ)
- Think: ์ง๊ธ ์ํฉ์์ ๋ญ ํด์ผ ํ์ง?
- Act: ๋๊ตฌ๋ฅผ ํธ์ถํ์
- Observe: ๊ฒฐ๊ณผ๋ฅผ ์ฝ์
- Update: ๋ค์ ํ๋์ ๊ฒฐ์ ํ์ ์ด ๋ฃจํ๋ฅผ ๋ช ์์ ์ผ๋ก ์ฝ๋๋ก ๋ฐ์๋๋ฉด ์ด์์ด ์ฌ์์ง๋๋ค.
์ค์ฉ ์์ : โ๊ฐ๋ฐ ์์ โ ๋์์ฃผ๋ ๋ฏธ๋ ์์ด์ ํธ
์ฌ๊ธฐ์๋ ์์ ์ง์์(Goal)๋ฅผ ์ ๋ ฅํ๋ฉด,
- ํ ์ผ์ ์ฒดํฌ๋ฆฌ์คํธ๋ก ๋ง๋ค๊ณ
- ํ์ํ ํ์ผ์ ์ฝ๊ณ
- ์์ฝ/์์ ์ ์์ ๋ง๋๋ ํํ๋ก ๊ตฌ์ฑํด๋ณด๊ฒ ์ต๋๋ค.
Python ์ฝ๋: ๋๊ตฌ ๊ธฐ๋ฐ ai agent ๋ผ๋
์๋ ์ฝ๋๋ โLLM์ด ๋๊ตฌ ํธ์ถ์ ๊ฒฐ์ ํ๋คโ๊น์ง๋ ๋จ์ํํ๊ณ , ๋์ ๊ฐ๋ฐ์๊ฐ ์ด์ ๊ฐ๋ฅํ ๊ตฌ์กฐ์ ์ง์คํ ์์์ ๋๋ค.
from dataclasses import dataclass, field
from typing import Callable, Dict, Any, List
import json
import os
# ---- Tools ----
def read_file(path: str) -> str:
with open(path, "r", encoding="utf-8") as f:
return f.read()
def write_file(path: str, content: str) -> str:
os.makedirs(os.path.dirname(path) or ".", exist_ok=True)
with open(path, "w", encoding="utf-8") as f:
f.write(content)
return f"WROTE: {path} ({len(content)} chars)"
def make_checklist(goal: str) -> str:
items = [
"์๊ตฌ์ฌํญ/์ ์ฝ์ฌํญ ์ ๋ฆฌ",
"ํ์ฌ ์ฝ๋/๋ฐ์ดํฐ ์ํ ํ์ธ",
"๋ณ๊ฒฝ ๋ฒ์ ์ฐ์ ",
"์์ ์/ํ
์คํธ ์๋๋ฆฌ์ค ์์ฑ",
]
return "GOAL: " + goal + "\n" + .join([ i items])
TOOLS: [, [..., ]] = {
: read_file,
: write_file,
: make_checklist,
}
:
goal:
notes: [] = field(default_factory=)
last_observation: =
:
():
.tools = tools
() -> [[, ]]:
[
{: , : {: state.goal}},
]
() -> :
tool_name = step[]
args = step.get(, {})
tool_name .tools:
.tools[tool_name](**args)
() -> AgentState:
state = AgentState(goal=goal)
steps = .plan(state)
step steps:
obs = .act(step)
state.last_observation = obs
state.notes.append()
state.notes.append()
state
__name__ == :
agent = SimpleAgent(TOOLS)
result = agent.run()
(result.last_observation)
์ด ์ฝ๋๊ฐ ์ค์ ๋ก ์ ์ฉํ ์ด์
- ๋๊ตฌ๊ฐ ๋ช ํํฉ๋๋ค: read_file, write_file์ฒ๋ผ ๊ฐ๋ฐ์์ ์์ฃผ ์ฐ๋ ์ก์ ์ด ๋ฐ๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
- ์ํ๊ฐ ๋จ์ต๋๋ค: notes์ ๋ฌด์จ ํ๋์ ํ๊ณ ๋ฌด์์ ๊ด์ฐฐํ๋์ง ์์ฌ์, ๋์ค์ ๋ฌธ์ ์ฌํ์ด ์ฝ์ต๋๋ค.
- ํ์ฅ์ด ์ฝ์ต๋๋ค: ๋ค์ ๋จ๊ณ๋ก run_tests, grep, db_query ๊ฐ์ ๋๊ตฌ๋ฅผ ์ถ๊ฐํ๋ฉด ์ ๋ฌด ์๋ํ์ ๊ฐ๊น์์ง๋๋ค.
์ฌ๋ก: โ๋ฒ๊ทธ ํธ๋ฆฌ์์งโ ์์ด์ ํธ๋ก ํ์ฅํ๊ธฐ
์ค๋ฌด์์ ์์ฃผ ๋จนํ๋ ํจํด์ ๋ค์์ ๋๋ค.
- ์ฌ์ฉ์๊ฐ โ์๋ฌ ๋ก๊ทธโ๋ฅผ ๋ถ์ฌ๋ฃ๋๋ค
- ์์ด์ ํธ๊ฐ ์ฌํ ์กฐ๊ฑด/์์ฌ ์ง์ /ํ์ธํ ํ์ผ ๋ชฉ๋ก์ ๋ง๋ ๋ค
- ์ ์ฅ์์์ ๊ด๋ จ ํ์ผ์ ์ฝ์ด ์์ฝํ๋ค
- ๋ณ๊ฒฝ ์ ์ + ํ ์คํธ ์๋๋ฆฌ์ค๋ฅผ ๋ฌธ์๋ก ๋จ๊ธด๋ค ์ฌ๊ธฐ์ ํต์ฌ์ ๋๊ตฌ ํธ์ถ์ ์์ ์ฅ์น์ ๋๋ค. ์๋ฅผ ๋ค์ด ํ์ผ ์ฐ๊ธฐ๋ โ์ด์ ์์ฑโ๊น์ง๋ง ํ์ฉํ๊ณ , ์ค์ ์ปค๋ฐ์ ์ฌ๋์ด ํ๊ฒ ํ๋ ์์ผ๋ก์.
๊ตฌํํ ๋ ์์ฃผ ๋งํ๋ ํฌ์ธํธ 3๊ฐ์ง
1) ๋๊ตฌ ์ ๋ ฅ ํ์์ด ์ ๊ฐ๊ฐ์ด๋ผ ๊ด๋ฆฌ๊ฐ ์ด๋ ต๋ค
๋๊ตฌ๋ ๊ฐ๋ฅํ๋ฉด ํจ์ ์๊ทธ๋์ฒ๋ฅผ ๋จ์ํ๊ฒ ์ ์งํ์ธ์. str -> str ํํ๊ฐ ์์ํ๊ธฐ ์ข์ต๋๋ค.
2) ์์ด์ ํธ๊ฐ ์ธ๋ฐ์์ด ์ฅํฉํด์ง๋ค
์ถ๋ ฅ ํ์์ ๊ฐ์ ํ๋ฉด ๊ฐ์ ๋ฉ๋๋ค. ์:
- โ์์ฝ 5์ค + ์ก์ ์์ดํ 5๊ฐ + ๋ฆฌ์คํฌ 3๊ฐโ์ฒ๋ผ ํ ํ๋ฆฟ์ ๋ก๋๋ค.
3) ํ ๋ฒ ์คํจํ๋ฉด ๋๋๋ค
์ฌ์๋ ์ ์ฑ ์ ๋ฃ์ผ์ธ์.
- ๋๊ตฌ ํธ์ถ ์คํจ ์ 1~2ํ ์ฌ์๋
- ๊ทธ๋๋ ์คํจํ๋ฉด โ๋์ ํ๋โ์ผ๋ก ์ ํ(์: ํ์ผ ์ฝ๊ธฐ ์คํจ โ ์ฌ์ฉ์์๊ฒ ๊ฒฝ๋ก ํ์ธ ์ง๋ฌธ)
๋ง๋ฌด๋ฆฌ: ai agent๋ โ๊ตฌ์กฐโ๊ฐ ๋ฐ์ด๋ค
ai agent ๊ตฌํ์ ๊ฑฐ์ฐฝํ ๋ง๋ฒ์ด๋ผ๊ธฐ๋ณด๋ค, ๋ชฉํ-๊ณํ-๋๊ตฌ-๊ธฐ์ต์ ๊ฐ๋ฐ ์นํ์ ์ผ๋ก ์ฎ๋ ์์ ์ ๋๋ค. ์ค๋ ์๊ฐํ ๋ผ๋๋ง ์ก์๋ โ์ฒดํฌ๋ฆฌ์คํธ ์์ฑโ, โ์ฝ๋ ์์ฝโ, โ์์ ์ ์ด์ ์์ฑโ ๊ฐ์ ๊ฐ๋ฐ ์ ๋ฌด๊ฐ ๋น ๋ฅด๊ฒ ์๋ํ๋ฉ๋๋ค.
์ํ์๋ฉด ๋ค์ ๋จ๊ณ๋ก,
- ์ฌ๋ฌ ๋๊ตฌ๋ฅผ ์ ํํ๋๋ก ๊ฐ๋จํ ๋ผ์ฐํฐ ๋ถ์ด๊ธฐ
- ์์ ๊ธฐ๋ก์ ํ์ผ๋ก ๋จ๊ธฐ๋ ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ์ ์ถ๊ฐ
- โ๋ฏผ๊ฐ ํ์ผ ์ ๊ทผ ๊ธ์งโ ๊ฐ์ ๊ฐ๋๋ ์ผ ์ค๊ณ ๊น์ง ์ด์ด์ ์ ๋ฆฌํด๋๋ฆด๊ฒ์.
โฌ๏ธ ์ด ๊ธ์ด ๋์์ด ๋์ จ๋ค๋ฉด, ์๋ ๊ด๊ณ ๋ฅผ ํ ๋ฒ๋ง ํด๋ฆญํด์ฃผ์ธ์! ์ ์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค ๐โโ๏ธ โฌ๏ธ