LLM은 기본적으로 텍스트를 입력받아 텍스트를 생성하는 모델이다. 하지만 실제 서비스에서는 모델이 혼자 처리할 수 없는 외부 작업이 필요할 때가 많다.
예시는 다음과 같다.
- 최신 날씨 조회
- 데이터베이스 조회
- 계산
- 이메일 전송
- 웹 검색
- 코드 실행
Function Calling은 LLM이 필요한 외부 기능을 판단하고, 해당 기능을 호출할 수 있도록 구조화된 요청을 만드는 방식이다. 최근에는 함수뿐 아니라 다양한 외부 기능을 사용한다는 의미에서 Tool Use라고도 부른다.
사용자가 다음과 같이 요청했다고 가정한다.
서울 날씨 알려줘LLM은 최신 날씨 정보가 필요하다고 판단할 수 있다. 이때 LLM이 직접 날씨 API를 실행하는 것이 아니라, 호출해야 할 도구와 인자를 구조화해서 만든다.
{
"tool": "getWeather",
"arguments": {
"city": "Seoul"
}
}그 다음 실제 실행은 애플리케이션 서버나 런타임이 담당한다.
사용자 요청
-> LLM이 도구 필요 여부 판단
-> LLM이 도구 이름과 인자 생성
-> 애플리케이션 서버가 실제 API 또는 DB 실행
-> 실행 결과를 다시 LLM에게 전달
-> LLM이 최종 자연어 응답 생성Function Calling에서 중요한 점은 LLM과 외부 시스템의 역할이 다르다는 것이다.
LLM의 역할:
- 어떤 도구가 필요한지 판단한다.
- 도구에 넘길 인자를 만든다.
- 도구 실행 결과를 바탕으로 최종 응답을 작성한다.
외부 시스템의 역할:
- 실제 API를 호출한다.
- DB를 조회한다.
- 이메일을 전송한다.
- 계산이나 코드 실행을 수행한다.
- 실행 결과를 LLM에게 다시 전달한다.
즉 LLM은 “실행자”라기보다 “도구 사용 계획과 호출 요청을 만드는 주체”에 가깝다. 실제 실행은 권한과 네트워크 접근을 가진 애플리케이션 서버가 담당한다.
LLM 단독으로는 다음 한계가 있다.
- 최신 정보에 접근할 수 없다.
- 외부 서비스나 DB에 직접 접근할 수 없다.
- 정확한 계산이나 검증이 필요한 작업에서 실수할 수 있다.
- 사용자 계정 권한이 필요한 작업을 직접 수행할 수 없다.
Function Calling을 사용하면 LLM의 자연어 이해 능력과 외부 시스템의 정확한 실행 능력을 분리해서 결합할 수 있다.
날씨 조회:
LLM: 날씨 API가 필요하다고 판단
서버: getWeather("Seoul") 실행
LLM: API 결과를 사용자에게 자연어로 설명주문 조회:
LLM: 주문번호가 필요하다고 판단
서버: DB에서 주문 상태 조회
LLM: 배송 상태를 사용자에게 설명계산:
LLM: 계산 도구가 필요하다고 판단
서버: 계산 함수 실행
LLM: 결과와 의미를 설명Function Calling은 LLM이 외부 기능을 “직접 실행”하는 개념이 아니다. LLM은 필요한 도구와 인자를 구조화하고, 실제 실행은 애플리케이션 서버나 외부 시스템이 수행한다.
이 구조를 이해하면 AI 기능을 서비스에 붙일 때 모델, 서버, 도구의 책임을 분리해서 설계할 수 있다.