Định tuyến(Router) trong LangGraph
Router trong LangGraph là gì?
Trong LangGraph, Router
là một Node đặc biệt (tức một bước – step
) cho phép bạn tạo ra các nhánh (branches) dựa trên dữ liệu hoặc trạng thái hiện tại.
Nói đơn giản:
Router giống như ngã ba đường — dựa trên state hiện tại, bạn chọn hướng đi tiếp theo (chuyển tới node A, B hoặc C).
Khi nào bạn cần dùng Router?
Khi bạn có logic như:
-
Nếu người dùng chọn "Coffee" → đi tới node xử lý coffee.
-
Nếu người dùng chọn "Tea" → đi tới node xử lý trà.
-
Nếu không rõ → hỏi lại hoặc kết thúc.
Bạn không muốn xử lý tất cả trong một node, mà tách nhánh theo logic, thì Router
là giải pháp.
Cách dùng Router trong LangGraph
def my_router(state):
if state["preference"] == "coffee":
return "coffee_node"
elif state["preference"] == "tea":
return "tea_node"
else:
return "unknown_preference"
Đây là một Router node, tức là nó nhận một state
(trạng thái hiện tại), và trả về tên node kế tiếp dựa trên logic.
state["preference"]
là giá trị đầu vào mà bạn đưa vào để quyết định nhánh.
-
Nếu thích coffee, thì đi tới node
coffee_node
. -
Nếu thích tea, thì đi tới node
tea_node
. -
Nếu không rõ, thì về
unknown_preference
(mặc dù node này chưa được thêm trong ví dụ – mình sẽ nói thêm ở dưới).
Đăng ký Router node trong graph
Ví dụ sau, Router không thực thi hành động chính mà chọn node tiếp theo dựa trên logic phân nhánh.
builder = StateGraph(StateSchema)
builder.add_node("start", start_node)
builder.add_node("router", my_router)
builder.add_node("coffee_node", coffee_node)
builder.add_node("tea_node", tea_node)
# Router branching
builder.add_edge("start", "router")
builder.add_conditional_edges(
"router",
{
"coffee_node": "coffee_node",
"tea_node": "tea_node"
}
)
Ví
- Node router sử dụ
trên, Router khôngthựhàm my_router, hàm này sẽ trả về cácthigiáhànhtrị là tea_node, coffee_node hoặc unknown_preference, LangGraph dùng kết quả độngóchính màđểchọtra trong từ điển: -
{ "coffee_node": "coffee_node", "tea_node": "tea_node" }
-
Nếu kết quả là
"coffee_node"
→ đi đến nodetiếp"coffee_node"
theo -
trêNếu kết quả là
"tea_node"
→ đi đếnlogicnodephân"tea_node"
nhánh.
Lợi ích của Router
-
Tách logic phức tạp thành các bước nhỏ.
-
Tạo flow rõ ràng và dễ debug.
-
Xây dựng app agent có khả năng phân nhánh tùy theo trạng thái.
-
Dễ áp dụng trong các hệ thống có điều kiện (if/else).
Gợi ý dùng thực tế
Use case | Router logic |
---|---|
Trợ lý cá nhân | Phân nhánh theo yêu cầu người dùng: tra cứu lịch, gửi mail, hoặc dịch văn bản |
Ứng dụng học tập | Phân hướng học viên đến bài kiểm tra phù hợp trình độ |
Ứng dụng đặt hàng | Nếu sản phẩm còn → đặt hàng; nếu không → đề xuất khác |
Tác giả: Đỗ Ngọc Tú
Công Ty Phần Mềm VHTSoft