# 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. |
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", { ... })` |