Intro

<aside> ๐Ÿ”ฅ

Agent์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ์ธ Tool(๋„๊ตฌ)์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

</aside>

AI Agent์˜ ์ค‘์š”ํ•œ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ํ–‰๋™(Action)์„ ์ทจํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์•ก์…˜์€ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

์ด๋ฒˆ์—๋Š”

  1. ๋„๊ตฌ๋ž€ ๋ฌด์—‡์ธ์ง€?
  2. ๋„๊ตฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ํšจ๊ณผ์ ์œผ๋กœ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€?
  3. ์ด ๋„๊ตฌ๋ฅผ System Message๋ฅผ ํ†ตํ•ด Agent์™€ ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•

์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ด…๋‹ˆ๋‹ค. Agent์— ์ ์ ˆํ•œ Tool์„ ์ œ๊ณตํ•˜๊ณ  ๊ฐ„๊ฒฐํ•˜๋ฉด์„œ ๋ช…ํ™•ํ•œ Tool ์‚ฌ์šฉ ๊ฐ€์ด๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ AI Agent Model ์„ฑ๋Šฅ์ด ๋“œ๋ผ๋งˆํ‹ฑํ•˜๊ฒŒ ์ƒ์Šนํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Body

1. What are AI Tools?

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 ๊ฒฐ๊ณผ (์ถœ์ฒ˜ : โ€ฃ)

๋‚ ์”จ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ LLM ๊ฒฐ๊ณผ (์ถœ์ฒ˜ : โ€ฃ)

์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ, ๋‚ ์”จ Web ๊ฒ€์ƒ‰์„ ์ด์šฉํ•ด์„œ ์ข€๋” ์ •ํ™•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ฆฌํ•ด๋ณด์ž๋ฉด, ๋„๊ตฌ๋Š” ๋‹ค์Œ์„ ๋ฐ˜๋“œ์‹œ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. textual description : function์ด ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ description
  2. function(Callable)
  3. type ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ Arguments(์ธ์ž)
  4. (Optional) type ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ output

2. How do tools work?

LLM์€ ์˜ค์ง text์œผ๋กœ๋งŒ ์ž…๋ ฅ์„ ๋ฐ›๊ณ  text์œผ๋กœ๋งŒ ์ถœ๋ ฅ์„ generateํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, LLM์€ ์Šค์Šค๋กœ ๋„๊ตฌ๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ LLM์ด ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ• ๊นŒ์š”?

์šฐ๋ฆฌ๊ฐ€ Agent์— ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๋ผ๋Š” ํ‘œํ˜„์€ LLM์—๊ฒŒ ๋‹ค์Œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ํŠน์ • ๋„๊ตฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
  2. ๋„๊ตฌ์˜ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ๋ ค์ค€๋‹ค.
  3. (ํ•„์š”ํ•  ๋•Œ) ๊ทธ ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ธํ„ฐ๋„ท์—์„œ ํŠน์ • ์ง€์—ญ์˜ ๋‚ ์”จ๋ฅผ ์กฐํšŒํ•˜๋Š” Web Search ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•œ ๋’ค, LLM์—๊ฒŒ โ€œํŒŒ๋ฆฌ์˜ ๋‚ ์”จ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?โ€ ๋ผ๊ณ  ๋ฌผ์œผ๋ฉด LLM์€ ์ด ์งˆ๋ฌธ์ด ์ž์‹ ์ด ๋ฐฐ์šด โ€œ๋‚ ์”จ ์กฐํšŒ ๋„๊ตฌโ€๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์— ์ ํ•ฉํ•œ ์ƒํ™ฉ์ž„์„ ์ธ์‹ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ, LLM์€ ํ•ด๋‹น ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ˜•ํƒœ์˜ ํ…์ŠคํŠธ(์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์ฝ”๋“œ ํ˜•ํƒœ)๋ฅผ generateํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ Agent๋Š” LLM์ด ์ƒ์„ฑํ•œ ์ถœ๋ ฅ์„ ๋ถ„์„ํ•˜์—ฌ ๋„๊ตฌ ํ˜ธ์ถœ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ํŒŒ์•…ํ•˜๊ณ , ๋Œ€์‹ ํ•˜์—ฌ ์‹ค์ œ ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ˜ธ์ถœ๋œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•œ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ LLM์œผ๋กœ ์ „๋‹ฌํ•˜๋ฉฐ, LLM์€ ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ User์—๊ฒŒ ์ œ๊ณตํ•  ์ตœ์ข…์ ์ธ ๋Œ€๋‹ต์„ generateํ•ฉ๋‹ˆ๋‹ค.

๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ generateํ•œ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š” Conversation(๋Œ€ํ™”) ๋‚ด์˜ ๋˜ ๋‹ค๋ฅธ Message๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์•„๋ž˜์˜ ๊ณผ์ •์€ User์—๊ฒŒ ๋ณด์—ฌ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  1. Agent๊ฐ€ converstation์„ retrive(๊ฒ€์ƒ‰)ํ•ฉ๋‹ˆ๋‹ค.
  1. Agent๊ฐ€ ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  2. Agent๊ฐ€ ํ˜ธ์ถœํ•œ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋ฅผ generateํ•ฉ๋‹ˆ๋‹ค.
  3. generateํ•œ ๊ฒฐ๊ณผ๋ฌผ์„ ์ƒˆ๋กœ์šด message๋กœ ๋งŒ๋“ค์–ด conversation์— ํฌํ•จ์‹œํ‚ต๋‹ˆ๋‹ค.
  4. conversation์„ ๋‹ค์‹œ LLM์— ์ž…๋ ฅ์œผ๋กœ ๋„ฃ๊ณ  text ์ถœ๋ ฅ์„ ์–ป์Šต๋‹ˆ๋‹ค.

User์—๊ฒŒ๋Š” ๋งˆ์น˜ LLM์ด ์ง์ ‘ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” Agent๊ฐ€ ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

3. How do we give tools to an LLM?

์ „์ฒด ์„ค๋ช…์ด ๋‹ค์†Œ ๋ณต์žกํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด 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}์— ๋Œ€ํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ์„ค๋ช…์„ ๋„ฃ์–ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. tool์ด ๋ญ˜ ํ•˜๋Š”์ง€?
  2. ๊ธฐ๋Œ€๋˜๋Š” ์ž…๋ ฅ(inputs)์ด ์ •ํ™•ํžˆ ๋ญ”์ง€?

์œ„ 2๊ฐ€์ง€ ๋‚ด์šฉ์„ ๋งค์šฐ ๋ช…ํ™•ํ•˜๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์ œ๊ณตํ•ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์—, ๋ณดํ†ต์€ ์ปดํ“จํ„ฐ ์–ธ์–ด(Python ๋“ฑ)๋‚˜ JSON ํ˜•ํƒœ๋กœ {tools_description}์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค(๋‹ค๋ฅธ ๋ช…ํ™•ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ์œ„์˜ ๋ฐฉ์‹์ด ํ•„์ˆ˜๋Š” ์•„๋‹™๋‹ˆ๋‹ค).

์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๋ฉด, ๋‘ ์ •์ˆ˜ ํƒ€์ž…(integer)์„ ๊ณฑํ•˜๋Š” ๊ณ„์‚ฐ๊ธฐ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•œ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค. ์ด๊ฒƒ์„ python ํ•จ์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

def calculator(a: int, b: int) -> int:
    """Multiply two integers."""
    return a * b

์œ„์˜ tool์„ calculator๋ผ๊ณ  ๋ถ€๋ฅด๊ณ , ์ด calcluator๋Š” ๋‘๊ฐœ์˜ ์ •์ˆ˜ ํƒ€์ž…์„ ๊ณฑํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ž…๋ ฅ(Arguments)๋ฅผ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๋„๊ตฌ์˜ ์ถœ๋ ฅ์€ ๋‹ค๋ฅธ ์ •์ˆ˜ ํƒ€์ž…์˜ ํ•œ ์ˆซ์ž๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด LLM์ด ์•Œ์•„๋“ค์„ ์ˆ˜ ์žˆ๋„๋ก text ํ˜•ํƒœ๋กœ ์šฐ๋ฆฌ์˜ tool์„ ์„ค๋ช…ํ•˜๋Š” textual description์œผ๋กœ ๋ฐ”๊ฟ”๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Tool Name: calculator, Description: Multiply two integers., Arguments: a: int, b: int, Outputs: int

์œ„์™€ ๊ฐ™์€ text๋ฅผ LLM์— ์ž…๋ ฅํ•˜๋ฉด, ๋ชจ๋ธ์€ ์ด๊ฒƒ์ด โ€œ๋„๊ตฌ๋ผ๋Š” ๊ฒƒโ€์„ ์ธ์‹ํ•˜๊ณ , ์ž…๋ ฅ์œผ๋กœ ๋ฌด์—‡์„ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š”์ง€, ์ถœ๋ ฅ์œผ๋กœ ๋ฌด์—‡์ด ๋‚˜์™€์•ผ ํ•˜๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๊ทธ๋ ‡๊ธฐ์— ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋„๊ตฌ๋ฅผ ์ •์˜ํ•ด๋ด…์‹œ๋‹ค!

3. Auto-formatting Tool sections

์šฐ๋ฆฌ์˜ tool์€ Python ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜๊ณ , ์ด ๊ตฌํ˜„ ๋ฐฉ์‹ ์ž์ฒด๊ฐ€ ์ด๋ฏธ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์ฒ˜๋Ÿผ ํ‘œํ˜„๋ ฅ์ด ๋›ฐ์–ด๋‚˜๋ฉด์„œ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

3.1. Tool Decorator

Python ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, LLM์—๊ฒŒ ๋„๊ตฌ๋ฅผ ์„ค๋ช…ํ•  ๋•Œ ๋„๊ตฌ์˜ Python ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋„๊ตฌ๊ฐ€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋˜์—ˆ๋Š”์ง€ ๊ทธ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๊ฒƒ์€ ์•„๋ž˜ 4๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค.

  1. Tool Name : ๋„๊ตฌ์˜ ์ด๋ฆ„
  2. Description : ์—ญํ• 
  3. Arguments : ๊ธฐ๋Œ€ํ•˜๋Š” ์ž…๋ ฅ๊ฐ’
  4. Outputs : ์ถœ๋ ฅ๊ฐ’

์ด๋Ÿฌํ•œ 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์€ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

3.2. Generic Tool implementation