ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Claude][운영] Claude Sonnet 5 fallback에서 cache_miss_reason이 tools_mismatch로 남을 때 tool result diff를 어떤 순서로 다시 저장하나
    기타개발지식/AI 2026. 8. 31. 09:14

    IT 리서치 노트

    [Claude][운영] Claude Sonnet 5 fallback에서 cache_miss_reason이 tools_mismatch로 남을 때 tool result diff를 어떤 순서로 다시 저장하나

    Claude Sonnet 5 fallback에서 regeneration turn과 second-turn cache hit까지는 확인했는데, 그다음 miss reason이 다시 tools_mismatch로 남으면 어디서부터 diff를 저장해야 할지가 애매해진다. 2026년 8월 31일 KST 기준 Anthropic 공식 문서를 다시 보면 prompt caching은 cache point를 앞으로 옮기고, 설정 변경과 tool_choice 변경은 cached block을 무효화할 수 있다. 이 글은 tools_mismatch가 남았을 때 tool result diff를 어떤 순서로 다시 저장해야 원인 분리가 덜 꼬이는지 정리한다.

    1. 개요

    결론부터 말하면 tools_mismatch가 남았다고 바로 tool result payload만 저장하면 늦다. 먼저 request config diff를 저장하고, 그다음 tool definitions diff를 저장하고, 마지막에 tool result tail diff를 저장해야 진짜 원인이 tool delta인지 config drift인지 빠르게 갈린다.

    특히 Sonnet 5 fallback branch에서는 regeneration turn 성공과 second-turn read hit 확인이 끝난 뒤에도 다음 turn miss가 다시 날 수 있다. 이때는 cache reuse 실패를 다시 broad incident로 열지 말고, diff 저장 순서를 좁게 고정하는 편이 더 실용적이다.

    2. 어디서 실제로 막히는가

    현장에서 제일 흔한 문제는 tools_mismatch를 본 순간 전체 transcript를 다시 저장하거나, 반대로 tool result JSON만 떼어 저장하는 것이다. 전자는 너무 넓고 후자는 너무 좁다. request config 차이, tool set 차이, tail payload 차이가 같은 miss처럼 보이기 때문이다.

    Anthropic 문서는 configuration changes invalidate caching이라고 적고, tool use 문서는 tool_choice 변경이 cached block을 무효화할 수 있다고 설명한다. 또 prompt caching 문서는 cache point가 앞으로 이동한다고 적는다. 이 세 전제를 합치면 tools_mismatch는 tail payload만의 문제가 아닐 수 있다.

    문제는 많은 팀이 diff 저장 순서를 정해 두지 않아, 어떤 incident는 config 파일이 남고 어떤 incident는 tail payload만 남는다는 점이다. 그러면 다음 회고에서 같은 miss가 왜 났는지 비교 기준이 없어지고, regeneration을 또 해도 같은 실수가 반복된다.

    • 증상: cache_miss_reason은 tools_mismatch인데 실제 원인이 매번 다르게 보인다.
    • 실패: tail payload만 저장하고 request config diff를 빼먹는다.
    • 막힘: tool set diff와 tail diff를 같은 파일처럼 취급한다.
    • 누락: usage snapshot을 같이 안 남겨 비용 설명이 비어 있다.
    겉으로 보이는 현상 실제로 먼저 볼 값 판단 기준
    같은 fallback인데 miss 이유가 자꾸 바뀐다 request config diff thinking, max_tokens, tool_choice 차이를 먼저 뺀다
    tool이 같은데도 miss가 난다 tool result tail diff tail block이 달라졌는지 본다
    비용만 다시 커진다 usage snapshot regeneration 반복인지 read miss인지 본다

    3. 실무에서 적용하는 순서

    가장 짧은 저장 순서는 네 단계다. 1단계에서 request config diff를 만든다. 2단계에서 tool definitions diff를 저장한다. 3단계에서 tool result tail diff를 저장한다. 4단계에서 usage와 miss reason snapshot을 붙인다. 이 순서를 거꾸로 하면 config drift를 놓치거나, tool set 변경을 tail payload 차이로 오해하기 쉽다.

    1. thinking, max_tokens, tool_choice diff를 먼저 저장한다.
    2. tool definitions diff를 두 번째로 저장한다.
    3. tool result tail diff를 세 번째로 저장한다.
    4. usage와 miss reason snapshot으로 incident를 닫는다.

    실행 메모에는 파일 경로만 있어도 충분하다. 예를 들어 request-config.diff, tool-set.diff, tool-result-tail.diff, usage-miss-note.json 네 파일명을 한 incident id 아래 두면 된다. 그러면 다음 재현에서도 같은 순서로 자료가 모인다.

    tools_mismatch 저장 체크
    save_order=1:config 2:tool_set 3:tail 4:usage
    thinking_same=true
    tool_choice_same=false
    tool_set_changed=false
    tail_diff_detected=true
    cache_miss_reason=tools_mismatch

    이 순서를 고정해 두면 tools_mismatch는 더 이상 모호한 라벨이 아니다. 어떤 파일을 열면 되고, 어떤 표와 화면을 먼저 보고, 무엇을 비교해야 하며, regeneration을 다시 하기 전에 어떤 evidence가 필요한지가 분명해진다.

    4. 공식 문서와 예시 화면으로 확인하기

    첫 자료는 Sonnet 5 변경점 문서다. Sonnet 5의 기본 adaptive thinking 전제를 다시 확인해야 tools_mismatch를 thinking 차이와 구분할 수 있다.

    Sonnet 5 fallback에서 tools_mismatch를 보더라도 먼저 모델 기본 thinking 맥락은 고정해 두는 편이 좋다.
    Sonnet 5 fallback에서 tools_mismatch를 보더라도 먼저 모델 기본 thinking 맥락은 고정해 두는 편이 좋다.

    즉 tools_mismatch라고 적혔다고 바로 tool 목록만 보면 부족하다. thinking과 token 상한은 동일한지 먼저 고정하고 그다음 tool result diff를 본다.

    두 번째 자료는 prompt caching 문서다. cache point가 앞으로 이동한다는 점 때문에 second turn tools_mismatch는 tail 구간의 작은 차이에서도 발생할 수 있다.

    cache point가 앞으로 이동하면 tool result tail diff를 별도 저장해야 miss 이유를 설명할 수 있다.
    cache point가 앞으로 이동하면 tool result tail diff를 별도 저장해야 miss 이유를 설명할 수 있다.

    따라서 mismatch 대응은 전체 transcript 재저장보다 tail 구간을 어떻게 비교했는지 남기는 쪽이 실익이 크다.

    세 번째 자료는 extended thinking 문서다. 설정 변경이 caching을 무효화할 수 있다는 점을 직접 적고 있다.

    tools_mismatch를 저장하기 전에 config diff가 아닌지 먼저 분리해야 한다.
    tools_mismatch를 저장하기 전에 config diff가 아닌지 먼저 분리해야 한다.

    이 전제가 있어야 tools_mismatch incident가 진짜 tool delta 때문인지, 사실은 thinking budget이나 max_tokens 변경 때문인지 빨리 갈린다.

    네 번째 자료는 tool use 문서다. tool_choice 변경이 cached message block을 무효화할 수 있다고 설명한다.

    tool_choice와 tool result diff를 같은 저장 순서 안에 넣어야 tools_mismatch가 빨리 잘린다.
    tool_choice와 tool result diff를 같은 저장 순서 안에 넣어야 tools_mismatch가 빨리 잘린다.

    즉 mismatch 대응은 tool result payload만 덤프하는 일이 아니다. tool_choice, tool set, tail payload를 같은 차트에서 본 뒤 저장해야 한다.

    실무에서는 저장 순서를 고정한 표가 가장 빠르다. 아래 표는 tools_mismatch일 때 어떤 diff를 어떤 순서로 저장할지 정리한 예시다.

    tools_mismatch 대응은 config diff, tool set diff, tail diff 순으로 자르는 편이 빠르다.
    tools_mismatch 대응은 config diff, tool set diff, tail diff 순으로 자르는 편이 빠르다.

    이미 messages_changed와 tools_mismatch split 글이 첫 갈래를 세웠다면, 이번 표는 Sonnet fallback branch에서 tools_mismatch를 실제 파일 저장 순서로 좁히는 후속편이다.

    마지막 자료는 tools_mismatch incident 메모 예시다. 핵심은 request config, tool set, tail diff 파일명을 같은 레코드에 남기는 것이다.

    tools_mismatch incident에는 tail diff 파일과 config diff 파일이 같이 있어야 한다.
    tools_mismatch incident에는 tail diff 파일과 config diff 파일이 같이 있어야 한다.

    이 레코드가 있으면 post 441의 second-turn read hit 확인 뒤에도 왜 다음 turn이 miss였는지 더 짧게 설명할 수 있다.

    5. 주의사항과 리스크

    첫 번째 리스크는 tools_mismatch를 보고 바로 regeneration을 다시 해 버리는 것이다. 두 번째는 tool result JSON만 남기고 tool_choice 변경을 놓치는 것이다. 세 번째는 usage snapshot이 없어 read miss와 regeneration 반복을 비용 기준으로 구분하지 못하는 것이다.

    운영 메모에는 최소한 config_diff_file, tool_set_diff_file, tool_result_tail_diff_file, usage_snapshot_file, cache_miss_reason을 남기는 편이 좋다.

    • tools_mismatch는 tail payload만의 문제로 단정하지 않는다.
    • diff 저장 순서를 고정해 같은 incident끼리 비교 가능하게 만든다.
    • usage snapshot 없이 비용 해석을 끝내지 않는다.

    6. 결론

    Claude Sonnet 5 fallback에서 tools_mismatch가 남으면 request config diff, tool definitions diff, tool result tail diff, usage snapshot 순으로 저장하는 편이 가장 빠르다. 이 순서를 고정하면 cache miss 원인을 넓은 rollback 문제로 되돌리지 않고, 바로 필요한 evidence만 모아 다시 판단할 수 있다.

    같은 Claude 분기에서는 fallback 체크리스트 글, regeneration incident 글, second-turn cache hit 글과 이어 보면 fallback 이후 캐시 사다리가 더 또렷해진다.

    같은 branch를 second turn 성능까지 더 좁혀 보고 싶다면 Claude Sonnet 5 fallback second turn은 read hit인데 latency가 여전히 길 때 usage와 tail diff를 함께 비교하는 2026년 8월 31일 후속 글도 이어서 보면 좋다. 이 글이 무엇을 저장할지를 정리했다면, 후속 글은 read hit 뒤에도 왜 느린지 어떤 usage와 tail 값을 같이 볼지를 다룬다.

    7. 참고 링크

    1. https://platform.claude.com/docs/en/models/sonnet-5/whats-new-sonnet-5
    2. https://platform.claude.com/docs/en/build-with-claude/prompt-caching
    3. https://platform.claude.com/docs/en/build-with-claude/extended-thinking
    4. https://platform.claude.com/docs/en/agents-and-tools/tool-use/define-tools
    5. https://platform.claude.com/docs/en/release-notes/overview
Designed by Tistory.