Bỏ qua điều hướng
Lập trình viên

Ralph Loop là gì? Chạy AI agent trong vòng lặp Bash đến khi xong việc

Tìm hiểu Ralph Loop: kỹ thuật chạy AI agent theo vòng lặp Bash, giúp tối ưu Claude Code, tránh context rot và để AI tự code khi bạn rời máy (AFK).

Tuan Tran Van
8 phút đọc
Mục lục (8 phần)
  1. Ralph Loop là gì?
  2. Vì sao chạy theo vòng lặp lại hiệu quả?
  3. Giải phẫu một Ralph Loop
  4. Bắt đầu: từ HITL đến chạy tự động (AFK)
  5. Những nguyên tắc giữ Ralph đi đúng hướng
  6. Khi nào nên — và không nên — dùng Ralph
  7. Các câu hỏi thường gặp
  8. Tài liệu tham khảo

Phần lớn lập trình viên dùng AI để code như dùng một khung chat: ra lệnh, ngồi nhìn, rồi nhảy vào sửa khi nó đi lạc. Cách làm có người giám sát (human-in-the-loop, HITL) này ổn cho bản chạy thử (prototype), nhưng đuối ngay khi tính năng phức tạp lên.

Ralph Loop là kỹ thuật chạy các agent lập trình AI (như Claude Code, Amp) trong một vòng lặp Bash, lặp đi lặp lại cho đến khi hoàn thành toàn bộ danh sách nhiệm vụ trong file PRD.

Thay vì để AI tự quyết định khi nào dừng dựa trên xác suất, Ralph buộc agent lặp lại phiên làm việc cho tới khi có kết quả kiểm chứng được qua test và lint.

Đó là bước chuyển từ điều hành agent theo từng bước sang chỉ định trạng thái cuối cùng, rồi để nó tự chạy đến đó.

Ảnh bìa: một AI agent chạy lặp đi lặp lại trong vòng lặp Ralph, mỗi vòng khởi tạo ngữ cảnh mới cho đến khi hoàn thành nhiệm vụ

Ralph Loop là gì?

Tên gọi Ralph Loop bắt nguồn từ nhân vật Ralph Wiggum trong The Simpsons—cậu bé nổi tiếng vì thất bại liên tục nhưng cứ kiên trì thử lại đến khi thành công. Kỹ thuật này do Geoffrey Huntley khởi xướng, dựa trên một hình dung đơn giản: phần mềm giống như nắm đất sét trên bàn xoay, kết quả chưa ưng thì ném lại vào vòng lặp để nhào nặn tiếp.

Về kiến trúc, Ralph chọn mô hình một khối (monolithic). Trong khi nhiều kỹ sư lao vào bài toán đa agent (multi-agent), Huntley cảnh báo rằng để các thực thể bất định (non-deterministic) nói chuyện với nhau rất dễ thành một mớ hỗn độn ("red hot mess"). Ralph đi hướng ngược lại: một tiến trình duy nhất, xử lý đúng một task mỗi vòng lặp. Khác biệt cốt lõi nằm ở mức độ tự trị:

  • Vibe coding: code theo cảm tính, nhận đại đề xuất của AI mà không soi kỹ. Xem thêm vibe coding là gì.
  • Planning: lập kế hoạch trước khi code, nhưng vẫn gói gọn trong một phiên làm việc dài nên dễ tích lũy sai số.
  • Ralph: agent tự chọn task quan trọng nhất từ PRD, tự làm, tự kiểm tra và lặp lại cho đến khi đạt mục tiêu.

Vì sao chạy theo vòng lặp lại hiệu quả?

Hai kẻ thù lớn nhất của AI coding hiện nay là context rot (thối rữa ngữ cảnh) và compaction (nén dữ liệu). Một phiên làm việc kéo dài sẽ làm đầy mảng dữ liệu (array) của ngữ cảnh, buộc model phải tóm tắt lại lịch sử. Quá trình nén đó đánh rơi những chỉ dẫn quan trọng ở đầu phiên, khiến AI "ngu" dần theo thời gian.

So sánh một phiên làm việc dài bị thối rữa ngữ cảnh với vòng lặp Ralph khởi tạo ngữ cảnh mới cho mỗi nhiệm vụ

Ralph xử lý gốc rễ bằng cơ chế fresh context. Vòng lặp Bash chạy bên ngoài sẽ giết và khởi động lại session AI hoàn toàn, xóa sạch dữ liệu rác và đưa model về trạng thái suy luận tốt nhất. Cách này hiệu quả hơn hẳn các plugin chạy bên trong Claude Code—vốn vẫn giữ session cũ nên không thật sự giải quyết được chuyện nén ngữ cảnh. Ralph còn chữa được tật "tưởng là xong" của model: nó dựng một hợp đồng thực thi, agent chỉ được thoát khi đưa ra bằng chứng kỹ thuật rằng code đã vượt qua mọi rào kiểm định.

Giải phẫu một Ralph Loop

Một Ralph Loop tiêu chuẩn gồm bốn thành phần ăn khớp với nhau để giữ trí nhớ qua mỗi lần reset ngữ cảnh:

Sơ đồ giải phẫu một Ralph Loop: vòng lặp Bash bao quanh bốn tệp trạng thái prd.json, progress.txt, agents.md và sigil Completion Promise

  1. prd.json: danh sách nhiệm vụ có cấu trúc, mang các trường trạng thái như passes: true/false. Đây là kim chỉ nam để agent tự xác định việc tiếp theo.
  2. progress.txt: bộ nhớ ngắn hạn, ghi lại quyết định kiến trúc, bài học và blocker của từng vòng lặp. Agent đọc file này khi mở session mới để khỏi lặp lại sai lầm cũ.
  3. agents.md (hoặc CLAUDE.md): bộ nhớ dài hạn, lưu các quy ước và pattern riêng của dự án mà AI phải tuân thủ tuyệt đối.
  4. Completion Promise (sigil): từ khóa dừng vòng lặp, ví dụ <promise>COMPLETE</promise>. Trong Claude Code, cơ chế này móc vào Stop Hook để chặn việc thoát session khi chưa đạt điều kiện hoàn thành.

Bắt đầu: từ HITL đến chạy tự động (AFK)

Đừng nhảy thẳng vào chạy tự động qua đêm. Hãy đi theo lộ trình ba cấp độ để xây dần sự tin cậy:

Ba cấp độ tự động hóa của Ralph: chạy thủ công có giám sát (HITL), vòng lặp có giám sát, và chạy tự động qua đêm (AFK)

  • Cấp 1 (cái tua-vít): chạy thủ công từng lần (HITL). Bạn quan sát cách AI xử lý, tinh chỉnh prompt và bản PRD. Đây là bước mài rìu quan trọng nhất.
  • Cấp 2 (cái khoan): chạy vòng lặp có giám sát—cho phép lặp nhiều lần liên tục nhưng vẫn theo dõi định kỳ để can thiệp khi agent đi chệch hướng.
  • Cấp 3 (cái máy đục): chạy tự động hoàn toàn qua đêm (AFK). Cắm thêm thông báo qua WhatsApp hay Telegram khi vòng lặp kết thúc để bạn đỡ phải liên tục chuyển ngữ cảnh.

Dưới đây là script Bash minh họa (afk-ralph.sh) với các tham số đã tối ưu:

bash
#!/bin/bash
set -e
ITERATIONS=$1
for i in $(seq 1 $ITERATIONS); do
  echo "Khởi động vòng lặp thứ $i..."
  # Chạy Claude với cờ bỏ qua xác nhận quyền và trỏ thẳng vào file ngữ cảnh
  OUTPUT=$(claude -p "Thực hiện task quan trọng nhất trong prd.json. Chạy test/lint trước khi commit." @prd.json @progress.txt --dangerously-skip-permissions)
 
  if echo "$OUTPUT" | grep -q "<promise>COMPLETE</promise>"; then
    echo "Nhiệm vụ hoàn thành."
    break
  fi
done

Những nguyên tắc giữ Ralph đi đúng hướng

  • Repo bẩn thì prompt sạch cũng vô dụng: chỉ dẫn trong prompt luôn yếu thế trước mã nguồn đang có. Codebase của bạn mà rác thì Ralph sẽ đẻ thêm rác, mặc kệ prompt bảo "viết code sạch". Dọn repo trước khi chạy loop.
  • Ưu tiên việc rủi ro trước: đừng để Ralph chọn việc dễ làm trước. Ép agent xử lý các "architectural spike"—những điểm rủi ro về kiến trúc—ngay từ đầu, vì sai ở giai đoạn này sẽ kéo theo nợ kỹ thuật (technical debt) nghiêm trọng khi chạy tự động hàng loạt.
  • Nhiệm vụ nguyên tử: mỗi task trong PRD phải đủ nhỏ để giải quyết trọn vẹn trong một cửa sổ ngữ cảnh.
  • Docker sandbox: với chế độ AFK, cô lập môi trường bằng Docker là bắt buộc, để chặn các lệnh phá hoại hệ thống (chẳng hạn rm -rf) từ một agent non-deterministic.

Khi nào nên — và không nên — dùng Ralph

Nên dùng khi:

  • Xây tính năng mới từ một bản PRD (Product Requirements Document) có cấu trúc rõ ràng.
  • Vòng lặp test coverage: ép agent tìm những đoạn code chưa có test và viết bổ sung cho đến khi đạt mức coverage mục tiêu.
  • Vòng lặp linting: sửa hàng loạt lỗi linter một cách tuần tự.
  • Vòng lặp entropy: quét codebase để xóa export thừa, dọn code rác và refactor các mẫu code cũ.

Không nên dùng khi:

  • Thiết kế kiến trúc cốt lõi ban đầu—phần này cần tư duy con người qua chế độ HITL.
  • Các tác vụ đòi hỏi thẩm mỹ hoặc phán đoán chủ quan liên tục.

Về chi phí: chạy Ralph với model Sonnet tốn khoảng $10/giờ. Luôn đặt giới hạn số vòng lặp tối đa để kiểm soát ngân sách và giữ tính idempotent cho cả quy trình.

Các câu hỏi thường gặp

Ralph có phải là một plugin không? Không. Ralph chuẩn là một vòng lặp Bash chạy bên ngoài AI agent. Nhờ vậy nó giết và hồi sinh session hoàn toàn để xóa sạch ngữ cảnh cũ, thay vì lặp bên trong session—vốn vẫn gây thối rữa ngữ cảnh.

Có nên dùng model local không? Chưa nên. Các model local hiện tại chưa đủ sức suy luận để gánh những vòng lặp tự trị phức tạp. Claude Sonnet đang là tiêu chuẩn vàng về cân bằng giữa hiệu năng và chi phí cho Ralph Loop.

Tại sao không chạy song song nhiều agent? Chạy song song sinh ra tranh chấp khi nhiều agent cùng sửa một file hoặc phụ thuộc lẫn nhau. Vòng lặp tuần tự, một khối cho kết quả ổn định, dễ kiểm soát và ít lỗi logic hơn.

Tài liệu tham khảo

Đọc tiếp

Chia sẻ bài viết

X / TwitterFacebookLinkedIn