
01 · THE QUESTION
모델이 도구를 호출한다는 말은 정확히 무엇일까
결론부터 말하면 모델은 함수와 API를 직접 실행하지 않습니다. 모델의 역할은 현재 문맥을 읽고 다음 행동을 선택한 뒤, 그 의도를 구조화된 요청으로 표현하는 데까지입니다. 파일을 읽거나 네트워크 요청을 보내고 데이터베이스를 바꾸는 일은 모델 바깥의 runtime이 맡습니다.
이 구분이 흐려지면 tool calling, agent framework, server-side tool, MCP가 모두 비슷한 마법처럼 보입니다. Agent를 이해할 때 가장 먼저 분리해야 할 것은 결정과 실행입니다.
02 · THE LOOP
구현이 달라도 변하지 않는 다섯 단계
- Runtime이 system instruction, 대화 이력, tool schema를 context로 구성합니다.
- 모델이 일반 텍스트 또는 구조화된 tool request를 출력합니다.
- Runtime이 schema와 permission을 검증한 뒤 실제 도구를 실행합니다.
- Tool result를 다음 모델 호출의 context에 다시 넣습니다.
- 더 이상 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가 만든 결과입니다.
03 · EVOLUTION
편리함은 loop를 없애지 않고 감춥니다
| 단계 | 무엇이 달라졌나 | 여전히 애플리케이션이 책임질 것 |
|---|---|---|
| Prompted JSON | 정해 둔 JSON 모양으로 행동을 표현 | Parsing, schema, 실행, 반복 제어 |
| Native tool calling | Provider가 tool request block을 표준화 | Registry 확인, 권한, result 연결 |
| Agent SDK / graph | Parse–execute–reinject loop를 추상화 | 정책, budget, 오류와 중단 |
| Server-side tool | 일부 실행 경계가 provider 쪽으로 이동 | 권한 위임 범위, audit, 결과 계약 |
| Tool search | 필요한 도구 schema만 동적으로 노출 | 검색 품질, 허용 목록, version 관리 |
추상화가 높아질수록 개발자는 loop를 덜 보게 됩니다. 그러나 timeout, 중복 호출, 무한 반복, 승인, 비용 제한을 설계하려면 감춰진 상태 전이를 다시 펼쳐 볼 수 있어야 합니다.
04 · BOUNDARIES
좋은 tool schema보다 먼저 실행 경계를 설계합니다
Schema는 모델이 보는 인터페이스입니다
도구 설명이 모호하거나 비슷한 도구가 너무 많으면 selection error가 늘어납니다. 인자 이름은 business concept와 맞아야 하고, 결과는 다음 판단에 필요한 정보만 남겨야 합니다. 거대한 원본 JSON을 그대로 돌려주면 중요한 필드가 noise 속에 묻힙니다.
Tool request는 권한이 아니라 제안입니다
Model output이 schema를 만족해도 바로 실행해서는 안 됩니다. Read-only와 side effect action을 분리하고, 대상 범위와 사용자 권한, idempotency, 실행 횟수, timeout을 runtime policy에서 확인해야 합니다.
| 경계 | 확인할 질문 |
|---|---|
| Selection | 이 질문에서 정말 이 도구가 필요한가? |
| Arguments | Type뿐 아니라 business rule도 만족하는가? |
| Permission | 현재 사용자와 session이 이 행동을 허용하는가? |
| Execution | 재시도해도 안전하고 취소할 수 있는가? |
| Result | 모델이 오해하지 않을 형태로 요약·검증됐는가? |
05 · PRACTICE
실습에서는 답변보다 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와 연결되는지 추적합니다.