Vòng lặp Agent (OpenClaw)
Trong OpenClaw, một vòng lặp là một lần chạy đơn lẻ, được tuần tự hóa cho mỗi phiên, phát ra các sự kiện vòng đời và stream khi mô hình suy nghĩ, gọi công cụ và stream đầu ra. It’s the authoritative path that turns a message into actions and a final reply, while keeping session state consistent. Tài liệu này giải thích cách vòng lặp xác thực đó được nối dây đầu-cuối. trả về{ status: ok|error|timeout, startedAt, endedAt, error?
Điểm vào
- RPC của Gateway:
agentvàagent.wait. - CLI: lệnh
agent.
Cách hoạt động (mức cao)
- RPC
agentxác thực tham số, phân giải phiên (sessionKey/sessionId), lưu metadata phiên, trả về{ runId, acceptedAt }ngay lập tức. agentCommandchạy tác tử:- phân giải mô hình + mặc định thinking/verbose
- tải snapshot skills
- gọi
runEmbeddedPiAgent(runtime pi-agent-core) - phát lifecycle end/error nếu loop nhúng không phát ra
runEmbeddedPiAgent:- tuần tự hóa các lần chạy qua hàng đợi theo phiên + hàng đợi toàn cục
- phân giải mô hình + hồ sơ xác thực và xây dựng phiên pi
- đăng ký các sự kiện pi và stream delta của assistant/công cụ
- áp dụng timeout -> hủy lần chạy nếu vượt quá
- trả về payload + metadata usage
subscribeEmbeddedPiSessionbắc cầu các sự kiện pi-agent-core sang streamagentcủa OpenClaw:- sự kiện công cụ =>
stream: "tool" - delta của assistant =>
stream: "assistant" - sự kiện vòng đời =>
stream: "lifecycle"(phase: "start" | "end" | "error")
- sự kiện công cụ =>
agent.waitdùngwaitForAgentJob:- chờ lifecycle end/error cho
runId - }` Các kênh nhắn tin có thể chọn các chế độ hàng đợi (collect/steer/followup) để cấp dữ liệu cho hệ thống lane này.
- chờ lifecycle end/error cho
Xếp hàng + đồng thời
- Các lần chạy được tuần tự hóa theo từng khóa phiên (làn phiên) và tùy chọn qua một làn toàn cục.
- Điều này ngăn đua công cụ/phiên và giữ lịch sử phiên nhất quán.
- Xem Command Queue.
agent:bootstrap: chạy trong khi xây dựng các tệp bootstrap trước khi system prompt được hoàn tất.
Chuẩn bị phiên + workspace
- Workspace được phân giải và tạo; các lần chạy sandboxed có thể chuyển hướng tới thư mục gốc workspace sandbox.
- Skills được tải (hoặc tái sử dụng từ snapshot) và chèn vào env và prompt.
- Các tệp bootstrap/ngữ cảnh được phân giải và chèn vào báo cáo system prompt.
- Một khóa ghi phiên được lấy;
SessionManagerđược mở và chuẩn bị trước khi stream.
Lắp ráp prompt + system prompt
- System prompt được xây từ prompt nền của OpenClaw, prompt skills, ngữ cảnh bootstrap và các ghi đè theo lần chạy.
- Áp dụng các giới hạn theo mô hình và dự trữ token cho compaction.
- Xem System prompt để biết mô hình nhìn thấy gì.
Điểm hook (nơi bạn có thể can thiệp)
OpenClaw có hai hệ hook:- Hook nội bộ (hook của Gateway): script theo sự kiện cho lệnh và sự kiện vòng đời.
- Hook plugin: điểm mở rộng bên trong vòng đời agent/công cụ và pipeline gateway.
Hook nội bộ (hook của Gateway)
- Mặc định
agent.wait: 30s (chỉ thời gian chờ). Use this to add/remove bootstrap context files. - Hook lệnh:
/new,/reset,/stop, và các sự kiện lệnh khác (xem tài liệu Hooks).
Hook plugin (vòng đời agent + gateway)
Các hook này chạy bên trong agent loop hoặc pipeline gateway:before_agent_start: chèn ngữ cảnh hoặc ghi đè system prompt trước khi chạy.agent_end: kiểm tra danh sách thông điệp cuối cùng và metadata lần chạy sau khi hoàn tất.before_compaction/after_compaction: quan sát hoặc chú thích các chu kỳ compaction.before_tool_call/after_tool_call: chặn tham số/kết quả công cụ.tool_result_persist: biến đổi đồng bộ kết quả công cụ trước khi được ghi vào bản ghi phiên.message_received/message_sending/message_sent: hook thông điệp vào + ra.session_start/session_end: ranh giới vòng đời phiên.gateway_start/gateway_stop: sự kiện vòng đời gateway.
Streaming + phản hồi từng phần
- Delta của assistant được stream từ pi-agent-core và phát dưới dạng sự kiện
assistant. - Block streaming có thể phát phản hồi từng phần trên
text_endhoặcmessage_end. - Streaming lập luận có thể phát thành một stream riêng hoặc dưới dạng block replies.
- Xem Streaming để biết hành vi chia khối và block reply.
Thực thi công cụ + công cụ nhắn tin
- Sự kiện bắt đầu/cập nhật/kết thúc công cụ được phát trên stream
tool. - Kết quả công cụ được làm sạch về kích thước và payload hình ảnh trước khi ghi log/phát.
- Các lần gửi của công cụ nhắn tin được theo dõi để tránh xác nhận trùng lặp từ assistant.
Định hình phản hồi + loại bỏ
- Payload cuối cùng được lắp ráp từ:
- văn bản assistant (và lập luận tùy chọn)
- tóm tắt công cụ inline (khi verbose + được phép)
- văn bản lỗi của assistant khi mô hình lỗi
NO_REPLYđược coi là token im lặng và bị lọc khỏi payload gửi đi.- Các bản sao trùng lặp từ công cụ nhắn tin được loại khỏi danh sách payload cuối.
- Nếu không còn payload có thể hiển thị và một công cụ bị lỗi, một phản hồi lỗi dự phòng của công cụ sẽ được phát (trừ khi công cụ nhắn tin đã gửi phản hồi hiển thị cho người dùng).
Compaction + thử lại
- Auto-compaction phát các sự kiện stream
compactionvà có thể kích hoạt thử lại. - Khi thử lại, các bộ đệm trong bộ nhớ và tóm tắt công cụ được đặt lại để tránh đầu ra trùng lặp.
- Xem Compaction để biết pipeline compaction.
Các stream sự kiện (hiện tại)
lifecycle: phát bởisubscribeEmbeddedPiSession(và dự phòng bởiagentCommand)assistant: delta được stream từ pi-agent-coretool: sự kiện công cụ được stream từ pi-agent-core
Xử lý kênh chat
- Delta của assistant được đệm thành các thông điệp chat
delta. - Một chat
finalđược phát khi lifecycle end/error.
Timeout
- Tham số
timeoutMsghi đè. Workspace là ngôi nhà của agent. - Runtime của agent: mặc định
agents.defaults.timeoutSeconds600s; được áp dụng trong bộ hẹn giờ hủyrunEmbeddedPiAgent.
Những nơi có thể kết thúc sớm
- Hết thời gian agent (abort)
- AbortSignal (hủy)
- Gateway ngắt kết nối hoặc RPC timeout
- Timeout
agent.wait(chỉ chờ, không dừng agent)