펑션 콜링 Function Calling
개념
펑션 콜링(Function Calling)은, GPT와 같은 LLM 모델에게 특정한 기능을 가진 함수에 대한 설명을 제공하고, 모델이 상황에 맞게 그 함수를 호출하여 추가적인 기능이나 문맥을 확보하도록 하는 기법입니다.
단순 텍스트 생성 모델인 LLM의 한계를 극복하고, 특정 기능을 수행하거나 실시간 정보를 알 수 있게 하기 위해 사용됩니다.
아키텍처 및 흐름도

- 사용자의 질의에 더해 호출 가능한 도구 리스트가 함께 LLM에게 전달됩니다.
- LLM은 질의와 도구목록을 보고, 필요한 경우 특정 도구를 호출합니다.
- LLM 의 펑션 콜링에 대해, 애플리케이션단에서 함수가 동작하고
- 함수의 결과물을 지금까지의 대화 맥락과 함께 다시 LLM에게 전달합니다.
- LLM은 대화 맥락 및 함수 결과물을 참고하여 최종 답변을 합니다.
메시지 흐름
-
🧑💻 사용자 : 현재 서울은 몇시야?
-
애플리케이션 : 사용자의 발화 + 사용 가능한 펑션에 대한 정보를 송신
1
2
3
4
5
| [
{"role":"user", "content":"현재 서울은 몇시야?"}
]
+ tool_list
|
- 🤖 LLM : 사용자 발화와 사용 가능한 펑션을 참고해, 필요한 펑션 호출
1
2
3
4
5
6
| [
{"role":"user", "content":"현재 서울은 몇시야?"},
{"role":"asst", "function": {"name":"get_current_time",
"argument":"Asia/Seoul",
"function_id":"1234"}}
]
|
- 애플리케이션 : 펑션 콜링에 따른 작업을 수행하고, 대화 이력과 펑션 결과값을 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)"}
]
|
- 🤖 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초입니다."}
]
|
- 최종 답변 : 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