펑션 콜링 Function Calling

개념

펑션 콜링(Function Calling)은, GPT와 같은 LLM 모델에게 특정한 기능을 가진 함수에 대한 설명을 제공하고, 모델이 상황에 맞게 그 함수를 호출하여 추가적인 기능이나 문맥을 확보하도록 하는 기법입니다.

단순 텍스트 생성 모델인 LLM의 한계를 극복하고, 특정 기능을 수행하거나 실시간 정보를 알 수 있게 하기 위해 사용됩니다.

아키텍처 및 흐름도

  • 사용자의 질의에 더해 호출 가능한 도구 리스트가 함께 LLM에게 전달됩니다.
  • LLM은 질의와 도구목록을 보고, 필요한 경우 특정 도구를 호출합니다.
  • LLM 의 펑션 콜링에 대해, 애플리케이션단에서 함수가 동작하고
  • 함수의 결과물을 지금까지의 대화 맥락과 함께 다시 LLM에게 전달합니다.
  • LLM은 대화 맥락 및 함수 결과물을 참고하여 최종 답변을 합니다.

메시지 흐름

  1. 🧑‍💻 사용자 : 현재 서울은 몇시야?

  2. 애플리케이션 : 사용자의 발화 + 사용 가능한 펑션에 대한 정보를 송신

1
2
3
4
5
[
  {"role":"user", "content":"현재 서울은 몇시야?"}
]

+ tool_list
  1. 🤖 LLM : 사용자 발화와 사용 가능한 펑션을 참고해, 필요한 펑션 호출
1
2
3
4
5
6
[
  {"role":"user", "content":"현재 서울은 몇시야?"},
  {"role":"asst", "function": {"name":"get_current_time",
	                           "argument":"Asia/Seoul",
	                           "function_id":"1234"}}
]
  1. 애플리케이션 : 펑션 콜링에 따른 작업을 수행하고, 대화 이력과 펑션 결과값을 LLM에 반환하며 최종 답변 요청
1
2
3
4
5
[
  {"role":"user", "content":"현재 서울은 몇시야?"},
  {"role":"asst", "function": {"name":"get_current_time", "argument":"Asia/Seoul", "function_id":"1234"}}
  {"role":"func",	"function_id":"1234", "content":"(2026, 02, 02, 07, 00, 00, 000)"}
]
  1. 🤖 LLM : 사용자의 발화와 펑션 결과를 참고해 최종 답변 수행
1
2
3
4
5
6
[
  {"role":"user", "content":"현재 서울은 몇시야?"},
  {"role":"asst", "function": {"name":"get_current_time", "argument":"Asia/Seoul", "function_id":"1234"}}
  {"role":"func",	"function_id":"1234", "content":"(2026, 02, 02, 07, 00, 00, 000)"},
  {"role":"asst", "content":"현재 서울은 2026년 2월 2일  7시 00분 00초입니다."}
]
  1. 최종 답변 : LLM : 현재 서울은 2026년 2월 2일 7시 00분 00초입니다.

코드적 구성 요소

1. 도구(펑션, 함수)

  • 실제 특정한 기능을 수행하는 함수입니다.
  • 함수 실행에 필요한 인자(argument)가 있을 수도, 없을 수도 있습니다.
1
2
3
4
5
def get_current_time(timezone="Asia/Seoul"):
    tz = pytz.timezone(timezone)
    now = datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
    now_timezone = f"{now} {timezone}"
    return now_timezone

2. 도구 목록

  • LLM이 호출 가능한 도구(펑션)의 목록입니다.
  • 목록에는 도구(펑션)의 이름, 사용방법, 요구 인자 등이 포함되어야 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
get_current_time_def= {
        "type": "function",
        "function": {
            "name": "get_current_time",
            "description": "해당 타임존의 날짜와 시간을 반환합니다.",
            "parameters": {
                "type":"object",
                "properties":{
                    "timezone": {
                        "type":"string",
                        "description":"현재 날짜와 시간을 반환할 타임존을 입력하세요.(예. Aisa/Seoul)",
                    }
                },
                "required":["timezone"]
            }
        }
    }

...(다른 펑션들 중략)...

tools = [get_current_time_def, func_2, ... func_n]

3. LLM 호출시

  • LLM에 요청을 할 때, 사용 가능한 도구(펑션) 목록 함께 제공합니다.
1
2
3
4
5
# 예시 : OpenAI
from openai import OpenAI

client = OpenAI(api_key = api_key)
response = client.chat.complettions.create( ... tools = tools ... )

Reference

Do it! LLM을 활용한 AI 에이전트 개발 입문 - 이성용 저
https://digitalbourgeois.tistory.com/1887

Comments