실무AI 기초 및 활용 11회 — AI는 어떻게 도구를 선택할까? — 도구 호출
실무AI 기초 및 활용 · 11회 / 전체 12회
실무자도 놓치기 쉬운 AI 원리를 질문과 실험으로 확인합니다.
AI를 업무에 사용해본 분을 위한 강의입니다. 아래 실습은 독자 재현을 위한 절차이며 이 글에서 실행한 측정 결과를 뜻하지 않습니다.
AI가 검색했다고 말하면 정말 검색했을까요?
답변에 ‘검색했습니다’라는 문장이 있다고 외부 검색이 실행된 것은 아닙니다. 실제 도구 요청과 실행 기록, 반환 결과가 있어야 합니다. 도구 호출은 모델의 언어 출력과 프로그램의 실행을 연결하는 구조입니다.
이번 강의의 목표
읽기 전용 문서 검색 도구 하나를 모델에 연결합니다. 도구 정의, 호출 요청, 인자 검증, 실행, 결과 반환의 역할을 구분합니다. 외부 쓰기나 공개 발행을 자동으로 수행하는 예제는 포함하지 않습니다.

모델이 요청하고 코드가 실행합니다
모델은 도구 이름과 인자를 제안할 수 있습니다. 실제 기능을 실행할지 결정하고 실행하는 주체는 애플리케이션입니다. 모델이 고른 인자를 그대로 신뢰하지 않는 것이 설계의 출발점입니다.
도구 설명
도구가 할 수 있는 일과 할 수 없는 일, 언제 써야 하는지 명확히 씁니다. 비슷한 도구가 많으면 선택이 혼란스러울 수 있습니다. 사람이 설명만 읽고 구분하기 어렵다면 모델에도 어려울 가능성이 있습니다.

입력 스키마
검색어, 결과 수 같은 항목의 자료형과 필수 여부를 정의합니다. 스키마는 호출 형식을 제한하는 데 도움을 줍니다. 그러나 올바른 문자열에 권한 없는 문서명이 들어갈 수 있으므로 형식 검사와 권한 검사는 별도입니다.
도구 이름과 범위
‘모든 작업’처럼 포괄적인 이름보다 목적이 분명한 작은 도구로 시작합니다. 문서 검색과 문서 삭제를 한 도구의 옵션으로 묶으면 위험한 분기가 숨을 수 있습니다. 읽기와 쓰기를 분리하면 권한을 이해하기 쉽습니다.

읽기 전용 검색 예시
가상의 search_docs(query, limit)는 허용 문서의 제목, 근거 조각, 식별자를 반환합니다. 이 이름은 설명용 예시입니다. 실제 검색 함수가 사용자의 권한을 적용하고 결과 수를 제한하도록 구현해야 합니다.
호출 요청을 해석하기
모델 응답에 도구 호출이 있으면 이름과 인자를 파싱합니다. 허용 목록에 없는 이름은 실행하지 않습니다. 도구를 쓰지 않고 답한 경우도 정상일 수 있으므로 모든 질문에서 호출을 강제할 필요는 없습니다.

인자 검증
빈 검색어, 지나치게 큰 결과 수, 잘못된 자료형을 검사합니다. 검색어를 셸 명령이나 SQL 문자열에 그대로 이어 붙이지 않습니다. 외부 입력을 다루는 기존 소프트웨어 검증 원칙이 그대로 적용됩니다.
권한 검증
모델이 특정 문서를 요청해도 사용자가 읽을 권한이 없으면 반환하지 않습니다. 도구 설명에 ‘권한을 지켜라’라고 쓰는 것만으로는 부족합니다. 실제 검색 코드와 저장소 접근에서 권한을 강제합니다.

결과를 모델에 돌려주기
호출 식별자와 대응하는 결과를 전달하고 모델이 이를 바탕으로 최종 답을 만들게 합니다. 구체적인 메시지 구조는 API마다 다릅니다. 다른 호출의 결과가 섞이지 않도록 식별자와 요청 단위를 관리합니다.
결과 크기 제한
너무 많은 원문을 반환하면 입력 예산과 지연이 커집니다. 기본 결과 수와 최대 길이를 정하고 원문 링크를 포함합니다. 잘라냈다면 잘렸다는 사실을 알려 정보 누락을 전체 내용으로 오인하지 않게 합니다.

오류 반환
검색 실패와 검색 결과 없음은 다릅니다. 오류를 구조화해 모델과 앱이 구분할 수 있게 합니다. 내부 스택이나 인증정보는 사용자 응답에 노출하지 않고, 추적에 필요한 안전한 오류 종류를 기록합니다.
호출 반복
검색 결과가 부족하면 재검색을 요청할 수 있습니다. 무제한 반복 대신 호출 수, 시간, 비용 한도를 둡니다. 같은 검색어로 같은 결과만 반복한다면 진전이 없는 것으로 분류할 기준이 필요합니다.

MCP의 위치
MCP는 도구와 자료를 연결하기 위한 프로토콜입니다. 호스트·클라이언트·서버가 정보를 교환하는 규약이며 모델이 어떤 도구를 고를지 전부 결정하는 것은 아닙니다. MCP를 쓰지 않는 함수 호출도 가능하고 둘을 함께 쓸 수도 있습니다.
연결 성공과 업무 성공
서버 연결이나 도구 목록 조회가 성공해도 검색 결과가 적절하다는 뜻은 아닙니다. 연결, 호출, 결과, 최종 답변을 각각 확인해야 합니다. 도구 설치 완료를 실무 기능 완성으로 보고하지 않습니다.

실습 준비
이후는 실행 절차입니다. 민감정보 없는 가상 문서 검색 함수와 질문 묶음을 준비합니다. 도구 없이 답할 질문, 검색이 필요한 질문, 권한 없는 문서를 요구하는 질문을 포함합니다.
정상 호출 검사
검색이 필요한 질문에서 적절한 도구와 검색어를 선택하는지 봅니다. 호출 횟수, 인자, 결과 식별자를 기록합니다. 최종 답변이 도구 결과를 사용했는지도 확인해야 합니다.
읽기 전용 연결의 의사코드
request = model.choose_tool(question, tool_schema)
validate_schema(request.arguments)
check_allowlist(request.name)
result = search_allowed_documents(user, request.arguments)
answer = model.answer_with_tool_result(question, result)
verify_citations(answer, result)흐름을 설명하는 의사코드입니다. 실제 API의 메시지 형식·호출 식별자·오류 처리는 사용 중인 공식 SDK 문서에 맞춰 구현합니다.

잘못된 인자 검사
결과 수 초과나 잘못된 자료형을 주었을 때 코드가 거부하는지 확인합니다. 모델이 스스로 수정할 기회를 줄 수 있지만 반복 한도는 유지합니다. 오류를 감추고 성공한 결과처럼 반환하지 않습니다.
결과 없음과 장애 검사
가상 검색 결과 없음과 서비스 오류를 각각 만들어 처리합니다. 없는 자료를 찾았다고 말하는지, 오류를 자료 부재로 바꾸는지 확인합니다. 실제 외부 서비스를 망가뜨리지 않고 모의 결과로 시험할 수 있습니다.

실행 기록
요청, 선택 도구, 검증 결과, 실행 시간, 안전한 결과 요약을 남깁니다. 개인정보나 비밀 원문을 무조건 저장하지 않습니다. ‘실행 요청’과 ‘실행 완료’ 상태를 나누면 중간 실패를 추적하기 쉽습니다.
외부 자료와 지시 경계
검색된 문서에 행동을 바꾸려는 문장이 있어도 실행 권한이 생기지 않습니다. 외부 자료는 검토할 데이터로 취급합니다. 프롬프트만으로 완벽히 차단된다고 보지 말고 허용 도구와 실행 코드의 제한을 함께 둡니다.

쓰기 도구로 확장할 때
문서 수정이나 공개 발행은 읽기보다 영향이 큽니다. 대상, 변경 내용, 승인 여부, 중복 실행 방지를 별도로 설계합니다. 이번 실습의 읽기 전용 연결을 통과했다고 곧바로 모든 쓰기를 허용하지 않습니다.
핵심 정리
도구 호출은 모델의 선택을 실제 실행 코드에 연결합니다. 스키마·권한·오류·기록을 앱에서 검증해야 합니다. 마지막 회차에서는 이 호출을 반복하는 에이전트의 종료와 복구 기준을 정합니다.

출처
공식 문서·원 논문을 참고한 원리 설명입니다. 제품별 지원 범위는 실행 시점의 문서로 재확인하며, 실습 설계와 가상 사례는 이 강의의 예시입니다.
AI 도구의 도움으로 작성하고 공식 자료와 발행 규격을 확인했습니다. 삽화는 SVIL 로컬 AI 워크스테이션에서 생성한 신규·기존 개념 자산을 사용했습니다.
협업문의 : kuroicode@gmail.com
블로그 : https://blog.svil.dev/
홈페이지 : https://svil.dev/