AI Agents & Skills

Harness cho agent chạy dài: giữ trí nhớ qua nhiều cửa sổ context

Tóm tắt

Agent làm dự án dài hỏng vì ôm đồm, tuyên bố xong sớm và không kiểm thử thật. Giải pháp: trí nhớ bên ngoài gồm danh sách tính năng JSON, file tiến độ, script khởi động và Git, mỗi phiên làm một tính năng và kiểm thử như người dùng.

Giao cho agent một dự án kéo dài nhiều giờ, nhiều ngày, ví dụ dựng cả một ứng dụng web, thì vấn đề lớn nhất không phải trí thông minh mà là trí nhớ. Mỗi phiên mới bắt đầu với context trống; compaction giúp nhưng không đủ. Anthropic chia sẻ cách họ thiết kế "harness" để agent làm việc hiệu quả qua nhiều cửa sổ context, dựa trên thí nghiệm xây một bản sao claude.ai.

Agent hỏng theo những cách nào?

  • Ôm đồm: cố làm quá nhiều một lúc, hết context giữa chừng, để lại code dở dang không ghi chú cho phiên sau.
  • Tuyên bố xong quá sớm: phiên sau thấy đã có tiến độ liền cho rằng dự án hoàn tất.
  • Đánh dấu xong mà chưa kiểm thử thật: chỉ chạy unit test hoặc curl, không kiểm tra luồng đầu-cuối.

Giải pháp hai phần

AgentKhi nào chạyNhiệm vụ
Initializer agentMột lần, đầu dự ánDựng môi trường, viết danh sách tính năng, script khởi động, commit đầu tiên
Coding agentMọi phiên sauLàm từng tính năng một, để lại code sạch, có thể merge

Các "vật chứng" giữ trí nhớ

  • Danh sách tính năng dạng JSON: hơn 200 tính năng đầu-cuối, ban đầu đều đánh dấu chưa đạt. Agent chỉ được đổi cờ trạng thái. JSON được chọn vì model ít làm hỏng hơn Markdown.
  • File tiến độ: nhật ký mỗi phiên đã làm gì.
  • init.sh: script khởi động dev server, để agent không phải mò cách chạy ứng dụng.
  • Lịch sử Git: commit mô tả rõ, cho phép quay lại trạng thái chạy được khi có lỗi.

Quy trình mỗi phiên

1. Kiểm tra thư mục làm việc
2. Đọc file tiến độ và git log
3. Chạy init.sh + một bài test đầu-cuối cơ bản
   (bắt lỗi phiên trước để lại)
4. Chọn MỘT tính năng chưa đạt, làm, kiểm thử như người dùng thật
5. Đổi cờ trạng thái, ghi tiến độ, commit

Kiểm thử "như người dùng thật" bằng tự động hoá trình duyệt (Puppeteer MCP) cải thiện rõ rệt, vì phát hiện lỗi không thấy được khi chỉ đọc code. Hạn chế còn lại: Claude không thấy được hộp thoại alert gốc của trình duyệt, nên các tính năng dùng nó lỗi nhiều hơn.

Rủi ro và lưu ý

  • Cấu trúc trạng thái quan trọng hơn trí nhớ model: đừng hy vọng model "nhớ"; hãy ghi ra file máy đọc được.
  • Mỗi phiên một đơn vị việc: làm nhiều việc một phiên là công thức cho code dở dang.
  • Câu hỏi còn mở: một agent đa năng hay nhiều agent chuyên biệt (test, QA, dọn dẹp) tốt hơn vẫn chưa rõ; cách làm này cũng chủ yếu được kiểm chứng với phát triển web.

Áp dụng thế nào?

  • Dev: Với dự án dài trong Claude Code, tạo features.json và PROGRESS.md, yêu cầu Claude đọc chúng đầu mỗi phiên và cập nhật cuối phiên.
  • Tech Lead: Đặt định nghĩa "xong" là đã kiểm thử đầu-cuối, không phải chỉ unit test; cung cấp script khởi động chuẩn.
  • PM: Viết yêu cầu thành danh sách tính năng có thể kiểm thử từng mục; đó vừa là spec cho agent vừa là thước đo tiến độ.

Nguồn & tham khảo

  1. Effective harnesses for long-running agents — Anthropic Engineering