함수 호출 (Function Calling)
함수 호출 (Function Calling) — 모델이 도구를 고르고 인자를 만들도록
함수 호출, 혹은 도구 호출(tool calling)은 모델이 사용자 요청에서 도구를 하나 고르고 그 인자를 만들어 내도록 하는 기능이에요. 여기서 중요한 점은 모델이 그 도구를 직접 실행하지 않는다는 거예요. 실제 실행은 여러분의 애플리케이션이 맡고, 실행 결과를 다시 모델에 보내 최종 사용자 응답을 만들어 냅니다.
BIS-LLM과 Engine-Builder-LLM 같은 Baseten 엔진이 함수 호출을 지원하고, 즉시 접근이 필요하면 Model APIs도 쓸 수 있어요. vLLM이나 SGLang 같은 다른 추론 프레임워크도 지원합니다. 이 기능은 LLM을 단순 텍스트 생성기에서 실제 행동을 일으키는 에이전트로 업그레이드해 주는 핵심이에요.
도구 호출 루프
전형적인 도구 호출 흐름은 이렇게 다섯 단계로 이뤄져요.
- 사용자 메시지와 도구 목록을 보낸다.
- 모델이 일반 텍스트 또는 하나 이상의 도구 호출(이름과 JSON 인자)을 반환한다.
- 애플리케이션에서 도구 호출을 실행한다.
- 도구 출력을 다시 모델에 보낸다.
- 최종 응답 또는 추가 도구 호출을 받는다.
도구 정의하기
도구는 API 호출, 데이터베이스 질의, 내부 스크립트 등 무엇이든 될 수 있어요. 여기서 docstring이 중요합니다. 모델이 docstring을 보고 어떤 도구를 호출할지, 파라미터를 어떻게 채울지를 결정하거든요.
def multiply(a: float, b: float):
"""Multiply two numbers.
Args:
a: The first number.
b: The second number.
"""
return a * b
작고 단일 목적의 도구를 설계하고, 단위·허용 값·필수 필드 같은 제약을 docstring에 담아 두는 게 좋아요. 그리고 모델이 주는 인자는 신뢰할 수 없는 입력으로 취급해 실행 전에 반드시 검증해야 합니다.
모델 호출과 도구 선택 제어
Model APIs는 https://inference.baseten.co/v1/chat/completions에 tools와 tool_choice를 담아 호출해요. 자체 배포는 /production/predict를 사용합니다.
url = "https://inference.baseten.co/v1/chat/completions"
payload = {
"model": "deepseek-ai/DeepSeek-V4-Pro",
"messages": [
{"role": "user", "content": "What is 3.14 + 3.14?"},
],
"tools": tools,
"tool_choice": "auto", # default
}
tool_choice로 모델의 도구 사용을 제어할 수 있어요. auto(기본)는 텍스트 또는 도구 호출 중 자유롭게 응답하고, required는 최소 하나의 도구 호출을 강제하며, none은 일반 텍스트만 반환합니다. 특정 도구를 강제하려면 {"type": "function", "function": {"name": "subtract"}}처럼 함수 이름을 지정하면 돼요. 엔진과 모델에 따라 도구 호출은 보통 assistant 메시지의 tool_calls 아래에 담겨 돌아오고, 거기서 파싱해 실행하면 됩니다.
더 알아보기
- Structured outputs — JSON 스키마 강제 출력
- JSON mode — 구문적으로 유효한 JSON으로 제한
- Model APIs 개요 — 호스팅 LLM 호출