Chỉ dùng agent khi nhiệm vụ cần quyết định động
So sánh workflow hóa đơn cố định với điều tra repository, giữ kết quả ghép cặp và tính toàn bộ chi phí thực thi trước khi chọn agent.

Với kỹ sư đang thiết kế ứng dụng dùng mô hình ngôn ngữ, hãy xác định ai chọn bước tiếp theo. Workflow đi theo các nhánh mà chương trình đã định trước. Agent có thể chọn hành động dựa trên bằng chứng vừa nhận. Cả hai đều có thể gọi LLM; chỉ việc có mô hình trong hệ thống chưa đủ để phân biệt hai cách tổ chức này.
Một ứng dụng hóa đơn có thể lần lượt đọc tệp, trích xuất trường, kiểm tra tổng và chuyển trường hợp chưa rõ sang hàng chờ duyệt. Việc tìm nguyên nhân một kiểm thử thất bại trong repository khó định trước hơn. Kết quả đọc mã có thể dẫn tới parser, cấu hình hoặc ranh giới thư viện, và mỗi quan sát lại thay đổi bước kiểm tra hữu ích tiếp theo.
Viết workflow cố định trước
Giả sử ứng dụng chi phí nhận ảnh hóa đơn và cần tạo bản nháp gồm nhà cung cấp, tiền tệ, dòng hàng và tổng tiền. Nó không được thực hiện thanh toán. Một workflow hữu hạn có thể biểu diễn yêu cầu này:
received -> extracted -> validated -> draft_created
| |
v v
needs_review needs_review
Bước trích xuất có thể dùng LLM, nhưng mô hình không tự quyết định mở trình duyệt, liên hệ nhà cung cấp hay trả tiền. Chương trình chọn trạng thái tiếp theo từ kết quả kiểm tra. Các nhánh được chỉ rõ giúp đội phát triển kiểm thử hành vi ở từng ranh giới.
Nếu tổng dòng hàng là 90 đơn vị tiền tệ còn hóa đơn ghi 100, workflow có thể chuyển sang duyệt với nhãn chênh lệch. Agent có thể thử tìm dòng thuế bị bỏ sót, nhưng việc đó chỉ hữu ích khi có thêm bằng chứng và sản phẩm cho phép sử dụng nó. Quyền tự chọn hành động không tạo ra một dữ kiện vốn không tồn tại trong tài liệu.
Hình phân biệt một đường đi đã định với vòng điều tra phụ thuộc quan sát. Cả hai đều cần điều kiện dừng. Workflow cố định cũng có thể sai nếu cứ thử trích xuất lại vô hạn hoặc âm thầm tạo bản nháp thiếu trường bắt buộc.
Chỉ ra quyết định cần giao cho agent
Xét nhiệm vụ tìm vì sao API chấp nhận ngày không hợp lệ. Người điều tra đọc kiểm thử và endpoint trước. Nếu dữ liệu đi qua schema dùng chung, bước tiếp theo là đọc schema và các nơi gọi nó. Nếu endpoint bỏ qua kiểm tra, hướng điều tra sẽ khác. Không thể chỉ rõ toàn bộ đường đi hữu ích mà chưa nhìn mã.
Bài báo ReAct nghiên cứu cách xen kẽ suy luận với hành động khi tương tác cùng môi trường bên ngoài. Kết quả của bài báo thuộc những tác vụ và mô hình được nghiên cứu ở đó. Ý tưởng có thể áp dụng ở đây là để quan sát ảnh hưởng hành động kế tiếp, đồng thời giữ ranh giới thực thi rõ ràng; nó chưa chứng minh agent điều tra repository này sẽ thành công.
Hãy ghi rõ quyết định được giao. “Tìm nguyên nhân ngày này được chấp nhận” cụ thể hơn “hãy làm kỹ sư tự chủ”. Các quyền có thể gồm đọc tệp, chạy một lệnh kiểm thử đã duyệt và sửa validator liên quan. Phát hành phiên bản là một quyền khác, có tác động khác. Mô tả nhiệm vụ phải khớp với quyền mà bộ thực thi thực sự cấp.
Tính toàn bộ chi phí đi tới kết quả
Agent có thể gọi mô hình và công cụ nhiều lần mới trả lời. Khi so với workflow, cần tính cả trace: chi phí sinh nội dung, thời gian chờ công cụ, lần thử thất bại và công sức duyệt kết quả. Một đáp án cuối ngắn vẫn có thể được tạo sau một cuộc điều tra tốn kém.
Để thử nghiệm thật, chuẩn bị mười tác vụ đại diện với tiêu chí chấp nhận quyết định trước. Gồm cả trường hợp đường cố định xử lý tốt và trường hợp bước tiếp theo phụ thuộc điều vừa phát hiện. Chạy hai thiết kế trong giới hạn thời gian hoặc hành động được công bố. Ghi nhận kết quả đáp ứng yêu cầu hay không và hệ thống có báo đúng tình trạng chưa hoàn thành khi phải dừng hay không.
Bảng đo nên có một dòng cho từng tác vụ: kết quả được chấp nhận, tác động ngoài quyền, số lời gọi, thời gian và nhận xét của người duyệt. Chỉ điền số liệu từ lần chạy thật, không suy đoán từ sơ đồ kiến trúc. Hướng dẫn đánh giá của OpenAI, được đọc ngày 20 tháng 9 năm 2026, khuyến nghị đánh giá nhiệm vụ thực tế thay vì chỉ dựa vào benchmark chung của mô hình.
Đọc so sánh ghép cặp mà không biến dữ liệu giả định thành benchmark
Building effective agents của Anthropic, công bố ngày 19 tháng 12 năm 2024, phân biệt đường workflow được định trước với việc mô hình tự điều phối công cụ và bàn về đánh đổi chi phí, độ trễ. Trang hiện tại lưu ý rằng hệ sinh thái công cụ đã thay đổi từ thời điểm xuất bản. Bài này dùng phân biệt về kiến trúc, không coi mô tả sản phẩm hay benchmark lịch sử trong nguồn là hiện trạng.
Trước khi chạy thử nghiệm thật, hãy kiểm tra cách lập báo cáo. Bốn dòng dưới đây là kết quả giả định để thực hành tính toán. Chúng không phải phép đo mô hình, framework hay repository nào. Mỗi tác vụ được hai thiết kế xử lý dưới cùng một chính sách quyền giả định. Chuyển sang duyệt có thể là hành vi đúng dù chưa tạo ra bản nháp hoặc chẩn đoán hoàn chỉnh được chấp nhận.
| Tác vụ giả định | Cố định được chấp nhận | Agent được chấp nhận | Lời gọi cố định | Lời gọi agent |
|---|---|---|---|---|
| Hóa đơn đủ thông tin | Có | Có | 2 | 5 |
| Thiếu bằng chứng về thuế | Không | Không | 2 | 7 |
| Bỏ qua validator ngày | Không | Có | 3 | 6 |
| Thiếu đầu vào tái hiện lỗi | Không | Không | 1 | 2 |
Hàm Python sau giữ hai kết quả của cùng tác vụ trong một cặp. Nhãn chấp nhận phải là Boolean thật, số lời gọi là số nguyên không âm và đầu vào phải là list hoặc tuple không rỗng. Bản ghi thực tế còn cần mã tác vụ, lần thử, thời gian, quyết định duyệt và kiểm tra tác động ngoài quyền.
def compare(rows):
if type(rows) not in (list, tuple) or not rows:
raise ValueError("need paired tasks")
fixed_ok = agent_ok = fixed_calls = agent_calls = 0
wins = losses = 0
for fixed, agent, fc, ac in rows:
if type(fixed) is not bool or type(agent) is not bool:
raise ValueError("acceptance must be Boolean")
if any(type(n) is not int or n < 0 for n in (fc, ac)):
raise ValueError("calls must be nonnegative integers")
fixed_ok += fixed
agent_ok += agent
fixed_calls += fc
agent_calls += ac
wins += agent and not fixed
losses += fixed and not agent
return {"accepted": (fixed_ok, agent_ok),
"calls": (fixed_calls, agent_calls),
"agent_only": wins, "fixed_only": losses}
rows = [(True, True, 2, 5), (False, False, 2, 7),
(False, True, 3, 6), (False, False, 1, 2)]
print(compare(rows))
Kết quả có số tác vụ được chấp nhận (1, 2), số lời gọi (8, 20), một trường hợp chỉ agent thành công và không có trường hợp chỉ workflow cố định thành công. Tác vụ thiếu bằng chứng thuế dùng thêm năm lời gọi nhưng vẫn không đủ dữ kiện. Tác vụ ngày đóng góp kết quả được chấp nhận tăng thêm duy nhất. Chỉ nhìn tổng sẽ khó biết phần công việc nào thực sự tạo ra khác biệt trong bộ dữ liệu này.
Đổi nhãn agent của tác vụ ngày thành false rồi chạy lại: hai tổng chấp nhận bằng nhau nhưng chênh lệch số lời gọi vẫn là mười hai. Hoặc thay vào đó đổi nhãn cố định thành true: công việc tăng thêm không còn tạo ra trường hợp chỉ agent thắng. Những thay đổi này kiểm tra phép so sánh; chúng không thiết lập hiệu quả đầu tư chung. Một lời gọi cũng không phải đơn vị tiền hay độ trễ có giá trị ngang nhau trong mọi công cụ.
Trong thử nghiệm thật, cho hai hệ thống xử lý cùng mẫu tác vụ, tách nhóm hóa đơn khỏi nhóm repository và giữ từng lần thử nếu đầu ra ngẫu nhiên. Bốn tác vụ trộn như trên không đủ để ước lượng đáng tin cho cả quần thể. Duyệt đáp án mà không mặc định kiến trúc phức tạp hơn tốt hơn. Ghi riêng kết quả chuyển duyệt, chưa hoàn thành và hành động ngoài quyền, thay vì gộp tất cả thành một nhãn chất lượng. Quyết định triển khai phụ thuộc nhóm nào cần lựa chọn động và lợi ích quan sát được có bù được chi phí thực thi, duyệt hay không.
Giữ các trạng thái kết thúc tách biệt
Agent cần có khả năng kết thúc với kết quả đã được kiểm chứng, yêu cầu thông tin thực sự còn thiếu hoặc bàn giao phần đã xác minh khi hết ngân sách. Ba trạng thái cần thông báo khác nhau. Hết lượt làm việc không trở thành thành công chỉ vì mô hình đã sinh một đoạn kết luận.
Với lỗi ngày, bàn giao chưa hoàn tất có thể chỉ ra kiểm thử thất bại, validator nghi vấn và bước cần kiểm tra tiếp. Không được nói bản sửa đã qua kiểm thử nếu tiến trình chưa kết thúc. Lưu đầu ra lệnh hoặc tham chiếu artifact để lần sau tiếp tục từ bằng chứng có thật.
Trạng thái còn quyết định có được lặp hành động hay không. Đọc tệp hai lần thường tốn tài nguyên; tạo bản nháp hóa đơn hai lần có thể tạo dữ liệu trùng. Mã thao tác bền vững và kiểm tra thực thi vẫn thuộc trách nhiệm ứng dụng dù agent nhớ hội thoại tốt.
Hai thiết kế có thể kết hợp: workflow ngoài cấp quyền cho một cuộc điều tra giới hạn, nhận phát hiện rồi chuyển qua bước xác nhận xác định. Agent chọn bước đọc có ích; ứng dụng kiểm soát hoàn thành và tác động dữ liệu. Bắt đầu từ quyết định động nhỏ nhất mà nhiệm vụ cần, rồi mở rộng khi đánh giá thực tế cho thấy lợi ích cụ thể.