툴 호출 설계 — AI에게 올바른 도구를 쥐여주는 법

…

한줄 요약

툴 호출은 AI에게 손을 달아주는 것이다 — 손이 생기면 할 수 있는 게 많아지지만, 잘못 달면 사고가 난다.

본문

툴 호출이 생기기 전

초창기 AI 챗봇은 텍스트만 생성했다. 계산을 물어보면 계산 결과처럼 생긴 텍스트를 만들어냈다 — 때로는 틀렸다. 오늘 날씨를 물어보면 그럴싸한 날씨 설명을 지어냈다 — 거짓말이었다.

AI는 사전학습 데이터의 패턴을 따라 텍스트를 생성할 뿐이었다. 실제 세계와 연결된 게 아니었다.

2023년 OpenAI가 ChatGPT에 “Function Calling”을 도입하면서 달라졌다. AI가 스스로 외부 함수를 호출할 수 있게 됐다. 이제 계산은 실제 계산기가 하고, 날씨는 실제 기상 API가 답한다.


툴 호출이 동작하는 방식

사용자: “서울 지금 날씨 알려줘”

1. AI가 질문 분석
   → "날씨 정보가 필요하다. 내 학습 데이터에는 없다."
   → "weather_api 툴을 써야겠다."

2. AI가 툴 호출 요청 생성
   → { "tool": "weather_api", "params": { "city": "Seoul" } }

3. 시스템이 실제 API 호출
   → weather_api("Seoul") → { "temp": 12, "condition": "맑음" }

4. 결과를 AI에게 돌려줌
   → AI가 결과를 바탕으로 자연어 응답 생성

5. 최종 응답
   → "서울은 현재 12도이며 맑습니다."

AI는 직접 인터넷에 접속한 게 아니다. 시스템이 API를 호출하고 결과를 AI에게 먹여준 것이다. 이 과정 전체가 툴 호출 하네스다.


의료 현장 툴 호출 설계 예시

병원 AI 어시스턴트에 연결할 수 있는 툴들:

사용 가능한 툴 목록:

1. search_drug_interaction(drug1, drug2)
   → 약물 상호작용 데이터베이스 조회
   → 반환: 상호작용 심각도, 기전, 대안

2. lookup_icd10(description)
   → 증상·질환 설명으로 ICD-10 코드 검색
   → 반환: 코드 목록 및 설명

3. get_clinical_guideline(condition, guideline_source)
   → 진료 가이드라인 DB 조회 (ACC/AHA, KSSO 등)
   → 반환: 권고 등급, 핵심 권고 내용

4. calculate_risk_score(score_type, params)
   → CHADS2, CHA2DS2-VASc, GRACE score 등 계산
   → 반환: 점수 및 위험 분류

이 툴들이 있으면 AI가 “와파린이랑 아스피린 같이 먹어도 되나요?”를 받았을 때:

  1. 학습 데이터에 의존하지 않고
  2. search_drug_interaction(“warfarin”, “aspirin”)을 실제로 호출해서
  3. 최신 데이터베이스 기반으로 답한다

툴 호출 설계의 핵심 원칙

  1. 최소 권한 원칙 (Least Privilege)

AI에게 필요한 툴만 준다. 읽기만 필요한데 쓰기 권한을 주지 않는다. 환자 기록을 조회하는 AI에게 기록 수정 툴은 줄 필요가 없다.

  1. 확인 게이트 (Confirmation Gate)

되돌릴 수 없는 행동은 AI가 단독으로 하지 않게 한다.

낮은 위험: 조회, 검색 → AI가 자동으로 실행 가능
중간 위험: 보고서 생성, 초안 작성 → 사용자 검토 후 확정
높은 위험: 처방 전달, 외부 시스템 수정 → 반드시 사람이 확인
  1. 타임아웃과 재시도

외부 API는 실패한다. 느려진다. 툴 호출 하네스는 이걸 처리해야 한다.

툴 호출 시 설정:
- timeout: 5초
- retry: 최대 2회
- fallback: 실패 시 "현재 약물 DB를 조회할 수 없습니다. 직접 확인해주세요."
  1. 결과 검증

API가 돌려준 값을 그냥 AI에게 넣지 않는다. 스키마 검증, 값 범위 확인, 이상값 탐지를 거친다.


툴 호출이 잘못될 때

할루시네이션 툴 호출: AI가 존재하지 않는 툴을 호출하려 한다. 하네스가 잡아야 한다.

인피니트 루프: AI가 툴 A를 호출 → 결과를 보고 툴 A를 또 호출 → 반복. 최대 호출 횟수 제한이 필요하다.

툴 결과 오해석: API가 에러 코드를 반환했는데 AI가 이걸 정상 데이터로 해석한다. 에러 형식을 명확히 정의해야 한다.

지나친 툴 의존: AI가 간단한 질문에도 불필요하게 툴을 여러 번 호출한다. 비용과 속도 문제가 생긴다.


AI 에이전트와 툴 호출

현재 AI 에이전트(agent)는 대부분 “반복적인 툴 호출”로 동작한다.

목표: "이 환자의 최근 3개월 검사결과를 요약하고 이상치가 있으면 알려줘"

루프:
1. get_lab_results(patient_id, days=90) 호출
2. 결과 분석: "CBC에 이상치 있음"
3. get_reference_range("WBC") 호출
4. 비교: "WBC 12,000 → 정상 상한 초과"
5. 응답 생성: 요약 + 이상치 강조

이 루프를 제어하는 것 — 언제 멈출지, 어떤 순서로 호출할지, 실패하면 어떻게 할지 — 이 전부가 하네스 설계다.

AI가 강력해질수록 툴 호출 하네스의 중요성은 더 커진다.