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

Bài Thực Hành Router Trong LangGraph

Mục tiêu: sao chép bài tập trước, nhưng lần này sử dụng các cạnh có điều kiện như một bộ định tuyến để quyết định giữa hai Nodes

image.png

I. Cài đặt

* cd project_name
* pyenv local 3.11.4
* poetry install
* poetry shell
* jupyter lab

 

Tạo .env file

OPENAI_API_KEY=your_openai_api_key
LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT=https://api.smith.langchain.com
LANGCHAIN_API_KEY=your_langchain_api_key
LANGCHAIN_PROJECT=your_project_name

Kết nối file .env

#pip install python-dotenv
import os
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
openai_api_key = os.environ["OPENAI_API_KEY"]

II. Kết nối LangChain

#!pip install langchain-openai
from langchain_openai import ChatOpenAI

chatModel35 = ChatOpenAI(model="gpt-3.5-turbo-0125")
chatModel4o = ChatOpenAI(model="gpt-4o")

III. Sử dụng  LLM với tools

def multiply(a: int, b: int) -> int:
    return a * b

chatModel4o_with_tools = chatModel4o.bind_tools([multiply])

III.  Định nghĩa State Schema (State = Memory)

from typing import TypedDict, Literal

class DrinkState(TypedDict):
    preference: Literal["coffee", "tea", "unknown"]

IV. Định nghĩa các Nodes (mỗi Node là một Step)

# Node: Bắt đầu
def start_node(state: DrinkState) -> DrinkState:
    print("👉 Bạn thích uống gì hôm nay?")
    choice = input("Nhập 'coffee' hoặc 'tea': ").strip().lower()
    if choice not in ["coffee", "tea"]:
        choice = "unknown"
    return {"preference": choice}

# Node: Nếu chọn coffee
def coffee_node(state: DrinkState) -> DrinkState:
    print("☕ Bạn đã chọn Coffee! Tuyệt vời!")
    return state

# Node: Nếu chọn tea
def tea_node(state: DrinkState) -> DrinkState:
    print("🍵 Bạn đã chọn Trà! Thanh tao ghê!")
    return state

# Node: Nếu nhập sai
def fallback_node(state: DrinkState) -> DrinkState:
    print("Không rõ bạn chọn gì. Vui lòng thử lại.")
    return state

V. Định nghĩa Router

def drink_router(state: DrinkState) -> str:
    if state["preference"] == "coffee":
        return "coffee_node"
    elif state["preference"] == "tea":
        return "tea_node"
    else:
        return "fallback_node"

VI. Xây dựng Graph

from langgraph.graph import StateGraph

builder = StateGraph(DrinkState)

# Thêm các nodes
builder.add_node("start", start_node)
builder.add_node("coffee_node", coffee_node)
builder.add_node("tea_node", tea_node)
builder.add_node("fallback_node", fallback_node)
builder.add_node("router", drink_router)

# Tạo flow giữa các bước
builder.set_entry_point("start")
builder.add_edge("start", "router")

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

# Gắn điểm kết thúc cho mỗi nhánh
builder.set_finish_point("coffee_node")
builder.set_finish_point("tea_node")
builder.set_finish_point("fallback_node")

# Compile graph
app = builder.compile()

 

 

 

VII. Chạy thử

# Trạng thái khởi đầu rỗng
initial_state: DrinkState = {"preference": "unknown"}
final_state = app.invoke(initial_state)

Kết quả

Tùy người dùng nhập vào coffee hay tea, graph sẽ tự động điều hướng tới đúng bước xử lý, và in kết quả tương ứng.

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