<aside> ๐ฅ
Agent์ ํต์ฌ ๊ตฌ์ฑ ์์์ธ Tool(๋๊ตฌ)์ ๋ํด์ ์์๋ด ๋๋ค.
</aside>
AI Agent์ ์ค์ํ ํน์ง ์ค ํ๋๋ ํ๋(Action)์ ์ทจํ ์ ์๋ ๋ฅ๋ ฅ์ ๋๋ค. ์ด๋ฌํ ์ก์ ์ ๋๊ตฌ๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋๋ค.
์ด๋ฒ์๋
์ ๋ํด์ ์์๋ด ๋๋ค. Agent์ ์ ์ ํ Tool์ ์ ๊ณตํ๊ณ ๊ฐ๊ฒฐํ๋ฉด์ ๋ช ํํ Tool ์ฌ์ฉ ๊ฐ์ด๋๋ฅผ ์ ๊ณตํ๋ค๋ฉด ์ฌ๋ฌ๋ถ์ AI Agent Model ์ฑ๋ฅ์ด ๋๋ผ๋งํฑํ๊ฒ ์์นํ ๊ฒ์ ๋๋ค.
Tool(๋๊ตฌ)์ด๋ LLM์๊ฒ ์ฃผ๋ function(ํจ์)์ ๋๋ค. ์ด๋ฌํ function์ ๋ช ํํ ๋ชฉ์ ์ ์ํํ๋ ์ญํ ์ ํฉ๋๋ค.
๋ค์์ AI ์์ด์ ํธ์์ ์์ฃผ ์ฌ์ฉ๋๋ ๋๊ตฌ์ ์์์ ๋๋ค.
๋๊ตฌ | ์ค๋ช |
---|---|
์น ๊ฒ์(Web Search) | ์ธํฐ๋ท์์ ์ต์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. |
์ด๋ฏธ์ง ์์ฑ(Image generation) | ํ ์คํธ ์ค๋ช ์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.(Image AI Model) |
๊ฒ์ ๋ฐ ์ถ์ถ (Retrieval) | ์ธ๋ถ ์์ค์์ ํ์ํ ์ ๋ณด๋ฅผ ๊ฒ์ํ์ฌ ๊ฐ์ ธ์ต๋๋ค. (RAG) |
API ์ธํฐํ์ด์ค(API Interface) | ์ธ๋ถ API(Github, YouTube, Spotify ๋ฑ)์ ์ํธ์์ฉํฉ๋๋ค. |
์ ๋๊ตฌ๋ค์ ํ๋์ ์์์ ๋ถ๊ณผํ๋ฉฐ, ์ฌ๋ฌ๋ถ๋ง์ ํน์ use case์ ๋ฐ๋ผ ์ ์ ํ tool์ ์ ์ํ ์ ์์ต๋๋ค!
์ ์ ํ ๋๊ตฌ ์ฌ์ฉ์ LLM์ ๋ฅ๋ ฅ์ ๋ณด์ํด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ๋ฌ๋ถ๋ค์ด ๊ณ์ฐ์ด ํ์ํ ์์ ์ด๋ผ๋ฉด, ๊ณ์ฐ๊ธฐ ๋๊ตฌ๋ฅผ LLM์ ๊ฐ์ด ์ ๊ณต์ ํด์ค๋ค๋ฉด ๋๊ตฌ๊ฐ ์๋ LLM ๋ณด๋ค ๋ ๋์ ์ฑ๋ฅ์ ์ป์ ์ ์์ต๋๋ค.
๋ํ, ์ต์ ์ ๋ณด๋ฅผ ํ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ LLM ๋ชจ๋ธ์ด ํ์ตํ์ง ์์ ๋ด์ฉ์ด ํฌํจ๋์ด ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ web ๊ฒ์ ๋ฑ์ ์ด์ฉํด์ ์ต์ ์ ๋ณด๋ ํ์ฉํ ์ ์๋๋ก ๋์์ค์ผ ํฉ๋๋ค.
๋ ์จ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ LLM ๊ฒฐ๊ณผ (์ถ์ฒ : โฃ)
์์ ์์์ฒ๋ผ, ๋ ์จ Web ๊ฒ์์ ์ด์ฉํด์ ์ข๋ ์ ํํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
์ ๋ฆฌํด๋ณด์๋ฉด, ๋๊ตฌ๋ ๋ค์์ ๋ฐ๋์ ํฌํจํด์ผ ํฉ๋๋ค.
LLM์ ์ค์ง text์ผ๋ก๋ง ์ ๋ ฅ์ ๋ฐ๊ณ text์ผ๋ก๋ง ์ถ๋ ฅ์ generateํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์, LLM์ ์ค์ค๋ก ๋๊ตฌ๋ฅผ ์ง์ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ LLM์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ๊น์?
์ฐ๋ฆฌ๊ฐ Agent์ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๋ค.
๋ผ๋ ํํ์ LLM์๊ฒ ๋ค์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ฒ์
๋๋ค.
์๋ฅผ ๋ค์ด, ์ธํฐ๋ท์์ ํน์ ์ง์ญ์ ๋ ์จ๋ฅผ ์กฐํํ๋ Web Search ๋๊ตฌ๋ฅผ ์ ๊ณตํ ๋ค, LLM์๊ฒ โํ๋ฆฌ์ ๋ ์จ๋ ์ด๋ป์ต๋๊น?โ
๋ผ๊ณ ๋ฌผ์ผ๋ฉด LLM์ ์ด ์ง๋ฌธ์ด ์์ ์ด ๋ฐฐ์ด โ๋ ์จ ์กฐํ ๋๊ตฌโ
๋ฅผ ์ฌ์ฉํ๊ธฐ์ ์ ํฉํ ์ํฉ์์ ์ธ์ํ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฐ ๋ค์, LLM์ ํด๋น ๋๊ตฌ๋ฅผ ํธ์ถํ๋ ํํ์ ํ ์คํธ(์ผ๋ฐ์ ์ผ๋ก๋ ์ฝ๋ ํํ)๋ฅผ generateํ๊ฒ ๋ฉ๋๋ค. ์ฌ๊ธฐ์ Agent๋ LLM์ด ์์ฑํ ์ถ๋ ฅ์ ๋ถ์ํ์ฌ ๋๊ตฌ ํธ์ถ์ด ํ์ํ๋ค๋ ๊ฒ์ ํ์ ํ๊ณ , ๋์ ํ์ฌ ์ค์ ๋๊ตฌ๋ฅผ ํธ์ถํ๋ ์ญํ ์ ํฉ๋๋ค.
์ด ํธ์ถ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ LLM์ผ๋ก ์ ๋ฌํ๋ฉฐ, LLM์ ์ด๋ฅผ ๋ฐํ์ผ๋ก User์๊ฒ ์ ๊ณตํ ์ต์ข ์ ์ธ ๋๋ต์ generateํฉ๋๋ค.
๋๊ตฌ๋ฅผ ํธ์ถํ์ฌ generateํ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ Conversation(๋ํ) ๋ด์ ๋ ๋ค๋ฅธ Message๋ก ์ฌ์ฉ๋ฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์๋์ ๊ณผ์ ์ User์๊ฒ ๋ณด์ฌ์ฃผ์ง ์์ต๋๋ค.
- Agent๊ฐ converstation์ retrive(๊ฒ์)ํฉ๋๋ค.
User์๊ฒ๋ ๋ง์น LLM์ด ์ง์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ค์ ๋ก๋ Agent๊ฐ ๋๊ตฌ๋ฅผ ํธ์ถํ ๊ฒ์ ๋๋ค.
์ ์ฒด ์ค๋ช ์ด ๋ค์ ๋ณต์กํด ๋ณด์ผ ์ ์์ง๋ง, ๊ฐ๋จํ ๋งํ๋ฉด System Message(System prompt) ๋ฅผ ํตํด ์ฌ์ฉ ๊ฐ๋ฅํ ๋๊ตฌ๋ค์ ๋ํ ํ ์คํธ ์ค๋ช ์ ๋ชจ๋ธ์๊ฒ ์ ๊ณตํ๋ ๋ฐฉ์์ ๋๋ค.
system_message = """
You are an AI assistant designed to help users efficiently and accurately. Your primary goal is to provide helpful, precise, and clear responses.
You have access to the following tools
{tools_description}
"""
์์ ๊ฐ์ด system message์ {tools_description}
์ ๊ฐ์ด ๋ฃ์ด์ค์ ๋๊ตฌ์ ๋ํ ์ค๋ช
์ ๊ฐ์ด ๋ฃ์ด์ค ์ ์์ต๋๋ค.
{tools_description}
์ ๋ํด ์๋์ ๊ฐ์ ์ค๋ช
์ ๋ฃ์ด์ค์ผ ํฉ๋๋ค.
์ 2๊ฐ์ง ๋ด์ฉ์ ๋งค์ฐ ๋ช
ํํ๊ณ ์ ํํ๊ฒ ์ ๊ณตํด์ผ๋ง ํฉ๋๋ค. ๊ทธ๋ ๊ธฐ์, ๋ณดํต์ ์ปดํจํฐ ์ธ์ด(Python ๋ฑ)๋ JSON ํํ๋ก {tools_description}
์ ์ ์ํฉ๋๋ค(๋ค๋ฅธ ๋ช
ํํ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์์ ๋ฐฉ์์ด ํ์๋ ์๋๋๋ค).
์๋ฅผ ๋ค์ด๋ณด๋ฉด, ๋ ์ ์ ํ์ (integer)์ ๊ณฑํ๋ ๊ณ์ฐ๊ธฐ ํจ์๋ฅผ ์ ์ํ๋ค๊ณ ํด๋ด ์๋ค. ์ด๊ฒ์ python ํจ์๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
def calculator(a: int, b: int) -> int:
"""Multiply two integers."""
return a * b
์์ tool์ calculator
๋ผ๊ณ ๋ถ๋ฅด๊ณ , ์ด calcluator
๋ ๋๊ฐ์ ์ ์ ํ์
์ ๊ณฑํ๋ ํจ์์
๋๋ค. ์ด ํจ์๋ ์๋์ ๊ฐ์ ์
๋ ฅ(Arguments)๋ฅผ ํ์๋ก ํฉ๋๋ค.
๋๊ตฌ์ ์ถ๋ ฅ์ ๋ค๋ฅธ ์ ์ ํ์ ์ ํ ์ซ์๋ก ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋ผ ์ ์์ต๋๋ค.
a
and b
.๊ทธ๋ฌ๋ฉด LLM์ด ์์๋ค์ ์ ์๋๋ก text ํํ๋ก ์ฐ๋ฆฌ์ tool์ ์ค๋ช ํ๋ textual description์ผ๋ก ๋ฐ๊ฟ๋ณด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
Tool Name: calculator, Description: Multiply two integers., Arguments: a: int, b: int, Outputs: int
์์ ๊ฐ์ text๋ฅผ LLM์ ์ ๋ ฅํ๋ฉด, ๋ชจ๋ธ์ ์ด๊ฒ์ด โ๋๊ตฌ๋ผ๋ ๊ฒโ์ ์ธ์ํ๊ณ , ์ ๋ ฅ์ผ๋ก ๋ฌด์์ ์ ๋ฌํด์ผ ํ๋์ง, ์ถ๋ ฅ์ผ๋ก ๋ฌด์์ด ๋์์ผ ํ๋์ง๋ฅผ ์ ์ ์์ต๋๋ค.
๋ง์ฝ ์ฐ๋ฆฌ๊ฐ ๋๊ตฌ๋ฅผ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด, ์ฐ๋ฆฌ๋ ์์ ๋น์ทํ ํํ๋ก ์ผ๊ด์ฑ์๊ฒ ๋๊ตฌ๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ๋ฐฉ์์ (๋น์ฐํ) ์ค์๊ฐ ๋ฐ์ํ ์ ์๊ณ , ์๋ชปํ๋ฉด ์ค์ํ ์ธ๋ถ์ฌํญ์ ๋น ๋จ๋ฆด ์ ์์ต๋๋ค.
๊ทธ๋ ๊ธฐ์ ๋ ์ข์ ๋ฐฉ๋ฒ์ผ๋ก ๋๊ตฌ๋ฅผ ์ ์ํด๋ด ์๋ค!
์ฐ๋ฆฌ์ tool์ Python ์ธ์ด๋ก ์์ฑ๋๊ณ , ์ด ๊ตฌํ ๋ฐฉ์ ์์ฒด๊ฐ ์ด๋ฏธ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
calculator
์์ฒ๋ผ ํํ๋ ฅ์ด ๋ฐ์ด๋๋ฉด์ ๊ฐ๊ฒฐํ๊ณ ์ ํํ๊ฒ ํํํ ์ ์๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.
Python ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, LLM์๊ฒ ๋๊ตฌ๋ฅผ ์ค๋ช ํ ๋ ๋๊ตฌ์ Python ์์ค์ฝ๋๋ฅผ ์ ๊ณตํ ์๋ ์์ง๋ง ๋๊ตฌ๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ๊ตฌํ๋์๋์ง ๊ทธ ์์ธํ ๋ด์ฉ์ ์ค์ํ์ง ์์ต๋๋ค. ์ค์ํ ๊ฒ์ ์๋ 4๊ฐ์ง ์ ๋๋ค.
์ด๋ฌํ 4๊ฐ์ง ์ ๋ณด๋ฅผ ์๋์ผ๋ก ์์ฑํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ Python ์ธํธ๋ก์คํ์ (Introspection) ๊ธฐ๋ฅ์ ์ฌ์ฉํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์์ค์ฝ๋๋ก๋ถํฐ ๊ด๋ จ๋ ๋ถ๋ถ์ ์ถ์ถํ๋ ์ธํธ๋ก์คํ์ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
์ธํธ๋ก์คํ์ ์ฝ๋๋ฅผ ์์ฑํ ํ์, ์ฐ๋ฆฌ๋ ์ค์ง Python decorator๋ฅผ ์ฌ์ฉํด์ calculator ํจ์๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
@tool
def calculator(a: int, b: int) -> int:
"""Multiply two integers."""
return a * b
print(calculator.to_string())
์ ์ฝ๋๋ฅผ ์คํํ๋ฉด, ์ฐ๋ฆฌ๋ ๋ฐ์ฝ๋ ์ดํฐ์์ ์ ๊ณตํ๋ ํจ์์ธ to_string ํจ์๋ฅผ ํตํด์ ์์ค์ฝ๋์ ์๋ ์ ๋ณด๋ฅผ ์๋์ผ๋ก ๊ฐ์ ธ์ ๋ค์๊ณผ ๊ฐ์ ํ ์คํธ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
Tool Name: calculator, Description: Multiply two integers., Arguments: a: int, b: int, Outputs: int
์์ ๊ฒฐ๊ณผ๋ฌผ์ ์ฐ๋ฆฌ๊ฐ ์ด์ ์ ์ง์ ์์ฑํ ๋ฐฉ์๊ณผ ๋์ผํฉ๋๋ค! ๊ทธ๋ฌ๋ฉด @tool
์ ์ด๋ป๊ฒ ๋ง๋ค ์ ์์๊น์?