Chuyển tới nội dung chính

Tổng Quan Kiến Trúc

Simplize Agent WebSocket là gì?​

Simplize Agent WebSocket là giao thức streaming hai chiều cho phép client nhận kết quả từ AI agent theo thời gian thực. Agent xử lý ở phía server (background), client có thể ngắt kết nối và kết nối lại bất kỳ lúc nào mà không mất dữ liệu.


So Sánh WebSocket và SSE​

Tiêu chíSSE (HTTP)WebSocket
EndpointPOST /v2/chatwss://host/v2/ws
Loại kết nốiMỗi request tạo kết nối mớiKết nối persistent
ReconnectRe-fetch kèm Last-Event-IDsubscribe với last_event_id
Multi-turn chatMỗi lượt là 1 HTTP requestNhiều lượt trên 1 kết nối
Dừng agentPOST /v2/sessions/{id}/terminate{"type": "stop", ...}
Phê duyệt toolPolling API riêngInline qua cùng kết nối

Khuyến nghị: Dùng WebSocket cho chat UI cần tương tác cao, reconnect liền mạch và HITL approval.


Luồng Tổng Quan​

Client                      Server
│ │
│──── kết nối ──────────────▶│
│◀─── connected ─────────────│ ← thông số kết nối
│ │
│──── auth {token} ─────────▶│ ← JWT bearer token
│◀─── auth_ok ───────────────│
│ │
│──── chat {message} ───────▶│ ← bắt đầu lượt mới
│◀─── subscribed {running} ──│ ← task đã khởi động
│ │
│◀─── message_start ─────────│
│◀─── content_block_start ───│ ← block thinking
│◀─── content_block_delta ───│ (streaming...)
│◀─── content_block_stop ────│
│◀─── content_block_start ───│ ← block text
│◀─── content_block_delta ───│ (streaming...)
│◀─── content_block_stop ────│
│◀─── message_delta ─────────│
│◀─── message_stop ──────────│ ← lượt hoàn thành

Vòng Đời Session​

Mỗi session đại diện cho một chuỗi hội thoại liên tục (nhiều lượt với cùng context).

Tạo session mới:
chat (không có session_id)
→ server tạo session_id
→ subscribed {session_id, status: "running"}

Lượt tiếp theo trong session:
chat {session_id: "uuid"}
→ subscribed {status: "running"}

Reconnect giữa chừng:
subscribe {session_id, last_event_id}
→ subscribed {status: "running"}
→ replay events còn thiếu + tiếp tục live

Reconnect sau khi xong:
subscribe {session_id, last_event_id}
→ subscribed {status: "completed"}
→ replay events còn thiếu, sau đó dừng

Gửi message khi agent đang bận:
chat {session_id} hoặc push_message
→ message_queued (xếp hàng, tự động xử lý sau)

Vòng Đời Một Lượt (Turn)​

Mỗi lượt agent trả lời luôn bắt đầu bằng message_start và kết thúc bằng message_stop. Giữa hai event này là các block nội dung.

message_start
content_block_start (index: 0, type: "thinking")
content_block_delta × N
content_block_stop

content_block_start (index: 1, type: "tool_use")
content_block_delta × N
content_block_stop

content_block_start (index: 2, type: "tool_result")
content_block_delta × N
content_block_stop

content_block_start (index: 3, type: "text")
content_block_delta × N
content_block_stop

message_delta
message_stop

index là số nguyên tăng dần từ 0 trong phạm vi một lượt.


Trạng Thái Session​

Trạng tháiMô tả
runningAgent đang xử lý, có thể subscribe để nhận live events
completedAgent đã xong, có thể replay lịch sử events

Event Replay (Không Mất Dữ Liệu)​

Mọi event được server lưu lại có thứ tự, mỗi event có event_id dạng UUID v7 (sortable theo thời gian). Client lưu event_id cuối cùng nhận được, dùng khi reconnect để nhận lại các events còn thiếu.

TTL của event log: 1 giờ sau khi session hoàn thành.


Danh Sách Đầy Đủ Tất Cả Events​

Client → Server​

typeBắt buộc sauMô tả
authconnectedXác thực
chatauth_okBắt đầu lượt hội thoại
subscribeauth_okĐăng ký nhận events session có sẵn
stopauth_okDừng agent
push_messageauth_okXếp hàng message
approvalnhận approval_requestPhê duyệt / trả lời
pingbất kỳ lúc nàoKeep-alive
pongnhận pingPhản hồi keep-alive

Server → Client​

typeNhómMô tả
connectedControlKết nối thành công
auth_okControlXác thực thành công
subscribedControlĐã đăng ký stream
message_queuedControlMessage đã xếp hàng
pingControlKeep-alive từ server
pongControlPhản hồi ping từ client
errorControlLỗi
message_startTurnBắt đầu lượt agent
message_deltaTurnLý do kết thúc lượt
message_stopTurnKết thúc lượt
content_block_startBlockBắt đầu block
content_block_deltaBlockNội dung block
content_block_stopBlockKết thúc block

Block Types (trong content_block_start.content_block.type)​

typeXuất hiện khiCó delta không
thinkingĐầu lượt, Claude suy luậnCó (thinking_delta)
textCâu trả lời văn bảnCó (text_delta)
tool_useAgent gọi toolCó (input_json_delta)
tool_resultSau khi tool thực thi xongCó (tool_result_delta)
file_processingCó content_urls trong chatCó (cập nhật status)
approval_requestTool cần phê duyệtKhông
approval_resultSau khi user quyết địnhCó (decisions)
approval_timeoutHết thời gian phê duyệtKhông
terminal_user_stoppedUser gửi lệnh stopCó (terminal_user_stopped)
terminal_errorLỗi agent không phục hồiCó (terminal_error)