Ngừng trả phí thuê bao: Tự triển khai Perplexica để tìm kiếm AI riêng tư

AI tutorial - IT technology blog
AI tutorial - IT technology blog

Tại sao tôi ngừng trả 20 USD/tháng cho công cụ tìm kiếm

Tôi đã chi hơn 240 USD cho các gói thuê bao Perplexity Pro trong năm qua. Mặc dù công cụ này rất tuyệt vời, nhưng tôi cảm thấy ngày càng không thoải mái khi toàn bộ lịch sử tìm kiếm của mình — bao gồm cả những ý tưởng dự án nhạy cảm và các đoạn mã nguồn độc quyền — đều nằm trên máy chủ của bên thứ ba. Tôi muốn sức mạnh của Retrieval-Augmented Generation (RAG) mà không phải đánh đổi quyền riêng tư. Cuộc tìm kiếm đó đã dẫn tôi đến với Perplexica.

Perplexica là một giải pháp thay thế mã nguồn mở mạnh mẽ mô phỏng lại quy trình làm việc của Perplexity. Nó sử dụng SearXNG để thu thập dữ liệu web trực tiếp và sau đó đưa dữ liệu đó vào một LLM như Claude 3.5 Sonnet hoặc một instance Llama 3 cục bộ để tạo ra các câu trả lời có trích dẫn. Thiết lập này giúp thu hẹp khoảng cách giữa các LLM tĩnh và dữ liệu internet thời gian thực trong khi vẫn giúp bạn kiểm soát hoàn toàn dấu chân dữ liệu của mình.

Bắt đầu nhanh: Vận hành trong chưa đầy 5 phút

Chỉ cần bạn có sẵn Docker và Docker Compose, bạn có thể triển khai một instance hoạt động được gần như ngay lập tức. Tôi khuyên bạn nên bắt đầu với cấu hình mặc định trước. Điều này đảm quả mạng của bạn có thể kết nối tới các nhà cung cấp tìm kiếm trước khi bạn bắt đầu thử nghiệm tích hợp các LLM cục bộ.

1. Clone Repository

git clone https://github.com/ItS0hyam/perplexica.git
cd perplexica

2. Cấu hình môi trường

Perplexica dựa vào tệp sample.config.toml cho logic backend. Hãy sao chép tệp này để tạo cấu hình hoạt động của bạn:

cp sample.config.toml config.toml

Bạn chưa cần phải chỉnh sửa quá nhiều. Tuy nhiên, cũng nên xem qua nhanh để xác nhận các thiết lập mặc định về PORTSEARCH_ENGINE phù hợp với môi trường của bạn.

3. Khởi chạy với Docker Compose

Thực thi lệnh sau để tải các image cần thiết và khởi chạy các container:

docker compose up -d

Sau khi quá trình hoàn tất, giao diện người dùng (UI) có thể truy cập tại http://localhost:3000, trong khi backend xử lý các yêu cầu tại http://localhost:3001. Nếu thanh tìm kiếm xuất hiện, bạn đã sẵn sàng.

Bên trong hệ thống: Kiến trúc

Để tối ưu hóa Perplexica cho quy trình làm việc cụ thể của bạn, bạn cần hiểu cấu trúc ba trụ cột của nó: Frontend Next.js, Backend Node.js và công cụ SearXNG.

Vai trò của SearXNG

SearXNG đóng vai trò như một công cụ tìm kiếm tổng hợp (metasearch engine) tôn trọng quyền riêng tư. Thay vì truy vấn trực tiếp Google, Perplexica gửi yêu cầu đến SearXNG, nơi tổng hợp kết quả từ Google, Bing và DuckDuckGo. Nếu kết quả tìm kiếm của bạn trống, nguyên nhân thường là do xung đột cổng hoặc IP bị chặn trong container SearXNG.

Chọn nhà cung cấp LLM

Tệp config.toml đóng vai trò là bộ não của toàn bộ hoạt động. Bạn có hai hướng chính để xử lý dữ liệu tìm kiếm của mình:

  • Cloud API: Sử dụng Groq để có phản hồi dưới một giây, hoặc Claude 3.5 Sonnet của Anthropic cho các tác vụ đòi hỏi khả năng suy luận cao.
  • Local Hosting: Ollama là lựa chọn ưu tiên cho những ai đặt chủ quyền dữ liệu lên hàng đầu.

Nếu bạn chọn Groq — tôi khuyên dùng vì tốc độ đáng kinh ngạc và gói miễn phí hào phóng — cấu hình của bạn sẽ trông như thế này:

[API_KEYS]
GROQ = "nhap_api_key_groq_cua_ban_tai_day"

[GENERAL]
LLM_PROVIDER = "groq"
DYNAMIC_LLM_MODEL = "llama3-70b-8192"

Chạy cục bộ: Kết nối Ollama

Sức mạnh thực sự của self-hosting là giữ toàn bộ hệ thống trên phần cứng của riêng bạn. Nếu bạn đang chạy Ollama trên máy chủ (host), bạn phải đảm bảo container Docker có thể giao tiếp với nó. Đây là nơi hầu hết người dùng gặp khó khăn.

Bước 1: Ràng buộc mạng (Network Binding)

Ollama thường mặc định là 127.0.0.1, địa chỉ này không thể nhìn thấy từ bên trong các container Docker. Trên Windows hoặc Mac, hãy đặt biến môi trường OLLAMA_HOST=0.0.0.0. Người dùng Linux sẽ cần chỉnh sửa tệp dịch vụ systemd để cho phép giao tiếp giữa các interface.

Bước 2: Cập nhật config.toml

Trỏ URL API đến IP Docker bridge của máy bạn thay vì localhost:

[GENERAL]
LLM_PROVIDER = "ollama"
OLLAMA_BASE_URL = "http://host.docker.internal:11434"
DYNAMIC_LLM_MODEL = "llama3"

Lưu ý: host.docker.internal là một lối tắt dành cho Docker Desktop. Nếu bạn đang dùng máy chủ Linux thuần túy, hãy sử dụng IP của interface docker0, thường là 172.17.0.1.

Bước 3: Tinh chỉnh tiêu điểm tìm kiếm

Perplexica bao gồm một “Focus Mode” để thu hẹp tài liệu nguồn. Việc chuyển sang chế độ “Academic” sẽ cải thiện đáng kể tỷ lệ tín hiệu trên nhiễu khi nghiên cứu tài liệu kỹ thuật. Nó bỏ qua các blog nặng về SEO để ưu tiên các sách trắng (whitepapers) và tài liệu hướng dẫn chính thức.

Hiệu suất và xử lý sự cố

Sau khi chạy hệ thống này trong home lab của mình được vài tháng, tôi đã xác định được một vài khu vực quan trọng cần tối ưu hóa.

Quản lý xung đột cổng

Hệ thống mặc định sử dụng các cổng 3000 và 3001. Nếu bạn đã đang chạy một dashboard như Portainer hoặc một instance Nextcloud, Perplexica sẽ bị lỗi khi khởi động. Đơn giản chỉ cần ánh xạ lại các cổng trong tệp docker-compose.yaml của bạn:

services:
  perplexica-frontend:
    ports:
      - "8080:3000" # Ánh xạ cổng cục bộ 8080 vào container

Yêu cầu phần cứng

Chạy toàn bộ hệ thống cùng với một mô hình 8 tỷ tham số (8B) cục bộ yêu cầu ít nhất 16GB RAM để có trải nghiệm mượt mà. Nếu bạn bị giới hạn ở 8GB, tôi khuyên bạn nên host UI và SearXNG cục bộ nhưng chuyển phần xử lý LLM sang Groq hoặc API của OpenAI.

Cập nhật hệ thống

Quá trình phát triển Perplexica diễn ra rất nhanh. Để cập nhật phiên bản mới nhất mà không làm hỏng thiết lập của bạn, hãy sử dụng trình tự sau:

git pull
docker compose build
docker compose up -d

Tự host công cụ tìm kiếm không chỉ là để phô diễn quyền riêng tư. Đó là việc xây dựng một công cụ không bị giới hạn bởi các gói thuê bao hay bị điều chỉnh bởi các bộ lọc của doanh nghiệp. Một khi bạn đã trải nghiệm tìm kiếm riêng tư có trích dẫn nguồn, rất khó để quay lại các lựa chọn thương mại tiêu chuẩn.

Share: