KoderKoder.ai
Bảng giáDoanh nghiệpGiáo dụcDành cho nhà đầu tư
Đăng nhậpBắt đầu

Sản phẩm

Bảng giáDoanh nghiệpDành cho nhà đầu tư

Tài nguyên

Liên hệHỗ trợGiáo dụcBlog

Pháp lý

Chính sách bảo mậtĐiều khoản sử dụngBảo mậtChính sách sử dụng chấp nhận đượcBáo cáo vi phạm

Mạng xã hội

LinkedInTwitter
Koder.ai
Ngôn ngữ

© 2026 Koder.ai. Bảo lưu mọi quyền.

Trang chủ›Blog›Thiết kế hệ thống agent không sụp đổ trong production
07 thg 10, 2025·8 phút

Thiết kế hệ thống agent không sụp đổ trong production

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.

Thiết kế hệ thống agent không sụp đổ trong production

Từ các demo ấn tượng đến các agent mong manh trong production

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.

Tại sao demo hoạt động còn production thất bại

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:

  • API bị timeout, trả về dữ liệu một phần hoặc thay đổi hợp đồng.
  • Nhiều yêu cầu cùng tranh giành tài nguyên chung và làm hỏng trạng thái.
  • Các cuộc hội thoại chạy dài làm phình bộ nhớ và vượt giới hạn ngữ cảnh.
  • Những sai sót nhỏ của mô hình cộng dồn qua nhiều lần gọi công cụ.

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.

Tác động thực tế lên doanh nghiệp

Agent không ổn định không chỉ làm mất “sự hài lòng”. Chúng:

  • Kích hoạt sự cố và cảnh báo on-call.
  • Sinh câu trả lời sai trôi vào hệ thống hạ nguồn.
  • Xói mòn niềm tin người dùng: mọi người âm thầm ngừng tin tưởng tính năng.
  • Thổi phồng hóa đơn cloud do retry và vòng lặp chạy tràn.

Hướng dẫn này tập trung vào gì

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.

Tại sao hầu hết kiến trúc agent thất bại khi lên quy mô

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.

Hành vi mong manh: vòng lặp, treo, làm việc một phần, lỗi im lặng

Đ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:

  • Vòng lặp: agent tiếp tục lập kế hoạch lại hoặc gọi lại cùng một công cụ vì không bao giờ nhận ra hoàn thành hoặc thất bại.
  • Treo: agent chờ một công cụ hoặc subtasks mà không có timeout, khiến phiên người dùng bị treo.
  • Làm việc một phần: agent hoàn thành nửa quy trình (ví dụ: soạn email nhưng không gửi, tạo kế hoạch nhưng không thực thi các bước).
  • Lỗi im lặng: công cụ thất bại hoặc schema không khớp, nhưng agent tự tin trả lời một cách thuyết phục với dữ liệu thiếu hoặc sai.

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.

Tính không quyết định ẩn và độ không tin cậy của công cụ

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:

  • Timeout và flakiness từ API và DB upstream
  • Drift schema giữa hợp đồng công cụ và những gì dịch vụ thực tế trả về
  • Định dạng lỗi không nhất quán mà agent chưa học cách xử lý

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.

Concurrency khuếch đại các trường hợp biên và sự không phù hợp sản phẩm

Những gì hiếm khi vỡ ở 10 RPS sẽ hỏng liên tục ở 1.000 RPS. Concurrency lộ ra:

  • Điều kiện race trên trạng thái hoặc cache chia sẻ
  • Giới hạn tỷ lệ bị cạn kiệt gây lỗi dây chuyền cho công cụ
  • Đàn thundering của retry được kích hoạt bởi một trục trặc phụ thuộc duy nhất

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.

Nguyên tắc thiết kế cho agent production-grade

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.

Điều gì làm nên một agent sẵn sàng production?

Bốn thuộc tính quan trọng nhất:

  • An toàn: agent phải tôn trọng ràng buộc truy cập dữ liệu, side-effect, và lời hứa với người dùng. Điều này có nghĩa là quyền truy cập rõ ràng, guardrail trên công cụ và xử lý cẩn trọng đầu ra không đáng tin.
  • Dự đoán được: với cùng input và trạng thái, agent nên hành xử trong một dải mong đợi hẹp. Bạn phải có khả năng giải thích nó có thể và không thể làm gì.
  • Khả năng gỡ lỗi: khi có lỗi, bạn có thể truy vết đường đi: trạng thái nào, quyết định nào, công cụ nào, gọi model nào. Không có vòng lặp ẩn, không có “suy nghĩ” mơ hồ không có cấu trúc.
  • Chịu thay đổi: bạn có thể nâng cấp model, công cụ hoặc chiến lược mà không viết lại toàn bộ hệ thống.

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.

Ưu tiên workflow rõ ràng hơn là vòng lặp tự do

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:

  • Định nghĩa một tập hữu hạn trạng thái (ví dụ COLLECTING_INPUT, PLANNING, EXECUTING_STEP, WAITING_ON_HUMAN, DONE).
  • Định nghĩa chuyển tiếp nào được phép giữa các trạng thái.
  • Dùng LLM chủ yếu cho quyết định cục bộ: chọn trạng thái tiếp theo, chọn công cụ, hoặc điền tham số.

Đ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.

Tách “god agent” thành các kỹ năng mô-đun

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ột planner phân rã nhiệm vụ.
  • Một executor thực thi các bước cụ thể.
  • Một specialist cho mỗi miền (billing, support, analytics, v.v.).

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.

Tách rạch chính sách, trạng thái và công cụ

Mô hình hữu ích là chia agent thành ba lớp:

  1. 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.

  2. 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ó.

  3. 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ỏ đó.

Thiết kế cho nhỏ gọn và rõ ràng

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ể:

  • Giữ mỗi agent tập trung vào một công việc và một chỉ số thành công chính.
  • Mã hóa workflow và chuyển tiếp trạng thái rõ ràng thay vì trình bày bằng văn.
  • Cho phép LLM chọn giữa các lựa chọn được định nghĩa rõ ràng, không để nó tự sáng tạo toàn bộ quy trình từ đầu.

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ó.

Mô hình hóa workflow agent dưới dạng máy trạng thái rõ ràng

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.

Biểu diễn luồng agent bằng trạng thái và chuyển tiếp

Thay vì để model ngầm quyết định bước tiếp theo, định nghĩa một sơ đồ trạng thái nhỏ:

  • PLAN – giải thích yêu cầu người dùng, phân nhỏ thành các bước, chọn công cụ.
  • CALL_TOOL – thực thi một lần gọi công cụ (hoặc batch) với input đã validate.
  • VERIFY – kiểm tra output công cụ theo các bất biến đơn giản hoặc kiểm tra bổ sung bằng model.
  • RECOVER – xử lý lỗi: retry, fallback hoặc eskalation.
  • DONE – trả về đáp án cuối và đóng workflow.
  • FAILED – lỗi cuối với lý do và bối cảnh rõ ràng.

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.

Externalize state để tăng khả năng chịu lỗi và quy mô

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:

  • Khả năng chịu lỗi – nếu worker chết giữa chừng, worker khác có thể tiếp tục từ trạng thái persisted cuối cùng.
  • Scale ngang – các worker stateless tiêu thụ event, cập nhật trạng thái và phát ra event tiếp theo.
  • Replay và bù đắp – bạn có thể tái tạo một lần chạy, chạy lại từ bất kỳ trạng thái nào, hoặc thực hiện hành động bù khi cần rollback flow.

Lợi ích cho việc lý giải và kiểm toán

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.

Thiết kế hợp đồng công cụ đáng tin cậy cho agent

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.

Định nghĩa hợp đồng, không chỉ prompt

Mỗi công cụ nên có hợp đồng bao gồm:

  • Schema đầu vào: trường bắt buộc, kiểu, enum, ràng buộc, giá trị mặc định.
  • Schema đầu ra: payload thành công, trường nullable và ý nghĩa của “không có kết quả”.
  • Mô hình lỗi: lỗi có kiểu (ví dụ InvalidInput, NotFound, RateLimited, TransientFailure) với ngữ nghĩa rõ.
  • SLA: kỳ vọng độ trễ, mục tiêu khả dụng và giới hạn tỷ lệ.

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.

JSON nghiêm ngặt, validation nghiêm ngặt

Xử lý I/O công cụ như bất kỳ API production nào khác:

  • Dùng JSON schema nghiêm ngặt (ví dụ OpenAPI, JSON Schema) cho đầu vào và đầu ra.
  • Validate trước khi gọi (để bắt lỗi model) và sau khi nhận (để phát hiện regression công cụ).
  • Tự sửa các vấn đề nhỏ (ví dụ ép kiểu) nhưng ghi log để điều chỉnh sau.

Đ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.

Versioning và tương thích

Công cụ tiến hoá; agents không nên vỡ mỗi khi công cụ thay đổi.

  • Version hợp đồng công cụ (v1, v1.1, v2) và ghim agents vào một version.
  • Thông báo trường bị deprecate dần; giữ trường cũ đọc được trong một thời gian.
  • Thêm trường theo cách tương thích ngược; tránh thay đổi ngữ nghĩa một cách thầm lặng.

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.

Xử lý lỗi và chế độ suy giảm

Thiết kế hợp đồng với thất bại từng phần trong đầu:

  • Cho phép kết quả từng phần với chi tiết lỗi per-item.
  • Định nghĩa phản hồi suy giảm (ví dụ dữ liệu cache, xấp xỉ hoặc lỗi cũ) thay vì thất bại cứng.
  • Đánh dấu trường nào là “nỗ lực tốt nhất” so với trường “bắt buộc”.

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.

Ranh giới an ninh và ủy quyền

Hợp đồng công cụ là nơi tự nhiên để mã hóa giới hạn an toàn:

  • Phạm vi công cụ được phép đọc hoặc sửa.
  • Yêu cầu tham số rõ ràng cho hành động nhạy cảm (ví dụ confirm: true).
  • Phân biệt thao tác theo user-scope và system-scope.

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”.

Tại sao hợp đồng tốt làm đơn giản agent

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ờ.

Retry, idempotency và mẫu xử lý lỗi

Hiện đại hóa quy trình build
Thay thế các bước giao tay chậm chạp bằng phát triển hướng chat cho dịch vụ agent tiếp theo của bạn.
Thử Koder

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: nền tảng cho retry 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 IDs: Mỗi gọi công cụ kèm 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.
  • Upserts thay vì inserts: Dùng semantics “create-or-update” theo khóa nghiệp vụ thay vì ID tự tăng.
  • Checksum và versioning: Kèm hash nội dung hoặc số phiên bản để công cụ phát hiện bản sao, ghi cũ hoặc xung đột.

Chiến lược retry không làm bùng chi phí

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.

Circuit breaker và fallback

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í.

Quản lý bộ nhớ, trạng thái và nhất quán dữ liệu cho agent

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.

Trạng thái ngắn hạn vs bộ nhớ dài hạn

Đối xử agent như một service xử lý yêu cầu:

  • Trạng thái ngắn hạn: mọi thứ cần để hoàn thành task hiện tại hoặc subtask. Bao gồm mục tiêu active, bước hiện tại, output công cụ, quyết định từng phần và biến điều khiển (còn bao nhiêu retry, nhánh đã chọn, v.v.). Nó nên có phạm vi chặt và có thể bỏ sau khi workflow xong.
  • Bộ nhớ dài hạn: thông tin tồn tại qua nhiều lần chạy và phiên: profile người dùng, sở thích, lịch sử quyết định, shortcuts đã học.

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.

Nơi lưu trạng thái

Bạn có ba tùy chọn chính:

  1. Trong ngữ cảnh (prompt-only) – Đơn giản, độ trễ thấp, nhưng giới hạn và không bền. Tốt cho state ngắn hạn trong một lần chạy.
  2. Store bên ngoài – DB, cache, hoặc vector store. Dùng cho bộ nhớ dài hạn và mọi state cần tồn tại qua restart hoặc phối bộ worker.
  3. Hybrid – Giữ state chính thức bên ngoài; chỉ load những gì cần vào ngữ cảnh cho bước tiếp theo.

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ó.

Tránh anti-pattern “logs làm bộ nhớ”

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 đề:

  • Truy hồi trở nên tùy tiện và mong manh.
  • Thông tin quan trọng bị chôn trong văn bản dài.
  • Nhiều lần chạy có thể đối chọi nhau mà không có quy tắc “last write wins”.

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.

Nhất quán khi chia sẻ dữ liệu và công cụ

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:

  • Dùng nguồn chân lý duy nhất cho thực thể quan trọng (ví dụ order, ticket, document).
  • Ưu tiên hợp đồng công cụ idempotent: công cụ xử lý an toàn retry bằng stable ID và semantics upsert.
  • Dùng độ trễ tối ưu hóa (optimistic concurrency) (version numbers, timestamps) khi agent có thể race cập nhật cùng bản ghi.

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.

Snapshot và thực thi có thể tiếp tục

Để sống sót qua crash, deploy và rate limiting, workflow nên có thể tiếp tục:

  • Sau mỗi bước quan trọng, persist một snapshot trạng thái: bước hiện tại, input, kết quả công cụ và hành động đang chờ.
  • Làm cho mỗi chuyển tiếp trong máy trạng thái có thể phát lại từ snapshot.
  • Khi thất bại hoặc restart, load lại snapshot cuối và tiếp tục thay vì bắt đầu lại từ đầu.

Đ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.

Quyền riêng tư, lưu giữ và bộ nhớ tối thiểu

Bộ nhớ vừa là tài sản vừa là rủi ro. Với agent production:

  • Mô tả rõ cái gì không bao giờ được lưu (ví dụ: secrets, tài liệu thô, PII nhạy cảm). Dùng redaction hoặc hashing khi cần.
  • Định nghĩa chính sách retention cho từng loại bộ nhớ (cấp phiên, 30 ngày, giữ theo pháp lý, v.v.).
  • Cho người dùng quyền xem và xóa bộ nhớ dài hạn của họ.
  • Tránh lưu nguyên prompt hoặc input công cụ đầy đủ khi một bản tóm tắt cấu trúc nhỏ hơn là đủ.

Đố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.

Concurrency, rate limit và backpressure trong hệ thống 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ự.

Nguy hại concurrency trong workflow agent

Các chế độ lỗi thường gặp:

  • Race condition: hai lần thực thi agent cập nhật cùng ticket, cart hoặc document đồng thời, ghi đè lên nhau.
  • Công việc trùng lặp: retry hoặc worker cấu hình sai xử lý cùng task hai lần (ví dụ charge thanh toán hai lần).
  • Hiệu ứng trái thứ tự: các gọi công cụ hoàn thành theo thứ tự bất ngờ, khiến kết quả cũ ghi đè kết quả mới.

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.

Queue vs luồng đồng bộ

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:

  • Kiểm soát concurrency bằng worker pool
  • Tập trung retry và deduplication
  • Cô lập công cụ chậm hoặc hay lỗi khỏi độ trễ hướng người dùng

Giới hạn tỷ lệ và backpressure

Agents thường chạm ba lớp giới hạn:

  • Model: token mỗi phút, request mỗi phút, kích thước context
  • Công cụ: service nội bộ có QPS hoặc giới hạn CPU
  • API upstream: quota bên thứ ba và cap cứng

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:

  • Loại bỏ traffic không quan trọng trước
  • Suy giảm tính năng (context nhỏ hơn, ít gọi công cụ)
  • Tạm dừng queue ưu tiên thấp trong khi giữ luồng quan trọng

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.

Observability: tracing, metrics và logs cho hành vi agent

Từ xây dựng đến triển khai
Triển khai và host ứng dụng agent của bạn khi workflow đã ổn định và được kiểm thử.
Triển khai ngay

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.

Những gì bạn cần nhìn thấy

Thiết kế observability sao cho một task có trace xuyên suốt:

  • Mọi bước agent và chuyển trạng thái
  • Mọi gọi công cụ và phản hồi
  • Mọi lần gọi model và biến thể prompt

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:

  • Metadata task: tenant, user, channel, priority
  • Trạng thái agent: tên trạng thái hiện tại, trạng thái kế, số lần retry
  • I/O công cụ: input, output, độ trễ, lỗi, trạng thái circuit-breaker
  • Gọi model: ID template prompt, tên model, token counts, độ trễ

Logging và redaction

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:

  • Che PII và secrets
  • Cắt payload quá lớn và lưu hash để đối chiếu
  • Gắn nhãn mức nhạy cảm để kiểm soát retention và truy cập

Giữ nội dung thô sau feature flags ở môi trường thấp hơn; production mặc định hiển thị đã redacted.

Metrics thực sự quan trọng

Ít nhất, theo dõi:

  • Tỷ lệ thành công / thất bại task theo agent và use case
  • Số bước trung bình và P95 trên mỗi task
  • Độ trễ: end-to-end và theo tool/model
  • Chi phí trên mỗi task (token, chi phí công cụ) và cho mỗi kết quả thành công

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ể.

Chiến lược kiểm thử và đánh giá cho hệ thống agent

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.

Unit test: hợp đồng công cụ, không phải prompt

Bắt đầu với unit test ở ranh giới công cụ:

  • Validate schema: trường bắt buộc, enum, khoảng, và bất biến.
  • Kiểm idempotency và semantics lỗi (lỗi nào, mã nào, có thể retry không).
  • Khẳng định công cụ xử lý input méo mó một cách duyên dáng và trả về lỗi có cấu trú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: flow và hành vi đa bướ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:

  • Happy path cho các hành trình người dùng chính (đặt chỗ, hoàn tiền, eskalation, v.v.).
  • Trường hợp biên: thiếu dữ liệu, lỗi công cụ một phần, timeout, rate limit.
  • Tương tác chéo công cụ: khi output của công cụ A là input cho công cụ B.

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.

Fixtures xác định cho LLM và công cụ

Để test lặp lại, fixture cả phản hồi LLM và output công cụ.

  • Ghi lại phản hồi LLM một lần (cho prompt + model + config) và lưu chúng làm fixture JSON.
  • Mock hệ thống bên ngoài phía sau công cụ để test không chạm dịch vụ live.
  • Dùng seed cố định và config temperature cố định trong test.

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"

Bộ regression cho prompt và schema

Mỗi thay đổi prompt hoặc schema phải kích hoạt một lượt regression không thể bỏ qua:

  • Giữ một corpus đầu vào được tuyển chọn cùng trạng thái mong đợi, trace công cụ hoặc phân loại.
  • Khóa chúng thành golden files; diff làm nổi bật thay đổi hành vi.
  • Phê duyệt hoặc rollback bất kỳ drift nào trong các flow quan trọng.

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ũ.

Đánh giá offline trước rollout

Không bao giờ đẩy model, policy hoặc routing mới thẳng lên production traffic.

Thay vào đó:

  • Chạy lại corpus regression offline với cấu hình mới.
  • Chạy replay trên mẫu tương tác lịch sử.
  • Tính toán metrics tự động (tỷ lệ thành công task, lỗi công cụ, độ trễ, chi phí) và, khi cần, đánh giá thủ công trên mẫu.

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.

Quản lý dữ liệu test và ẩn danh

Log agent thường chứa dữ liệu nhạy cảm. Kiểm thử phải tôn trọng điều đó.

  • Xây dataset test từ input ẩn danh hoặc tổng hợp.
  • Bỏ hoặc hash identifier, PII free-text và secrets trước khi lưu log hoặc fixture.
  • Phân quyền truy cập: kỹ sư có thể xem trace hành vi nhưng không xem secrets thô của user.

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, giám sát và phát triển agent trong production

Biến vòng lặp thành máy trạng thái
Dùng chế độ lập kế hoạch để vạch các trạng thái, chuyển tiếp và gọi công cụ trước khi xây dựng.
Thử Chế độ lập kế hoạch

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.

Chiến lược rollout an toàn

Giới thiệu agent hoặc hành vi mới dần dần:

  • Shadow mode: Chạy agent song song với hệ thống hiện tại, ghi lại quyết định nhưng không ảnh hưởng người dùng. So sánh output offline.
  • Canaries: Phơi một phần nhỏ traffic (ví dụ 1–5%) cho phiên bản agent mới. Quan sát tỷ lệ lỗi, độ trễ và chất lượng trước khi mở rộng.
  • A/B tests: Với luồng hướng người dùng, so sánh agent mới vs cũ trên KPI kinh doanh, không chỉ metric model.

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.

SLO và workflow xử lý sự cố

Đặt SLO phản ánh cả sức khỏe hệ thống và giá trị người dùng:

  • Độ tin cậy: tỷ lệ thành công task, gọi công cụ và workflow end-to-end.
  • Độ trễ: p50/p95 cho đường dẫn quan trọng.
  • Chất lượng: điểm auto-eval, phân phối đánh giá con người, hoặc metric thành công theo task.

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).

Cải tiến liên tục và quản trị thay đổi

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.

Kiến trúc tham chiếu cho hệ thống agent đáng tin cậy

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.

Thành phần cốt lõi

1. Gateway / API edge
Điểm entry đơn cho client (app, service, UI). Xử lý:

  • Xác thực và ủy quyền (user, service, tenant)
  • Rate limit và quota
  • Định hình request (schema, giới hạn kích thước, validation cơ bản)

2. Orchestrator
Orchestrator là “cột sống”, không phải bộ não. Nó điều phối:

  • Planner: chuyển ý định người dùng thành workflow hoặc máy trạng thái
  • State orchestrator: thực thi workflow, theo dõi trạng thái, xử lý retry và timeout
  • Policy engine: thi hành an toàn, compliance, công cụ được phép, luật PII và ngân sách chi phí

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:

  • HTTP/gRPC nội bộ
  • Database, vector store, cache
  • API bên ngoài

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ý.

Tích hợp, controls và telemetry

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:

  • Trace cho hành vi từng bước
  • Metrics cho SLO và rate limits
  • Audit logs cho an ninh và tuân thủ
  • Kê toán chi phí theo user, project và công cụ

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.

Tổng hợp và các bước tiếp theo cho đội ngũ của bạ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.

Các mẫu chính, tóm gọn

Hãy nghĩ mỗi agent như một workflow có trạng thái:

  • Một máy trạng thái định nghĩa các bước hợp lệ (plan → gather → act → summarize, vv.) và chuyển tiếp giữa chúng.
  • Hợp đồng công cụ định nghĩa mỗi hành động có thể làm gì, với schema nghiêm ngặt, timeout và bề mặt lỗi.
  • Retry và idempotency bảo vệ mọi tương tác bên ngoài để phát lại an toàn và side-effect không bị áp dụng hai lần.
  • Observability (trace, metrics, logs) làm cho mọi quyết định và gọi công cụ có thể giải thích và gỡ lỗ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.

Checklist nhẹ để đưa agent vào production

Trước khi giao prototype agent cho người dùng thực, xác nhận:

  • Workflow: Trạng thái và chuyển tiếp rõ ràng; không có vòng lặp ẩn, không có chuỗi công cụ vô hạn.
  • Contracts: Mỗi công cụ có input/output typed, chế độ lỗi rõ và timeout.
  • Safety: Guardrail trên input, output và hành động (rate limit, allowlist, quota).
  • Retries: Chính sách cho từng công cụ; idempotency key cho mọi gọi gây side-effect.
  • State: Bộ nhớ và trạng thái persistent có phạm vi, version và có thể phục hồi.
  • Observability: Bạn có thể trả lời “đã xảy ra gì?” cho mọi phiên người dùng trong một trace.
  • Testing: Có test theo kịch bản và suite regression cho prompts, tools và policies.

Nếu thiếu bất kỳ mục nào, bạn vẫn đang ở trạng thái prototype.

Cách các đội phân chia quyền sở hữu

Thiết lập bền vững thường tách:

  • Product teams: chịu hành vi agent, prompt, tool miền và dataset đánh giá.
  • Platform / infra teams: chịu framework máy trạng thái, SDK công cụ chung, logging & tracing, policy enforcement và hạ tầng đánh giá chung.

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í.

Mở rộng tương lai và lặp an toàn

Khi nền tảng ổn định, bạn có thể khám phá:

  • Chính sách dựa trên học: dùng trace đã log để cải thiện routing, chọn công cụ và fallback.
  • Reinforcement learning: tối ưu cho kết quả dài hạn như hoàn thành nhiệm vụ hoặc doanh thu, không chỉ câu trả lời đơn lẻ.
  • Workflow tự điều chỉnh: tự động điều chỉnh temperature, công cụ hoặc sub-flow dựa trên hiệu suất quan sát được.

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.

Câu hỏi thường gặp

What is an agentic system, and how is it different from a normal LLM app?

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:

  • Một policy quyết định (LLM + prompts)
  • Một workflow hoặc máy trạng thái để theo dõi tiến độ
  • Một tập các công cụ (API, cơ sở dữ liệu, dịch vụ)
  • Hạ tầng cho retries, lưu trạng thái, logging và observability

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.

Why do agents that look great in demos often fail in production?

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:

  • Công cụ hay lỗi: timeout, lỗi 5xx và định dạng phản hồi thay đổi
  • Tính đồng thời: nhiều người dùng cùng truy cập tài nguyên chia sẻ và giới hạn tỷ lệ
  • Phiên chạy dài: ngữ cảnh phình to, nhầm lẫn bộ nhớ và trôi trạng thái
  • Sai sót mô hình cộng dồn: những lỗi nhỏ tích lũy qua nhiều lần gọi công cụ

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.

How do I make an agent predictable and easy to debug?

Đặt LLM vào một khuôn khổ rõ ràng thay vì vòng lặp tự do:

  • Mô hình hóa agent như một máy trạng thái với tập hữu hạn các trạng thái và chuyển tiếp cho phép.
  • Dùng LLM chỉ cho quyết định cục bộ (ví dụ: gọi công cụ nào tiếp theo, điền tham số), không để nó tự sáng tạo luồng hoàn toàn mới.
What does it mean to model an agent as a state machine?

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:

How should I design tool contracts for my agents?

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ó:

How do I handle failures, retries, and idempotency in agent workflows?

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:

  • công cụ gây side-effect chấp nhận ổn định hoặc business key và trả về cùng kết quả khi nhận lại request đó.
What is the right way to manage memory and state for agents?

Tách state ngắn hạn khỏi bộ nhớ dài hạn, và giữ LLM ở trạng thái stateless.

  • Dùng state ngắn hạn cho mọi thứ cần để hoàn thành task hiện tại: mục tiêu hiện tại, bước, kết quả công cụ và bộ đếm retry.
  • Lưu bộ nhớ dài hạn (ví dụ: profile người dùng, lịch sử dự án) vào kho ngoài với schema có cấu trúc, không lưu nguyên transcript.
  • Xử lý LLM như hàm thuần túy trên một object state rõ ràng: load state cần thiết, dựng prompt, gọi model, rồi persist state cập nhật.

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.

How should I deal with concurrency, rate limits, and backpressure in agent systems?

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:

  • Đặt các bước chạy dài hoặc có side-effect vào sau queue để kiểm soát concurrency bằng pool worker.
  • Thi hành cho model và công cụ với quota theo người dùng, tenant và toàn hệ thống.
What observability do I need to run agents safely in production?

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:

  • Trace: một trace end-to-end cho mỗi task bao gồm chuyển trạng thái, gọi công cụ và gọi model.
  • ghi các quyết định quan trọng (chọn công cụ, sửa kế hoạch, kích hoạt guardrail) kèm correlation ID.
How should teams roll out and operate agentic systems safely over time?

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ị:

  • Dùng shadow mode, canary và feature flag để rollout dần agent hoặc version model mới.
  • Đặt SLO cho độ tin cậy, độ trễ và chất lượng, gắn thông báo và runbook.
  • Duy trì bộ kiểm tra regression và replay offline cho mọi thay đổi prompt, tool hoặc policy.
  • Tách quyền sở hữu: product teams chịu hành vi và công cụ miền; platform teams chịu framework máy trạng thái, tool SDK chung, observability và policy enforcement.
Mục lục
Từ các demo ấn tượng đến các agent mong manh trong productionTại sao hầu hết kiến trúc agent thất bại khi lên quy môNguyên tắc thiết kế cho agent production-gradeMô hình hóa workflow agent dưới dạng máy trạng thái rõ ràngThiết kế hợp đồng công cụ đáng tin cậy cho agentRetry, idempotency và mẫu xử lý lỗiQuản lý bộ nhớ, trạng thái và nhất quán dữ liệu cho agentConcurrency, rate limit và backpressure trong hệ thống agentObservability: tracing, metrics và logs cho hành vi agentChiến lược kiểm thử và đánh giá cho hệ thống agentVận hành, giám sát và phát triển agent trong productionKiến trúc tham chiếu cho hệ thống agent đáng tin cậyTổng hợp và các bước tiếp theo cho đội ngũ của bạnCâu hỏi thường gặp
Chia sẻ
Koder.ai
Build your own app with Koder today!

The best way to understand the power of Koder is to see it for yourself.

Start FreeBook a Demo
  • Lưu trạng thái ra ngoài để mỗi chuyển tiếp có thể phát lại và kiểm toán.
  • Giữ agent nhỏ và tập trung: một nhiệm vụ chính, một chỉ số thành công chính.
  • 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ước
  • CALL_TOOL – gọi một công cụ cụ thể hoặc một batch
  • VERIFY – kiểm tra đầu ra theo quy tắc đơn giản hoặc kiểm tra phụ bằng mô hình khác
  • RECOVER – xử lý lỗi qua retry, fallback hoặc eskalation
  • DONE / FAILED – kết quả cuối
  • Cá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.

  • Schema đầu vào: trường bắt buộc, kiểu, ràng buộc và giá trị mặc định
  • Schema đầu ra: cấu trúc rõ ràng cho kết quả thành công, kết quả từng phần, và nghĩa của “không có kết quả”
  • Lỗi có kiểu: ví dụ InvalidInput, NotFound, RateLimited, TransientFailure
  • Kỳ vọng vận hành: mục tiêu độ trễ và giới hạn tỷ lệ
  • Validate đầ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.

    Idempotency:
    request_id
  • Retry có mục tiêu: chỉ retry lỗi tạm thời (timeout, 5xx, rate limit) với exponential backoff và giới hạn số lần.
  • Circuit breakers: tạm chặn gọi công cụ đang hỏng và chuyển sang fallback hoặc chế độ suy giảm.
  • Bề mặt lỗi có cấu trúc: trả về loại lỗi rõ ràng để agent quyết định retry, lên kế hoạch lại hoặc hỏi người dùng.
  • Cá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.

    rate limit
  • Dùng backpressure: loại bỏ lưu lượng không quan trọng, suy giảm tính năng, hoặc tạm dừng queue ưu tiên thấp khi quá tải.
  • Kết hợp hợp đồng công cụ idempotent với locking tối ưu/bi quan ở lớp dữ liệu để tránh làm việc trùng lặp và race condition.
  • 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ố.

    Logs có cấu trúc:
  • Metrics: tỷ lệ thành công task, tỷ lệ lỗi theo trạng thái, độ trễ (toàn bộ và theo công cụ/model), và chi phí cho mỗi kết quả thành công.
  • Redaction: che PII và secrets trong prompt, inputs/outputs trước khi log; kiểm soát retention theo mức nhạy cảm.
  • 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.