함수 호출(Function calling)은 대규모 언어 모델(LLM)에서 모델이 일반 텍스트를 생성하는 대신 개발자가 정의한 함수나 도구를 호출하라는 구조화된 기계 판독 가능 요청을 출력할 수 있게 해주는 애플리케이션 프로그래밍 인터페이스(API) 메커니즘이다. 이 기능은 대화형 또는 생성형 출력과 실행 가능한 작업 사이의 간극을 메워, LLM이 실시간 데이터를 검색하고, 계산을 수행하고, 외부 시스템과 상호 작용하거나, 다단계 워크플로우를 조율할 수 있게 한다. 일반적인 구현에서 개발자는 이름, 설명, 매개변수 스키마를 포함한 함수 정의 집합을 모델에 제공한다. 그러면 모델은 사용자 프롬프트를 기반으로 함수를 호출할지 여부를 결정하고, 호출할 경우 함수 이름과 인수를 포함한 구조화된 객체(종종 JSON)를 출력한다. 애플리케이션은 함수를 실행하고 결과를 모델에 반환하며, 모델은 그 결과를 사용자에 대한 최종 응답에 통합할 수 있다.
함수 호출은 도구 사용을 위한 프롬프트 엔지니어링이나 파인튜닝과 같은 초기 접근 방식과는 구별된다. 이는 구조화된 출력 형식을 따르고 도구를 언제 어떻게 호출할지 추론하는 모델의 고유한 능력에 의존하기 때문이다. 이는 OpenAI, Anthropic, Google DeepMind를 포함한 많은 현대 LLM API의 핵심 기능이며, 모델이 자율적으로 일련의 작업을 계획하고 실행하는 에이전트형 AI 시스템의 표준 구성 요소가 되었다. 이 메커니즘은 도구 사용, 도구 호출 또는 구조화된 출력 생성이라고도 불리지만, 함수 호출은 특히 모델과 애플리케이션 간의 API 계약을 강조한다.
역사적 발전
언어 모델을 외부 도구에 연결하는 개념은 "함수 호출"이라는 용어보다 앞선다. 2010년대의 초기 연구, 예를 들어 신경 모델과 검색 시스템의 통합은 모델이 외부 정보 소스의 이점을 얻을 수 있음을 보여주며 기반을 마련했다. 그러나 현대적인 함수 호출 패러다임은 트랜스포머 기반 LLM의 부상과 구조화된 출력을 안정적으로 생성하는 능력과 함께 등장했다.
OpenAI는 2023년 6월 GPT-4 및 GPT-3.5 Turbo 모델 업데이트의 일부로 공식 함수 호출 API를 도입했다. 이를 통해 개발자는 함수를 정의하고 모델이 어떤 함수를 어떤 인수로 호출할지 지정하는 JSON 객체를 반환하도록 할 수 있었다. 이 릴리스에는 데이터베이스 쿼리, 이메일 전송, 날씨 데이터 가져오기와 같은 사용 사례를 보여주는 문서와 예제가 함께 제공되었다. Anthropic은 2024년에 자체 도구 사용 기능을 도입했고, Google DeepMind는 Gemini 모델에 유사한 기능을 통합했다. 2025년까지 함수 호출은 Meta와 Mistral의 오픈소스 모델을 포함한 주요 LLM 제공업체의 표준 기능이 되었으며, 종종 OpenAI 호환 API 형식으로 구현되었다.
함수 호출의 설계는 Meta AI(2023)의 Toolformer 모델과 같이 API를 호출할 시기를 학습한 도구 강화 언어 모델과 추론과 행동을 교차하는 ReAct 패턴(2022)에 대한 초기 연구의 영향을 받았다. 이러한 접근 방식은 LLM이 명시적 도구 호출의 이점을 얻을 수 있음을 보여주었지만, 맞춤형 훈련이나 프롬프팅이 필요했다. 함수 호출은 이를 간단한 API 계약으로 표준화하여 모든 개발자가 접근할 수 있게 했다.
기술적 메커니즘
함수 호출은 표준 LLM 추론 루프 내에서 작동한다. 개발자는 사용자 프롬프트와 함수 정의 목록을 포함하는 요청을 API에 보낸다. 각 정의는 일반적으로 이름, 설명, 매개변수를 지정하는 JSON 스키마를 포함한다. 모델은 이 입력을 처리하고 일반 텍스트 응답 또는 구조화된 함수 호출을 생성한다. 예를 들어 OpenAI API에서 모델은 함수 이름과 인수를 JSON 문자열로 포함하는 응답의 tool_calls 필드를 반환한다.
모델이 유효한 구조화된 출력을 생성하는 능력은 JSON 및 기타 구조화된 형식을 포함하는 대규모 말뭉치에 대한 훈련과 명령 튜닝 및 인간 피드백 기반 강화 학습(RLHF)에 의해 가능해진다. 일부 구현은 출력이 구문적으로 유효함을 보장하기 위해 제약 디코딩 또는 문법 기반 샘플링을 사용하지만, 대부분의 현대 LLM은 이러한 제약 없이도 높은 신뢰성으로 올바른 JSON을 생성할 수 있다.
모델이 함수 호출을 출력한 후 애플리케이션은 샌드박스 또는 신뢰된 환경에서 함수를 실행하고 결과(문자열, 숫자 또는 복잡한 객체일 수 있음)를 캡처하여 후속 요청에서 모델에 다시 보낸다. 그러면 모델은 도구 결과를 통합한 최종 응답을 생성한다. 이 루프는 여러 번 반복될 수 있어 모델이 복잡한 작업을 완료하기 위해 여러 함수 호출을 연결할 수 있다.
사용 사례 및 응용
함수 호출은 다양한 실용적인 응용을 가능하게 한다. 일반적인 사용 사례는 실시간 데이터 검색이다. 사용자가 현재 주가, 날씨 또는 스포츠 점수에 대해 질문하면 모델은 최신 데이터를 가져오기 위해 외부 API를 쿼리하는 함수를 호출한다. 또 다른 사례는 데이터베이스 상호 작용으로, 모델이 자연어 쿼리를 SQL 또는 기타 쿼리 언어로 변환하고 데이터베이스에 대해 실행하여 결과를 사용자에게 반환한다.
기업 환경에서 함수 호출은 주문 상태를 조회하고, 기록을 업데이트하거나, 문제를 에스컬레이션할 수 있는 고객 서비스 챗봇을 지원한다. 소프트웨어 개발에서는 AI 어시스턴트가 코드를 실행하고, 테스트를 수행하거나, 버전 관리 시스템과 상호 작용할 수 있게 한다. 자동화에서는 모델이 스마트 홈 기기를 제어하고, 메시지를 보내거나, 약속을 예약할 수 있게 한다. 이 메커니즘은 모델이 일련의 작업을 계획하고 각 단계를 실행하기 위해 함수를 호출하고 결과에 따라 반복하는 에이전트형 프레임워크의 중심이기도 하다.
에이전트형 시스템과의 통합
함수 호출은 모델이 단순히 대화하는 것이 아니라 사용자를 대신해 행동하는 에이전트형 AI의 기초 구성 요소이다. 에이전트는 함수 호출을 사용하여 사용자의 목표를 하위 작업으로 분해하고, 정보를 수집하기 위해 검색 함수를 호출하고, 데이터를 처리하기 위해 계산 함수를 호출한 다음, 결과를 전달하기 위해 메시징 함수를 호출할 수 있다. 함수를 호출할 시기와 결과를 해석하는 방법을 결정하는 모델의 능력은 효과적인 에이전트 동작에 중요하다.
LangChain, LlamaIndex, AutoGPT와 같은 프레임워크는 함수 호출을 활용하여 복잡한 워크플로우를 조율한다. 이러한 프레임워크는 도구 정의, 대화 상태 관리, 오류 처리를 위한 추상화를 제공한다. 함수 호출의 부상은 개발자가 함수 정의를 공유하고 재사용할 수 있는 도구 레지스트리와 마켓플레이스의 개발로 이어졌다.
대안적 접근 방식과의 비교
함수 호출 이전에 개발자는 LLM에 도구 접근 권한을 부여하기 위해 여러 가지 해결 방법을 사용했다. 한 가지 접근 방식은 프롬프트 엔지니어링으로, 모델에게 특정 형식(예: "'action'과 'action_input'을 포함하는 JSON 객체로 응답하세요")을 출력하도록 지시하고 애플리케이션이 해당 출력을 구문 분석하는 것이었다. 이는 모델이 형식에서 벗어날 수 있어 취약했다. 또 다른 접근 방식은 파인튜닝으로, 도구 사용 예제에 대해 모델을 훈련했지만 상당한 데이터와 컴퓨팅이 필요했다.
함수 호출은 모델이 명시적으로 따르도록 훈련된 구조화된 API를 제공하여 이러한 방식을 개선한다. 구문 분석 오류를 줄이고, 신뢰성을 향상시키며, 개발자 경험을 단순화한다. 그러나 한계가 없는 것은 아니다. 모델은 존재하지 않는 함수 호출을 환각하거나, 잘못된 인수를 생성하거나, 필요할 때 함수를 호출하지 못할 수 있다. 개발자는 이러한 문제를 완화하기 위해 검증 및 오류 처리를 구현해야 한다.
보안 및 신뢰성 고려 사항
함수 호출은 모델의 출력이 직접 작업을 트리거하므로 보안 위험을 도입한다. 악의적인 프롬프트는 모델을 속여 데이터 삭제나 무단 메시지 전송과 같은 유해한 인수로 함수를 호출하게 할 수 있다. 개발자는 함수 인수의 엄격한 검증을 구현하고, 허용된 함수의 허용 목록을 사용하며, 최소 권한 접근 권한으로 샌드박스 환경에서 함수를 실행해야 한다.
신뢰성도 또 다른 우려 사항이다. 모델은 구문적으로 유효하지만 의미적으로 잘못된 인수를 생성하거나 잘못된 함수를 호출할 수 있다. 퓨샷 프롬프팅, 더 나은 함수 설명, 사후 검증과 같은 기술은 정확성을 향상시킬 수 있다. 일부 제공업체는 JSON 스키마 준수를 강제하는 구조화된 출력 모드를 제공하여 잘못된 호출의 위험을 줄인다.
향후 방향
함수 호출은 빠르게 진화하고 있다. 연구자들은 올바른 함수를 선택하고, 모호한 프롬프트를 처리하며, 오류에서 복구하는 모델의 능력을 개선하는 방법을 탐구하고 있다. 모델이 병렬 또는 순차적으로 함수를 호출할 수 있는 다중 턴 함수 호출이 더 일반화되고 있다. 또한 함수 정의에 사용되는 토큰 수를 줄이고 도구 스키마를 캐싱하여 함수 호출을 더 효율적으로 만드는 작업도 진행 중이다.
LLM이 더 강력해짐에 따라 함수 호출은 메모리, 계획, 멀티모달 입력과 같은 다른 기능과 더 통합될 가능성이 높다. 함수 호출과 일반 도구 사용 사이의 경계는 흐려지고 있으며, 일부 모델은 명시적 정의 없이 코드를 직접 호출하거나 API를 사용할 수 있다. OpenAI 호환 API와 같은 제공업체 간 함수 호출 형식의 표준화는 상호 운용 가능한 도구와 에이전트의 생태계를 만드는 데 도움이 되고 있다.