Function Calling
Function Calling
LLM이 외부 함수/API를 호출하여 작업을 수행하는 기능. AI 에이전트의 핵심.
Function Calling
LLM이 외부 함수/API를 호출하여 작업을 수행하는 기능. AI 에이전트의 핵심.
Function Calling은 LLM(대규모 언어 모델)이 자연어 입력을 분석하여 적절한 외부 함수나 API를 선택하고 호출하는 기능입니다. 모델이 직접 코드를 실행하는 것이 아니라, 어떤 함수를 어떤 파라미터로 호출해야 하는지 JSON 형식으로 출력합니다.
2023년 OpenAI가 GPT-3.5/4에 처음 도입한 이후, Google Gemini, Anthropic Claude, 오픈소스 모델들까지 표준 기능으로 자리잡았습니다. AI 에이전트가 실제 작업을 수행하려면 외부 세계와 상호작용이 필수적이기 때문입니다.
작동 원리는 간단합니다: 개발자가 사용 가능한 함수들의 스키마(이름, 설명, 파라미터)를 정의하면, LLM이 사용자 요청을 분석해 적합한 함수와 인자를 결정합니다. 개발자는 이 출력을 받아 실제 함수를 실행하고 결과를 다시 LLM에게 전달합니다.
실무에서 Function Calling은 챗봇이 예약 시스템을 조회하거나, AI 비서가 이메일을 전송하거나, 데이터 분석 봇이 DB를 쿼리하는 등 모든 AI 에이전트 구현의 핵심입니다. 2025년 현재 RAG, MCP(Model Context Protocol)와 결합해 더욱 강력한 에이전트 시스템을 구축합니다.
# OpenAI Function Calling 예제
from openai import OpenAI
import json
client = OpenAI()
# 1. 사용 가능한 함수 정의 (스키마)
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "특정 도시의 현재 날씨를 조회합니다",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "도시 이름 (예: 서울)"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["city"]
}
}
}
]
# 2. LLM에게 사용자 요청 전달
response = client.chat.completions.create(
model="gpt-4-turbo",
messages=[{"role": "user", "content": "서울 날씨 알려줘"}],
tools=tools,
tool_choice="auto" # LLM이 자동으로 함수 호출 결정
)
# 3. Function Call 결과 확인
tool_call = response.choices[0].message.tool_calls[0]
print(f"호출할 함수: {tool_call.function.name}")
print(f"전달할 인자: {tool_call.function.arguments}")
# 출력: 호출할 함수: get_weather
# 출력: 전달할 인자: {"city": "서울", "unit": "celsius"}
# 4. 실제 함수 실행 후 결과를 LLM에게 다시 전달
def get_weather(city: str, unit: str = "celsius") -> dict:
# 실제로는 API 호출
return {"temp": 15, "condition": "맑음", "city": city}
result = get_weather(**json.loads(tool_call.function.arguments))
# 이 결과를 다시 대화에 추가하여 자연스러운 응답 생성
"이번 챗봇은 Function Calling으로 주문 조회, 배송 추적, 환불 요청까지 한 번에 처리하게 설계했습니다. 기존 REST API 그대로 연동되니까 백엔드 수정 없이 가능해요."
"Function Calling의 핵심은 LLM이 '어떤 함수를 어떤 인자로 호출할지' 결정하고, 실제 실행은 개발자가 통제한다는 점입니다. 이 분리 덕분에 보안과 에러 핸들링이 가능합니다."
"MCP(Model Context Protocol)는 Function Calling을 표준화한 거라고 보면 됩니다. 여러 LLM이 동일한 툴셋을 공유할 수 있어서 벤더 락인 없이 에이전트를 만들 수 있죠."
LLM은 함수 설명(description)을 보고 호출 여부를 결정합니다. "데이터 조회"보다 "사용자 ID로 최근 30일 주문 내역을 조회합니다"처럼 구체적으로 써야 정확도가 올라갑니다.
LLM이 잘못된 파라미터나 존재하지 않는 함수를 호출할 수 있습니다. 반드시 화이트리스트 검증과 파라미터 타입 체크 후 실행하세요.
Function Call 후 결과를 role: "tool"로 다시 전달해야 LLM이 자연스러운 응답을 생성합니다. 이 단계를 빠뜨리면 사용자에게 JSON만 보여주는 실수를 합니다.