Skip to content

Latest commit

 

History

History
109 lines (76 loc) · 3.32 KB

File metadata and controls

109 lines (76 loc) · 3.32 KB

Function Calling

개념

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 기능을 서비스에 붙일 때 모델, 서버, 도구의 책임을 분리해서 설계할 수 있다.