콘텐츠로 이동

도구 컨텍스트 관리 (Manage Tool Context)

도구 정의(tool definitions)와 쌓여가는 tool_result 블록은 컨텍스트 윈도우를 계속 잡아먹어요. 도구가 많고 턴(turn)이 많은 장기 실행 에이전트라면, 작업이 끝나기 전에 컨텍스트가 바닥나는 경우도 생기죠. 이 문제를 파이프라인의 서로 다른 지점에서 해결하는 네 가지 접근법이 있습니다.

네 가지 접근법

각 접근법은 컨텍스트 압력의 서로 다른 원인을 겨냥해요. 토큰이 어디로 새고 있는지에 맞는 방법을 고르면 됩니다.

접근법 줄여주는 것 언제 어울리나 자세히 보기
도구 검색 (Tool search) 미리 로드하는 도구 정의 도구가 많고(20+개) 매 턴 대부분의 도구가 필요 없는 경우 Tool search tool
프로그램 방식 도구 호출 (Programmatic tool calling) tool_result 왕복 하나의 스크립트로 실행할 수 있는 도구 호출 체인 Programmatic tool calling
프롬프트 캐싱 (Prompt caching) 반복되는 도구 정의의 토큰 비용 많은 요청에 걸쳐 안정적인 도구 세트 Tool use with prompt caching
컨텍스트 편집 (Context editing) 이력에 남은 오래된 tool_result 블록 초기 결과가 더 이상 관련 없는 긴 대화 Context editing

도구 검색은 Claude가 요청하기 전까지 도구 정의를 컨텍스트 윈도우 밖에 보관해요. 50개의 도구 스키마를 처음부터 다 보내는 대신, tool_search 도구 하나만 보내고 나머지 도구는 Claude가 필요할 때마다 찾아서 쓰게 하는 방식이죠. 이렇게 하면 약간의 지연(도구를 찾기 위한 턴 하나)과 큰 폭의 기본 컨텍스트 사용량 절감을 맞바꾸는 셈입니다.

프로그램 방식 도구 호출 (Programmatic tool calling)

프로그램 방식 도구 호출은 일련의 도구 호출을 하나의 코드 블록으로 압축하는데, 그 블록을 Claude가 작성하고 Anthropic의 코드 실행 샌드박스가 실행해요. tool_usetool_result 다섯 번 왕복하는 대신, Claude가 다섯 함수를 모두 샌드박스 안에서 호출하는 스크립트 하나를 뱉습니다. 중간 결과는 대화 이력에 들어가지 않아요.

프롬프트 캐싱 (Prompt caching)

프롬프트 캐싱은 컨텍스트의 토큰 수를 줄이는 게 아니라, 이후 요청에서 그 토큰에 대한 비용을 줄여줘요. 도구 정의가 안정적이라면 한 번 캐시해 두고 수천 개의 요청에 걸쳐 캐시된 접두부(prefix)를 재사용할 수 있죠. 도구 세트가 크지만 고정되어 있다면 바로 이 방법이 정답입니다.

컨텍스트 편집 (Context editing)

컨텍스트 편집은 역할을 다한 오래된 tool_result 블록을 대화 이력에서 제거해요. 긴 에이전트 루프에서는 그 당시엔 유용했지만 지금은 죽은 무게가 된 중간 결과가 수백 개 생기기 마련이죠. 컨텍스트 편집을 쓰면 대화를 다시 시작하지 않고도 그걸 잘라낼 수 있습니다.

접근법 조합하기

이 접근법들은 서로 합쳐 쓸 수 있어요. 장기 실행 에이전트는 도구 검색으로 도구 세트를 날씬하게 유지하고, 프롬프트 캐싱으로 나머지 정의의 비용을 분산시키며, 대화가 길어질수록 컨텍스트 편집으로 오래된 결과를 정리할 수 있죠. 각각이 문제의 다른 부분을 해결하기 때문에, 함께 써도 충돌이 없습니다.

고부하(high-volume) 에이전트를 위한 합리적인 출발점은 다음과 같아요.

  1. 첫날부터 도구 정의에 프롬프트 캐싱을 켜세요. 캐시 쓰기(cache write)에는 기본 입력 가격보다 25%의 마크업이 붙지만, 그 비용은 두 번째 요청부터 캐시를 읽는 시점에 메워집니다.