Tool Use도구 사용
쉽게 이해하기
LLM은 글을 잘 쓰지만, 이메일 보내기나 내부 DB 조회처럼 실제 시스템을 건드리는 일은 직접 할 수 없다. 또 오늘 날짜의 가격처럼 최신 정보나, 반드시 특정 필드가 채워진 JSON 같은 '모양 보장' 출력도 텍스트만으로는 불안하다. 이 공백을 메우는 방식이 바로 도구 사용이다. 비유하자면 모델은 접수 데스크 직원이고, 도구는 각 부서의 업무 시스템이다. 직원(모델)은 어떤 부서(도구)를 어떻게 요청할지 서류(구조화 인자)를 작성해 넘기고, 부서는 실제 처리를 한 뒤 결과를 회신한다. 모델은 그 결과를 다시 읽고 다음에 무엇을 할지 결정해 일을 마무리한다.
동작 메커니즘은 구조화된 호출과 루프다. 모델은 정의된 스키마에 맞춘 호출 블록을 내보내고, 호스트 앱이 이를 실행해 결과 블록을 다음 요청에 첨부한다. 일부 제공자는 웹 검색·코드 실행 같은 서버 실행형 도구를 제공해, 서버 내부 루프가 여러 번 돌고 나서 최종 응답만 전달되기도 한다. 클라이언트 실행형의 경우 응답의 stop_reason이 "tool_use"일 때 호출을 실행·회신하는 루프를 반복해 종료 신호가 올 때까지 진행한다.
비유와 예시
- 사내 비용 리포트 자동 생성: 모델이 회계 API 도구를 호출해 월별 지출을 수집하고, 스프레드시트 작성 도구로 표를 만든다. 앱은 각 도구 실행을 담당하고 모델은 결과를 모아 설명과 함께 보고서를 완성한다.
- 고객 티켓 분류 후 시스템 업데이트: 모델이 텍스트로 티켓을 분류한 뒤, CRM 업데이트 도구를 호출해 상태와 담당자를 변경한다. 변경 기록은 도구 결과로 돌아와 대화 이력에 남는다.
- 테스트 환경 파일 수정과 스크립트 실행: 모델이 파일 편집 도구로 설정을 변경하고, 셸 실행 도구로 테스트 스크립트를 돌린다. 실행 로그가 결과로 반환되고, 모델은 추가 조치 여부를 판단한다.
한눈에 비교
| 도구 사용 (Tool Use) | 순수 LLM 응답 | RAG (검색 증강 생성) | |
|---|---|---|---|
| 외부 데이터/부작용 | 가능(도구가 실행) | 불가(텍스트만) | 읽기 전용 검색 중심 |
| 출력 형태 보장 | 스키마로 강제 | 약함(자유 형식) | 검색 근거 포함 가능하나 형식 강제는 약함 |
| 실행 위치 | 클라/서버 실행 혼재 | 해당 없음 | 검색·임베딩 시스템 |
| 지연/비용 | 호출 루프만큼 증가 | 낮음 | 검색 왕복만큼 증가 |
| 주된 목적 | 행동·통합·정형 출력 | 요약·번역 등 | 최신·외부 지식 보강 |
도구 사용은 행동과 구조 보장이 필요할 때 선택하고, RAG는 근거 기반 최신 정보 보강에 적합하며, 단순 질의·요약은 순수 LLM이 빠르고 경제적이다.
어디서 왜 중요한가
- 실무 루프의 표준화: 클라이언트 실행형에서는 응답의 stop_reason이 "tool_use"일 때 호출을 실행하고 결과를 다시 보내는 루프가 정착해, 앱과 모델의 책임 경계가 명확해졌다.
- 서버 실행형 도구 확산: 웹 검색·코드 실행 등은 서버 내부 루프가 돌고 실행 흔적 메타데이터만 노출되어, 호스트는 활성화와 최종 응답 처리에 집중한다.
- JSON 스키마 기반 선언적 통합: 주요 제공자의 함수/도구 선언을 받아 모델이 호출 결정을 내리고, 호스트가 실행하는 패턴이 일반화되었다.
- 과금/관측 분리 인식: 일부 제공자는 시도된 호출과 성공 호출(과금 기준)을 구분해 노출한다.
- 제한 조건 하 성능 과제 부각: 제약을 엄격히 지키며 도구를 사용하는 과업에서 완수율이 낮게 나오는 평가가 보고되어, 에이전트 견고성 과제가 드러난다.
자주 하는 오해
- 오해: 모델이 도구 코드를 직접 실행한다 → 실제: 모델은 구조화된 호출만 만들고, 실행은 앱이나 제공자 서버가 담당한다.
- 오해: 도구 사용은 웹 브라우징에만 해당한다 → 실제: 파일 편집, 셸 실행, 내부 API 호출, JSON 출력 강제 등 다양한 작업을 포괄한다.
- 오해: 스키마는 대충 정의해도 된다 → 실제: 입력·출력 스키마가 호출 신뢰도와 오류 복구에 큰 영향을 주며, 학습된 표준 스키마는 호출 안정성을 높인다.
대화에서는 이렇게
- "이번 스프린트에서 function calling 스키마 확정해야 모델이 틀린 인자 안 보내요."
- "응답이 stop_reason=tool_use로 왔으니 DB 조회랑 파일 쓰기 도구 실행해서 tool_result로 붙일게요."
- "검색은 서버 실행형으로 켜뒀고, 로컬 실행 필요한 건 클라이언트 도구로 남겨두자."
- "이번 런에서 tool_calls는 8번인데 성공 사용량은 5번이라 과금은 그 기준으로 나왔어요."
- "정형 응답 필요하면 파싱 말고 스키마 필드로 강제하자, 그래야 회귀 테스트가 쉬워요."
함께 읽으면 좋은 용어
참고 자료
- How to implement tool useAnthropic Docs
도구 스키마, tool_use 블록, 호스트 실행, 결과 반환을 다루는 구현 가이드.
- Tool use with ClaudeAnthropic Docs
도구 정의, 클라이언트 실행 책임, tool result 루프를 설명하는 Anthropic 공식 개요.
- ToolsMCP Specification
서버가 노출하고 클라이언트가 호출하는 실행 가능한 도구를 정의하는 MCP 공식 스펙.
- Function callingOpenAI API Docs
스키마 기반 함수/도구 호출과 애플리케이션 실행 경계를 설명하는 공식 문서.
- Function calling with the Gemini APIGoogle AI for Developers
Gemini의 함수 선언, 모델 반환 functionCall, OpenAPI 호환 스키마를 다루는 공식 가이드.