툴 호출 설계 — 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가 “와파린이랑 아스피린 같이 먹어도 되나요?”를 받았을 때:
- 학습 데이터에 의존하지 않고
- search_drug_interaction(“warfarin”, “aspirin”)을 실제로 호출해서
- 최신 데이터베이스 기반으로 답한다
툴 호출 설계의 핵심 원칙
- 최소 권한 원칙 (Least Privilege)
AI에게 필요한 툴만 준다. 읽기만 필요한데 쓰기 권한을 주지 않는다. 환자 기록을 조회하는 AI에게 기록 수정 툴은 줄 필요가 없다.
- 확인 게이트 (Confirmation Gate)
되돌릴 수 없는 행동은 AI가 단독으로 하지 않게 한다.
낮은 위험: 조회, 검색 → AI가 자동으로 실행 가능
중간 위험: 보고서 생성, 초안 작성 → 사용자 검토 후 확정
높은 위험: 처방 전달, 외부 시스템 수정 → 반드시 사람이 확인
- 타임아웃과 재시도
외부 API는 실패한다. 느려진다. 툴 호출 하네스는 이걸 처리해야 한다.
툴 호출 시 설정:
- timeout: 5초
- retry: 최대 2회
- fallback: 실패 시 "현재 약물 DB를 조회할 수 없습니다. 직접 확인해주세요."
- 결과 검증
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가 강력해질수록 툴 호출 하네스의 중요성은 더 커진다.