Mục lục
Trả lời ngắn: Long-running Agent làm một việc qua nhiều phiên mà vẫn tiếp tục đúng chỗ. Hệ lưu điểm tiến độ, giới hạn thời gian xử lý và gắn mã chống thực hiện trùng hành động thật. Nhờ vậy, agent có thể tiếp tục sau khi hết giờ, khởi động lại hoặc mất phần thông tin đang dùng.
Đọc xong, bạn sẽ hiểu:
- Vì sao request chạy lâu chưa chắc là Long-running Agent.
- Job record, event log, checkpoint, lease và heartbeat phối hợp thế nào.
- Cách resume an toàn sau crash mà không làm lại việc đã hoàn tất.
- Khi nào phải pause, cancel, dừng hẳn hoặc chuyển cho người.
Lưu ý giáo dục: Bài dùng research job và dữ liệu giả. Không gọi API, gửi email hay ghi dữ liệu production thật. Agent chạy lâu không đồng nghĩa tự trị vô hạn; thao tác nhạy cảm vẫn cần quyền tối thiểu, approval, audit và giới hạn chi phí.
1. Long-running Agent là gì?
a. “Chạy lâu” không phải là một model call kéo dài
Bạn giao việc “đọc ba nguồn, tạo brief và chờ duyệt”. Worker bắt đầu lúc 9 giờ, nhưng 9 giờ 20 máy restart. Nếu toàn bộ tiến độ chỉ nằm trong cuộc chat, phiên sau không biết nguồn nào đã đọc, bước nào đã pass và việc nào từng được gửi. Tăng timeout từ 20 lên 60 phút chỉ trì hoãn cùng một kiểu mất mát.
Long-running Agent giải bài toán khác: job phải sống lâu hơn worker và context window của model. Model có thể dừng; job record vẫn còn để worker khác tiếp tục từ bước an toàn.
Hình 1 — Worker có thể thay đổi giữa các phiên, còn state store giữ đường đi của job.
b. So sánh ba cách chạy
| Cách | State chính nằm ở đâu? | Sau restart | Hợp với |
|---|---|---|---|
| Request dài | RAM/context của lần gọi | Thường phải làm lại | Task ngắn, một lượt |
| Background job | Hệ thống chạy bất đồng bộ | Có thể polling trạng thái | Việc lâu nhưng flow đơn giản |
| Durable agent | Job store, event log, artifact | Resume từ checkpoint đã verify | Task nhiều bước, nhiều phiên |
OpenAI Background mode cho phép request chạy bất đồng bộ và polling. Nhưng background không tự cung cấp checkpoint nghiệp vụ, lease hay idempotency cho side effect của ứng dụng.
c. Ví dụ đời thường: phiếu sửa xe
Phiếu sửa xe ghi xe nào, đã kiểm gì và bước tiếp theo để thợ ca chiều tiếp quản. Phiếu là state bền; người thợ là worker tạm thời. Phần mềm còn phải ngăn hai worker cùng “thay một linh kiện”.
2. Durable job cần những thành phần nào?
a. Job Record là nguồn sự thật
Job Record là nguồn sự thật hiện tại, gồm job_id, state, checkpoint, next safe step, artifact version, budget, deadline và pause/cancel. Context của model chỉ là không gian làm việc tạm.
Hình 2 — Resume Card càng cụ thể thì phiên sau càng ít phải đoán lại ý định của phiên trước.
Máy trạng thái nhỏ có thể dùng queued, running, waiting_review, paused và cancel_requested. completed, failed, cancelled là terminal state: trạng thái kết thúc không tự chạy tiếp.
b. Event Log và checkpoint không phải cùng một thứ
Event Log ghi sự kiện theo thứ tự để audit. Checkpoint là mốc đã kiểm để resume. “Đang nghiên cứu gần xong” không phải checkpoint; sources_verified_v2 tốt hơn vì trỏ tới artifact có version và phép kiểm đã pass.
Theo Anthropic về harness cho long-running agents, progress artifact và lịch sử thay đổi giúp agent mới tiếp quản qua nhiều context window. Handoff phải có cấu trúc, không dựa vào trí nhớ.
c. Lease và heartbeat trả lời “ai đang được quyền làm?”
Lease là quyền sở hữu job có thời hạn. Worker A nhận lease 5 phút và gửi heartbeat mỗi phút. Khi lease hết hạn, Worker B mới nhận job. A quay lại với lease cũ thì không được commit; đó là stale worker.
d. Idempotency khóa một side effect vào một kết quả
Idempotency key nhận diện một thao tác logic. Hai lần gọi create_brief với khóa brief:research-demo-01:v2 không được tạo hai brief. Retry là thử lại thao tác fail; resume là đọc state rồi chọn bước an toàn. Retry gửi email thiếu key có thể gửi hai lần.
3. Ví dụ ba session: research job có resume
a. Job và acceptance criteria
Job giả research-demo-01 đọc ba nguồn, tạo brief năm bullet rồi chờ reviewer. Hoàn tất khi ba nguồn có evidence, brief đúng schema và reviewer approve. Budget: 30 phút hoặc 8 action; không gửi ra ngoài.
b. Session 1: chạy rồi crash
Worker A nhận lease v1, xác minh nguồn 1–2 và lưu sources_v1. Máy crash ở nguồn 3. Checkpoint là two_sources_verified; next safe step là verify_source_3. Checkpoint không được tiến nếu artifact chưa lưu thành công.
c. Session 2: lease hết hạn và worker mới resume
Sau 5 phút không heartbeat, Worker B nhận lease v2, kiểm checksum sources_v1 và bắt đầu tại verify_source_3. B lưu sources_verified_v2, kiểm đủ ba URL, tạo brief bằng key brief:research-demo-01:v2, rồi chuyển waiting_review và giải phóng lease.
d. Session 3: reviewer phản hồi và job kết thúc
Reviewer báo bullet 4 thiếu nguồn. Worker C nhận lease v3, sửa một bullet và chạy lại assertion. Reviewer approve; job chuyển completed. A sống lại với lease v1 sẽ bị store từ chối; cùng idempotency key cũng không tạo brief thứ hai.
Trace này chỉ chắc chắn nếu store enforce lease và idempotency. Tôi sẽ nhận kết luận “resume an toàn” là sai khi log có hai brief_created cùng key.
4. Lỗi phổ biến, recovery và điều kiện dừng
a. Năm lỗi hay gặp
Hình 3 — Recovery an toàn cần cả quyền sở hữu mới lẫn hàng rào chặn kết quả cũ ghi đè.
- Context là database: phiên mới dựa vào transcript dài thay vì Job Record có schema.
- Checkpoint giả: lưu lời kể “80%” nhưng không có artifact, version hay acceptance test.
- Lease không fencing: worker hết hạn vẫn ghi được vì store không kiểm lease version.
- Retry mù: lỗi không rõ vẫn phát lại side effect nhạy cảm.
- Không có terminal state: job completed lại bị scheduler nhặt lên chạy tiếp.
b. Recovery ladder theo thứ tự
- Đọc cancel/pause flag trước khi nhận việc.
- Nhận lease mới bằng thao tác atomic; thất bại thì đứng ngoài.
- Đọc checkpoint, artifact version và các event kể từ checkpoint.
- Xác minh artifact còn tồn tại, checksum/schema còn đúng.
- Chọn
next_safe_step; không tự đoán từ câu mô tả mơ hồ. - Trước side effect, kiểm approval và idempotency key.
- Commit kết quả kèm lease version; stale lease thì từ chối.
- Tạo checkpoint mới chỉ sau postcondition pass.
Temporal Workflow Execution dùng event history để khôi phục sau lỗi. Công nghệ có thể khác, nhưng recovery phải dựa trên state đã lưu, không dựa vào model “nhớ hình như”.
c. Khi nào pause, cancel, fail hoặc escalates?
Pause khi chờ input/review. Cancel khi người dùng rút yêu cầu. Fail khi lỗi không retry được, checkpoint hỏng, hết deadline hoặc budget. Escalate khi state mâu thuẫn, side effect chưa rõ hoặc cần quyền cao hơn. Không “thử cho biết” với thanh toán, gửi công khai, xóa dữ liệu hay đặt lệnh vì rủi ro khó hoàn tác.
Theo Anthropic về harness dài hạn, công việc nên có phần vừa xử lý và artifact handoff. Nguồn vẫn có thể biến mất, credential hết hạn hoặc người duyệt không phản hồi. Durable không có nghĩa bất tử.
5. Bài tập 15 phút: điền Resume Card
a. Bắt đầu từ đâu
Dùng giấy, Markdown hoặc bảng tính miễn phí. Tạo job giả “research ba nguồn và viết brief”. Không gọi API, dùng dữ liệu cá nhân hay gửi thật.
b. Mẫu đối chiếu: Resume Card đã điền
| Trường | Mẫu |
|---|---|
| Job ID | research-demo-01 |
| State | waiting_review |
| Last checkpoint | sources_verified_v2 |
| Artifact | brief_v2, checksum demo-8f2a |
| Next safe step | wait_for_review |
| Lease | none |
| Budget còn lại | 3 action, 12 phút |
| Idempotency key | brief:research-demo-01:v2 |
c. Event Log sáu dòng
09:00 job_created— statequeued.09:01 lease_acquired— Worker A, lease v1.09:06 checkpoint_saved—two_sources_verified.09:12 lease_expired— heartbeat của A mất.09:13 lease_acquired— Worker B, lease v2.09:18 waiting_review—brief_v2đã verify.
d. Mô phỏng crash và tự kiểm
Che dòng 4–6 và giả sử A biến mất. B phải nhận lease mới, xác minh artifact/checkpoint rồi chạy verify_source_3. Cho A quay lại ghi kết quả cũ; hệ thống phải từ chối lease stale. Nếu không biết side effect đã xảy ra chưa, chọn needs_human_verification, không retry.
6. Tổng kết: state sống ngoài model, side effect chạy đúng một lần
a. Năm ý chính
- Long-running Agent là job có thể restart và resume, không phải một request thật dài.
- Job Record, Event Log và checkpoint giữ state bền ngoài context của model.
- Lease/heartbeat quyết định worker nào được làm; fencing chặn stale worker commit.
- Idempotency giúp retry/resume mà không nhân đôi side effect.
- Budget, deadline, pause/cancel, terminal state và human escalation là phần của thiết kế.
b. Câu hỏi tự kiểm tra
- Background job và durable agent khác nhau ở đâu?
- Vì sao event “đã gần xong” chưa phải checkpoint tốt?
- Lease hết hạn nhưng worker cũ quay lại thì store phải làm gì?
- Khi nào resume phải dừng để hỏi người?
c. Gợi ý đáp án
Xem gợi ý câu 1
Background xử lý bất đồng bộ; durable agent còn có state nghiệp vụ, checkpoint, recovery và chống trùng qua nhiều phiên. → Xem mục 1.Xem gợi ý câu 2
Câu đó không trỏ tới artifact/version hay acceptance test đã pass nên phiên sau không biết điểm an toàn. → Xem mục 2.Xem gợi ý câu 3
Store phải từ chối commit mang lease version cũ, dù worker đã làm xong kết quả. → Xem mục 3.Xem gợi ý câu 4
Dừng khi side effect không rõ đã xảy ra, state mâu thuẫn, thiếu ground truth hoặc cần quyền cao hơn. → Xem mục 4.d. Thuật ngữ cần nhớ
| Thuật ngữ | Giải thích ngắn |
|---|---|
| Long-running Agent | Agent thực hiện job có thể resume qua nhiều phiên. |
| Durable state | State được lưu bền ngoài worker và model context. |
| Job Record | Bản ghi nguồn sự thật về trạng thái job hiện tại. |
| Event Log | Lịch sử sự kiện bất biến theo thứ tự. |
| Checkpoint | Mốc đã verify để resume an toàn. |
| Lease | Quyền xử lý job có thời hạn. |
| Heartbeat | Tín hiệu định kỳ chứng minh worker còn sống. |
| Stale worker | Worker giữ lease cũ đã hết hiệu lực. |
| Idempotency key | Khóa giúp một thao tác logic không tạo kết quả trùng. |
| Terminal state | Trạng thái kết thúc không tự chạy bước mới. |
e. Nguồn tham khảo
- Anthropic — Effective harnesses for long-running agents
- Anthropic — Harness design for long-running application development
- Temporal — Workflow execution
- OpenAI — Background mode
f. Học tiếp gì?
Xem lại Task Decomposition #37 nếu chưa rõ cách chia job thành checkpoint và next step có contract. Bài tiếp theo là Human in the Loop #39: đặt đúng điểm phê duyệt, escalation và quyền quyết định của con người trong agentic loop.
Nhắc lại giáo dục: Resume an toàn không đến từ trí nhớ dài hơn. Khi state không đủ evidence, lease xung đột hoặc side effect chưa rõ, hãy dừng và xác minh với người trước khi chạy tiếp.
Bài tiếp theo