Quy tắc 100 giây: Hết thời gian chờ (timeout), thử lại và xử lý lỗi trong Copilot Studio Agent Flow

Mô hình "phản hồi trước" (respond-first) trong Bài 5 tồn tại vì một lý do: Flow cần cung cấp câu trả lời cho agent thật nhanh, trong khi con người lại phản hồi chậm. Ngày nay, chúng ta phải tính đến cả yếu tố thời gian - cùng mọi sự cố khác có thể xảy ra trong môi trường thực tế: Các kết nối chập chờn, những tiến trình chạy dở dang, hay cơ chế thử lại âm thầm tạo ra hai yêu cầu xử lý cùng lúc.

Dưới đây là trình tự thời gian chi tiết của một lệnh gọi công cụ từ agent, bao gồm các thông số cụ thể lấy từ tài liệu chính thức:

Ba chiến lược thiết kế giúp bạn tránh gặp sự cố nghiêm trọng (tránh rơi vào "vực thẳm" lỗi):

Trả về ít dữ liệu hơn - hãy lọc ngay trong truy vấn thay vì lọc sau đó; việc gọi kết nối để lấy 1.500 hàng nhưng chỉ dùng 5 hàng là nguyên nhân kinh điển dẫn đến lỗi quá thời gian (timeout) do chính người thiết kế gây ra.

Phản hồi sớm - bất kỳ thông tin nào người dùng không cần thấy ngay trong khung chat thì nên để ở bước sau hành động "Respond to the agent" (Phản hồi cho agent).

Tiếp theo, hãy cân nhắc chế độ "express mode" - một tùy chọn xem trước (trên thẻ kích hoạt flow, hoặc tại mục Overview → Details → Edit) giúp thực thi các flow đủ điều kiện nhanh hơn. Chế độ này hữu ích cho các flow có logic phức tạp nhưng lại gây hại cho những flow xử lý nhiều dữ liệu: Khi bật chế độ này, các lần chạy vẫn phải hoàn tất trong vòng 2 phút, giới hạn dưới 100 hành động, biến dưới 1.024 ký tự và dữ liệu của mỗi hành động dưới 64 KB. Hãy kiểm thử kỹ trước khi tin dùng nó.

Kiểm tra nhanh: Trong 3 chiến lược trên, đâu là cách không tốn chi phí mà lại hỗ trợ mọi flow, dù có dùng chế độ express hay không?

Đáp án: Trả về ít dữ liệu hơn. Việc lọc dữ liệu ngay tại nguồn giúp đồng thời giảm thời gian xử lý, lượng dữ liệu và nguy cơ xảy ra lỗi - đây luôn là ưu tiên hàng đầu.

Hãy đọc thông báo lỗi, đừng đoán mò!

Các lỗi flow phía agent đều nằm trong danh sách lỗi đã được ghi nhận. Hãy phân loại và xử lý chúng thay vì xây dựng lại flow từ đầu:

  • Lỗi 3000, "Unexpected error" (Lỗi không xác định) - với flow mới, hãy kiểm tra nguyên nhân phổ biến trước: Tùy chọn "Asynchronous response" trong phần cài đặt của hành động "Respond to the agent" đang được bật. Lỗi này cũng xuất hiện khi giá trị tham số là null hoặc không được hỗ trợ.
  • 3001 / 3003 - Power Automate không khả dụng hoặc không thể kết nối; hãy thử lại sau, không cần sửa gì trong thiết kế của bạn.
  • 3002, "…your request to your flow wasn't accepted" (Yêu cầu gửi tới flow không được chấp nhận) - tài liệu chỉ ra vấn đề nằm ở thời gian phản hồi: flow có thể đã vượt quá giới hạn 2 phút.
  • FlowActionTimedOut - lỗi quá thời gian thực thi (timeout), thường gặp trên các kênh như Teams. Hãy áp dụng ba chiến lược thiết kế đã nêu.
  • FlowActionBadRequest - lỗi không khớp schema hoặc dữ liệu đầu vào là null. Giải pháp từ Bài học số 3: Làm mới liên kết công cụ, xác minh tham số và xuất bản lại agent.

Xây dựng quy trình xử lý lỗi trước khi cần đến nó

Bộ công cụ đảm bảo độ tin cậy của Power Automate hoạt động tương tự bên trong các agent flow - bao gồm 4 thành phần, mỗi thành phần là một thẻ:

Run after (Chạy sau khi...) - mọi hành động đều có thể phản ứng dựa trên kết quả của hành động trước đó: thành công (mặc định), thất bại, bị bỏ qua (skipped) hoặc quá thời gian (timed out). Tư duy "nhấp chuột phải" (xem xét các tùy chọn thay thế): "nếu bước này thất bại, người dùng cần biết thông tin gì?" Một nhánh xử lý lỗi trả về thông báo "Tôi không thể kết nối với hệ thống quản lý yêu cầu - dữ liệu chưa được lưu" sẽ tốt hơn nhiều so với phản hồi chung chung kiểu "tôi không biết" từ agent.

Scopes as try/catch - nhóm các bước chính vào một Scope ("Try"), thêm một Scope thứ hai ("Catch") được thiết lập để chỉ chạy khi nhánh "Try" thất bại. Đây là nơi tập trung ghi lại lỗi và soạn thảo câu trả lời trung thực cho người dùng. Đây chính là mô hình được tài liệu hướng dẫn chính thức khuyến nghị.

Retry policy (Chính sách thử lại) - các hành động của connector có thể tự động thử lại khi gặp lỗi tạm thời (cấu hình trong tab cài đặt); khoảng thời gian tăng dần theo cấp số nhân là phương án được khuyên dùng (thử lại nhanh ở lần đầu, sau đó kéo dài thời gian chờ giữa các lần thử tiếp theo). Thử lại rất phù hợp cho các thao tác đọc dữ liệu. Đối với thao tác ghi dữ liệu, hãy xem tiếp phần dưới.

Terminate (Kết thúc) - chủ động kết thúc quy trình với trạng thái "Failed" (Thất bại) kèm theo thông báo cụ thể, giúp lịch sử chạy quy trình hiển thị rõ nguyên nhân thay vì để lại một kết quả mơ hồ, khó hiểu.

Và khái niệm phân biệt giữa quy trình thực tế (production) và bản demo: Tính lũy đẳng (idempotency). Lỗi hết thời gian chờ (timeout) tại agent không phải lúc nào cũng có nghĩa là flow của bạn đã hỏng - có thể nó đã hoàn tất thành công nhưng chậm hơn dự kiến ​​một giây. Khi hệ thống điều phối hoặc người dùng thử lại, cùng một yêu cầu đó sẽ được thực thi lần thứ hai. Bất kỳ bước nào tạo ra dữ liệu mới đều cần cơ chế bảo vệ: Tạo một key định danh ổn định từ yêu cầu (ví dụ: người yêu cầu + hạng mục + ngày tháng), kiểm tra xem key đó đã tồn tại chưa, và thực hiện cập nhật thay vì tạo mới nếu nó đã tồn tại. Nhờ đó, việc thử lại sẽ không gây ra tác dụng phụ ngoài ý muốn.

Hãy thử ngay: Thiết kế cơ chế xử lý lỗi cho Microsoft Copilot Studio agent flow

Nơi dán nội dung: claude.ai hoặc chatgpt.com.

Sao chép câu lệnh (prompt) này và điền thông tin từ kế hoạch dự án cuối khóa của bạn vào các phần giữ chỗ:

Hãy thiết kế cơ chế xử lý lỗi cho Microsoft Copilot Studio agent flow của tôi.

Các bước trong quy trình: [dán danh sách các bước từ Bài 1]

Với mỗi bước, hãy cho tôi biết:
1. Những lỗi thực tế có thể xảy ra (ví dụ: connector bị lỗi, kết quả trả về trống, dữ liệu đầu vào không hợp lệ)
2. Việc thử lại là AN TOÀN (thao tác đọc) hay NGUY HIỂM (thao tác ghi) — và đối với thao tác ghi,
key định danh ổn định nào giúp bước đó có tính lũy đẳng (idempotency)
3. Nội dung thông báo lỗi hiển thị cho người dùng — cần trung thực, cụ thể,
và nêu rõ những gì KHÔNG bị thay đổi

Sau đó, hãy trình bày bố cục Scope Try/Catch dưới dạng một danh sách ngắn gọn.

Kết quả bạn sẽ nhận được: Sơ đồ xử lý lỗi từng bước, xác định các lệnh an toàn khi thử lại và bố cục Scope — đây chính là bản đặc tả độ tin cậy cho quy trình của bạn.

Xử lý kết quả đầu ra: Lưu lại; bản build của Bài 8 triển khai cấu trúc Try/Catch dựa trực tiếp trên danh sách này.

Kiểm tra nhanh: Tại sao việc mặc định "thử lại thao tác tạo 3 lần" lại tiềm ẩn rủi ro?

Trả lời: Bản chất thao tác tạo không có tính lũy đẳng - mỗi lần thử lại thành công một phần đều có nguy cơ tạo ra bản sao trùng lặp. Thao tác đọc có thể thử lại an toàn; còn thao tác ghi cần cơ chế kiểm tra trước khi tạo.

Những điểm chính cần nhớ

  • Ngân sách 100 giây, giới hạn cứng ở mức ~2 phút, thời gian xử lý sau phản hồi lên tới 30 ngày - hãy thiết kế dựa trên con số đầu tiên
  • Trả về ít dữ liệu hơn, phản hồi sớm, sau đó cân nhắc chế độ "express" (nhanh hơn, nhưng giới hạn ở 100 hành động / biến 1.024 ký tự / 64 KB mỗi hành động và không hỗ trợ mở rộng thời gian chờ)
  • Phân loại lỗi dựa trên mã: 3000 → chuyển sang chế độ bất đồng bộ (async) hoặc tham số không hợp lệ; 3002/FlowActionTimedOut → vấn đề thời gian phản hồi; FlowActionBadRequest → cần làm mới schema
  • Cấu hình "Run after" + phạm vi Try/Catch + thử lại theo cấp số nhân + Terminate = bộ công cụ 4 thành phần đảm bảo độ tin cậy
  • Tính lũy đẳng là yêu cầu bắt buộc đối với các thao tác tạo mới: Key định danh ổn định, kiểm tra trước khi tạo, và các lần thử lại không gây ra tác dụng phụ (trở thành thao tác vô hại).
  • Câu 1:

    Flow tạo phiếu hỗ trợ của Sam bị hết thời gian chờ tại agent, khiến orchestrator thực hiện thử lại - và lịch sử chạy cho thấy cả hai lần chạy đều hoàn tất. Kết quả là nhóm hiện có các phiếu hỗ trợ bị trùng lặp. Thay đổi thiết kế nào sẽ ngăn chặn được loại lỗi này?

    GIẢI THÍCH:

    Cơ chế "chờ hết thời gian rồi thử lại" (timeout-then-retry) đồng nghĩa với việc cùng một yêu cầu có thể đi vào flow 2 lần - và từ góc độ của luồng xử lý, cả hai lần chạy đều được coi là "thành công". Giải pháp phòng ngừa ở đây là tính lũy đẳng: Sử dụng một key xác định duy nhất kết hợp với bước kiểm tra trước khi tạo, nhờ đó lần yêu cầu thứ hai sẽ không thực hiện hành động nào hoặc chỉ đóng vai trò cập nhật dữ liệu. Các thiết lập thử lại ở cấp độ thao tác không kiểm soát được việc orchestrator gọi lại quy trình; việc thay đổi thứ tự các bước cũng không ngăn được yêu cầu thử lại tạo ra bản ghi mới; và việc trông chờ vào ý thức tuân thủ của người dùng không phải là một giải pháp thiết kế hệ thống.

  • Câu 2:

    Agent của một đồng nghiệp phản hồi: 'Đã có sự cố xảy ra trong Power Automate và yêu cầu gửi tới flow Expense Logger của bạn không được chấp nhận. Vui lòng thử lại sau.' Lịch sử chạy không ghi nhận lần chạy mới nào. Lỗi này (mã 3002) có khả năng cao nhất là do nguyên nhân nào?

    GIẢI THÍCH:

    Mô tả chính thức của mã lỗi 3002 đúng là như vậy: Yêu cầu không được chấp nhận, kèm theo lưu ý rằng flow có thể vượt quá giới hạn thời gian phản hồi 2 phút. Sự thay đổi cấu trúc thường biểu hiện dưới dạng lỗi FlowActionBadRequest; việc tạm dừng do DLP gây ra lỗi chính sách ở giai đoạn thiết kế và lỗi thực thi kèm thông báo về chính sách; còn việc thiếu kết nối người dùng thường dẫn đến yêu cầu cấp quyền thay vì từ chối thẳng yêu cầu.

  • Câu 3:

    Flow của Mai truy vấn một danh sách SharePoint lớn, lọc các hàng và định dạng bản tóm tắt — thời gian chạy thông thường là 3 phút. Agent luôn gặp lỗi hết thời gian chờ (timeout) trong mỗi lần gọi. Đâu là phương án thiết kế lại tối ưu nhất?

    GIẢI THÍCH:

    Ngân sách thời gian là cố định - thiết kế cần giảm thiểu khối lượng công việc đồng bộ. Việc lọc dữ liệu ngay tại nguồn giúp rút ngắn thời gian truy vấn từ vài phút xuống còn vài giây, và bất kỳ tác vụ nặng nào còn lại nên được thực hiện sau khi đã gửi phản hồi. Chế độ "express mode" giúp tăng tốc thực thi nhưng không kéo dài giới hạn thời gian chờ (và không phù hợp với các flow xử lý lượng dữ liệu lớn); cơ chế thử lại chỉ khiến một lệnh gọi chậm càng trở nên chậm hơn; còn việc chuỗi hóa các lệnh gọi công cụ tuy cấp ngân sách thời gian riêng cho từng lệnh nhưng lại khiến người dùng phải chờ đợi hai lần và làm tăng gấp đôi nguy cơ xảy ra lỗi.

Thứ Bảy, 19/09/2026 09:32
51 👨
Xác thực tài khoản!

Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:

Số điện thoại chưa đúng định dạng!
Số điện thoại này đã được xác thực!
Bạn có thể dùng Sđt này đăng nhập tại đây!
Lỗi gửi SMS, liên hệ Admin
0 Bình luận
Sắp xếp theo
❖ Copilot Studio