Function Calling

1. 개념

LLM이 “구조화된 방식”으로 “외부 함수(코드)”를 호출하도록 만드는 기능

== LLM에게 “자연어 → 함수 호출(JSON)” 변환 능력을 주는 것

== “모델이 스스로 적절한 함수를 선택”해 올바른 파라미터로 호출하도록 하는 기능


한 줄 요약 = LLM이 함수 호출 형태(JSON)를 자동 생성해서, 외부 코드·API·DB와 연결되도록 해주는 기능.


2. 필요성

LLM은 자연어 처리에는 강하지만….

  • 계산(예: 날짜 계산, 복잡한 수학)
  • 데이터베이스 조회
  • API 호출
  • 특정 비즈니스 로직 실행

같은 정확한 작업은 직접 수행할 수 없음


\(\rightarrow \therefore\) LLM이 “함수 호출을 구조적으로 만들어주는 역할”을 하게 함 + 실제 실행은 다른 코드가!


2. Function Calling이 하는 일

유저 입력: “내일 서울 날씨 알려줘”

LLM은 자연어로 답변하는 대신…

{
  "name": "getWeather",
  "arguments": {
    "location": "Seoul",
    "date": "2025-03-19"
  }
}

처럼 정확한 함수 호출 JSON을 만들어서 반환.


함수 스펙 (후보군)

  • 개발자가 API에 “함수 정의(schema)”로 사전 제공함)


여기서:

  • 어떤 함수를 호출할지 LLM이 선택
  • 함수 인자들을 정확한 JSON으로 구성


3. 실제 시스템 흐름

Step 1) 개발자가 함수들을 정의함

{
  "name": "getWeather",
  "description": "특정 날짜의 날씨를 가져오는 함수",
  "parameters": {
    "type": "object",
    "properties": {
      "location": { "type": "string" },
      "date": { "type": "string" }
    },
    "required": ["location", "date"]
  }
}


Step 2) 유저 질문 → 모델 호출

모델은 자연어를 이해하고 함수 호출 JSON으로 응답.


Step 3) 개발자 코드가 그 JSON을 받아 함수 실행

(ex. 외부 기상 API 호출)

  • 실행 결과를 다시 모델에 전달하면, LLM이 최종 문장으로 포맷팅해준다.


4. Function Calling의 장점

  • 자연어 → 정형화된 API 호출 자동 변환
    • LLM이 “적절한 함수/적절한 파라미터”를 자동으로 선택
  • 강력한 툴 사용 가능
    • LLM이 직접 계산할 필요 없이
    • 코드/DB/API 호출을 사용
  • 오탈자·형식 오류 없음
    • LLM이 JSON schema를 보고 정확히 맞춘 형식으로 출력
  • 안전하고 deterministic한 통합
    • 자연어 hallucination 없이 함수 호출만 하게 만들 수 있음.


5. 비유

  • LLM은 “똑똑한 비서”이고,

  • function calling은 “비서가 정보를 구조화해서 업무 요청을 만드는” 과정.


비서는 직접 날씨를 아는 게 아니라,

→ 날씨 API를 호출하는 “요청서(JSON)”를 만들어주고

→ 개발자가 그 요청을 실제로 처리하는 것.

Categories:

Updated: