Rào cản của LLM: Khi AI không biết chuyện gì đang xảy ra
Sau nửa năm triển khai giải pháp AI, mình nhận thấy một vấn đề lớn: GPT-4 hay Claude dù thông minh đến đâu vẫn bị kẹt trong quá khứ (Knowledge Cutoff). Nếu bạn hỏi về giá Bitcoin lúc 8h sáng nay hay những thay đổi trong bản cập nhật Next.js 15 vừa ra mắt, AI sẽ bắt đầu “đoán mò” hoặc từ chối trả lời.
Để giải quyết, chúng ta cần cơ chế RAG (Retrieval-Augmented Generation) nhưng ở quy mô toàn cầu. Thay vì bó hẹp trong vài file PDF, mình sẽ cho AI quyền truy cập Google, Bing và DuckDuckGo thông qua SearXNG. Đây là cách giúp AI luôn cập nhật thông tin mới nhất mà vẫn đảm bảo tính riêng tư.
Nên chọn Search API nào cho dự án AI?
Mình đã thử nghiệm qua nhiều phương án và dưới đây là bảng so sánh thực tế để bạn cân nhắc:
- Google/Bing Search API: Phí khá chát, khoảng 5$ cho mỗi 1.000 lượt truy vấn. Thủ tục đăng ký trên Cloud Console rất rườm rà và dữ liệu tìm kiếm của bạn sẽ bị các ông lớn thu thập.
- Tavily / Exa.ai: Được tối ưu riêng cho AI nên kết quả rất sạch. Tuy nhiên, gói miễn phí chỉ cho phép 1.000 request/tháng. Nếu chạy production, chi phí sẽ là một bài toán đau đầu.
- SearXNG (Lựa chọn tối ưu): Công cụ tìm kiếm meta mã nguồn mở. Bạn có thể tự host trên Docker, không cần API key, không giới hạn lượt search và hoàn toàn làm chủ dữ liệu.
Tại sao SearXNG lại ‘hợp cạ’ với LangChain?
Lý do mình chọn SearXNG là khả năng trả về dữ liệu JSON cực kỳ chuẩn. Điều này giúp LangChain bóc tách thông tin nhanh chóng mà không cần viết thêm code xử lý phức tạp. Khi chạy trên server riêng, hệ thống hoạt động rất mượt mà.
Điểm cộng lớn nhất là tính linh hoạt. Nếu Google chặn IP, SearXNG sẽ tự động điều hướng lấy kết quả từ DuckDuckGo, Qwant hoặc Brave Search. Hệ thống của bạn gần như không bao giờ bị gián đoạn.
Các bước triển khai chi tiết
Bước 1: Dựng SearXNG với Docker
Chỉ mất khoảng 2 phút để bạn có một bộ máy tìm kiếm riêng. Đầu tiên, hãy tạo file docker-compose.yml:
version: '3'
services:
searxng:
container_name: searxng
image: searxng/searxng:latest
ports:
- "8080:8080"
volumes:
- ./searxng:/etc/searxng
environment:
- SEARXNG_SETTINGS_PATH=/etc/searxng/settings.yml
restart: always
Trong file settings.yml, bạn cần kích hoạt định dạng JSON để AI có thể đọc được:
search:
formats:
- html
- json
server:
port: 8080
bind_address: "0.0.0.0"
secret_key: "nhap_key_bao_mat_tai_day"
Gõ lệnh docker-compose up -d. Khi truy cập localhost:8080 và thấy giao diện tìm kiếm, bạn đã đi được nửa chặng đường.
Bước 2: Tích hợp vào Agent của LangChain
LangChain có sẵn SearxSearchWrapper nên việc kết nối rất đơn giản. Cài đặt thư viện bằng lệnh:
pip install langchain langchain-openai
Đây là cấu trúc code Python để tạo một AI Agent có khả năng tra cứu web thời gian thực:
import os
from langchain_community.utilities import SearxSearchWrapper
from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent, Tool, AgentType
os.environ["SEARXNG_URL"] = "http://localhost:8080"
# Khởi tạo công cụ tìm kiếm
search = SearxSearchWrapper(searx_host=os.environ["SEARXNG_URL"])
tools = [
Tool(
name="Search",
func=search.run,
description="Dùng khi cần trả lời về sự kiện hiện tại hoặc thông tin mới nhất trên mạng."
)
]
# Sử dụng GPT-4 hoặc có thể thay bằng Ollama để chạy local hoàn toàn
llm = ChatOpenAI(temperature=0, model="gpt-4-turbo")
agent = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
response = agent.run("Giá vàng SJC hôm nay bao nhiêu và biến động thế nào so với hôm qua?")
print(response)
Bài học xương máu sau 6 tháng vận hành
Để hệ thống chạy ổn định trong thực tế, bạn nên lưu ý 4 điểm mấu chốt sau:
1. Kiểm soát thời gian phản hồi
Việc gom dữ liệu từ nhiều nguồn đôi khi khiến SearXNG phản hồi chậm. Bạn nên thiết lập timeout khoảng 10-15 giây. Tránh để Agent rơi vào trạng thái chờ vô tận khi một engine tìm kiếm nào đó gặp sự cố.
2. ‘Lọc nhiễu’ cho dữ liệu đầu vào
Internet đầy rẫy thông tin rác. Trong file settings.yml, hãy ưu tiên các nguồn chất lượng như Reddit, Wikipedia hoặc các trang báo lớn. Dữ liệu càng sạch, AI càng ít bị tình trạng ảo giác (hallucination).
3. Chiến thuật đối phó với việc bị chặn IP
Nếu query liên tục, Google sẽ đưa IP server của bạn vào danh sách đen. Giải pháp là sử dụng proxy xoay vòng hoặc đơn giản hơn là tắt bớt engine Google. Hãy tận dụng DuckDuckGo và Brave Search vì chúng rất ‘dễ tính’.
4. Tiết kiệm Token bằng cách tóm tắt
Kết quả từ SearXNG thường rất dài, dễ làm tràn Context Window của LLM. Mình thường dùng một prompt phụ để tóm tắt các đoạn trích tìm kiếm về còn khoảng 500-1000 chữ trước khi đưa vào câu hỏi cuối cùng. Cách này giúp giảm 40-60% chi phí API.
Lời kết
Tự xây AI Search Engine với SearXNG không chỉ giúp tiết kiệm tiền mà còn mang lại quyền kiểm soát tuyệt đối. Hệ thống của bạn giờ đây đã có ‘đôi mắt’ để quan sát thế giới thực thay vì chỉ dựa vào bộ nhớ cũ kỹ. Nếu bạn đang làm chatbot cho doanh nghiệp, đây chắc chắn là hướng đi bền vững nhất.

