Tối ưu chi phí LLM: Điều hướng yêu cầu thông minh với Semantic Router

Artificial Intelligence tutorial - IT technology blog
Artificial Intelligence tutorial - IT technology blog

Đừng để những câu hỏi “dạo” làm rỗng túi tiền API của bạn

Vận hành GPT-4 hay Claude 3.5 Sonnet rất tốn kém. Bạn sẽ thấy xót tiền khi nhìn hóa đơn API cuối tháng chỉ vì những câu hỏi vô thưởng vô phạt. Thực tế, người dùng thường xuyên nhập những câu như “Chào bạn”, “Bạn là ai?”, hoặc hỏi về kết quả bóng đá trong một ứng dụng quản lý tài chính.

Mỗi request như vậy tiêu tốn hàng nghìn input tokens cho hệ thống prompt và history. Thay vì đẩy mọi thứ lên LLM đắt đỏ, bạn có thể xử lý tĩnh hoặc dùng model rẻ hơn. Semantic Router chính là lớp middleware giúp bạn thực hiện điều này một cách tự động.

Công cụ này sử dụng Vector Embeddings để phân tích ý định (intent) người dùng trong vài miligiây. Tôi đã áp dụng giải pháp này cho một chatbot chăm sóc khách hàng có 10.000 request/ngày. Kết quả thật bất ngờ: chi phí API giảm 45% và tốc độ phản hồi trung bình giảm từ 2 giây xuống còn 0.5 giây.

Cài đặt môi trường

Bạn cần Python 3.9 trở lên để chạy thư viện này. Chúng ta sẽ cài đặt bản core và driver cho OpenAI để xử lý embeddings. Nếu muốn tiết kiệm tối đa, bạn có thể thay thế OpenAI bằng các model local sau này.

pip install -qU semantic-router openai

Tiếp theo, hãy cấu hình API Key. Trong môi trường production, bạn nên dùng file .env để bảo mật thông tin.

export OPENAI_API_KEY="sk-xxx"

Thiết lập các tuyến đường (Routes) thông minh

Cốt lõi của Semantic Router là các Route. Mỗi Route đại diện cho một nhóm ý định với các câu mẫu (utterances) đi kèm. Router sẽ tính toán độ tương đồng ngữ nghĩa để quyết định request sẽ đi về đâu.

Dưới đây là cấu hình cho 3 nhóm phổ biến: Chào hỏi, Hỗ trợ kỹ thuật và Báo giá.

from semantic_router import Route

# Nhóm câu hỏi xã giao
chitchat = Route(
    name="chitchat",
    utterances=["xin chào", "hi admin", "bạn là ai", "có ai ở đó không", "chúc buổi sáng"],
)

# Nhóm xử lý lỗi kỹ thuật
tech_support = Route(
    name="technical",
    utterances=["lỗi đăng nhập", "không thấy nút upload", "quên mật khẩu", "API báo lỗi 500"],
)

# Nhóm chuyển đổi (Conversion)
pricing = Route(
    name="pricing",
    utterances=["giá bao nhiêu", "mua bản pro thế nào", "có khuyến mãi không", "phí duy trì hàng năm"],
)

Để vận hành, chúng ta cần RouteLayer. Đây là bộ não điều hướng dựa trên model embedding text-embedding-3-small của OpenAI.

from semantic_router.layer import RouteLayer
from semantic_router.encoders import OpenAIEncoder

encoder = OpenAIEncoder()
rl = RouteLayer(encoder=encoder, routes=[chitchat, tech_support, pricing])

Vận hành và xử lý kết quả

Khi nhận query từ user, RouteLayer sẽ trả về tên route nếu khớp, hoặc None nếu câu hỏi nằm ngoài các nhóm đã định nghĩa. Cách tiếp cận này giúp bạn lọc sạch nhiễu trước khi chạm tới LLM chính.

def handle_request(query):
    guide = rl(query)
    
    if guide.name == "chitchat":
        return "Chào bạn! Tôi là trợ lý ảo. Tôi có thể giúp gì cho bạn?"
    
    if guide.name == "pricing":
        return "Bạn tham khảo bảng giá tại: itfromzero.com/pricing"
    
    # Nếu không khớp route nào, lúc này mới gọi GPT-4
    return call_expensive_llm(query)

3 lưu ý “xương máu” khi triển khai thực tế

  1. Tinh chỉnh Score Threshold: Mặc định Router có ngưỡng tin cậy riêng. Nếu hệ thống nhận diện nhầm, hãy điều chỉnh tham số score_threshold trong RouteLayer để tăng độ khắt khe.
  2. Ưu tiên Local Encoder: Bạn nên dùng HuggingFaceEncoder với model all-MiniLM-L6-v2. Nó chạy trực tiếp trên RAM, giúp bạn phân loại ý định hoàn toàn miễn phí và không phụ thuộc internet.
  3. Lọc log để tối ưu: Hãy lưu lại những câu hỏi bị trả về None. Đây là nguồn dữ liệu quý giá để bạn bổ sung vào utterances, giúp Router ngày càng chính xác hơn.

Semantic Router không chỉ là công cụ tiết kiệm tiền. Nó là lớp bảo vệ giúp ứng dụng AI của bạn chuyên nghiệp và phản hồi nhanh hơn. Nếu bạn đang xây dựng AI Agent, hãy tích hợp nó ngay vào lớp nhận diện đầu tiên.

Share: