Nhảy đến nội dung chính

Hiểu rõ hơn về add_conditional_edges

Chúng ta lấy 2 ví dụ để so sánh

builder.add_conditional_edges("node_1", decide_dring)

và 

builder.add_conditional_edges("router", {
    "coffee_node": "coffee_node",
    "tea_node": "tea_node",
    "fallback_node": "fallback_node"
})

Hai dòng builder.add_conditional_edges(...) trên đều dùng để thêm điều kiện rẽ nhánh, nhưng cách dùng và mục đích của chúng có sự khác biệt rõ ràng.

Tiêu chí builder.add_conditional_edges("node_1", decide_dring) builder.add_conditional_edges("router", { "coffee_node": ..., ... })
Kiểu truyền đối số Truyền một hàm điều kiện (condition function) Truyền một dict ánh xạ giá trị trả về từ router đến các node tương ứng
Ai quyết định rẽ nhánh? Hàm decide_dring(state) sẽ quyết định đi đến node nào Hàm router(state) sẽ trả về một string → dict ánh xạ string đó đến node tương ứng
Giá trị trả về của hàm Trả về tên node dưới dạng string Trả về tên node dưới dạng string, phải trùng với key trong dict
Node được gắn vào Gắn vào một node bình thường (node_1) Gắn vào một router node (router)
Sử dụng khi Khi bạn muốn node đang xử lý tự quyết định rẽ nhánh tiếp theo Khi bạn tách riêng logic định tuyến ra một router riêng biệt
Ví dụ hàm điều kiện def decide_dring(state): return "coffee_node" if ... else "tea_node" def router(state): return "coffee_node" / "tea_node" / "fallback_node"
Thường dùng khi Bạn muốn node_1 vừa xử lý vừa quyết định hướng đi tiếp Bạn muốn tách riêng xử lý (node) và định tuyến (router) một cách rõ ràng
Dạng Ý nghĩa
add_conditional_edges("node_1", decide_dring) Node xử lý xong rồi chọn tiếp theo đi đâu.
add_conditional_edges("router", { ... }) Router chỉ quyết định hướng đi, còn xử lý nằm ở node khác.

Khi nào dùng cái nào?

Nếu bạn muốn... Hãy dùng...
Một node tự quyết định rẽ nhánh tiếp theo add_conditional_edges("node_1", decide_dring)
Một router chuyên dùng để rẽ nhánh add_conditional_edges("router", { ... })

Tác giả: Đỗ Ngọc Tú
Công Ty Phần Mềm VHTSoft