Cần cân nhắc kỹ cách thức và vị trí đưa ra quyết định trong hệ thống tác nhân.
Giao thêm quyền quyết định cho LLM có thể giúp hệ thống khái quát hóa cho nhiều tác vụ hơn, nhưng có thể phải đánh đổi tốc độ, độ tin cậy và độ vững chắc.
Khi có thể, hãy chuyển càng nhiều quy trình ra quyết định càng tốt từ LLM sang mã phần mềm tường minh. Điều này đặc biệt đúng với các quy trình có rủi ro cao và/hoặc dùng trong môi trường production.
Khi thiết kế một hệ thống tác nhân dựa trên LLM, một trong những lựa chọn quan trọng nhất là xác định mức độ ra quyết định được đóng gói trong mô hình LLM so với phần mềm tường minh.
Để dễ hình dung, có thể xem lựa chọn này như một phổ nằm giữa hai phương pháp sau:
Kiến trúc dựa trên bộ định tuyến xác định rõ thứ tự và logic trong mã, bảo đảm khả năng kiểm thử, tính dự đoán và độ vững chắc cho các tác vụ thuộc miền hẹp (còn gọi là “tác nhân quy trình”).
Tác nhân điều phối dựa vào các mô hình ngôn ngữ lớn (LLM) để linh hoạt quyết định luồng tác vụ bằng câu lệnh ngôn ngữ tự nhiên, phù hợp với những tương tác mở mà logic định sẵn không đủ hoặc không khả thi.


Với các quy trình production có rủi ro cao, chúng tôi thường khuyên dùng nhiều tính năng dựa trên bộ định tuyến hơn và dành bộ điều phối cho các ứng dụng cần hội thoại linh hoạt, đa dụng.
Kiến trúc dựa trên bộ định tuyến
Hệ thống tác nhân dùng bộ định tuyến:
Xác định rõ luồng ra quyết định bằng mã/phần mềm và dùng LLM để xác định phần mềm sẽ đi theo tuyến nào.
Gần với hệ thống phần mềm truyền thống hơn vì có các lộ trình rõ ràng, dễ dự đoán, từ đó tạo ra kết quả nhất quán hơn.
Phù hợp nhất với các tác vụ có thể được xác định chặt chẽ.
Sau đây là một ví dụ đơn giản về tác nhân chatbot đặt vé máy bay sử dụng “phương pháp bộ định tuyến”. LLM giúp phân loại ý định của câu hỏi theo ba lựa chọn, nhưng cuối cùng chính phần mềm sẽ ánh xạ ý định đó sang câu trả lời theo mẫu. Do LLM bị giới hạn chặt chẽ, người dùng sẽ nhận được hành vi nhất quán hơn.


Kiến trúc điều phối
Trái với hệ thống dùng bộ định tuyến, hệ thống tác nhân điều phối:
Xác định luồng logic bằng câu lệnh ngôn ngữ tự nhiên thay vì phần mềm. Lưu ý: so với ngôn ngữ lập trình, ngôn ngữ tự nhiên vốn mơ hồ và linh hoạt (vừa là ưu điểm vừa là nhược điểm, như sẽ bàn ở phần sau). Chúng tôi gọi đây là “ý định thay vì chỉ thị”.
Có thể cung cấp nhiều phương án xử lý, trong đó LLM quyết định thứ tự và phương thức thực thi.
Có thể linh hoạt tạo ra những lộ trình logic mới, vốn khó được xác định tường minh trong phần mềm.
Sự mơ hồ này có thể dẫn đến đầu ra thiếu nhất quán, nhưng khi hoạt động tốt, nó có thể tạo cảm giác “kỳ diệu”.
Ví dụ sau áp dụng phương pháp điều phối cho cùng bài toán đơn giản về hãng hàng không. Thay vì để phần mềm quyết định câu trả lời phù hợp, việc ra quyết định được giao cho lớp LLM. Đây là một hệ thống đa tác nhân, trong đó tác nhân điều phối “đầu não” phân loại yêu cầu của người dùng rồi chuyển cho tác nhân chuyên xử lý việc đổi chuyến bay; tác nhân đó cuối cùng sẽ trả lời người dùng.
Trong ví dụ này, lớp LLM đóng vai trò là bộ phân loại, bộ định tuyến và trình soạn câu trả lời. Trong ví dụ về bộ định tuyến, nó chỉ đóng vai trò bộ phân loại (phần mềm xử lý phần còn lại).


Khi có thể, chúng tôi khuyên dùng phương pháp dựa trên bộ định tuyến vì có những ưu điểm sau:
Tốc độ và hiệu quả: Tính toán cục bộ nhanh hơn hẳn các bộ điều phối phụ thuộc vào API bên ngoài. Xử lý logic “IF/ELSE” bằng Python cũng rẻ hơn nhiều so với trả phí cho nhà cung cấp LLM để chạy logic đó qua mô hình 400 tỷ tham số.
Khả năng kiểm thử và tính dự đoán: Dễ gỡ lỗi, kiểm thử và bảo trì hơn đáng kể nhờ các phương pháp phần mềm đã được kiểm chứng.
Tính minh bạch và độ tin cậy: Hành vi ít biến động hơn nên việc khắc phục sự cố cũng đơn giản hơn. Phần lớn hơn trong luồng ứng dụng cũng được thể hiện bằng phần mềm minh bạch, có kiểm soát phiên bản, thay vì các trọng số khó diễn giải và thiếu minh bạch của LLM.
Nhược điểm của phương pháp dùng bộ định tuyến là có thể cứng nhắc, kém linh hoạt và gặp khó khăn với các bài toán mở. Người dùng có thể thấy một chatbot luôn đưa ra đúng những câu trả lời giống nhau là nhàm chán và trì trệ.
Thiết kế điều phối có nhiều khả năng mạnh mẽ:
Lập kế hoạch: Có thể linh hoạt lập kế hoạch phản hồi.
Chọn công cụ/Chuyển giao cho tác nhân: Chọn công cụ phù hợp hoặc giao tác vụ cho tác nhân.
Lặp và kết hợp đầu ra: Lặp lại và tái kết hợp đầu ra một cách sáng tạo.
Xác định thời điểm hoàn tất: Xác định khi nào đã thu thập đủ thông tin để hoàn thiện câu trả lời.
Các framework như Pydantic-AI hoặc Agents SDK của OpenAI giúp việc triển khai điều phối trở nên đơn giản và nhanh chóng. Vì vậy, phương pháp này rất phù hợp với bản demo hoặc mô hình thử nghiệm ý tưởng.
Nhược điểm của phương pháp này là:
Không có gì bảo đảm rằng các bước lập kế hoạch và hành động tiếp theo của LLM sẽ chính xác hoặc phù hợp. Hệ thống bộ định tuyến cũng gặp vấn đề này, nhưng do bị giới hạn chặt chẽ hơn nên hành vi dễ dự đoán hơn.
Với các tác vụ đơn giản, được xác định rõ, nhiều khả năng chúng ta không cần toàn bộ khả năng của một hệ thống đa tác nhân. Chẳng hạn, trong ví dụ về tác nhân hàng không, có lẽ người tương tác với hệ thống hỗ trợ của hãng chỉ muốn thực hiện một số loại yêu cầu hữu hạn.
Do chứa nhiều logic hơn trong LLM, hệ thống dễ bị kẻ xấu Bẻ khóa hoặc khai thác hơn nhiều.
Phương pháp này trừu tượng hóa việc ra quyết định vào LLM, khiến hệ thống khó hiểu hơn (dù các công cụ giám sát như Langfuse hoặc Braintrust có thể hỗ trợ phần nào).
Lưu ý cho độc giả: dù khả năng của mô hình đang thay đổi nhanh chóng, những nội dung dưới đây nhiều khả năng sẽ không thay đổi trong tương lai gần.
Xác định phạm vi bài toán.
Bạn có thể dễ dàng thể hiện logic ra quyết định mong muốn bằng sơ đồ không?
Ứng dụng của bạn có đòi hỏi tuyệt đối không được xảy ra lỗi hoặc hành vi ngoài dự kiến không?
Nếu trả lời “có” cho một trong hai câu hỏi trên, các tính năng của bộ định tuyến sẽ phù hợp hơn.
Khi có thể, chúng tôi khuyên dùng phương pháp bộ định tuyến trong phạm vi mà nó đáp ứng được. Theo nguyên tắc chung, nếu một phần của hệ thống có thể biểu đạt bằng mã, hãy viết phần đó bằng mã (tức là đừng lạm dụng LLM khi không cần thiết).
Khi phương pháp này đạt đến giới hạn, có thể tái tạo một số ưu điểm mở của bộ điều phối theo cách có kiểm soát. Ví dụ:
Chọn công cụ/Chuyển giao cho tác nhân: Có thể dễ dàng triển khai bằng cách phân nhánh có điều kiện hoặc bộ phân loại LLM.
Xác định thời điểm hoàn tất: Bộ phân loại LLM đơn giản có thể kiểm tra mức độ hoàn chỉnh của câu trả lời trước khi gửi cho người dùng.
Tuy nhiên, “Lập kế hoạch” và “Lặp và kết hợp đầu ra” chắc chắn khó thực hiện hơn nhiều trong một hệ thống bộ định tuyến cứng nhắc. Vì vậy, khi tác vụ cần các khả năng này (do bộ phân loại LLM hoặc logic khác xác định), chúng tôi đề xuất tạo một nhánh điều phối ít bị ràng buộc hơn trong hệ thống.
Lựa chọn giữa kiến trúc bộ định tuyến và bộ điều phối cần phù hợp với mức độ rõ ràng, độ phức tạp và phong cách tương tác của ứng dụng. Hiện nay, phương pháp dựa trên bộ định tuyến mang lại độ tin cậy, hiệu quả và khả năng kiểm thử dễ dàng cho các tác vụ được xác định rõ. Bộ điều phối linh hoạt hơn cho các tương tác hội thoại có phạm vi rộng.
Khi LLM tiếp tục phát triển, sự cân bằng giữa các phương pháp này có thể thay đổi. Chúng tôi thiên về kiến trúc dựa trên bộ định tuyến hoặc kiến trúc kết hợp cho khối lượng công việc production, đồng thời dành bộ điều phối cho các bài toán mở cần khả năng tương tác linh hoạt, giống con người.