- CLI-based Tool Calling์ ๋จ์ผ
run(command="...")๋๊ตฌ๋ก Unix ๋ช ๋ น์ด๋ฅผ ์คํํด agent์ ์ธ๋ถ ์์ ์ ์ํํ๋ ํจํด - ํจ์ ์นดํ๋ก๊ทธ(function calling) ๋์ LLM์ด ์ด๋ฏธ ํ์ตํ Bash ๋ฌธ๋ฒ์ ๊ทธ๋๋ก ํ์ฉํ๋ ๋๊ตฌ ์ธํฐํ์ด์ค
- LLM์ ๋ณธ์ง์ด โํ ์คํธ ํ๊ฒฝ์ ์ด์์(ํฐ๋ฏธ๋ ์คํผ๋ ์ดํฐ)โ๋ผ๋ ๊ด์ฐฐ์์ ์ถ๋ฐํ agent ์ํคํ ์ฒ ์ฒ ํ
- ์ปจํ ์คํธ ์ ๊ฐยท์กฐํฉ์ฑยท์๊ธฐ ๊ธฐ์ ๋ฅ๋ ฅ์ ๋์์ ๋ฌ์ฑํ๋ ๋จ์ํ๋ ๋๊ตฌ ๋ชจ๋ธ
ํด๋น ๊ฐ๋ ์ด ํ์ํ ์ด์
- ํจ์ ์นดํ๋ก๊ทธ ๋ฐฉ์์ ๋งค ํธ์ถ๋ง๋ค N๊ฐ ๋๊ตฌ ์ค ์ ํ์ ์๊ตฌํ์ฌ ํ ํฐยท์ฃผ์๋ ฅ ๋ญ๋น ๋ฐ์
- ๋จ์ ์์ (โ๋ก๊ทธ์์ ERROR ๊ฐ์โ)๋ 3ํธ์ถ(read_file โ search โ count)์ด ํ์ํ ๋นํจ์จ ๊ตฌ์กฐ
- LLM ํ๋ จ ๋ฐ์ดํฐ(GitHub/StackOverflow)์ BashยทCLI ํจํด์ด ์๋์ ์ผ๋ก ๋ง์ ๋ณ๋ ํ์ต ์์ด๋ ๋ฅ์
- ์ ๋ช
๋ น์ด ์ถ๊ฐ ์ ์คํค๋ง ๋ฑ๋ก ์์ด
--help๋ก ์๊ธฐ ๊ธฐ์ ๊ฐ๋ฅ โ ํ์ฅ ๋น์ฉ ์ต์ํ
AS-IS โ Function Calling ์นดํ๋ก๊ทธ
sequenceDiagram autonumber participant A as Agent(LLM) participant T as Tool Catalog A->>T: read_file("/var/log/app.log") T-->>A: ๋ก๊ทธ ์ ์ฒด ํ ์คํธ A->>T: search_text("ERROR") T-->>A: ๋งค์นญ ๋ผ์ธ๋ค A->>T: count_lines() T-->>A: 247 Note over A,T: 3ํธ์ถ, ๋งค๋ฒ ๋๊ตฌ ์ ํ ์ถ๋ก
TO-BE โ CLI ๊ธฐ๋ฐ ๋จ์ผ ๋๊ตฌ
sequenceDiagram autonumber participant A as Agent(LLM) participant R as run() Tool A->>R: run("cat /var/log/app.log | grep ERROR | wc -l") R-->>A: "247\n[exit:0 | 12ms]" Note over A,R: 1ํธ์ถ, Unix ํ์ดํ๋ก ์กฐํฉ
LLM์ ๋ณธ์ง โ โํฐ๋ฏธ๋ ์คํผ๋ ์ดํฐโ
LLM๊ณผ Unix๊ฐ 50๋ ์ ์์ฐจ๋ฅผ ๋๊ณ ๊ฐ์ ์ค๊ณ ๊ฒฐ์ ์ ์๋ ดํ๋ค.
| ์์ญ | Unix (1970s) | LLM (ํ์ฌ) |
|---|---|---|
| ๋ฐ์ดํฐ ํ์ | ๋ชจ๋ ๊ฒ์ ํ ์คํธ ์คํธ๋ฆผ | ๋ชจ๋ ๊ฒ์ ํ ํฐ(ํ ์คํธ) |
| ์กฐํฉ ๋ฐฉ์ | | ํ์ดํ | ํ ์คํธ ์ ์ถ๋ ฅ chaining |
| ์๊ธฐ ๊ธฐ์ | --help, exit code | ๋๊ตฌ ์ค๋ช + ์ถ๋ ฅ ๋ฉํ |
| LLM์ ํ์ต ํ๊ฒฝ | โ | GitHub/StackOverflow ๋ฐ์ดํฐ |
LLM ํ๋ จ ์ฝํผ์ค์ ๋ง๋ํ Bash ๋ช ๋ น์ดยท์๋ฌ ๋ฉ์์งยทexit code ๋ ธ์ถ ๋๋ถ์, CLI ์ฌ์ฉ์ ์ฌ์ค์ โ๊ธฐ๋ณธ๊ธฐโ์ ํด๋นํ๋ค. ์๋ก์ด ํจ์ ์๊ทธ๋์ฒ๋ฅผ ํ์ต์ํค๋ ๋น์ฉ ์์ด ๊ทธ ๋ฅ๋ ฅ์ ๊ทธ๋๋ก ๋์ด ์ฐ๋ ๊ฒ์ด CLI tool calling์ ์ถ๋ฐ์ .
Function Calling vs CLI โ ํธ์ถ ๋น์ฉ ๋น๊ต
| ํญ๋ชฉ | Function Calling | CLI |
|---|---|---|
| ๋๊ตฌ ๋ ธ์ถ ๋ฐฉ์ | ์นดํ๋ก๊ทธ (15+ ํจ์ ์ฌ์ ๋ ธ์ถ) | ๋จ์ผ run() + ๋ช
๋ น์ด ๋ชฉ๋ก |
| ์กฐํฉ ๊ฐ๋ฅ์ฑ | ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ LLM์ด ๋ค์ ๋ฐ์ ๋ค์ ํจ์ ๊ฒฐ์ | | ํ์ดํ๋ก ๋จ์ผ ํธ์ถ ๋ด ์กฐํฉ |
| ์ปจํ ์คํธ ๋น์ฉ | ๋งค ํธ์ถ๋ง๋ค ๋๊ตฌ ์ ํ ํ ํฐ ์๋ชจ | ๋ช ๋ น์ด ์์ฒด๊ฐ ์๋ ํํ |
| ์ ๊ธฐ๋ฅ ์ถ๊ฐ | JSON Schema ์ ์ + ํ๋กฌํํธ ๋ฑ๋ก | ๋ช
๋ น์ด ์ถ๊ฐ, --help๋ก ์๋ ๋ฐ๊ฒฌ |
| LLM ์ฌ์ ์ง์ | ํ์ต ๋ฐ์ดํฐ ๋ถ์กฑ | ํ๋ถ (Bash, Unix ๋ฌธ์) |
| ์คํจ ๋ณต๊ตฌ | ํจ์ ์๊ทธ๋์ฒ ์๋ฌ | exit code + stderr ํ์ค |
4๊ฐ์ง Unix ์ฐ์ฐ์ (Chain Parser)
CLI tool์ ๋จ์ผ ๋ช ๋ น์ด๊ฐ ์๋๋ผ ์ฐ์ฐ์๋ก ์กฐํฉ๋ ํํ์์ ๋ฐ์๋ค์ฌ์ผ LLM์ ์์ ์์ถ์ด ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
| ์ฐ์ฐ์ | ์๋ฏธ | ์์ |
|---|---|---|
| | ์ด์ stdout โ ๋ค์ stdin | cat log | grep ERROR | wc -l |
&& | ์ด์ ์ฑ๊ณต ์๋ง ์คํ | curl $URL -o data.csv && head data.csv |
|| | ์ด์ ์คํจ ์๋ง ์คํ | cat config.yaml || echo "default" |
; | ๊ฒฐ๊ณผ ๋ฌด๊ด ์์ฐจ ์คํ | cd /tmp ; ls ; date |
2๊ณ์ธต ์ํคํ ์ฒ (๊ฐ์)
LLM์ ์ธ์ง ์ ์ฝ(์ปจํ ์คํธ ์ ํ, ํ ์คํธ ์ ์ฉ)๊ณผ Unix์ ์์ ์๋ฏธ๋ก ์ด ์ถฉ๋ํ์ง ์๋๋ก ๋ ๊ณ์ธต์ผ๋ก ๋ถ๋ฆฌํ๋ค.
- Layer 1 (Execution): ์์ Unix ์๋ฏธ๋ก . ๋ฉํ๋ฐ์ดํฐยท๊ฐ๊ณต ์์ด ๋ช ๋ น์ด ์คํ๊ณผ ํ์ดํ ์ฒ๋ฆฌ๋ง ์ํ.
- Layer 2 (Presentation): LLM์ ์ ๋ฌํ๊ธฐ ์ง์ , ๋ฐ์ด๋๋ฆฌ ๊ฐ๋ยท์ค๋ฒํ๋ก์ฐ ์ฒ๋ฆฌยท๋ฉํ ํธํฐยทstderr ์ฒจ๋ถ ์ ์ฉ.
๋ถ๋ฆฌ ์ด์ : Layer 1์์ [exit:0] ๊ฐ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ฉด ๋ค์ ํ์ดํ(grep)์ ๊ฒ์ ๋์์ ์์ฌ ์๋ฏธ๋ก ์ด ๊นจ์ง๋ค.
์์ธ ๋ด์ฉ์ Two-Layer Architecture์์ ๋ค๋ฃฌ๋ค.
ํด๋ฆฌ์คํฑ 3๊ธฐ๋ฒ (๊ฐ์)
Agent๊ฐ ๋๊ตฌ๋ฅผ ํจ์จ์ ์ผ๋ก ๋ฐ๊ฒฌยท์ฌ์ฉยท๋ณต๊ตฌํ๋๋ก ๋ง๋๋ 3๊ฐ์ง ์ค๊ณ ์์น.
- Progressive
--helpdiscovery โ ํ์ํ ๋๋ง ์ ๋ณด๋ฅผ ์ ์ง์ ์ผ๋ก ๋ ธ์ถ - Error as navigation โ ์๋ฌ ๋ฉ์์ง ์์ฒด๊ฐ ๋ค์ ํ๋์ ์๋ด
- Consistent output format โ
[exit:0 | 12ms]๊ฐ์ ๋ฉํ๋ฐ์ดํฐ๋ก LLM์ ๋น์ฉยท์ฑํจ๋ฅผ ํ์ต์ํด
์์ธ ๋ด์ฉ์ Agent Heuristic Design์์ ๋ค๋ฃฌ๋ค.
ํ๊ณ์ ์ ์ฝ
- ๊ฐํ์ ์ํธ์์ฉ: DB ์ฟผ๋ฆฌยทGraphQL์ ์คํค๋ง ๊ฒ์ฆ๋ typed ์ธํฐํ์ด์ค๊ฐ ์์ ์
- ๋ณด์: CLI ๋ฌธ์์ด ์ฐ๊ฒฐ์ ์ฃผ์ ์ํ โ ์๋๋ฐ์ค ๊ฒฉ๋ฆฌ ํ์
- ๋ฉํฐ๋ชจ๋ฌ ๋ค์ดํฐ๋ธ: ์์ ์ค๋์คยท๋น๋์ค ์ฒ๋ฆฌ์๋ ํ ์คํธ ํ์ดํ๊ฐ ๋ณ๋ชฉ
CLI ๊ธฐ๋ฐ ์ ๊ทผ์ โagent๋ฅผ ์ํ ์ผ๋ฐ ์์ ํ๊ฒฝโ์ผ๋ก๋ ๊ฐ๋ ฅํ์ง๋ง, ๋ชจ๋ ๋๊ตฌ ์ธํฐํ์ด์ค๋ฅผ ๋์ฒดํ๋ ์ํํ์ ์๋๋ค.
๊ด๋ จ ๊ฐ๋
- Two-Layer Architecture โ Layer 1(Execution)๊ณผ Layer 2(Presentation) ๋ถ๋ฆฌ, ๋ฐ์ด๋๋ฆฌ ๊ฐ๋ยท์ค๋ฒํ๋ก์ฐยท๋ฉํ ํธํฐยทstderr ์ฒจ๋ถ 4๊ฐ์ง ๋ฉ์ปค๋์ฆ
- Agent Heuristic Design โ Progressive
--help, Error as Navigation, Consistent Output Format 3๊ฐ์ง ํด๋ฆฌ์คํฑ - AG-UI Tools โ Frontend-defined tool ํจํด (CLI tool๊ณผ ๋๋น๋๋ ๋ค๋ฅธ ๊ฐ๋์ ๋๊ตฌ ์ธํฐํ์ด์ค)
- AbstractAgent โ agent loop ์ง์ ์ ๊ณผ RunAgentInput ์๋ ์กฐ๋ฆฝ
- delta โ ์คํธ๋ฆฌ๋ฐ ๋ฉํ๋ฐ์ดํฐ ์ผ๋ฐ ๊ฐ๋