Le Duy Khuong

Chuỗi: claude-code-20-p2 · Phần 5

Năng suất & công cụ dev

Khi nào compact context — strategic compaction

Logical breakpoints; tránh compact giữa implementation.

2026-03-146 phút đọcVI

Phần 5 của 5100% hoàn thành

Khi nào compact context — strategic compaction

English title: When to Compact Context — Strategic Compaction

Bài 10 trong chuỗi 20 bài về Claude Code. Context window có giới hạn: khi chat dài, file đọc nhiều, context đầy thì cần compact — thu gọn (summary thay transcript, giữ recent + key info) để nhường chỗ cho tiếp tục. Compact sai lúc (vd. giữa lúc đang implement 3 file) có thể làm agent "quên" biến, đường dẫn, hoặc quyết định vừa chốt. Bài này làm rõ khi nào compact an toàn và giữ gì khi compact.


Mở đầu: Thu gọn context đúng lúc — không mất state giữa chừng

Bạn đang implement feature login: đã sửa file A, B, và đang sửa file C. Context chứa nội dung A, B, và lịch sử chat. Nếu lúc này hệ thống (hoặc bạn) trigger compact — thay toàn bộ transcript bằng một đoạn summary — agent có thể mất "đang sửa C, cần nhớ A và B đã thay đổi gì". Kết quả: code C không khớp với A, B hoặc lặp lại. Strategic compaction = chỉ compact tại điểm dừng hợp lý: sau khi hoàn thành một task/phase, sau khi test pass, sau commit, sau review — không compact giữa implementation.


1. Đi sâu: Tại sao cần compact và rủi ro

Tại sao quan trọng: Context window (vd. 200k token) có giới hạn. Session dài (nhiều turn, nhiều file) sẽ đầy; không compact thì không thể tiếp tục hoặc phải xóa bớt thủ công. Compact = cơ chế "nén" lịch sử thành summary + giữ recent/kẻ quan trọng để vẫn tiếp tục được. Nhưng compact mất chi tiết: tên biến, đoạn code cụ thể, thứ tự thao tác — nếu compact giữa implementation, agent mất mạch.

Hiểu sai thường gặp: "Compact càng sớm càng tốt để tiết kiệm token." Compact sớm quá (giữa task) = mất state đang làm → agent phải đọc lại file hoặc lặp lại bước. Đúng là compact tại breakpoint (sau task xong, sau verify) chứ không phải "cứ đủ 50% context là compact".

Bản chất đúng: Compact = thay một phần (hoặc toàn bộ) transcript cũ bằng summary (goal, decisions, file list, next steps) + có thể giữ vài message/recent gần nhất. Những gì bị mất: chi tiết từng dòng chat, code snippet cũ. Những gì giữ: mục tiêu, quyết định kiến trúc, danh sách file quan trọng. Chỉ compact khi bạn (và agent) không còn "đang giữ" state tạm trong transcript — tức tại logical breakpoint.


2. Khái niệm

  • Compact (compaction): Thu gọn context bằng cách thay transcript (hoặc phần cũ) bằng summary. Mục đích: giải phóng token để session tiếp tục mà không vượt window. Có thể do user gõ /compact hoặc auto khi đạt ngưỡng % (vd. 50% hoặc 95%).
  • Logical breakpoint: Điểm dừng hợp lý trong workflow — sau khi hoàn thành một phase (vd. "plan xong", "implement feature X xong", "test pass"), sau commit, sau review. Tại đây state "ổn định" (đã lưu vào code/file), compact ít rủi ro.
  • Summary: Đoạn tóm tắt thay transcript: goal hiện tại, decisions đã chốt, file list quan trọng, next steps. Độ dài vài trăm token; không chứa toàn bộ code hay chat cũ.
  • Auto-compact vs manual: Auto = hệ thống tự compact khi context đạt ngưỡng (vd. 95%). Manual = user chủ động gõ /compact (hoặc tương đương) tại thời điểm mình chọn. Strategic = ưu tiên manual tại breakpoint; nếu dùng auto thì set ngưỡng hợp lý (vd. 50% để compact sớm hơn, tránh đầy đột ngột).

3. Code / ví dụ summary (pseudo)

Sau compact, context có thể chứa một block summary thay vì toàn bộ chat cũ. Ví dụ (pseudo):

## Context summary (after compaction)
- **Goal:** User login — OAuth + email. Current phase: implementation done, tests pass.
- **Decisions:** JWT in httpOnly cookie; session table with refresh_token.
- **Key files:** api/auth/login.ts, lib/auth.ts, schema/users.ts.
- **Next:** Add middleware for /dashboard; then docs.

Agent (và user) đọc summary để biết "đang ở đâu"; chi tiết code đọc lại từ file khi cần. Không lưu full diff hay full transcript trong summary.


4. Workflow: Khi nào compact, giữ gì

  1. Khi nào compact (an toàn): Sau khi hoàn thành một task/feature (code + test pass); sau commit; sau review cycle; sau khi đã save state (bài 8). Tránh: giữa lúc đang sửa nhiều file, giữa debug (đang giữ stack trace, biến tạm trong chat).
  2. Ai trigger: Ưu tiên manual — user nói "phase xong, compact đi" hoặc gõ /compact sau khi verify. Nếu dùng auto, set ngưỡng (vd. 50%) và chấp nhận đôi khi compact vẫn trúng lúc không lý tưởng; có thể bù bằng state file (save trước khi compact).
  3. Giữ gì trong summary: Goal, decisions, file list (path hoặc tên), next steps. Độ dài cap (vd. 300–500 token). Bỏ: transcript chi tiết, code dài, từng turn Q&A.
  4. Sau compact: Agent có thể đọc lại file từ disk khi cần; không cần "nhét" lại toàn bộ code vào context. User có thể nhắc "đang làm bước X" nếu cần.

Best practice: Kết hợp với memory persistence — trước khi compact (hoặc khi SessionEnd), đã có state file; sau compact hoặc sau SessionStart, load state → continuity vẫn giữ.


5. Ứng dụng trong AI-centric engineering

  • Session rất dài: Refactor nhiều file, nhiều phase — compact sau mỗi phase để tiếp tục không đầy window; mỗi lần compact giữ summary đủ để "nhớ" goal và decisions.
  • Verify trước compact: Một số workflow "sau khi /verify pass mới cho compact" — đảm bảo phase đã thực sự xong (test pass, không còn state tạm quan trọng trong chat).
  • Skill/command: Có thể có skill "strategic compact" gợi ý: "Compact khi (1) task vừa xong, (2) đã commit, (3) đã save state." User (hoặc hook) gọi khi đủ điều kiện.

Bài 11 sẽ nói continuous learning (instincts) — học pattern từ session, export/import, evolve — để session qua đi vẫn để lại giá trị tái dùng.


Bài tiếp: Học từ session — continuous learning (instincts) (bài 11).

LDK

Le Duy Khuong

AI Transformation & Digital Strategy. Writing about agentic systems, engineering leadership, and building in public.