Tool Use
도구 사용 / Function Calling
AI가 계산기, 검색 등 외부 도구를 사용하는 능력. 에이전트 시스템의 핵심 기반 기술입니다.
도구 사용 / Function Calling
AI가 계산기, 검색 등 외부 도구를 사용하는 능력. 에이전트 시스템의 핵심 기반 기술입니다.
Tool Use(도구 사용)는 LLM이 텍스트 생성을 넘어 외부 도구나 API를 호출하여 실제 작업을 수행하는 능력을 말합니다. Function Calling이라고도 불리며, AI가 계산기, 웹 검색, 데이터베이스 조회, 파일 시스템 접근 등 다양한 도구를 활용할 수 있게 해줍니다.
Tool Use는 2023년 OpenAI가 GPT-4에 Function Calling 기능을 도입하면서 본격화되었습니다. 이후 Anthropic Claude, Google Gemini 등 주요 LLM들이 모두 이 기능을 지원하며, AI Agent 시스템의 핵심 구성요소가 되었습니다.
기술적으로 Tool Use는 모델이 특정 형식(주로 JSON)으로 도구 호출 의도를 표현하면, 시스템이 이를 파싱하여 실제 함수를 실행하고 결과를 다시 모델에 전달하는 방식으로 동작합니다. 모델은 도구의 스키마(이름, 설명, 매개변수)를 이해하고 적절한 시점에 올바른 도구를 선택합니다.
실무에서 Tool Use는 RAG 시스템, 자동화 워크플로우, 데이터 분석, 고객 서비스 봇 등 다양한 AI 애플리케이션의 핵심입니다. 단순한 챗봇에서 실제 업무를 수행하는 AI Agent로 발전하는 데 필수적인 기술입니다.
OpenAI API를 사용한 Tool Use (Function Calling) 예제입니다.
from openai import OpenAI
import json
client = OpenAI()
# 도구 정의 (날씨 API 예시)
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "특정 위치의 현재 날씨 정보를 가져옵니다",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "도시명 (예: 서울, 부산)"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "온도 단위"
}
},
"required": ["location"]
}
}
}
]
# 실제 도구 함수 구현
def get_weather(location: str, unit: str = "celsius") -> dict:
"""날씨 API 호출 시뮬레이션"""
weather_data = {
"서울": {"temp": 22, "condition": "맑음"},
"부산": {"temp": 25, "condition": "흐림"}
}
return weather_data.get(location, {"temp": 20, "condition": "알 수 없음"})
# LLM과 대화
messages = [{"role": "user", "content": "서울 날씨 어때?"}]
response = client.chat.completions.create(
model="gpt-4-turbo",
messages=messages,
tools=tools,
tool_choice="auto"
)
# Tool Call 처리
if response.choices[0].message.tool_calls:
tool_call = response.choices[0].message.tool_calls[0]
func_name = tool_call.function.name
func_args = json.loads(tool_call.function.arguments)
# 도구 실행
result = get_weather(**func_args)
# 결과를 다시 LLM에 전달
messages.append(response.choices[0].message)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps(result, ensure_ascii=False)
})
final_response = client.chat.completions.create(
model="gpt-4-turbo",
messages=messages
)
print(final_response.choices[0].message.content)
# 출력: "서울의 현재 날씨는 맑고, 기온은 22도입니다."
도구의 description이 모호하면 LLM이 잘못된 도구를 선택합니다. 언제, 왜 사용하는지 명확히 기술하세요.
도구 실행 실패 시 처리가 없으면 전체 워크플로우가 중단됩니다. try-catch와 재시도 로직을 반드시 구현하세요.
도구별 상세한 description 작성, 매개변수 타입 검증, 실패 시 graceful degradation, 도구 호출 로깅을 구현하세요.