Tech Blog로 돌아가기

AI AGENT STUDY · TOOL CALLING

07

Agent는 어떻게 도구를 호출하는가

모델의 결정과 runtime의 실행을 분리해 보고, tool calling이 실제 시스템 안에서 반복되는 다섯 단계와 안전 경계를 정리합니다.

AI의 결정 영역과 외부 도구 실행 영역이 명확한 경계로 분리된 Tool Calling 개념 이미지
Tool Calling의 핵심은 모델이 행동을 직접 수행하는 것이 아니라, 구조화된 결정을 runtime에 전달하는 데 있습니다.원본 크기로 보기

모델이 도구를 호출한다는 말은 정확히 무엇일까

결론부터 말하면 모델은 함수와 API를 직접 실행하지 않습니다. 모델의 역할은 현재 문맥을 읽고 다음 행동을 선택한 뒤, 그 의도를 구조화된 요청으로 표현하는 데까지입니다. 파일을 읽거나 네트워크 요청을 보내고 데이터베이스를 바꾸는 일은 모델 바깥의 runtime이 맡습니다.

이 구분이 흐려지면 tool calling, agent framework, server-side tool, MCP가 모두 비슷한 마법처럼 보입니다. Agent를 이해할 때 가장 먼저 분리해야 할 것은 결정과 실행입니다.

구현이 달라도 변하지 않는 다섯 단계

  1. Runtime이 system instruction, 대화 이력, tool schema를 context로 구성합니다.
  2. 모델이 일반 텍스트 또는 구조화된 tool request를 출력합니다.
  3. Runtime이 schema와 permission을 검증한 뒤 실제 도구를 실행합니다.
  4. Tool result를 다음 모델 호출의 context에 다시 넣습니다.
  5. 더 이상 tool request가 없을 때까지 반복하고 최종 결과를 반환합니다.

RUNTIME LOOP

while (step < maxSteps) {
  const response = await model(context, toolSchemas)
  if (!response.toolRequest) return response.text

  const request = validate(response.toolRequest)
  const result = await executeWithPolicy(request)
  context = appendToolResult(context, request.id, result)
}

네 번째 단계가 빠지면 모델은 실행 결과를 알 수 없습니다. 우리가 흔히 “agent가 기억했다”고 부르는 연속성도 대부분 context replay, state restoration, summary, checkpoint가 만든 결과입니다.

편리함은 loop를 없애지 않고 감춥니다

TOOL CALLING EVOLUTION
단계무엇이 달라졌나여전히 애플리케이션이 책임질 것
Prompted JSON정해 둔 JSON 모양으로 행동을 표현Parsing, schema, 실행, 반복 제어
Native tool callingProvider가 tool request block을 표준화Registry 확인, 권한, result 연결
Agent SDK / graphParse–execute–reinject loop를 추상화정책, budget, 오류와 중단
Server-side tool일부 실행 경계가 provider 쪽으로 이동권한 위임 범위, audit, 결과 계약
Tool search필요한 도구 schema만 동적으로 노출검색 품질, 허용 목록, version 관리

추상화가 높아질수록 개발자는 loop를 덜 보게 됩니다. 그러나 timeout, 중복 호출, 무한 반복, 승인, 비용 제한을 설계하려면 감춰진 상태 전이를 다시 펼쳐 볼 수 있어야 합니다.

좋은 tool schema보다 먼저 실행 경계를 설계합니다

Schema는 모델이 보는 인터페이스입니다

도구 설명이 모호하거나 비슷한 도구가 너무 많으면 selection error가 늘어납니다. 인자 이름은 business concept와 맞아야 하고, 결과는 다음 판단에 필요한 정보만 남겨야 합니다. 거대한 원본 JSON을 그대로 돌려주면 중요한 필드가 noise 속에 묻힙니다.

Tool request는 권한이 아니라 제안입니다

Model output이 schema를 만족해도 바로 실행해서는 안 됩니다. Read-only와 side effect action을 분리하고, 대상 범위와 사용자 권한, idempotency, 실행 횟수, timeout을 runtime policy에서 확인해야 합니다.

경계확인할 질문
Selection이 질문에서 정말 이 도구가 필요한가?
ArgumentsType뿐 아니라 business rule도 만족하는가?
Permission현재 사용자와 session이 이 행동을 허용하는가?
Execution재시도해도 안전하고 취소할 수 있는가?
Result모델이 오해하지 않을 형태로 요약·검증됐는가?

실습에서는 답변보다 trajectory를 남깁니다

Tool calling 예제를 볼 때 최종 문자열만 확인하면 중요한 과정이 사라집니다. 각 step에서 model input, tool request, validation result, tool latency, tool result 요약, 다음 model input을 함께 기록해야 실패가 선택 오류인지 실행 오류인지 구분할 수 있습니다.

  • 모델이 tool 없이 답한 case와 tool을 선택한 case를 비교합니다.
  • 필수 argument를 누락하거나 잘못된 type을 만들었을 때 복구 경로를 확인합니다.
  • 같은 side effect가 재시도로 두 번 실행되지 않는지 검사합니다.
  • maxSteps, timeout, cancellation이 실제 loop를 멈추는지 확인합니다.
  • Tool result가 다음 context에서 어느 call id와 연결되는지 추적합니다.