[LLM] 펑션 콜링 function calling 도구 호출
LLM에게 사용 가능한 도구를 쥐어주기
펑션 콜링 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
// reading compass
이 글과 이어지는 경로
시리즈, 카테고리, 태그 겹침, 최신도를 점수화해 가까운 글일수록 중심에 배치합니다.
댓글 남기기