Workflow Dify bớt lỗi khi để JSON Schema và nhánh thất bại làm việc

|Tác giả: Ban biên tập QUASA|7 phút đọc
Workflow Dify bớt lỗi khi để JSON Schema và nhánh thất bại làm việc

Để workflow Dify bớt lỗi khi tạo JSON, hãy tách các nhiệm vụ: User Input nhận yêu cầu, Parameter Extractor trích xuất dữ liệu, IF/ELSE chặn trường hợp chưa rõ, còn nút LLM tạo bản nháp theo JSON Schema. Tài liệu nút LLM của Dify mô tả đầu ra có cấu trúc, retry và cách định tuyến khi lời gọi thất bại. Đặt bước kiểm tra dữ liệu và Human Input trước hành động gửi.

Cách sắp xếp này giúp một lần tạo bản nháp thất bại có đường xử lý riêng, thay vì bị nhầm với kết quả sẵn sàng sử dụng. Schema quy định tên và kiểu trường; nó không xác nhận nội dung trong các trường là đúng. Vì vậy, luồng cần phân biệt đầu vào chưa đủ thông tin, lỗi chạy nút, bản nháp không đạt quy tắc và bản nháp đang chờ người duyệt.

Chặn yêu cầu chưa rõ trước khi gọi nút tạo bản nháp

Xét một ví dụ giả định: người dùng gửi yêu cầu hỗ trợ bằng văn bản tự do; hệ thống soạn câu trả lời nhưng chỉ gửi sau khi có người chấp thuận. Đường chính là User Input → Parameter Extractor → IF/ELSE → LLM → kiểm tra bản nháp → Human Input → nút gửi. Mỗi đường dừng cần có Output hoặc cách trả trạng thái phù hợp để người dùng biết yêu cầu đang thiếu thông tin, gặp lỗi hay bị từ chối.

Ở User Input, đặt nội dung yêu cầu là trường bắt buộc. Cho Parameter Extractor nhận đúng biến này và trích xuất loai_yeu_cau dạng chuỗi. Trong ví dụ, hướng dẫn nút dùng một trong các giá trị hoi_thong_tin, can_xu_ly hoặc khong_xac_dinh; đây là giá trị do người xây luồng đặt, không phải danh mục có sẵn của Dify. Quick Start của Dify minh họa cách Parameter Extractor chuẩn hóa đầu vào tự do, rồi dùng IF/ELSE đưa kết quả không hợp lệ thẳng tới Output.

Cấu hình IF/ELSE để khong_xac_dinh đi tới thông báo yêu cầu bổ sung thông tin; chỉ các giá trị được chấp nhận mới đi tới LLM tạo bản nháp. Nếu trường trích xuất bị trống hoặc mang giá trị ngoài danh sách, cũng đưa nó về đường cần làm rõ. Quyền truy cập hay quyết định có hệ quả pháp lý phải dựa vào quy tắc và dữ liệu đã xác thực, không dựa riêng vào nhãn do mô hình trích xuất.

Khai báo đúng hợp đồng dữ liệu cho nút kế tiếp

Bật Structured Output ở nút LLM tạo bản nháp và khai báo một đối tượng JSON với hai trường bắt buộc: tom_tat và du_thao, cùng có kiểu chuỗi. Sau khi cấu hình, chọn biến structured_output làm dữ liệu cho nút tiếp theo. Nếu luồng còn cần một trạng thái thuộc tập lựa chọn cố định, hãy khai báo kiểu chuỗi và enum cho trường đó; đừng để nút sau tự đoán ý nghĩa của các cách viết khác nhau.

Viết prompt để mô hình tạo bản nháp từ yêu cầu gốc và những thông tin thực sự được đưa vào luồng. JSON Schema phụ trách cấu trúc dữ liệu, còn prompt phụ trách nội dung cần tạo. Một câu dặn “luôn trả JSON hợp lệ” không thay cho việc khai báo trường. Phân biệt này cũng là trọng tâm của phần giải thích về giới hạn của JSON mode: JSON có thể phân tích được vẫn có thể thiếu trường hoặc sai kiểu mà bước sau yêu cầu.

Kiểm tra tiếp những điều schema chưa diễn đạt trong cấu hình này: du_thao có thể là chuỗi rỗng, hoặc chứa lời hứa xử lý mà quy trình hỗ trợ chưa cho phép. Dùng IF/ELSE cho điều kiện đơn giản; nếu cần so độ dài, đối chiếu nhiều trường hoặc áp dụng quy tắc xác định, dùng nút Code. Một nút Template có thể ghép các trường đã đạt kiểm tra thành nội dung hiển thị mà không cần gọi LLM lần nữa chỉ để đổi cách trình bày.

Để retry và nhánh thất bại xử lý đúng loại lỗi

Đặt retry có giới hạn cho lỗi chạy nút LLM, với số lần thử và khoảng chờ phù hợp với ứng dụng. Retry có ích khi lời gọi thất bại tạm thời; nó không bổ sung được chi tiết mà người dùng chưa cung cấp và không sửa một quy tắc nghiệp vụ viết sai. Sau khi hết lượt thử mà nút vẫn lỗi, cho Failure Branch đi tới trạng thái “chưa tạo được bản nháp”, kèm thông tin lỗi cần thiết cho người vận hành.

Đường lỗi không được nối tới nút gửi. Cũng không nên đặt một câu trả lời mặc định trông như bản nháp hoàn chỉnh: bước sau có thể nhận nó như kết quả thành công. Trạng thái lỗi rõ ràng giúp người dùng biết yêu cầu chưa được xử lý xong, đồng thời giữ cho người vận hành thấy nút nào cần xem lại.

Một bản nháp được tạo thành công nhưng không đạt kiểm tra nội dung thuộc đường khác. Cho điều kiện kiểm tra đưa bản nháp ấy tới bước sửa hoặc người duyệt, tùy quy tắc đã đặt. Tách đường này khỏi Failure Branch giữ đúng ý nghĩa của từng trạng thái: lỗi chạy nút, đầu ra không đạt yêu cầu và quyết định của người duyệt là các kết quả khác nhau.

Dừng luồng trước hành động gửi

Đặt Human Input sau các phép kiểm tra tự động và ngay trước nút gửi thư hoặc cập nhật hệ thống. Trang Workflow Studio của Dify mô tả khả năng dừng để người phụ trách duyệt, sửa hoặc chuyển tiếp, cùng các nhánh phục hồi khi nút thất bại. Trong luồng giả định, người duyệt cần thấy yêu cầu gốc, loại yêu cầu đã trích xuất và bản nháp cuối cùng trước khi quyết định.

Nối lựa chọn chấp thuận tới nút gửi; nối lựa chọn từ chối tới Output báo trạng thái từ chối. Nếu cho phép chỉnh sửa, nội dung đi tới nút gửi phải là bản đã được người duyệt chấp thuận, không phải bản nháp cũ còn lưu ở đầu ra LLM. Hãy xác định cả đường hết thời gian chờ duyệt để luồng không nằm mãi ở trạng thái chờ mà không ai biết yêu cầu cần xử lý tiếp.

Kiểm thử theo biến và đường đi của từng nút

Chạy trước một yêu cầu rõ ràng, một yêu cầu mơ hồ và một đầu vào thiếu trường bắt buộc. Sau User Input, xem biến nội dung yêu cầu; sau Parameter Extractor, xem giá trị loai_yeu_cau thực tế. Ở IF/ELSE, xác nhận trường hợp chưa rõ kết thúc ở đường yêu cầu bổ sung, còn trường hợp hợp lệ mới tới LLM. Nếu nút trích xuất trả giá trị ngoài danh sách đã đặt, kiểm tra rằng nó không đi vào đường thành công.

Với nút LLM, xem riêng structured_output: hai trường có xuất hiện đúng tên và đúng kiểu không, rồi mới đọc nội dung du_thao. Thử một giá trị rỗng hoặc không đạt quy tắc đã đặt để xem nút kiểm tra có chặn được hay không. Trong quá trình gỡ lỗi, có thể sửa View cached variables để thử cách nút sau phản ứng với giá trị được lưu từ lần chạy trước, rồi xem log của nút báo lỗi.

Cuối cùng, tạo một lần chạy thử khiến nút LLM thất bại và xác nhận Failure Branch trả trạng thái lỗi mà không đi qua nút gửi. Chạy tiếp một bản nháp hợp lệ để kiểm tra luồng dừng ở Human Input, rồi thử riêng lựa chọn chấp thuận, chỉnh sửa và từ chối. Chỉ xuất bản cấu hình khi mỗi đường đi cho ra đúng trạng thái và nút gửi chỉ nhận nội dung đã được duyệt.

Đọc thêm:

Chia sẻ:

Đăng ký bản tin

Nhận tin Web3, AI và tiền mã hóa mới nhất ngay trong hộp thư.

0