Setup Wren AI NL-to-SQL self-host cho dev VPS

Mục lục
TL;DR
  • Wren AI biến câu hỏi tiếng Việt thành SQL chạy được trên Postgres, MySQL, BigQuery. Tự host được trên VPS 4GB RAM.
  • Setup chuẩn Docker Compose mất 20 phút từ lúc SSH vào VPS đến lúc hỏi câu đầu tiên bằng tiếng Việt.
  • Wren AI cần một LLM backend. Rẻ nhất là gắn OpenAI API; tiết kiệm hơn là Ollama Qwen 2.5 14B trên cùng VPS GPU.
  • Phù hợp cho dev solo, founder kỹ thuật, đội data 2-3 người muốn dashboard tự phục vụ mà không phải build BI tool.
  • Bài này hướng dẫn full: cài Docker, dựng Postgres mẫu, kết nối Wren, thêm semantic model, test 10 câu hỏi tiếng Việt.

Hỏi database bằng tiếng Việt là giấc mơ của mọi PM, marketer và founder không biết SQL. Trong 2 năm qua, Wren AI đã trở thành dự án open-source nổi bật nhất cho bài toán NL-to-SQL. Nó dùng LLM kết hợp semantic model riêng để giảm hallucination, hỗ trợ join phức tạp, và quan trọng nhất là tự host được trên VPS giá rẻ.

Bài này hướng dẫn từ A đến Z: chọn cấu hình VPS phù hợp, cài Wren AI bằng Docker Compose, kết nối Postgres mẫu, viết semantic model để Wren hiểu cấu trúc dữ liệu kinh doanh, gắn LLM backend (OpenAI hoặc Ollama nội bộ), và demo 10 câu hỏi tiếng Việt thường gặp. Tất cả test trên Cloud VPS 50 với AlmaLinux 9 và Ubuntu 24.04. Sau bài này, đội của bạn có thể chat với database mà không cần dev viết query.

Wren AI là gì và vì sao đáng tự host?

Wren AI là một open-source GenBI (Generative Business Intelligence) platform được phát triển từ 2024 bởi Canner Data. Khác với việc gọi thẳng ChatGPT để viết SQL, Wren AI thêm 3 lớp giá trị: semantic model (mô tả schema bằng business terms), MDL (Modeling Definition Language) để định nghĩa quan hệ giữa bảng, và một retrieval layer chọn đúng phần schema liên quan cho mỗi câu hỏi. Điều này giảm hallucination đáng kể so với prompt LLM trực tiếp.

Lý do tự host thay vì dùng SaaS như Vanna AI hay Wren Cloud: dữ liệu kinh doanh không rời khỏi VPS của bạn, không phụ thuộc giá API thay đổi theo từng đợt funding, và bạn kiểm soát hoàn toàn version, plugin, và độ dài context. Nhược điểm là phải tự lo backup, scaling và update. Với một đội 2-5 người, đánh đổi này rõ ràng có lợi.

Yêu cầu hệ thống thực tế

Use caseCPURAMDiskGói TND đề xuất
1-2 user, dùng OpenAI backend2 vCPU4 GB40 GB SSDCloud VPS 40
3-5 user, dùng OpenAI backend4 vCPU8 GB80 GB SSDCloud VPS 80
5+ user, có Ollama nội bộ (CPU)8 vCPU16 GB120 GB SSDCloud VPS 160
5+ user, Ollama GPU Qwen 14B8 vCPU32 GB + GPU200 GB SSDVPS GPU dedicated

Cấu hình Cloud VPS 50 (4GB RAM, 2 vCPU) đủ chạy Wren AI ở mức dev và demo cho 1-2 người. Khi production, nâng lên 8GB RAM trở lên để chứa được Postgres dùng làm sample database, vector store cho semantic search, và 4-5 container Wren engine.

Bước 1: Chuẩn bị VPS và cài Docker

SSH vào VPS với user sudo. Cài Docker và Docker Compose theo cách chính thức của Docker:

sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg 
  | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] 
  https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 
  | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER
newgrp docker
docker --version
docker compose version

Trên AlmaLinux 9, dùng dnf thay vì apt và thêm repo dl.fedoraproject.org. Kiểm tra Docker chạy bằng docker run hello-world. Nếu thấy thông báo "Hello from Docker", phần hạ tầng đã sẵn sàng.

Bước 2: Pull Wren AI Docker Compose và config env

Tạo thư mục riêng cho Wren và clone file compose từ repo chính thức:

mkdir -p ~/wren-ai && cd ~/wren-ai
curl -sSL https://raw.githubusercontent.com/Canner/WrenAI/main/docker/docker-compose.yaml 
  -o docker-compose.yaml
curl -sSL https://raw.githubusercontent.com/Canner/WrenAI/main/docker/.env.example 
  -o .env

Mở file .env bằng nano hoặc vim. Các biến quan trọng cần sửa:

COMPOSE_PROJECT_NAME=wrenai
PLATFORM=linux/amd64

# LLM backend: chọn openai hoặc litellm cho Ollama
LLM_PROVIDER=openai
OPENAI_API_KEY=$YOUR_OPENAI_KEY
GENERATION_MODEL=gpt-4o-mini
EMBEDDING_MODEL=text-embedding-3-small

# Postgres làm metadata store
POSTGRES_USER=wren
POSTGRES_PASSWORD=$YOUR_STRONG_PASS
POSTGRES_DB=wren_metadata
POSTGRES_PORT=5432

# Telemetry tắt cho privacy
TELEMETRY_ENABLED=false

# Hostname cho UI
WREN_UI_ENDPOINT=http://localhost:3000

Nếu muốn dùng Ollama nội bộ thay OpenAI để tiết kiệm chi phí token, đổi LLM_PROVIDER=litellm và cấu hình thêm OLLAMA_URL trỏ tới container Ollama trong cùng network. Phần này có hướng dẫn riêng ở mục sau.

Bước 3: Khởi động Wren AI stack

cd ~/wren-ai
docker compose pull
docker compose up -d
docker compose ps

Lần đầu mất 5-10 phút để pull các image: wren-ai-service, wren-engine, ibis-server, qdrant (vector DB), wren-ui và bootstrap. Sau khi tất cả ở trạng thái Up, mở browser tới http://server-ip:3000 sẽ thấy giao diện setup wizard.

Khuyến nghị đặt Wren sau Caddy reverse proxy để có HTTPS. Thêm 4 dòng vào Caddyfile:

wren.your-domain.com {
    reverse_proxy localhost:3000
    encode gzip
}

Reload Caddy là có ngay https://wren.your-domain.com sạch sẽ, tự động Let's Encrypt cert.

Bước 4: Kết nối Wren tới Postgres mẫu

Để có dữ liệu nói chuyện cùng, tạo một Postgres container riêng với sample data thương mại điện tử. Tạo file docker-compose.sample.yaml:

services:
  pg-sample:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: demo
      POSTGRES_PASSWORD: demopass
      POSTGRES_DB: ecommerce
    ports:
      - "5433:5432"
    volumes:
      - ./pg-sample-data:/var/lib/postgresql/data
      - ./seed.sql:/docker-entrypoint-initdb.d/seed.sql
    networks:
      - wrenai_default

networks:
  wrenai_default:
    external: true

File seed.sql tạo 3 bảng cơ bản: customers, orders, order_items với khoảng 1000 dòng dữ liệu mẫu. Bạn có thể tải seed sẵn từ repo wrenai-samples hoặc viết tay với generate_series.

Khởi động:

docker compose -f docker-compose.sample.yaml up -d
docker exec -it pg-sample psql -U demo -d ecommerce -c "\dt"

Trong UI Wren, vào Settings > Data Source > Connect new, chọn PostgreSQL, nhập host pg-sample, port 5432 (cổng nội bộ docker, không phải 5433), user demo, mật khẩu demopass, database ecommerce. Test connection. Khi xanh, click Save.

Bước 5: Viết Semantic Model bằng MDL

Đây là phần quan trọng nhất quyết định chất lượng câu trả lời. MDL (Modeling Definition Language) là JSON/YAML mô tả bảng và quan hệ bằng ngôn ngữ business. Trong UI, click Model > Add model > chọn bảng customers, đặt display name "Khách hàng", thêm description "Bảng khách hàng của shop, mỗi dòng là một người mua".

Với mỗi cột, đặt:

  • customer_id: mô tả "ID duy nhất của khách hàng".
  • full_name: mô tả "Tên đầy đủ của khách hàng".
  • signup_date: mô tả "Ngày khách hàng đăng ký tài khoản".
  • city: mô tả "Thành phố thường trú, dùng cho phân tích theo địa lý".

Làm tương tự cho orders và order_items. Sau đó vào Relationships, định nghĩa: customers.customer_id 1-N orders.customer_id, orders.order_id 1-N order_items.order_id. Wren sẽ tự generate context cho LLM khi user hỏi.

Mẹo viết description tốt: dùng business term (doanh thu, đơn hàng, lượt truy cập) thay vì tech term (revenue, orders, sessions). Wren dịch sang SQL dựa vào ngữ nghĩa, nên tiếng Việt tự nhiên cho kết quả tốt hơn.

Bước 6: Test 10 câu hỏi tiếng Việt phổ biến

Vào tab Ask, gõ câu hỏi vào ô input. Dưới đây là 10 câu hỏi đã test thành công trên schema ecommerce mẫu với GPT-4o-mini làm backend:

  1. Tháng 4 năm 2026 doanh thu là bao nhiêu?
  2. Top 10 khách hàng chi tiêu nhiều nhất từ đầu năm tới giờ.
  3. So sánh doanh thu tháng này với tháng trước.
  4. Có bao nhiêu khách mới đăng ký trong 30 ngày qua?
  5. Sản phẩm nào bán chạy nhất ở Hà Nội tháng vừa rồi?
  6. Trung bình mỗi đơn hàng có bao nhiêu sản phẩm?
  7. Khách hàng nào lâu rồi không quay lại (90 ngày không có đơn)?
  8. Tỉ lệ chuyển đổi từ đăng ký sang đơn hàng đầu tiên.
  9. Doanh thu theo từng thành phố trong quý 1.
  10. Có bao nhiêu khách hàng đặt từ 5 đơn trở lên?

Mỗi câu Wren trả về một bảng kết quả + SQL được sinh ra để bạn review. Nếu SQL sai, bạn có thể edit và lưu lại làm few-shot example để Wren học cách trả lời tốt hơn lần sau.

Tùy chọn nâng cao: dùng Ollama Qwen thay OpenAI

Nếu muốn 100 phần trăm self-host, không trả phí token, dùng Ollama với model Qwen 2.5 14B hoặc 32B. Tạo container Ollama trong cùng docker network:

services:
  ollama:
    image: ollama/ollama:latest
    volumes:
      - ./ollama-data:/root/.ollama
    ports:
      - "11434:11434"
    networks:
      - wrenai_default
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

networks:
  wrenai_default:
    external: true

Khởi động và pull model:

docker compose -f docker-compose.ollama.yaml up -d
docker exec -it ollama ollama pull qwen2.5:14b
docker exec -it ollama ollama pull nomic-embed-text

Sửa file .env của Wren:

LLM_PROVIDER=litellm
GENERATION_MODEL=ollama/qwen2.5:14b
EMBEDDING_MODEL=ollama/nomic-embed-text
LITELLM_API_BASE=http://ollama:11434

Restart wren-ai-service container. Bây giờ tất cả request NL-to-SQL chạy hoàn toàn nội bộ. Tốc độ phụ thuộc GPU, RTX 3060 12GB chạy Qwen 14B trả lời mỗi câu hỏi trong 4-8 giây, đủ dùng cho dev solo.

Bảo mật và phân quyền

Wren UI hiện chưa có authentication built-in mạnh, chỉ có basic API key. Cách an toàn cho team:

  • Đặt sau Caddy với plugin caddy-security, login Google Workspace bằng OAuth.
  • Hoặc dùng Cloudflare Access (Zero Trust free 50 user) bọc subdomain wren.your-domain.com.
  • Tạo Postgres user read-only riêng cho Wren, KHÔNG cho quyền DROP, DELETE, TRUNCATE.
  • Bật pgaudit để log mọi query Wren chạy, review hàng tuần.
  • Snapshot VPS mỗi tuần qua TND control panel để rollback khi cần.

Monitoring và quota

Khi dùng OpenAI backend, mỗi câu hỏi tốn khoảng 1000-3000 token input (do semantic context) và 200-500 token output. Với GPT-4o-mini giá khoảng 0.15 USD/1M token input, mỗi câu chi phí ~0.0005 USD. Một team hỏi 200 câu/ngày tốn dưới 1 USD/tháng.

Để theo dõi, deploy thêm container langfuse-self-hosted (open-source) làm observability layer:

docker run -d --name langfuse 
  -e DATABASE_URL=postgresql://demo:demopass@pg-sample:5432/langfuse 
  -e NEXTAUTH_SECRET=$YOUR_SECRET 
  -p 3001:3000 
  langfuse/langfuse:latest

Sửa Wren config để gửi trace tới langfuse, sau đó vào dashboard xem mỗi câu hỏi tiêu bao nhiêu token, mất bao lâu, có lỗi gì.

Backup metadata Wren

Wren lưu semantic model, history, project config trong Postgres metadata. Backup bằng pg_dump cron job:

0 3 * * * docker exec wrenai-postgres-1 pg_dump -U wren wren_metadata 
  | gzip > /backup/wren-$(date +%F).sql.gz

Đẩy file backup sang S3-compatible storage (R2, Wasabi, hoặc TND Cloud Storage) bằng rclone. Khi cần khôi phục:

gunzip -c wren-2026-05-22.sql.gz 
  | docker exec -i wrenai-postgres-1 psql -U wren wren_metadata

Khi nào không nên tự host Wren AI?

  • Khi schema database thay đổi mỗi tuần: phải sync MDL liên tục, mất công hơn dùng Vanna SaaS.
  • Khi đội data đông (10+ người) và cần audit chặt: nên dùng Databricks Genie hoặc tools enterprise có sẵn RBAC.
  • Khi không có ai biết Docker: Wren self-host yêu cầu duy trì 5-7 container, cần kỹ năng cơ bản về compose.
  • Khi privacy không quá quan trọng: Wren Cloud free tier đủ dùng cho 2-3 dev, không phải lo hạ tầng.

Update Wren AI lên version mới

cd ~/wren-ai
docker compose pull
docker compose down
docker compose up -d
docker compose logs -f wren-ai-service

Kiểm tra release note tại github.com/Canner/WrenAI/releases trước khi update, vì đôi khi MDL schema thay đổi cần migration. Phiên bản 0.16+ đã ổn định, hỗ trợ MCP integration để gọi Wren từ Claude Code hoặc Cursor.

FAQ

Wren AI hỗ trợ tiếng Việt tốt đến đâu?

Khi LLM backend là GPT-4o-mini, Claude Haiku, hoặc Qwen 2.5 14B+, Wren hiểu tiếng Việt rất tốt cho câu hỏi business thông thường. Mẹo: viết description trong semantic model bằng tiếng Việt thuần, dùng từ ngữ kinh doanh quen thuộc với team bạn. Khi đó độ chính xác SQL trên 90 phần trăm với câu hỏi 1-2 join.

Có thể kết nối Wren AI tới BigQuery, Snowflake không?

Có. Wren 0.15+ hỗ trợ adapter cho BigQuery, Snowflake, ClickHouse, MS SQL, DuckDB qua Ibis-server. Trong UI chọn connector tương ứng, nhập service account JSON hoặc connection string. Lưu ý chi phí query BigQuery vẫn tính theo lượng data scan, nên test trên dataset nhỏ trước.

Wren AI khác Vanna AI ở đâu?

Vanna AI nhẹ hơn, là Python library nhúng trực tiếp vào notebook hoặc app, dùng RAG để tăng độ chính xác. Wren là full platform có UI, semantic model formal, multi-user, dashboard. Vanna phù hợp dev tích hợp NL-to-SQL vào app riêng. Wren phù hợp team dùng như BI tool độc lập.

Chi phí thật để chạy Wren AI tự host trong 1 tháng?

Tối thiểu: Cloud VPS 50 khoảng 639k/tháng + OpenAI API ~1 USD/tháng cho 200 câu hỏi/ngày. Tổng dưới 700k VND. Nếu dùng Ollama nội bộ thay OpenAI, không có chi phí API, nhưng cần VPS RAM lớn hơn (16GB) và lý tưởng có GPU.

Wren AI có chia sẻ dashboard cho người không có tài khoản được không?

Có. Wren hỗ trợ public share link cho từng dashboard, kèm option đặt mật khẩu hoặc expire time. Dùng cho việc gửi báo cáo tuần cho founder, share insight với client. Phiên bản 0.16 thêm embed iframe để nhúng vào Notion hoặc Slite.

Cloud VPS cho vibe coder

VPS sẵn 4-8GB RAM để chạy Wren AI và Postgres trong cùng một stack

Cloud VPS TND sẵn AlmaLinux 9, Ubuntu 22/24, Debian 12/13. SSD CEPH, snapshot 1-click, backup hằng ngày, network 200Mbps trong nước. RAM lớn vừa đủ cho Wren AI multi-container, Docker compose pull nhanh nhờ băng thông trong nước cao.

Xem 8 cấu hình Cloud VPS →

Chia sẻ bài viết