LLM API의 “Function Calling”

지앵·2025년 9월 22일
post-thumbnail

LLM API의 “Function Calling”이란?

한 줄 정의:
LLM이 “도구(함수/외부 API)”를 직접 호출해야 할 때, 무엇을 호출하고 어떤 인자로 호출할지 모델이 스스로 결정해 구조화된 호출 요청을 만들어 주는 메커니즘이다. 덕분에 모델 답변이 말뿐인 텍스트를 넘어, 실제 DB 조회·결제·검색·자동화 같은 실행으로 연결된다.


1) 왜 필요한가

  • 정확성: 자유 텍스트 대신 JSON 인자 → 파싱/형식 오류 감소
  • 확장성: 날씨, 검색, 결제, DB 등 새 기능을 함수로 노출만 하면됨
  • 책임 분리: 모델은 의사결정, 실행은 백엔드(권한/검증/로깅 담당)

2) 핵심 개념

  • 도구(함수) 카탈로그: name, description, parameters(JSON Schema)
  • tool_choice: auto(모델이 선택), 특정 함수 강제, 호출 금지 등 정책
  • 피드백 루프: 실행 결과를 모델에 다시 투입 → 요약/후속 호출/최종 답변
  • 호스트 책임: 인증/인가, 레이트리밋, 에러 처리, 감사지표

3) 동작 흐름(4단계)

  1. 사용자 질문 입력
  2. LLM이 함수 호출 제안 (예: get_weather + { city:"Seoul", unit:"c" })
  3. 앱이 실제 함수 실행 (외부 API/DB 호출)
  4. 실행 결과 재주입 → 최종 답변 생성 (자연어 요약/연쇄 호출)

4) 아주 간단한 도구 스키마 예 : json

[
  {
    "name": "get_weather",
    "description": "도시의 현재 날씨를 조회",
    "parameters": {
      "type": "object",
      "properties": {
        "city": { "type": "string" },
        "unit": { "type": "string", "enum": ["c", "f"] }
      },
      "required": ["city"]
    }
  }
]
  • 사용자: “오늘 서울 날씨 어때?”
  • LLM 제안: get_weather({"city":"Seoul","unit":"c"})
  • 앱 실행: (예) { "temp_c": 24, "condition": "Cloudy" }
  • 최종 답변: “서울 24°C, 구름 많아요…”

포인트: LLM은 무슨 함수 + 어떤 인자JSON으로 제안할 뿐, 실제 실행은 앱이 한다.

tools = [{
  "name": "book_hotel",
  "description": "도시, 날짜로 호텔 예약",
  "parameters": {
    "type": "object",
    "properties": {
      "city": {"type": "string"},
      "check_in": {"type": "string", "format": "date"},
      "nights": {"type": "integer", "minimum": 1}
    },
    "required": ["city", "check_in", "nights"]
  }
}]

res1 = llm.chat(messages=[{"role":"user","content":"다음 주말 부산 1박 숙소 잡아줘"}],
                tools=tools, tool_choice="auto")

if "tool_call" in res1:
    call = res1["tool_call"]
    result = run_local(call["name"], call["arguments"])  # 실제 API 호출
    res2 = llm.chat(messages=[
        {"role":"user","content":"다음 주말 부산 1박 숙소 잡아줘"},
        res1,  # tool_call 메시지
        {"role":"tool","name":call["name"],"content":json.dumps(result)}
    ], tools=tools)
    print(res2["content"])

용어 정리

  • Function Calling: LLM이 함수 호출을 구조화된 JSON으로 제안하는 기능
  • Tool/Function: 외부 API/내부 서비스·DB 등 실행 단위
  • Tool Result 재주입: 실행 결과를 모델 대화 히스토리에 넣어 맥락 업데이트

0개의 댓글