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
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