Khi mọi người nói về việc các tác nhân AI (AI agents) "hoàn tất vòng lặp" (closing the loop), họ thường ám chỉ việc tác nhân tự xác minh công việc của mình trước khi phản hồi. Điều này có thể gây nhầm lẫn kiểu: "Nếu vòng lặp gọi công cụ được lập trình cứng (hardcoded), thì làm sao mô hình có thể tự quyết định việc xác minh công việc của nó?"
Câu trả lời ngắn gọn: Vòng lặp là cố định (hardcoded), nhưng những gì mô hình thực hiện bên trong vòng lặp đó thì không.
Mọi khung làm việc (framework) cho tác nhân đều chạy một chu kỳ gần như giống hệt nhau: mô hình tạo phản hồi → nếu có lệnh gọi công cụ, thực thi nó → gửi kết quả ngược lại mô hình → mô hình tiếp tục tạo phản hồi → lặp lại cho đến khi mô hình trả về văn bản (không còn lệnh gọi công cụ nào nữa). Vòng lặp đó chính là "giàn giáo" (scaffolding). Nó giống nhau đối với mọi tác nhân.
Sự khác biệt nằm ở việc mô hình chọn làm gì bên trong vòng lặp đó. Một mô hình biết "hoàn tất vòng lặp" không cần một vòng lặp đặc biệt nào cả; nó sử dụng chính vòng lặp hiện có để gọi các công cụ xác minh trước khi quyết định rằng mình đã hoàn thành công việc.

Vòng lặp bên trong (Inner loop): Tác nhân tự xác minh công việc

Vòng lặp bên trong là những gì xảy ra trong suốt một tác vụ duy nhất, trước khi tác nhân phản hồi cho người dùng bằng văn bản. Tác nhân viết mã, chạy thử nghiệm (test), đọc lỗi, sửa các trường hợp biên (edge case), chạy lại và chỉ sau đó mới tạo phản hồi văn bản cho người dùng. Đây là chu kỳ phản hồi chặt chẽ giữa mô hình và các công cụ của nó.
Ví dụ: Bạn yêu cầu "hãy sửa bài kiểm tra đang bị lỗi trong file `auth.ts`."
  • Một tác nhân yếu: Sửa tệp và nói "Xong!"
  • Một tác nhân mạnh: Sửa tệp → tạo các bài kiểm tra → chạy thử nghiệm → thấy lỗi → sửa trường hợp biên → chạy lại → thấy kết quả đạt (màu xanh) → sau đó mới phản hồi.
Cùng một cơ sở hạ tầng, nhưng hành vi hoàn toàn khác nhau.
Tác nhân tồi — chỉnh sửa rồi dừng lại:
(Hình ảnh minh họa: Chỉnh sửa → Kết thúc)
%%{init: {
  "theme": "base",
  "themeVariables": {
    "primaryColor": "#e6f2ff",
    "primaryBorderColor": "#1a73e8",
    "primaryTextColor": "#0b3d91",
    "actorBkg": "#f3e8ff",
    "actorBorder": "#9333ea",
    "actorTextColor": "#4c1d95",
    "signalColor": "#16a34a",
    "signalTextColor": "#065f46",
    "labelBoxBkgColor": "#fff7ed",
    "labelBoxBorderColor": "#f97316",
    "labelTextColor": "#9a3412",
    "activationBkgColor": "#fde68a",
    "activationBorderColor": "#f59e0b",
    "sequenceNumberColor": "#111827"
  }
}}%%

sequenceDiagram
    participant User as Người dùng
    participant Gemini3 as Gemini 3
    participant Code as Code của bạn

    User->>Gemini3: 📷 Đọc file photo.jpg và mô tả

    activate Gemini3
    Gemini3->>Code: ⚙️ gọi_hàm(read_image, path="photo.jpg")

    activate Code
    Code-->>Gemini3: ✅ kết_quả_hàm({"type":"image","data":"..."})
    deactivate Code

    Gemini3-->>User: 🌅 Hình ảnh cho thấy cảnh hoàng hôn trên đại dương...
    deactivate Gemini3
Tác nhân tốt — xác minh trước khi phản hồi:
(Hình ảnh minh họa: Chỉnh sửa → Kiểm tra → Sửa lỗi → Kiểm tra lại → Kết thúc)
Cả hai tác nhân đều sử dụng cùng một vòng lặp công cụ được lập trình cứng (hardcoded) như nhau. Sự khác biệt nằm ở chỗ tác nhân tốt đã chủ động chọn tạo ra hoặc gọi các bước xác minh trước khi phản hồi. Không có thế lực nào ép buộc nó phải làm vậy cả.
Lựa chọn đó đến từ đâu? Ngày nay, phần lớn đến từ câu lệnh hệ thống (system prompt) (ví dụ: "luôn chạy thử nghiệm sau khi thay đổi mã nguồn"). Nhưng trong tương lai, nó sẽ ngày càng đến từ quá trình sau huấn luyện (post-training) — ví dụ: sử dụng kết quả đạt/thất bại của bài kiểm tra làm tín hiệu khen thưởng (reward signal), từ đó mô hình tự nội hàm hóa (internalize) bước xác minh này vào tư duy của nó.

Vòng lặp bên ngoài (Outer loop): Học hỏi qua các lượt tương tác

Vòng lặp bên ngoài là những gì xảy ra qua nhiều lượt tương tác hoặc nhiều phiên làm việc giữa người dùng và tác nhân theo thời gian. Người dùng giao cho tác nhân một nhiệm vụ, nó thực hiện nhiệm vụ đó (vòng lặp bên trong), trả về kết quả, và sau đó người dùng quay lại với nhiệm vụ tiếp theo. Câu hỏi đặt ra là: liệu tác nhân có học được bất cứ điều gì từ lượt tương tác trước đó không?
Nếu không có bộ nhớ bền vững (persistent memory), mỗi lượt tương tác đều là một "tờ giấy trắng". Một tác nhân đã thất bại khi xử lý phân trang (pagination) ngày hôm qua sẽ lại tiếp tục thất bại với lỗi tương tự vào ngày hôm nay.
Hầu như chưa có tác nhân nào thực hiện được điều này một cách tự nhiên (natively) ở thời điểm hiện tại. Vòng lặp bên ngoài đòi hỏi trạng thái bền vững, các kỹ năng, tệp quy tắc hoặc ghi chú có thể tồn tại xuyên suốt giữa các lượt tương tác và các phiên làm việc. Một số ví dụ sơ khai bao gồm:
AGENTS.md: Các hướng dẫn bền vững được viết thủ công bởi người dùng dành cho các lượt tương tác trong tương lai.
Tài liệu bàn giao phiên (Session handoff documents): Các bản tóm tắt có cấu trúc do chính tác nhân viết để phục vụ cho các công việc tiếp nối.
SKILL.md: Tác nhân tự phân tích các thất bại và tự động tạo ra các "Kỹ năng" (Skills) để nhiệm vụ tiếp theo không lặp lại sai lầm cũ.
Vòng lặp bên trong tập trung vào độ tin cậy trong phạm vi một tác vụ. Vòng lặp bên ngoài tập trung vào việc trở nên thông minh hơn theo thời gian.

Tóm tắt

  • Vòng lặp là cố định (hardcoded): Mọi tác nhân đều có cùng một chu kỳ: tạo phản hồi → gọi công cụ → gửi phản hồi ngược lại.
  • Hành vi bên trong vòng lặp là do học hỏi: Một tác nhân tốt sẽ chọn gọi các công cụ xác minh trước khi phản hồi. Một tác nhân yếu sẽ chỉ dừng lại sau khi làm xong.
  • Vòng lặp bên trong (Inner loop) = xác minh trong phạm vi tác vụ (viết test, chạy test, đọc lại tệp, kiểm tra so với yêu cầu ban đầu).
  • Vòng lặp bên ngoài (Outer loop) = mang theo bài học qua các lượt tương tác (bộ nhớ bền vững, kỹ năng, tệp quy tắc).
  • Hoàn tất vòng lặp ≠ cơ sở hạ tầng mới: Đó là việc tác nhân đưa ra những quyết định tốt hơn bên trong cơ sở hạ tầng sẵn có.
Nguồn bài viết từ Tác giả Phil Schmid