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àoHà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àmTrả về tên node dưới dạng stringTrả về tên node dưới dạng string, phải trùng với key trong dict
Node được gắn vàoGắn vào một node bình thường (node_1)Gắn vào một router node (router)
Sử dụng khiKhi bạn muốn node đang xử lý tự quyết định rẽ nhánh tiếp theoKhi 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ệndef decide_dring(state): return "coffee_node" if ... else "tea_node"def router(state): return "coffee_node" / "tea_node" / "fallback_node"
Thường dùng khiBạn muốn node_1 vừa xử lý vừa quyết định hướng đi tiếpBạ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 theoadd_conditional_edges("node_1", decide_dring)
Một router chuyên dùng để rẽ nhánhadd_conditional_edges("router", { ... })

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