함수 호출 · 툴 사용
Function Calling / Tool Use
함수 호출이란?
- AI가 외부 도구·API를 스스로 호출
- 대화형을 '실행형'으로 확장
- 에이전트의 손발
함수 호출이 켜지면 모델이 내놓는 출력물의 성격 자체가 달라집니다. 평소처럼 문장을 뱉는 대신 '어떤 함수를 어떤 인자로 불러달라'는 구조화된 요청(대개 JSON)을 내놓고, 실제 실행은 모델 바깥의 우리 시스템이 맡습니다. 모델은 판단하고 실행은 애플리케이션이 하는 분업이 생기는 것이고, 실행 결과를 다시 모델에게 돌려줘야 비로소 사람이 읽을 답변이 완성됩니다. 호출 권한을 끝까지 쥐고 있는 쪽은 개발자라는 점이 이 구조의 출발점입니다.
설계에서 성패가 갈리는 지점은 세 가지입니다. 첫째는 함수 명세로, 이름과 한 줄 설명, 파라미터 타입을 얼마나 또렷하게 적었느냐가 도구 선택 정확도를 좌우합니다. 둘째는 도구 개수로, 후보가 20~30개를 넘어서면 비슷한 함수끼리 혼동이 늘어 앞단에 라우팅 단계를 따로 두는 편이 안전합니다. 셋째는 읽기와 쓰기의 구분입니다. 조회·계산처럼 되돌릴 수 있는 호출과 주문 등록·메일 발송·결제처럼 되돌릴 수 없는 호출을 같은 등급으로 다루면 안 됩니다. RAG와 혼동하기 쉬운 대목인데, RAG는 검색 결과를 미리 넣어주는 방식이고 함수 호출은 부를지 말지를 모델이 그때그때 정한다는 점에서 다릅니다.
현장에서 가장 자주 터지는 사고는 '알아서 하겠지'라는 방심입니다. 함수 설명이 부실하면 모델은 호출을 포기하는 게 아니라 인자를 그럴듯하게 지어냅니다. 존재하지 않는 품번이나 형식이 틀린 날짜가 그대로 운영 DB로 들어가는 식입니다. 호출이 실패했을 때 같은 요청을 무한 반복해 API 한도를 태우거나, 쓰기 함수에 승인 절차 없이 권한을 열어 취소 못 할 주문이 나가는 경우도 있습니다. 모든 호출에 입력값 검증·재시도 상한·실행 로그를 붙이고, 금액이 나가거나 외부로 발송되는 작업은 사람이 마지막 버튼을 누르도록 남겨 두어야 합니다.
대형 언어모델에 외부 도구 사용 능력을 부여하려는 흐름(ReAct 등, 2022)에서 발전했고, AI가 정해진 함수를 호출하는 기능이 표준화되며 에이전트의 기반이 됐습니다.
가상의 사례로 살펴보겠습니다. 임직원 140명, 연매출 620억 원대의 산업용 자재 유통사 A사입니다. 영업지원팀이 하루 70여 건씩 '그 품번 재고 있나요, 납기 언제 나오나요' 전화를 받는데, 답하려면 매번 ERP 화면 두 개를 열어야 했습니다. 사내 챗봇을 붙여 봤지만 '자세한 사항은 담당자에게 문의하세요'만 반복해 석 달 만에 사용률이 바닥을 쳤습니다.
- IT팀 박 팀장이 원인을 짚었습니다. 챗봇이 제품 매뉴얼 PDF만 읽고 있어서, 매 시간 바뀌는 실시간 재고 수치는 애초에 들여다볼 통로가 없었습니다.
- 그래서 ERP의 재고조회와 납기계산 두 가지만 읽기 전용 함수로 열었습니다. 함수 설명란에는 '품번은 8자리 숫자'라고 못 박아 두었습니다.
- 2주 파일럿에서 모델이 없는 품번을 지어내 조회하는 일이 주 17건 나왔습니다. 앞단에 품번 검증 함수를 두고, 형식이 안 맞으면 '품번 8자리를 다시 알려주세요'라고 되묻게 바꿨습니다.
- 주문 등록 함수는 김 영업부장이 막았습니다. '금액 나가는 건 사람이 누릅니다.' 결국 AI는 주문서 초안만 띄우고 담당자가 승인 버튼을 눌러야 전송되도록 했습니다.
- 3개월 뒤 전화 한 건 응대 시간이 평균 4분 30초에서 55초로 줄었고, 영업지원팀 4명이 주당 21시간을 되찾았습니다. 오답 신고는 주 17건에서 2건으로 내려갔습니다.