Tại sao nhiều hệ thống agent thất bại trong production và cách thiết kế agent đáng tin với máy trạng thái, hợp đồng công cụ rõ ràng, retry và observability sâu.

Hệ thống agent là những ứng dụng nơi một LLM không chỉ trả lời prompt, mà quyết định phải làm gì tiếp theo: gọi công cụ nào, lấy dữ liệu nào, thực thi bước nào và khi nào thì “xong”. Chúng kết hợp một mô hình, một tập công cụ (API, cơ sở dữ liệu, dịch vụ), vòng lặp lập kế hoạch/thực thi và hạ tầng liên kết mọi thứ lại với nhau.
Trong một demo, điều này trông như phép màu: agent lập được kế hoạch, gọi vài công cụ và trả về kết quả hoàn hảo. Đường happy path ngắn, độ trễ thấp và chẳng có gì hỏng cùng lúc.
Dưới tải thực tế, cùng một agent bị căng thẳng theo những cách mà demo chưa từng gặp:
Kết quả: hành vi hay bị lỗi không ổn định khó tái tạo, dữ liệu bị hỏng im lặng, và luồng người dùng thỉnh thoảng treo hoặc chạy mãi không dừng.
Agent không ổn định không chỉ làm mất “sự hài lòng”. Chúng:
Bài viết này nói về mẫu tư duy kỹ thuật, không phải “prompt tốt hơn”. Chúng ta sẽ xem máy trạng thái, hợp đồng công cụ rõ ràng, chiến lược retry và xử lý lỗi, điều khiển bộ nhớ và concurrency, cùng mẫu observability giúp hệ thống agent trở nên dự đoán được dưới tải—không chỉ ấn tượng trên sân khấu.
Phần lớn hệ thống agent trông ổn trong một demo happy-path đơn lẻ. Chúng vỡ khi traffic, công cụ và các trường hợp biên cùng xuất hiện.
Điều phối sơ khai giả định mô hình sẽ “làm đúng” trong một hai lần gọi. Dưới sử dụng thực tế, bạn sẽ thấy các mẫu lặp lại:
Không có trạng thái rõ ràng và điều kiện kết thúc, những hành vi này là không tránh khỏi.
Sampling của LLM, biến thiên độ trễ và thời điểm công cụ tạo ra tính không quyết định ẩn. Cùng một input có thể chạy qua các nhánh khác nhau, gọi công cụ khác nhau hoặc diễn giải kết quả công cụ khác nhau.
Ở quy mô lớn, vấn đề công cụ áp đảo:
Mỗi vấn đề này biến thành vòng lặp giả, retry, hoặc câu trả lời cuối cùng sai.
Những gì hiếm khi vỡ ở 10 RPS sẽ hỏng liên tục ở 1.000 RPS. Concurrency lộ ra:
Nhóm sản phẩm thường mong đợi workflow xác định, SLA rõ ràng và khả năng audit. Agents, nếu không bị ràng buộc, cung cấp hành vi xác suất, nỗ lực-tốt nhất với đảm bảo yếu. Khi kiến trúc bỏ qua sự không phù hợp này—đối xử agent như dịch vụ truyền thống thay vì bộ lập kế hoạch ngẫu nhiên—hệ thống trở nên không thể dự đoán ngay khi độ tin cậy quan trọng nhất.
Agent sẵn sàng cho production không phải là “prompt thông minh” mà là thiết kế hệ thống kỷ luật. Cách hữu ích để nghĩ về chúng là như những cỗ máy nhỏ, dự đoán được, thỉnh thoảng gọi LLM, chứ không phải những blob LLM bí ẩn thỉnh thoảng chạm vào hệ thống của bạn.
Bốn thuộc tính quan trọng nhất:
Bạn không có được những thuộc tính này chỉ bằng prompt. Bạn có được chúng từ cấu trúc.
Mẫu mặc định nhiều đội bắt đầu là: “while not done, call the model, let it think, maybe call a tool, repeat”. Dễ prototype nhưng khó vận hành.
Mẫu an toàn hơn là biểu diễn agent như một workflow rõ ràng:
COLLECTING_INPUT, PLANNING, EXECUTING_STEP, WAITING_ON_HUMAN, DONE).Điều này biến agent thành một máy trạng thái nơi mỗi bước có thể kiểm tra, test và phát lại. Vòng lặp tự do có vẻ linh hoạt, nhưng workflow rõ ràng là thứ khiến sự cố dễ gỡ và hành vi có thể kiểm toán.
Agent đơn khối làm “mọi thứ” rất hấp dẫn, nhưng chúng tạo ra coupling chặt giữa các trách nhiệm không liên quan: lập kế hoạch, truy xuất, logic nghiệp vụ, điều phối UI, v.v.
Thay vào đó, ghép những agent nhỏ, phạm vi rõ ràng hoặc skills:
Mỗi skill có thể có máy trạng thái, công cụ và quy tắc an toàn riêng. Logic composition sau đó trở thành workflow cấp cao hơn, không phải prompt ngày càng to trong một agent đơn.
Tính mô-đun này giữ mỗi agent đủ đơn giản để suy luận và cho phép bạn phát triển một khả năng mà không làm mất ổn định phần còn lại.
Mô hình hữu ích là chia agent thành ba lớp:
Chính sách quyết định (LLM prompts + model)
Bao hàm cách agent chọn hành động tiếp theo, được diễn giải dưới các ràng buộc nghiêm ngặt. Bạn nên có thể thay model, điều chỉnh temperature, hoặc tinh chỉnh prompt mà không chạm vào wiring hệ thống.
Máy trạng thái / engine workflow
Chiếm hữu ở đâu bạn đang trong quy trình, chuyển tiếp nào có thể và cách persist tiến độ. Chính sách đề xuất một bước; máy trạng thái xác thực và áp dụng nó.
Lớp tooling
Triển khai những gì thực sự xảy ra trên thế giới: API, DB, queue, dịch vụ bên ngoài. Công cụ phơi bày hợp đồng hẹp, kiểu rõ ràng và thực thi authorization, rate limit và validation đầu vào.
Bằng cách kiểm enforced sự tách bạch này, bạn tránh bẫy cất logic nghiệp vụ trong prompt hoặc mô tả công cụ. LLM trở thành thành phần quyết định bên trong một vỏ xác định, không phải vỏ đó.
Những hệ thống agent đáng tin cậy nhất không phải là demo ấn tượng nhất—mà là những hệ thống bạn có thể giải thích trên whiteboard.
Cụ thể:
Khuynh hướng hướng tới agent nhỏ, có thể ghép và có cấu trúc tốt là thứ cho phép hệ thống mở rộng phạm vi mà không tự sụp đổ dưới độ phức tạp của chính nó.
Hầu hết triển khai agent bắt đầu như một vòng lặp “think, act, observe” quấn quanh một lần gọi LLM. Điều đó ổn cho demo, nhưng nhanh chóng trở nên mờ và mong manh. Cách tốt hơn là coi agent như một máy trạng thái rõ ràng: tập hữu hạn trạng thái, với chuyển tiếp xác định bởi các event.
Thay vì để model ngầm quyết định bước tiếp theo, định nghĩa một sơ đồ trạng thái nhỏ:
Chuyển tiếp giữa các trạng thái được kích hoạt bởi event có kiểu như UserRequestReceived, ToolCallSucceeded, ToolValidationFailed, TimeoutExceeded, hoặc HumanOverride. Mỗi event, cộng trạng thái hiện tại, quyết định trạng thái và hành động tiếp theo.
Điều này làm cho retry và timeout trở nên đơn giản: bạn gắn chính sách vào từng trạng thái (ví dụ CALL_TOOL retry 3 lần với backoff mũ, PLAN có thể không retry) thay vì rải logic retry khắp codebase.
Persist trạng thái hiện tại và context tối thiểu vào store ngoài (database, queue, hoặc workflow engine). Agent sau đó trở thành một hàm thuần túy:
next_state, actions = transition(current_state, event, context)
Điều này cho phép:
Với máy trạng thái, mỗi bước hành vi của agent là rõ ràng: trạng thái nào, event gì xảy ra, chuyển tiếp nào được kích hoạt và side effect nào sinh ra. Sự rõ ràng đó giúp gỡ lỗi nhanh hơn, đơn giản hóa điều tra sự cố và tạo ra dấu vết kiểm toán tự nhiên cho tuân thủ. Bạn có thể chứng minh từ log và lịch sử trạng thái rằng những hành động rủi ro chỉ được thực hiện từ các trạng thái cụ thể và dưới điều kiện đã định.
Agent hành xử dự đoán hơn khi công cụ trông ít giống “API ẩn trong văn bản” và giống giao diện được thiết kế tốt với các đảm bảo rõ ràng.
Mỗi công cụ nên có hợp đồng bao gồm:
InvalidInput, NotFound, RateLimited, TransientFailure) với ngữ nghĩa rõ.Phơi bày hợp đồng này cho model dưới dạng tài liệu có cấu trúc, không phải bức tường văn bản. Planner của agent nên biết lỗi nào có thể retry, lỗi nào cần can thiệp người dùng và lỗi nào nên dừng workflow.
Xử lý I/O công cụ như bất kỳ API production nào khác:
Điều này giúp đơn giản prompt: thay vì hướng dẫn dài, dựa vào schema để dẫn đường. Ràng buộc rõ giảm hallucination tham số và chuỗi gọi công cụ vô nghĩa.
Công cụ tiến hoá; agents không nên vỡ mỗi khi công cụ thay đổi.
v1, v1.1, v2) và ghim agents vào một version.Logic lập kế hoạch sau đó có thể an toàn trộn agents và công cụ ở mức trưởng thành khác nhau.
Thiết kế hợp đồng với thất bại từng phần trong đầu:
Agent có thể thích nghi: tiếp tục workflow với chức năng giảm, hỏi người dùng xác nhận hoặc chuyển sang công cụ fallback.
Hợp đồng công cụ là nơi tự nhiên để mã hóa giới hạn an toàn:
confirm: true).Kết hợp điều này với các kiểm tra server-side; không bao giờ chỉ dựa vào model để “hành xử đúng”.
Khi công cụ có hợp đồng rõ ràng, validate, versioned, prompt có thể ngắn hơn, logic điều phối đơn giản hơn và gỡ lỗi dễ hơn. Bạn chuyển độ phức tạp khỏi chỉ dẫn bằng ngôn ngữ tự nhiên mong manh sang schema và chính sách xác định, cắt giảm các lần gọi công cụ ảo tưởng và side-effect bất ngờ.
Hệ thống agent đáng tin cậy giả định rằng mọi thứ rồi sẽ thất bại: model, công cụ, mạng, thậm chí lớp điều phối của bạn. Mục tiêu không phải tránh thất bại mà làm cho nó rẻ và an toàn.
Idempotency nghĩa là: lặp lại cùng một yêu cầu có cùng hiệu ứng nhìn thấy được như thực hiện một lần. Điều này quan trọng với agent LLM, vốn thường gọi lại công cụ sau thất bại một phần hoặc phản hồi mơ hồ.
Làm công cụ idempotent bằng thiết kế:
request_id ổn định. Công cụ lưu và trả lại cùng kết quả nếu thấy ID đó lần nữa.Dùng retry có cấu trúc cho lỗi tạm thời (timeout, rate limit, 5xx): exponential backoff, jitter để tránh thundering herd và số lần tối đa nghiêm ngặt. Ghi log mỗi lần thử cùng correlation ID để bạn có thể truy vết hành vi agent.
Với lỗi cố định (4xx, lỗi validate, vi phạm rule nghiệp vụ), không retry. Đẩy lỗi có cấu trúc lên policy agent để nó có thể sửa kế hoạch, hỏi người dùng hoặc chọn công cụ khác.
Triển khai circuit breaker ở cả lớp agent và lớp công cụ: sau nhiều lần thất bại, tạm thời chặn gọi công cụ đó và fail fast. Ghép với fallback rõ ràng: chế độ suy giảm, cache hoặc công cụ thay thế.
Tránh retry mù quáng từ vòng lặp agent. Nếu không có công cụ idempotent và lớp lỗi phân loại rõ, bạn chỉ nhân lên side-effect, độ trễ và chi phí.
Agent đáng tin cậy bắt đầu bằng suy nghĩ rõ ràng về cái gì là trạng thái và nó nằm ở đâu.
Đối xử agent như một service xử lý yêu cầu:
Trộn hai loại này dẫn đến nhầm lẫn và lỗi. Ví dụ, đặt kết quả công cụ ngắn hạn vào “bộ nhớ” khiến agent tái sử dụng ngữ cảnh cũ trong các cuộc hội thoại sau.
Bạn có ba tùy chọn chính:
Quy tắc tốt: LLM là hàm stateless trên một object state rõ ràng. Persist object đó bên ngoài model và tạo prompt từ nó.
Một mẫu lỗi phổ biến là dùng log hội thoại, trace, hoặc prompt thô làm bộ nhớ thực tế.
Vấn đề:
Thay vào đó, định nghĩa schema bộ nhớ có cấu trúc: user_profile, project, task_history, v.v. Sinh logs từ state, chứ đừng lấy state từ logs.
Khi nhiều công cụ hoặc agent cập nhật cùng một thực thể (ví dụ CRM, ticket, task status), bạn cần kiểm soát nhất quán cơ bản:
Với thao tác giá trị cao, ghi một decision log riêng biệt ngoài conversational log: thay đổi gì, vì sao và dựa trên input nào.
Để sống sót qua crash, deploy và rate limiting, workflow nên có thể tiếp tục:
Điều này cũng cho phép debug thời gian: bạn có thể kiểm tra và phát lại chính xác trạng thái dẫn đến quyết định xấu.
Bộ nhớ vừa là tài sản vừa là rủi ro. Với agent production:
Đối xử bộ nhớ như một sản phẩm: được thiết kế, version và quản trị—không phải một đống văn bản tăng dần dính với agent.
Agents trông tuần tự trên whiteboard nhưng hành xử như hệ thống phân tán dưới tải thực. Ngay khi có nhiều user, công cụ và job nền, bạn phải xử race condition, công việc trùng lặp và lỗi về thứ tự.
Các chế độ lỗi thường gặp:
Bạn giảm thiểu bằng hợp đồng công cụ idempotent, trạng thái workflow rõ ràng và locking optimistic/pessimistic ở tầng dữ liệu.
Flow request–response đồng bộ đơn giản nhưng mong manh: mọi phụ thuộc phải up, trong giới hạn tỷ lệ và nhanh. Khi agents fan-out tới nhiều công cụ hoặc sub-task song song, chuyển các bước chạy dài hoặc side-effect vào queue.
Điều phối dựa trên queue cho phép bạn:
Agents thường chạm ba lớp giới hạn:
Bạn cần một lớp rate-limit rõ ràng với throttle theo user, tenant và toàn cục. Dùng token bucket hoặc leaky bucket để thực thi chính sách, và trả lỗi rõ (ví dụ RATE_LIMIT_SOFT, RATE_LIMIT_HARD) để agent biết giảm dần.
Backpressure là cách hệ thống tự bảo vệ dưới áp lực. Chiến lược gồm:
Giám sát các chỉ báo bão hòa: độ sâu queue, sử dụng worker, tỷ lệ lỗi model/công cụ và phần trăm độ trễ. Queue dâng cùng với độ trễ tăng hoặc lỗi 429/503 là cảnh báo sớm rằng agents đang vượt quá môi trường.
Bạn không thể làm agent đáng tin nếu không trả lời hai câu hỏi nhanh: nó đã làm gì? và tại sao nó làm vậy? Observability cho agentic systems làm cho những câu trả lời đó rẻ và chính xác.
Thiết kế observability sao cho một task có trace xuyên suốt:
Gắn vào trace đó các log có cấu trúc cho quyết định then chốt (chọn route, sửa plan, kích hoạt guardrail) và metrics cho volume và sức khỏe.
Một trace hữu ích thường bao gồm:
Log prompt, input/ output công cụ ở dạng có cấu trúc, nhưng phải đi qua lớp redaction trước:
Giữ nội dung thô sau feature flags ở môi trường thấp hơn; production mặc định hiển thị đã redacted.
Ít nhất, theo dõi:
Khi có sự cố, trace và metrics tốt chuyển câu hỏi từ “agent có vẻ chập chờn” thành phát biểu chính xác như: “P95 task lỗi ở ToolSelection sau 2 retry do schema mới trong billing_service,” rút thời gian chẩn đoán từ giờ xuống phút và cho bạn các tay nắm điều chỉnh cụ thể.
Kiểm thử agent là kiểm thử cả các công cụ chúng gọi lẫn luồng nối các phần lại với nhau. Đối xử nó như kiểm thử hệ thống phân tán, không chỉ tinh chỉnh prompt.
Bắt đầu với unit test ở ranh giới công cụ:
Những test này không phụ thuộc LLM. Gọi trực tiếp công cụ với input tổng hợp và assert output hoặc error contract chính xác.
Integration test chạy workflow end-to-end: LLM + công cụ + điều phối.
Mô tả chúng như test theo kịch bản:
Những test này assert chuyển trạng thái và gọi công cụ, không phải từng token của LLM. Kiểm tra: công cụ nào được gọi, với arg gì, thứ tự nào và trạng thái/kết quả cuối agent đạt được.
Để test lặp lại, fixture cả phản hồi LLM và output công cụ.
Mẫu điển hình:
with mocked_llm(fixtures_dir="fixtures/llm"), mocked_tools():
result = run_agent_scenario(input_case)
assert result.state == "COMPLETED"
Mỗi thay đổi prompt hoặc schema phải kích hoạt một lượt regression không thể bỏ qua:
Evol schema (thêm trường, thắt kiểu) cần có bộ case regression riêng để bắt agent hoặc công cụ vẫn còn giả định theo hợp đồng cũ.
Không bao giờ đẩy model, policy hoặc routing mới thẳng lên production traffic.
Thay vào đó:
Chỉ sau khi vượt cổng offline nên biến thể mới vào production, tốt nhất là qua feature flags và rollout dần.
Log agent thường chứa dữ liệu nhạy cảm. Kiểm thử phải tôn trọng điều đó.
Mã hóa những quy tắc này vào CI để không có artifact test nào được tạo hoặc lưu mà không qua kiểm tra ẩn danh.
Vận hành agent trong production giống chạy hệ phân tán hơn là ship một model tĩnh. Bạn cần controls cho rollout, mục tiêu độ tin cậy rõ ràng và quản trị thay đổi kỷ luật.
Giới thiệu agent hoặc hành vi mới dần dần:
Hậu thuẫn bằng feature flags và chính sách config-driven: routing rules, công cụ được bật, temperature, cài đặt an toàn. Thay đổi nên deploy bằng config, không phải code, và có thể đảo ngay.
Đặt SLO phản ánh cả sức khỏe hệ thống và giá trị người dùng:
Nối chúng vào cảnh báo và vận hành sự cố như dịch vụ production khác: ownership rõ ràng, runbook triage và bước giảm thiểu chuẩn (rollback flag, rút traffic, chế độ safe-mode).
Dùng logs, trace và transcript hội thoại để tinh chỉnh prompt, công cụ và policy. Xử lý mỗi thay đổi như artifact có version, duyệt và khả năng rollback.
Tránh thay đổi prompt hay công cụ một cách âm thầm. Nếu không có change control, bạn không thể tương quan lỗi với edit cụ thể, và phản ứng sự cố biến thành đoán mò thay vì kỹ thuật.
Một hệ thống agent production-ready hưởng lợi từ tách rạch rõ ràng các mối quan tâm. Mục tiêu là giữ agent thông minh ở quyết định, nhưng ngu ngốc ở hạ tầng.
1. Gateway / API edge
Điểm entry đơn cho client (app, service, UI). Xử lý:
2. Orchestrator
Orchestrator là “cột sống”, không phải bộ não. Nó điều phối:
LLM(s) nằm phía sau orchestrator, dùng bởi planner và một số tool cụ thể cần hiểu ngôn ngữ.
3. Lớp tooling và lưu trữ
Logic nghiệp vụ vẫn nằm ở microservice, queue và hệ thống dữ liệu hiện có. Tools là lớp wrapper mỏng quanh:
Orchestrator gọi tool qua hợp đồng nghiêm ngặt, trong khi hệ thống lưu trữ vẫn là nguồn chân lý.
Thi hành auth và quota tại gateway; thi hành safety, data access và policy trong orchestrator. Mọi gọi (LLM và công cụ) phát telemetry có cấu trúc vào pipeline cung cấp:
Kiến trúc đơn giản (gateway → single orchestrator → tools) dễ vận hành; thêm planner riêng, policy engine và model gateway tăng linh hoạt nhưng đổi lấy phối hợp, độ trễ và độ phức tạp vận hành cao hơn.
Bạn giờ có các thành phần cốt lõi để agent hành xử dự đoán dưới tải thực: máy trạng thái rõ ràng, hợp đồng công cụ, retry kỷ luật và observability sâu. Bước cuối là biến những ý tưởng đó thành thực hành lặp lại cho đội.
Hãy nghĩ mỗi agent như một workflow có trạng thái:
Khi các phần này khớp nhau, bạn có hệ thống suy giảm dần thay vì sụp đổ dưới các trường hợp biên.
Trước khi giao prototype agent cho người dùng thực, xác nhận:
Nếu thiếu bất kỳ mục nào, bạn vẫn đang ở trạng thái prototype.
Thiết lập bền vững thường tách:
Cách này cho phép product teams di chuyển nhanh trong khi platform teams đảm bảo độ tin cậy, an ninh và kiểm soát chi phí.
Khi nền tảng ổn định, bạn có thể khám phá:
Tiến triển ở đây nên là từng bước: đưa thành phần học vào sau feature flag, với đánh giá offline và guardrail mạnh.
Chủ đề xuyên suốt: thiết kế cho thất bại, ưa rõ ràng hơn là khéo léo, và lặp lại khi bạn có thể quan sát và quay lui an toàn. Với những ràng buộc đó, hệ thống agent dừng là prototype đáng sợ và trở thành hạ tầng tổ chức bạn có thể tin cậy.
Một hệ thống agent là một ứng dụng nơi LLM không chỉ trả lời một prompt đơn lẻ mà quyết định bước tiếp theo: gọi công cụ nào, lấy dữ liệu gì, chạy bước nào trong workflow, và khi nào thì dừng.
Không giống một chat completion đơn giản, một hệ thống agent kết hợp:
Trong môi trường production, LLM trở thành một thành phần ra quyết định bên trong một vỏ xác định hơn — không phải toàn bộ hệ thống.
Các demo thường chạy trên đường happy path: một người dùng, công cụ hoạt động lý tưởng, không có timeout, không có drift schema và cuộc hội thoại ngắn. Trong production, agents phải đối mặt với:
Nếu không có workflow rõ ràng, hợp đồng và xử lý lỗi, những yếu tố này sinh ra vòng lặp, treo, công việc chỉ làm một phần và lỗi im lặng mà không xuất hiện trong môi trường demo.
Đặt LLM vào một khuôn khổ rõ ràng thay vì vòng lặp tự do:
Mô tả agent như một workflow với các trạng thái được đặt tên và các event có kiểu, thay vì while not done: call LLM.
Các trạng thái điển hình có thể bao gồm:
Thiết kế công cụ như API production thực thụ, không phải mô tả bằng văn bản trong prompt. Mỗi công cụ nên có:
Giả sử mọi lời gọi ngoài sẽ thất bại đôi khi và thiết kế quanh giả định đó.
Các mẫu chính:
Tách state ngắn hạn khỏi bộ nhớ dài hạn, và giữ LLM ở trạng thái stateless.
Tránh dùng logs thô hoặc toàn bộ lịch sử hội thoại làm “bộ nhớ”; thay vào đó, dẫn xuất bản tóm tắt cấu trúc từ chúng với quy tắc giữ/chấm dứt rõ ràng.
Xem hệ thống agent như một hệ phân tán dưới tải, ngay cả khi mỗi luồng có vẻ tuần tự.
Để giữ đáng tin cậy:
Bạn cần trả lời “agent đã làm gì?” và “tại sao nó làm vậy?” cho bất kỳ task nào.
Yêu cầu thực tiễn:
Xử lý agents như dịch vụ đang tiến hóa, không phải prompt tĩnh, và quản lý chúng với cùng mức nghiêm ngặt như các hệ production khác.
Thực hành khuyến nghị:
Cách làm này cho phép bạn giải thích, kiểm thử và gỡ lỗi hành vi từng bước thay vì đuổi theo các “suy nghĩ” mơ hồ của agent.
PLAN – hiểu yêu cầu và tạo kế hoạch từng bướcCALL_TOOL – gọi một công cụ cụ thể hoặc một batchVERIFY – kiểm tra đầu ra theo quy tắc đơn giản hoặc kiểm tra phụ bằng mô hình khácRECOVER – xử lý lỗi qua retry, fallback hoặc eskalationDONE / FAILED – kết quả cuốiCác sự kiện (ví dụ: ToolCallSucceeded, TimeoutExceeded) cộng với trạng thái hiện tại quyết định trạng thái tiếp theo. Điều này làm cho retry, timeout và xử lý lỗi trở nên rõ ràng thay vì bị ẩn trong prompt hay mã glue.
InvalidInput, NotFound, RateLimited, TransientFailureValidate đầu vào trước khi gọi công cụ và validate đầu ra sau khi nhận. Version hóa hợp đồng công cụ và ghim agents vào một version để thay đổi schema không phá nát flow một cách thầm lặng.
request_idCách này giữ độ tin cậy cao mà không tạo ra vòng lặp vô hạn, side-effect trùng lặp hay chi phí ngoài kiểm soát.
Giám sát độ sâu queue, các phần trăm độ trễ và mã 429/503 để phát hiện quá tải trước khi trở thành sự cố.
Khi có điều này, phân tích sự cố chuyển từ “agent cảm thấy trồi sụt” sang khoanh vùng chính xác trạng thái, công cụ và thay đổi gây thoái biến.
Cách này cho phép cải tiến liên tục trong khi giữ lỗi nằm trong phạm vi, có thể chẩn đoán và đảo ngược.