- 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 case | CPU | RAM | Disk | Gói TND đề xuất |
|---|---|---|---|---|
| 1-2 user, dùng OpenAI backend | 2 vCPU | 4 GB | 40 GB SSD | Cloud VPS 40 |
| 3-5 user, dùng OpenAI backend | 4 vCPU | 8 GB | 80 GB SSD | Cloud VPS 80 |
| 5+ user, có Ollama nội bộ (CPU) | 8 vCPU | 16 GB | 120 GB SSD | Cloud VPS 160 |
| 5+ user, Ollama GPU Qwen 14B | 8 vCPU | 32 GB + GPU | 200 GB SSD | VPS 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:
- Tháng 4 năm 2026 doanh thu là bao nhiêu?
- Top 10 khách hàng chi tiêu nhiều nhất từ đầu năm tới giờ.
- So sánh doanh thu tháng này với tháng trước.
- Có bao nhiêu khách mới đăng ký trong 30 ngày qua?
- Sản phẩm nào bán chạy nhất ở Hà Nội tháng vừa rồi?
- Trung bình mỗi đơn hàng có bao nhiêu sản phẩm?
- Khách hàng nào lâu rồi không quay lại (90 ngày không có đơn)?
- Tỉ lệ chuyển đổi từ đăng ký sang đơn hàng đầu tiên.
- Doanh thu theo từng thành phố trong quý 1.
- 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.
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 →


