컨텍스트 윈도우 관리
Bob의 270,000 토큰 컨텍스트 윈도우가 작동하는 방식, 각 카테고리가 토큰 사용량에 기여하는 방식, 세션을 집중되고 비용 효율적으로 유지하기 위한 모범 사례를 알아보세요.
컨텍스트 윈도우 개요
Bob Shell의 각 세션에는 해당 대화의 토큰 예산인 context window가 있어요. 상한선은 270,000 토큰이에요. Bob이 로드하는 모든 항목이 여기에 포함돼요.
창을 채우는 요소
| 카테고리 | 포함 내용 |
|---|---|
| System prompt | 세션을 위한 Bob의 핵심 지침 |
| Tool definitions | 내장 도구 스키마 및 연결된 MCP 도구 정의 |
| MCP Tools | 연결된 MCP 서버가 제공하는 도구에 대한 지침 및 설명 |
| Rules | 프로젝트 및 모드 규칙 파일(예: AGENTS.md 또는 .bob/rules-*)의 맞춤형 지침 |
| Skills | 대화를 위해 Bob이 로드한 스킬 (skills)의 지침 |
| Messages | 대화 내의 프롬프트, Bob의 응답 및 도구 활동. 토큰으로 계산되는 transcript예요. |
명령어 출력과 도구 결과는 Messages에 포함돼요. 파일 내용은 별도의 줄로 구분되지 않아요.
토큰 보고서에는 두 가지 요약 필드가 포함돼요:
- Reserved for model response: Bob의 다음 응답을 위해 예약된 토큰(일반적으로 20.0k).
- Available space: 남아있는 여유 토큰.
기본 오버헤드
고정 카테고리는 Bob과 작업을 시작하기도 전에 컨텍스트를 사용해요. 간단한 "Quickly say hi back." 프롬프트조차 총 약 8.5k 토큰에 달해요. 그 대부분은 Tool definitions (5.1k), System prompt (1.5k), Rules (830), Skills (454)예요. Messages에는 590 토큰만 포함돼요.
Bob은 모든 프롬프트에서 전체 오버헤드 스택을 다시 전송해요. MCP 서버를 더 많이 연결하거나 스킬을 로드하면 입력하기 전부터 MCP Tools, Tool definitions, Skills가 증가해요.
토큰 사용량 모니터링
Bob Shell은 각 대화 턴이 끝날 때 토큰 사용량을 보고해요. 다음 표는 각 카테고리의 증가 요인을 보여줘요:
| 카테고리 | 증가 요인 |
|---|---|
| System prompt | 세션이 시작될 때 로드돼요. 일반적인 작업 중에는 일정하게 유지돼요. |
| Tool definitions | 내장 도구 스키마예요. 세션이 시작될 때 설정되며 일반적인 작업 중에는 일정하게 유지돼요. |
| MCP Tools | 연결된 MCP 서버 및 활성화된 도구예요. 프롬프트를 보낼 때가 아니라 서버나 도구를 추가할 때 증가해요. |
| Rules | 프로젝트 및 모드 규칙 파일(예: AGENTS.md)이에요. 세션이 열릴 때 설정돼요. |
| Skills | 세션을 위해 Bob이 로드하는 스킬이에요. 대화 도중 Bob이 스킬을 활성화하면 증가할 수 있어요. |
| Messages | 프롬프트, Bob의 응답, 파일 읽기, 도구 출력 및 명령 출력이에요. 매 턴마다 그리고 리포지토리 탐색 시 증가해요. |
짧은 대화에서는 고정 카테고리가 전체의 대부분을 차지하는 경우가 많아요. Bob에게 파일을 읽거나 도구를 실행하도록 요청하면 보통 Messages가 가장 큰 카테고리가 돼요. 이러한 변화에 주의하세요.
카테고리가 커질수록 Available space는 줄어들어요. Reserved for model response는 Bob의 다음 응답을 위해 따로 떼어둔 공간이에요. 위의 사용된 총계에는 포함되지 않아요.
토큰 제한
하드 캡은 세션당 270,000 토큰이에요. Bob은 제한에 도달하기 전에 압축을 시작해요. 압축은 일반적으로 총 사용량이 190,000 토큰 부근일 때 시작돼요.
자동 컨텍스트 압축
압축 임계값에 도달하면 Bob은 다음을 수행해요:
- 가장 최근의 관련성 높은 컨텍스트를 보존해요.
- 이전 대화 세그먼트를 요약하거나 제거해요.
- 중요한 시스템 지침, 도구 정의, 규칙 및 스킬을 유지해요.
- 압축된 컨텍스트로 작업을 계속 진행해요.
압축은 손실이 발생해요. Messages 초기의 세부 정보는 보존되지 않을 수 있어요. 주제를 변경하거나 품질이 저하될 정도로 Messages가 커지면 새 세션을 시작하세요.
Bobcoins에 미치는 영향
Bobcoins는 토큰 사용량을 추적해요. 입력 및 출력 토큰이 모두 계산돼요.
- 각 메시지는 고정 오버헤드를 포함하여 전체 활성 컨텍스트를 다시 전송해요.
- Bob은 전송할 때마다 이미 로드된 내용을 다시 처리해요.
- Messages가 많은 긴 세션일수록 이후 프롬프트당 비용이 더 많이 들어요.
모범 사례
컨텍스트 윈도우는 저장소가 아니에요. 각 단계에서 Bob이 사용할 수 있는 **작업 메모리(working memory)**예요. 유입되는 내용을 제어하세요. 세션이 오래된 출력으로 가득 차면 초기화하세요. Bob의 답변뿐만 아니라 테스트를 통해 결과를 확인하세요.
세션 및 대화의 범위 지정
작업 목표당 하나의 세션을 사용하고 명확하고 좁은 프롬프트로 시작하세요. Bob에게 리포지토리 탐색을 요청하기 전에 목표, 예상 결과 및 제약 조건을 명시하세요. 파일과 함수를 명시적으로 지정하세요. "전체 리포지토리 읽기" 또는 "백엔드 확인"과 같은 모호한 요청은 피하세요. 주제가 바뀌면 새 세션을 시작하세요. Messages에 관련 없는 내용이 포함되면 비용이 추가되고 Bob이 혼란스러워질 수 있어요.
상시 컨텍스트를 간결하게 유지
고정 카테고리는 사용자가 입력하기 전부터 토큰을 소비해요. 해당 오버헤드를 낮게 유지하려면:
- 맞춤형 규칙과
AGENTS.md를 짧게 유지하세요. 설정, 테스트 및 스타일 명령(예:pnpm test,mvn verify)만 넣으세요. - 현재 작업에 필요한 MCP 서버, 도구 및 스킬만 연결하세요. 사용하지 않는 항목은 연결을 해제하고 전역보다는 프로젝트 범위의 MCP 구성을 선호하세요.
- Messages는 이번 세션에 특정한 상황별 증거(버그, 로그, 관련 파일)를 위해 남겨두세요. 모든 프롬프트에서 상시 규칙을 반복하지 마세요.
필요할 때 컨텍스트 추가
채팅 프롬프트에 대량의 콘텐츠 블록을 붙여넣는 대신 Bob이 대상 파일을 검색하고 읽도록 하세요. 프롬프트에서 특정 파일 경로와 줄 범위를 참조하고 광범위한 디렉터리 참조는 피하세요:
✓ Fix the email validation logic in src/utils/validation.ts lines 45-67
✗ Review everything in src/, tests/, and docs/ and suggest improvements단계별로 작업하세요 — 가능성 있는 파일을 찾고, 관련 파일을 검사하고, 계획을 세우고, 변경하고, 검증하세요. 광범위한 리포지토리 읽기의 경우 모든 read_file 호출이 Messages에 들어가지 않고 요약된 결과를 받을 수 있도록 하위 에이전트를 사용하세요. 출처가 상충할 때는 오래된 주석이나 이전 README 노트보다 실행 중인 코드와 테스트를 신뢰하세요.
대규모 리포지토리에 대한 더 많은 전략은 대규모 프로젝트 작업을 참조하세요.
Messages가 가득 차면 초기화
세션이 길어지면 Messages에 반복되는 파일 내용, 폐기된 계획, 오래된 도구 출력이 쌓여요. 작업 목표가 변경되거나 대화가 길어져 품질이 저하될 정도가 되면 새 세션을 시작하세요. 제약 조건, 증거 및 해결되지 않은 질문만 유지하고 나머지는 제거하세요.
Bob은 이전 세그먼트를 자동으로 압축할 수도 있지만, 압축은 손실이 발생하므로 Messages 초기의 세부 정보가 유지되지 않을 수 있어요. diff를 검토 가능한 상태로 유지하고 Bob이 올바른 방향을 유지하도록 한 번의 대규모 자율 실행보다는 승인된 작은 단위의 변경을 선호하세요.