🔧
Tool Use 패턴 — LLM에 손과 발을 달아주기
함수 호출을 통해 LLM이 외부 세계와 상호작용하는 구조
LLM은 "오늘 날씨가 어때?"에 진짜 날씨 API를 호출할 수 없다. 학습 데이터에서 추론할 뿐. 도구를 연결하면 달라진다.
동작 원리
- LLM에 도구 스키마 전달: "넌
get_weather(city: string)함수를 쓸 수 있어" - 사용자: "서울 날씨 알려줘"
- LLM 응답:
tool_use: get_weather(city="Seoul") - 클라이언트가 실제 API 호출 → 결과를 LLM에 전달
- LLM이 결과를 자연어로 정리: "서울은 현재 18°C, 맑음입니다."
LLM이 직접 API를 호출하는 게 아니다. "이 도구를 이 파라미터로 호출해줘"라고 요청하면, 클라이언트(개발자 코드)가 실행하고 결과를 돌려주는 구조.
좋은 도구 설계
이름이 명확해야: read_file, search_code, run_test — 이름만 봐도 뭘 하는지 알 수 있어야.
설명이 자세해야: LLM은 도구 설명을 보고 언제 쓸지 결정한다. "파일을 읽습니다"보다 "지정된 경로의 파일 내용을 텍스트로 반환합니다. 바이너리 파일은 지원하지 않습니다"가 낫다.
파라미터가 간결해야: 필수 파라미터를 최소화하고, 옵셔널은 적절한 기본값을 설정.
결과가 유용해야: 성공/실패 여부, 에러 메시지, 실행 결과를 구조적으로 반환.
MCP (Model Context Protocol)
Anthropic이 만든 도구 표준화 프로토콜. 도구를 만드는 사람과 쓰는 사람(LLM/에이전트)을 분리한다.
MCP 서버가 도구를 제공하고, MCP 클라이언트(에이전트)가 연결해서 사용하는 구조. 도구를 한 번 만들면 여러 에이전트에서 재사용할 수 있다.
동작 흐름
1
LLM API 호출 시 tools 파라미터에 사용 가능한 도구 스키마 전달
2
LLM 응답에 tool_use가 포함되면 해당 함수를 실행
3
실행 결과를 tool_result로 메시지에 추가 → LLM 재호출
4
MCP를 사용하면 도구를 서버로 분리하여 여러 에이전트에서 재사용
사용 사례
챗봇에 DB 조회, 이메일 발송, 결제 처리 기능 추가
코딩 에이전트에 파일 읽기/쓰기, 터미널 실행 도구 제공