5장. Function Calling 원리
왜 도구가 필요한가 — 모델은 우리 주문 데이터를 모른다
한 줄 요약
4장에서 만든 분류기는 “주문번호 HR20260701023 지금 어디쯤인가요?”라는 문의를 주문배송조회로 분류하고, 주문번호도 추출했습니다. 하지만 실제 배송 상태까지 알려 주지는 못합니다. 답변에 필요한 정보는 하루마켓의 주문 데이터에 있으며, 모델은 아직 그 데이터를 조회할 수 없기 때문입니다. 이번 장에서는 모델이 함수를 호출해 외부 데이터를 조회하고 답변에 활용하는 방법인 Function Calling의 원리를 배웁니다.
1. 지금까지 만든 것으로 안 되는 일
| 장 | 만든 것 | 주문 조회 문의 앞에서 |
|---|---|---|
| 3장 | 시스템 프롬프트 | 말투는 상담원이 됐지만 "확인 후 안내드리겠습니다"까지입니다. 확인할 방법이 없습니다 |
| 4장 | 의도 분류기 | 주문배송조회라고 분류하고 주문번호를 꺼냈습니다. 그다음이 없습니다 |
3장에서 정리한 문장을 다시 가져옵니다. 프롬프트는 "어떻게 말할지"를 정할 뿐, "무엇이 사실인지"는 정해 주지 못합니다.
2. 모델이 알 수 없는 세 가지
LLM은 어느 시점까지 모은 글로 학습한 뒤 고정됩니다. 그 시점을 지식 컷오프(knowledge cutoff) 라고 합니다. 그리고 학습에 쓰인 글은 공개된 글입니다. 따라서 모델이 원리상 알 수 없는 정보는 세 종류입니다.
| 갈래 | 예 | 왜 모르는가 |
|---|---|---|
| 실시간 정보 | 지금의 배송 위치, 현재 재고 | 학습이 끝난 뒤에 생긴 일입니다 |
| 사내 정보 | 하루마켓의 주문 데이터, 내부 규정 | 공개된 적이 없어 학습 자료에 없습니다 |
| 개인 정보 | 지금 묻는 고객이 누구이고 무엇을 샀는지 | 위 둘에 모두 해당합니다 |
1장에서 본 문의 로그를 떠올려 보세요. 고객지원 문의의 대부분이 정확히 이 세 갈래를 묻습니다.
3. 모르는 것을 물으면
모델에게 모르는 것을 물으면 "조회할 수 없습니다" 라고 하거나, 그럴듯한 말로 빈자리를 채웁니다. 두 번째 경우가 1장에서 정의한 환각(hallucination) 입니다. 어느 쪽이든 고객의 문의는 해결되지 않습니다. 필요한 것은 모델이 데이터를 조회할 수 있게 하는 일입니다.
4. 이걸 모르면 무엇을 판단하지 못하는가
- 모델의 답이 데이터에서 온 것인지, 지어낸 것인지 가려내지 못합니다.
- "AI가 주문을 조회했다"는 말에서 실제로 조회한 것이 누구인지 설명하지 못합니다. 이것을 모르면 어디에 검사를 넣어야 하는지도 모릅니다.
- 모델이 할 수 있는 일의 범위를 누가 정하는지 알지 못합니다. 환불 실행 같은 위험한 일을 어떻게 막는지 답할 수 없습니다.
5. 이번 장에서 하는 것
Function Calling(함수 호출) 은 모델에게 "쓸 수 있는 도구 목록"을 알려 주고, 모델이 그중 무엇을 어떤 값으로 부를지 결정하게 하는 기능입니다. 실제 실행은 우리 코드가 합니다.
이번 장에서는 주문 조회 도구 하나를 붙이고, 질문이 답으로 바뀌기까지의 과정을 한 단계씩 손으로 돌려 봅니다. 도구의 내용은 일부러 가짜로 둡니다. 이번 장의 목적은 조회가 아니라 오가는 구조를 눈으로 보는 것입니다. 진짜 데이터는 6장에서 연결합니다.
핵심 정리
- 모델은 실시간 정보, 사내 정보, 개인 정보를 원리상 알 수 없습니다.
- 모델 안에 없는 정보는 물어도 나오지 않습니다. 데이터를 가져다줄 장치가 필요합니다.
- 프롬프트와 구조화 출력으로는 모델 안에 없는 사실을 꺼낼 수 없습니다.
- Function Calling은 모델이 바깥의 데이터에 손을 뻗게 하는 장치입니다.
- 이번 장은 도구 하나로 오가는 구조를 확인합니다.