Feat : Gitbook

This commit is contained in:
decolua
2026-05-11 11:50:24 +07:00
parent 7ad538bcf2
commit fd92af77a0
124 changed files with 34154 additions and 4 deletions

View File

@@ -0,0 +1,473 @@
# ☁️ Triển khai Cloud
Triển khai 9Router trên VPS hoặc Docker để truy cập từ xa và dùng trong production.
---
## 🖥️ Triển khai VPS
### Yêu cầu
- Ubuntu 20.04+ hoặc distro Linux tương tự
- Node.js 20+
- Git
- Quyền root hoặc sudo
### Bước 1: Clone Repository
```bash
git clone https://github.com/decolua/9router.git
cd 9router/app
```
### Bước 2: Cài đặt Dependencies
```bash
npm install
```
### Bước 3: Build Application
```bash
npm run build
```
### Bước 4: Cấu hình biến môi trường
Tạo file `.env` hoặc export biến:
```bash
export JWT_SECRET="your-secure-secret-change-this-to-random-string"
export INITIAL_PASSWORD="your-secure-password"
export DATA_DIR="/var/lib/9router"
export NODE_ENV="production"
```
**Biến môi trường:**
| Biến | Mặc định | Mô tả |
|----------|---------|-------------|
| `JWT_SECRET` | Auto-generated | **PHẢI đổi trong production!** Dùng để ký JWT token |
| `INITIAL_PASSWORD` | `123456` | Mật khẩu đăng nhập Dashboard |
| `DATA_DIR` | `~/.9router` | Đường dẫn lưu database và data |
| `NODE_ENV` | `development` | Đặt `production` cho deployment |
| `ENABLE_REQUEST_LOGS` | `false` | Bật debug request/response logs |
### Bước 5: Tạo Data Directory
```bash
sudo mkdir -p /var/lib/9router
sudo chown $USER:$USER /var/lib/9router
```
### Bước 6: Khởi động Application
```bash
npm run start
```
### Bước 7: Setup PM2 cho Production
PM2 giữ application chạy và tự khởi động lại khi crash:
```bash
# Install PM2 globally
npm install -g pm2
# Start 9Router with PM2
pm2 start npm --name 9router -- start
# Save PM2 configuration
pm2 save
# Setup PM2 to start on system boot
pm2 startup
# Follow the instructions printed by the command above
```
**Lệnh quản lý PM2:**
```bash
# View logs
pm2 logs 9router
# Restart application
pm2 restart 9router
# Stop application
pm2 stop 9router
# View status
pm2 status
# Monitor resources
pm2 monit
```
---
## 🐳 Triển khai Docker
### Cách 1: Dùng Dockerfile
Tạo `Dockerfile` trong thư mục `app`:
```dockerfile
FROM node:20-alpine
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm ci --only=production
# Copy application files
COPY . .
# Build application
RUN npm run build
# Expose ports
EXPOSE 3000 20128
# Set environment variables
ENV NODE_ENV=production
ENV DATA_DIR=/app/data
# Create data directory
RUN mkdir -p /app/data
# Start application
CMD ["npm", "run", "start"]
```
**Build và Run:**
```bash
# Build image
docker build -t 9router .
# Run container
docker run -d \
--name 9router \
-p 3000:3000 \
-p 20128:20128 \
-e JWT_SECRET="your-secure-secret-change-this" \
-e INITIAL_PASSWORD="your-secure-password" \
-v 9router-data:/app/data \
9router
```
### Cách 2: Docker Compose
Tạo `docker-compose.yml`:
```yaml
version: '3.8'
services:
9router:
build: .
container_name: 9router
ports:
- "3000:3000"
- "20128:20128"
environment:
- NODE_ENV=production
- JWT_SECRET=your-secure-secret-change-this
- INITIAL_PASSWORD=your-secure-password
- DATA_DIR=/app/data
volumes:
- 9router-data:/app/data
restart: unless-stopped
volumes:
9router-data:
```
**Chạy với Docker Compose:**
```bash
# Start services
docker-compose up -d
# View logs
docker-compose logs -f
# Stop services
docker-compose down
# Rebuild and restart
docker-compose up -d --build
```
---
## 🌐 Reverse Proxy với Nginx
### Tại sao dùng Nginx?
- Terminate SSL/TLS
- Map domain
- Load balancing
- Bảo mật tốt hơn
### Bước 1: Cài đặt Nginx
```bash
sudo apt update
sudo apt install nginx
```
### Bước 2: Cấu hình Nginx
Tạo `/etc/nginx/sites-available/9router`:
```nginx
server {
listen 80;
server_name your-domain.com;
# Redirect HTTP to HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com;
# SSL certificates (use certbot to generate)
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# SSL configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# Proxy to 9Router
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
# SSE support - CRITICAL for streaming
proxy_buffering off;
proxy_read_timeout 86400;
}
# API endpoint
location /v1 {
proxy_pass http://localhost:20128;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# SSE support - CRITICAL for streaming
proxy_buffering off;
proxy_read_timeout 86400;
}
}
```
### Bước 3: Enable Site
```bash
# Create symbolic link
sudo ln -s /etc/nginx/sites-available/9router /etc/nginx/sites-enabled/
# Test configuration
sudo nginx -t
# Reload Nginx
sudo systemctl reload nginx
```
### Bước 4: Setup SSL với Let's Encrypt
```bash
# Install certbot
sudo apt install certbot python3-certbot-nginx
# Obtain SSL certificate
sudo certbot --nginx -d your-domain.com
# Auto-renewal is configured automatically
# Test renewal
sudo certbot renew --dry-run
```
---
## 🔒 Cân nhắc về Bảo mật
### 1. Đổi credentials mặc định
**QUAN TRỌNG:** Đổi `JWT_SECRET` và `INITIAL_PASSWORD` trước khi deploy:
```bash
# Generate secure JWT secret
openssl rand -base64 32
# Use this value for JWT_SECRET
export JWT_SECRET="generated-secret-here"
```
### 2. Cấu hình Firewall
```bash
# Allow SSH
sudo ufw allow 22/tcp
# Allow HTTP/HTTPS (if using Nginx)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# If NOT using reverse proxy, allow 9Router ports
sudo ufw allow 3000/tcp
sudo ufw allow 20128/tcp
# Enable firewall
sudo ufw enable
```
### 3. Giới hạn truy cập Dashboard
Nếu chỉ cần truy cập API, giới hạn port dashboard:
```bash
# Only allow localhost access to dashboard
sudo ufw deny 3000/tcp
```
Truy cập dashboard qua SSH tunnel:
```bash
ssh -L 3000:localhost:3000 user@your-server.com
# Then open http://localhost:3000 in your browser
```
### 4. Cập nhật định kỳ
```bash
# Update system packages
sudo apt update && sudo apt upgrade -y
# Update 9Router
cd /path/to/9router/app
git pull
npm install
npm run build
pm2 restart 9router
```
### 5. Chiến lược Backup
```bash
# Backup data directory
tar -czf 9router-backup-$(date +%Y%m%d).tar.gz /var/lib/9router
# Automated daily backup (add to crontab)
0 2 * * * tar -czf /backups/9router-$(date +\%Y\%m\%d).tar.gz /var/lib/9router
```
---
## 📊 Giám sát
### Kiểm tra trạng thái Application
```bash
# PM2 status
pm2 status
# View logs
pm2 logs 9router --lines 100
# Monitor resources
pm2 monit
```
### Nginx Logs
```bash
# Access logs
sudo tail -f /var/log/nginx/access.log
# Error logs
sudo tail -f /var/log/nginx/error.log
```
### Tài nguyên hệ thống
```bash
# CPU and memory usage
htop
# Disk usage
df -h
# Network connections
netstat -tulpn | grep -E '3000|20128'
```
---
## 🚨 Troubleshooting
### Application không khởi động
```bash
# Check logs
pm2 logs 9router
# Check if ports are in use
sudo lsof -i :3000
sudo lsof -i :20128
# Check environment variables
pm2 env 9router
```
### Nginx 502 Bad Gateway
```bash
# Check if 9Router is running
pm2 status
# Check Nginx error logs
sudo tail -f /var/log/nginx/error.log
# Test Nginx configuration
sudo nginx -t
```
### SSE Streaming không hoạt động
Đảm bảo `proxy_buffering off` được set trong cấu hình Nginx để hỗ trợ SSE.
### Lỗi Permission Denied
```bash
# Fix data directory permissions
sudo chown -R $USER:$USER /var/lib/9router
chmod 755 /var/lib/9router
```
---
## 🔗 Bước tiếp theo
- [Kết nối Providers](/providers/subscription.md)
- [Setup Combos](/features/combos.md)
- [Tích hợp với Tools](/integration/cursor.md)

View File

@@ -0,0 +1,164 @@
# 🏠 Triển khai Localhost
Chạy 9Router trên máy cá nhân để phát triển và dùng cá nhân.
---
## 📦 Cài đặt
Cài đặt 9Router toàn cục qua npm:
```bash
npm install -g 9router
```
**Yêu cầu:**
- Node.js 20 trở lên
- npm 9 trở lên
---
## 🚀 Khởi động Server
Khởi động 9Router với một lệnh duy nhất:
```bash
9router
```
Dashboard sẽ tự động mở trong trình duyệt tại `http://localhost:3000`
**Cấu hình mặc định:**
- **Dashboard**: `http://localhost:3000`
- **API Endpoint**: `http://localhost:20128/v1`
- **Data Directory**: `~/.9router`
---
## 🔧 Cấu hình
### Custom Data Directory
Đặt thư mục data tùy chỉnh qua biến môi trường:
```bash
DATA_DIR=/path/to/data 9router
```
### Custom Port
Port API (20128) và port dashboard (3000) được cấu hình trong application. Để đổi, bạn cần sửa source code hoặc dùng biến môi trường nếu được hỗ trợ.
---
## 🛑 Dừng Server
Nhấn `Ctrl+C` trong terminal đang chạy 9Router.
```bash
# In the terminal running 9router
^C # Press Ctrl+C
```
Server sẽ shutdown an toàn và lưu mọi dữ liệu.
---
## 🔄 Khởi động lại Server
Chỉ cần chạy lệnh start lại:
```bash
9router
```
Mọi cấu hình, API keys và combos được giữ lại trong thư mục data.
---
## 📊 Cập nhật 9Router
Cập nhật phiên bản mới nhất:
```bash
npm update -g 9router
```
Kiểm tra version hiện tại:
```bash
npm list -g 9router
```
---
## 🔍 Troubleshooting
### Port đã được dùng
Nếu port 20128 hoặc 3000 đã được dùng:
```bash
# Find process using the port (macOS/Linux)
lsof -i :20128
lsof -i :3000
# Kill the process
kill -9 <PID>
```
### Lỗi Permission
Nếu gặp lỗi permission khi cài đặt:
```bash
# Use sudo (not recommended)
sudo npm install -g 9router
# Or fix npm permissions (recommended)
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
```
### Vấn đề Data Directory
Nếu thư mục data không truy cập được:
```bash
# Check permissions
ls -la ~/.9router
# Fix permissions
chmod 755 ~/.9router
```
---
## 📁 Cấu trúc Data Directory
```
~/.9router/
├── db.json # Main database (providers, combos, settings)
├── logs/ # Application logs
└── cache/ # Temporary cache files
```
**Backup Data:**
```bash
# Backup
cp -r ~/.9router ~/.9router.backup
# Restore
cp -r ~/.9router.backup ~/.9router
```
---
## 🔗 Bước tiếp theo
- [Kết nối Providers](/providers/subscription.md)
- [Tạo Combos](/features/combos.md)
- [Tích hợp với CLI Tools](/integration/cursor.md)

387
gitbook/content/vi/faq.md Normal file
View File

@@ -0,0 +1,387 @@
# Câu hỏi thường gặp
Những câu hỏi phổ biến về 9Router.
---
## 9Router là gì?
**9Router là bộ định tuyến mô hình AI giúp tối đa hóa giá trị subscription và giảm chi phí.**
Nó định tuyến request thông minh qua nhiều provider AI bằng hệ thống fallback 3 tầng:
1. **Tầng Subscription** - Tối đa quota Claude Code, Codex, Gemini bạn đang trả tiền
2. **Tầng Cheap** - Lựa chọn siêu rẻ ($0.20-$0.60 per 1M tokens)
3. **Tầng Free** - Backup khẩn cấp với model miễn phí không giới hạn
**Lợi ích chính:**
- Không bao giờ lãng phí quota subscription
- Fallback tự động khi hết quota
- Theo dõi quota thời gian thực
- Tiết kiệm 90% chi phí so với dùng API trực tiếp
---
## Pricing hoạt động thế nào?
**9Router dùng chiến lược pricing 3 tầng:**
### Tier 1: Subscription (Dùng đầu tiên)
- **Claude Code** (Pro/Max): $20-100/tháng - Quota 5 giờ + hàng tuần
- **OpenAI Codex** (Plus/Pro): $20-200/tháng - Quota 5 giờ + hàng tuần
- **Gemini CLI**: MIỄN PHÍ - 180K completions/tháng + 1K/ngày
- **GitHub Copilot**: $10-19/tháng - Reset hàng tháng
- **Antigravity**: MIỄN PHÍ - Tương tự Gemini
**Mục tiêu:** Dùng hết mọi quota trước khi reset!
### Tier 2: Cheap (Backup)
- **GLM-4.7**: $0.60/$2.20 per 1M tokens - Reset 10AM hàng ngày
- **MiniMax M2.1**: $0.20/$1.00 per 1M tokens - 5 giờ rolling
- **Kimi K2**: $9/tháng cố định (10M tokens)
**Mục tiêu:** Rẻ hơn 90% so với ChatGPT API ($20/1M)!
### Tier 3: Free (Khẩn cấp)
- **iFlow**: 8 model MIỄN PHÍ (Kimi K2, Qwen3, GLM, MiniMax...)
- **Qwen**: 3 model MIỄN PHÍ (Qwen3 Coder Plus/Flash, Vision)
- **Kiro**: 2 model MIỄN PHÍ (Claude Sonnet 4.5, Haiku 4.5)
**Mục tiêu:** Fallback chi phí 0 khi mọi thứ khác bị giới hạn quota!
---
## 9Router có miễn phí không?
**Có, 9Router hoàn toàn miễn phí và mã nguồn mở 100%.**
**Provider free tier có sẵn:**
- **Gemini CLI** - 180K completions/tháng (MIỄN PHÍ tài khoản Google)
- **iFlow** - 8 model không giới hạn (MIỄN PHÍ OAuth)
- **Qwen** - 3 model không giới hạn (MIỄN PHÍ OAuth)
- **Kiro** - Claude Sonnet/Haiku (MIỄN PHÍ AWS Builder ID)
**Bạn có thể code MIỄN PHÍ mãi mãi chỉ dùng provider free tier!**
**Provider trả phí tùy chọn:**
- Dịch vụ subscription bạn có thể đã có (Claude Code, Codex, Copilot)
- Lựa chọn siêu rẻ ($0.20-$0.60 per 1M tokens)
---
## Provider nào được hỗ trợ?
### Subscription Providers
- **Claude Code** (Pro/Max) - Claude 4.5 Opus/Sonnet/Haiku
- **OpenAI Codex** (Plus/Pro) - GPT 5.2 Codex, GPT 5.1 Codex Max
- **Gemini CLI** (MIỄN PHÍ) - Gemini 3 Flash/Pro, 2.5 Pro/Flash
- **GitHub Copilot** - GPT-5, Claude 4.5, Gemini 3
- **Antigravity** (Google) - Gemini 3 Pro, Claude Sonnet 4.5
### Cheap Providers
- **GLM** (Zhipu AI) - GLM 4.7, GLM 4.6V Vision
- **MiniMax** - MiniMax M2.1
- **Kimi** (Moonshot AI) - Kimi Latest
- **OpenRouter** - Passthrough đến mọi model OpenRouter
### Free Providers
- **iFlow** - 8 models (Kimi K2, Qwen3, GLM, MiniMax, DeepSeek...)
- **Qwen** - 3 models (Qwen3 Coder Plus/Flash, Vision)
- **Kiro** - 2 models (Claude Sonnet 4.5, Haiku 4.5)
**Tổng: 15+ providers, 50+ models**
Xem [tài liệu providers](providers/subscription.md) để biết chi tiết.
---
## Tôi có thể dùng nhiều provider không?
**Có! Đây là tính năng cốt lõi của 9Router.**
**Combo cho phép bạn nối nhiều provider với fallback tự động:**
```
Example combo: "premium-coding"
1. cc/claude-opus-4-5 (Subscription primary)
2. glm/glm-4.7 (Cheap backup)
3. if/kimi-k2 (Free emergency)
→ Auto-switches when quota exhausted
→ Never stops coding
→ Minimal extra cost
```
**Cách tạo combo:**
```
Dashboard → Combos → Create New
→ Add models in priority order
→ Use combo name in CLI: "premium-coding"
```
**Lợi ích:**
- Zero downtime khi hết quota
- Tối ưu chi phí tự động
- Một tên model cho mọi công cụ
Xem [tài liệu combos](features/combos.md) để biết ví dụ.
---
## Quota tracking hoạt động thế nào?
**9Router theo dõi quota thời gian thực cho tất cả provider:**
**Tính năng:**
- **Token consumption** - Tokens input/output mỗi request
- **Reset countdown** - Thời gian đến khi quota refresh
- **Usage stats** - Báo cáo hàng ngày/tuần/tháng
- **Cost estimation** - Dự kiến chi tiêu (tier trả phí)
- **Quota alerts** - Thông báo khi quota thấp
**Loại quota:**
- **5 giờ rolling** - Claude Code, Codex, MiniMax
- **Reset hàng ngày** - Gemini CLI (1K/ngày), GLM (10AM)
- **Reset hàng tuần** - Claude Code, Codex (quota thêm)
- **Reset hàng tháng** - Gemini CLI (180K), GitHub Copilot (ngày 1)
**Xem quota:**
```
Dashboard → Providers → Quota Tracking
→ Real-time usage + reset countdown
```
Xem [tài liệu quota tracking](features/quota-tracking.md) để biết chi tiết.
---
## 9Router có hoạt động với Cursor không?
**Có, nhưng Cursor yêu cầu endpoint cloud.**
**Vấn đề:** Cursor IDE không hỗ trợ endpoint localhost.
**Giải pháp:** Dùng 9Router cloud deployment:
```
Cursor Settings → Models → Advanced:
OpenAI API Base URL: https://9router.com/v1
OpenAI API Key: [from dashboard]
Model: cc/claude-opus-4-5-20251101
```
**Thay thế:** Self-host trên VPS với domain công khai:
```bash
# Deploy to VPS
git clone https://github.com/decolua/9router.git
cd 9router/app
npm install && npm run build
npm start
# Configure Nginx reverse proxy
# Point Cursor to: https://your-domain.com/v1
```
**Công cụ CLI khác hoạt động với localhost:**
- Cline ✅
- Claude Desktop ✅
- Codex CLI ✅
- Continue ✅
- RooCode ✅
Xem [hướng dẫn tích hợp Cursor](integration/cursor.md) để biết chi tiết.
---
## Tôi có thể self-host 9Router không?
**Có! 9Router hỗ trợ nhiều tùy chọn deployment:**
### Localhost (Mặc định)
```bash
npm install -g 9router
9router
→ Dashboard: http://localhost:3000
→ API: http://localhost:20128/v1
```
### VPS/Cloud
```bash
git clone https://github.com/decolua/9router.git
cd 9router/app
npm install && npm run build
export JWT_SECRET="your-secure-secret"
export INITIAL_PASSWORD="your-password"
export NODE_ENV="production"
npm start
```
### Docker
```bash
docker build -t 9router .
docker run -d \
-p 3000:3000 \
-e JWT_SECRET="your-secret" \
-v 9router-data:/app/data \
9router
```
### Cloudflare Workers
```bash
cd 9router/app
npm run deploy:cloudflare
```
**Biến môi trường:**
- `JWT_SECRET` - **PHẢI đổi trong production!**
- `DATA_DIR` - Đường dẫn lưu database (mặc định: `~/.9router`)
- `INITIAL_PASSWORD` - Đăng nhập Dashboard (mặc định: `123456`)
- `NODE_ENV` - Đặt `production` để deploy
Xem [hướng dẫn deployment](getting-started/installation.md#deployment) để biết chi tiết.
---
## Dữ liệu của tôi có an toàn không?
**Có, 9Router ưu tiên bảo mật và quyền riêng tư:**
**Local storage:**
- Mọi dữ liệu lưu cục bộ tại `~/.9router` (hoặc `DATA_DIR` tùy chỉnh)
- Không gửi data đến server 9Router
- OAuth tokens mã hóa bằng JWT
**Không telemetry:**
- Không tracking sử dụng
- Không analytics
- Không phone-home
**Mã nguồn mở:**
- Toàn bộ source code có trên GitHub
- Tự audit bảo mật
- Community review
**Best practice:**
- Đổi `JWT_SECRET` trong production
- Dùng `INITIAL_PASSWORD` mạnh
- Bật HTTPS cho cloud deployment
- Xoay API key định kỳ
**9Router lưu gì:**
- Tokens OAuth của provider (mã hóa)
- API keys (mã hóa)
- Thống kê sử dụng (chỉ cục bộ)
- Cấu hình combo
**9Router KHÔNG lưu:**
- Prompts hoặc responses của bạn
- Code bạn tạo
- Thông tin cá nhân
---
## Làm thế nào để cập nhật 9Router?
**Phương thức cập nhật phụ thuộc loại cài đặt:**
### Global NPM Install
```bash
npm update -g 9router
```
### Local Install
```bash
cd 9router/app
git pull origin main
npm install
npm run build
npm start
```
### Docker
```bash
docker pull 9router:latest
docker stop 9router
docker rm 9router
docker run -d \
-p 3000:3000 \
-v 9router-data:/app/data \
9router:latest
```
**Kiểm tra version:**
```bash
9router --version
```
**Breaking changes:**
- Xem [CHANGELOG.md](https://github.com/decolua/9router/blob/main/CHANGELOG.md)
- Backup `~/.9router` trước khi update lớn
- Xem hướng dẫn migration cho major version
---
## Tôi có thể đóng góp như thế nào?
**Chúng tôi hoan nghênh đóng góp!**
### Các cách đóng góp:
1. **Report bugs:**
- [GitHub Issues](https://github.com/decolua/9router/issues)
- Bao gồm error logs, các bước reproduce
2. **Request features:**
- [GitHub Discussions](https://github.com/decolua/9router/discussions)
- Mô tả use case và lợi ích
3. **Submit code:**
```bash
# Fork repo
git clone https://github.com/YOUR_USERNAME/9router.git
cd 9router
# Create branch
git checkout -b feature/your-feature
# Make changes
npm install
npm run dev
# Test
npm test
# Commit and push
git add .
git commit -m "Add your feature"
git push origin feature/your-feature
# Create Pull Request on GitHub
```
4. **Cải thiện docs:**
- Sửa lỗi chính tả, thêm ví dụ
- Dịch sang ngôn ngữ khác
- Viết tutorial
5. **Thêm provider:**
- Triển khai adapter provider mới
- Xem `app/lib/providers/` để có ví dụ
**Hướng dẫn đóng góp:**
- Tuân theo code style hiện có
- Thêm test cho tính năng mới
- Cập nhật tài liệu
- Giữ commit nhỏ gọn và mô tả rõ ràng
Xem [CONTRIBUTING.md](https://github.com/decolua/9router/blob/main/CONTRIBUTING.md) để biết chi tiết.
---
## Cần trợ giúp thêm?
- **Documentation:** [9router.com/docs](https://9router.com/docs)
- **GitHub:** [github.com/decolua/9router](https://github.com/decolua/9router)
- **Issues:** [github.com/decolua/9router/issues](https://github.com/decolua/9router/issues)
- **Troubleshooting:** [troubleshooting.md](troubleshooting.md)

View File

@@ -0,0 +1,537 @@
# Combos - Chuỗi Fallback Tùy chỉnh
Tạo các tổ hợp model tùy chỉnh với fallback tự động. Combo cho phép bạn định nghĩa chiến lược routing dựa trên chi phí, chất lượng và tính khả dụng.
---
## Combos là gì?
Combos là **chuỗi fallback tùy chỉnh** bạn tạo trong dashboard. Thay vì dùng một model duy nhất, bạn định nghĩa một chuỗi các model mà 9Router sẽ thử theo thứ tự.
**Ví dụ:**
```
Combo name: premium-coding
Models:
1. cc/claude-opus-4-5-20251101 (try first)
2. glm/glm-4.7 (if #1 quota exhausted)
3. minimax/MiniMax-M2.1 (if #2 quota exhausted)
```
**Dùng trong CLI:**
```
Model: premium-coding
```
9Router tự động thử từng model theo thứ tự cho đến khi thành công.
---
## Tại sao dùng Combos?
### 1. Tối đa hóa Giá trị Subscription
```
cc/claude-opus → glm/glm-4.7 → if/kimi-k2-thinking
→ Use subscription first, cheap backup, free emergency
→ Get full value from subscriptions you already pay for
```
### 2. Giảm Chi phí
```
glm/glm-4.7 → minimax/MiniMax-M2.1 → if/kimi-k2-thinking
→ Start with cheapest paid option ($0.60/1M)
→ Fallback to even cheaper ($0.20/1M)
→ Emergency free tier
→ Total cost: ~$5-10/month vs $2000 on ChatGPT API
```
### 3. Đảm bảo Khả dụng 24/7
```
cc/claude-opus → cx/gpt-5.2-codex → glm/glm-4.7 → if/kimi-k2-thinking
→ Always include free tier at the end
→ Never run out of quota
→ Code anytime, anywhere
```
### 4. Tối ưu Chất lượng
```
cc/claude-opus-4-5 → cx/gpt-5.2-codex → gc/gemini-3-pro
→ Best models first
→ Fallback to other premium models
→ Maintain high quality across fallback chain
```
---
## Cách tạo Combos
### Bước 1: Mở Dashboard
```
http://localhost:20128
→ Login with your password
```
### Bước 2: Đi đến Combos
```
Dashboard → Combos → Create New Combo
```
### Bước 3: Cấu hình Combo
**Tên Combo:**
```
premium-coding
```
**Mô tả (tùy chọn):**
```
Subscription first, cheap backup, free emergency
```
**Chọn Models:**
```
1. cc/claude-opus-4-5-20251101
2. glm/glm-4.7
3. minimax/MiniMax-M2.1
```
**Kéo để sắp xếp lại** - Ưu tiên từ trên xuống dưới.
### Bước 4: Lưu
```
Click "Save Combo"
→ Combo appears in model list
```
### Bước 5: Dùng trong CLI
```
Cursor/Cline/Any tool:
Model: premium-coding
```
---
## Ví dụ Combos
### Ví dụ 1: Premium Coding (Subscription → Cheap → Free)
**Mục tiêu**: Tối đa giá trị subscription, giảm chi phí thêm.
```
Dashboard → Combos → Create New
Name: premium-coding
Models:
1. cc/claude-opus-4-5-20251101
2. glm/glm-4.7
3. minimax/MiniMax-M2.1
```
**Sử dụng:**
```
Cursor IDE:
Model: premium-coding
```
**Hoạt động:**
```
Morning (fresh quota):
Request → cc/claude-opus-4-5 ✅
Afternoon (Claude quota out):
Request → glm/glm-4.7 ✅ (auto switched)
Evening (GLM quota out):
Request → minimax/MiniMax-M2.1 ✅ (auto switched)
```
**Chi phí hàng tháng (100M tokens):**
```
80M via Claude Code: $0 (subscription)
15M via GLM: $9
5M via MiniMax: $1
Total: $10 + your subscription
```
**Tiết kiệm**: ~99% so với ChatGPT API ($2000).
---
### Ví dụ 2: Budget Combo (Cheap → Free)
**Mục tiêu**: Giảm chi phí, dùng free tier làm backup.
```
Dashboard → Combos → Create New
Name: budget-combo
Models:
1. glm/glm-4.7
2. minimax/MiniMax-M2.1
3. if/kimi-k2-thinking
```
**Sử dụng:**
```
Cline:
Provider: OpenAI Compatible
Base URL: http://localhost:20128/v1
Model: budget-combo
```
**Hoạt động:**
```
Request → glm/glm-4.7
✅ Daily quota available → Use GLM ($0.60/1M)
❌ Quota exhausted → Try MiniMax ($0.20/1M)
❌ MiniMax quota out → Use iFlow (FREE)
```
**Chi phí hàng tháng (100M tokens):**
```
70M via GLM: $42
20M via MiniMax: $4
10M via iFlow: $0
Total: $46 vs $2000 on ChatGPT API
```
**Tiết kiệm**: 97%.
---
### Ví dụ 3: Free Combo (Chi phí 0)
**Mục tiêu**: 100% miễn phí, không bao giờ tốn tiền.
```
Dashboard → Combos → Create New
Name: free-combo
Models:
1. if/kimi-k2-thinking
2. qw/qwen3-coder-plus
3. kr/claude-sonnet-4.5
```
**Sử dụng:**
```
Claude Desktop:
Model: free-combo
```
**Hoạt động:**
```
Request → if/kimi-k2-thinking
✅ Available → Use iFlow
❌ Error → Try Qwen
❌ Error → Try Kiro
```
**Chi phí hàng tháng:**
```
100M tokens via free providers: $0
Total: $0 forever
```
**Use case**: Dự án cá nhân, học tập, thử nghiệm.
---
### Ví dụ 4: Quality First (Chỉ Premium Models)
**Mục tiêu**: Chất lượng tốt nhất, không fallback rẻ.
```
Dashboard → Combos → Create New
Name: quality-first
Models:
1. cc/claude-opus-4-5-20251101
2. cx/gpt-5.2-codex
3. gc/gemini-3-pro-preview
```
**Sử dụng:**
```
Codex CLI:
export OPENAI_BASE_URL="http://localhost:20128"
Model: quality-first
```
**Hoạt động:**
```
Request → cc/claude-opus-4-5
❌ Quota out → cx/gpt-5.2-codex
❌ Quota out → gc/gemini-3-pro-preview
❌ All out → Return error (no cheap fallback)
```
**Use case**: Code production quan trọng, refactoring phức tạp.
---
### Ví dụ 5: Multi-Subscription (Tối đa hết tất cả)
**Mục tiêu**: Dùng hết subscription trước khi trả thêm tiền.
```
Dashboard → Combos → Create New
Name: multi-sub
Models:
1. gc/gemini-3-flash-preview (FREE 180K/month)
2. cc/claude-opus-4-5-20251101 (Pro subscription)
3. cx/gpt-5.2-codex (Plus subscription)
4. gh/gpt-5 (Copilot subscription)
5. glm/glm-4.7 (Cheap backup)
6. if/kimi-k2-thinking (Free emergency)
```
**Chi phí hàng tháng (200M tokens):**
```
50M via Gemini CLI: $0 (free tier)
80M via Claude Code: $0 (subscription)
40M via Codex: $0 (subscription)
20M via Copilot: $0 (subscription)
8M via GLM: $4.80
2M via iFlow: $0
Total: $4.80 + existing subscriptions
```
**Kết quả**: Dùng 190M tokens từ subscription, chỉ $4.80 phụ.
---
### Ví dụ 6: Tối ưu Reset Quota
**Mục tiêu**: Phân bổ sử dụng dựa trên thời gian reset.
```
Dashboard → Combos → Create New
Name: reset-optimized
Models:
1. cc/claude-opus-4-5 (5h reset, use morning)
2. gc/gemini-3-flash (1K/day, use afternoon)
3. glm/glm-4.7 (daily 10AM reset, use evening)
4. minimax/MiniMax-M2.1 (5h rolling, use night)
5. if/kimi-k2-thinking (unlimited, emergency)
```
**Lịch trình hàng ngày:**
```
08:00 - 13:00: Claude Code (fresh 5h quota)
13:00 - 18:00: Gemini CLI (1K/day quota)
18:00 - 22:00: GLM (resets 10AM next day)
22:00 - 08:00: MiniMax (5h rolling) or iFlow
```
**Kết quả**: Code 24/7 với chi phí tối thiểu.
---
## Dùng Combos trong CLI Tools
### Cursor IDE
```
Settings → Models → Advanced:
OpenAI API Base URL: http://localhost:20128/v1
OpenAI API Key: [from dashboard]
Model: premium-coding
```
### Claude Desktop
Sửa `~/.claude/config.json`:
```json
{
"anthropic_api_base": "http://localhost:20128/v1",
"anthropic_api_key": "your-9router-api-key",
"model": "budget-combo"
}
```
### Codex CLI
```bash
export OPENAI_BASE_URL="http://localhost:20128"
export OPENAI_API_KEY="your-9router-api-key"
codex --model quality-first "your prompt"
```
### Cline / Continue / RooCode
```
Provider: OpenAI Compatible
Base URL: http://localhost:20128/v1
API Key: [from dashboard]
Model: free-combo
```
### API Request
```bash
curl http://localhost:20128/v1/chat/completions \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "premium-coding",
"messages": [
{"role": "user", "content": "Write a function to..."}
],
"stream": true
}'
```
---
## Best Practices
### 1. Luôn bao gồm Free Tier
```
✅ Good:
cc/claude-opus → glm/glm-4.7 → if/kimi-k2-thinking
❌ Bad:
cc/claude-opus → glm/glm-4.7
(no free fallback, can run out of quota)
```
**Lý do**: Đảm bảo khả dụng 24/7, không bao giờ bị chặn bởi quota.
### 2. Sắp xếp theo Chi phí (Rẻ đến Đắt)
```
✅ Good:
glm/glm-4.7 → minimax/MiniMax-M2.1 → cc/claude-opus
❌ Bad:
cc/claude-opus → glm/glm-4.7
(wastes subscription quota on simple tasks)
```
**Ngoại lệ**: Nếu muốn tối đa giá trị subscription, đặt subscription đầu tiên.
### 3. Phù hợp với Yêu cầu Chất lượng
```
For production code:
cc/claude-opus → cx/gpt-5.2-codex → glm/glm-4.7
For quick tasks:
glm/glm-4.7 → if/kimi-k2-thinking
For experimentation:
if/kimi-k2-thinking → qw/qwen3-coder-plus
```
### 4. Cân nhắc Thời gian Reset Quota
```
Morning combo (fresh quotas):
cc/claude-opus → cx/gpt-5.2-codex
Evening combo (quotas likely exhausted):
glm/glm-4.7 → minimax/MiniMax-M2.1 → if/kimi-k2-thinking
```
### 5. Tạo nhiều Combo cho các Use Case khác nhau
```
premium-coding: For complex tasks
budget-combo: For simple tasks
free-combo: For experimentation
quality-first: For production code
```
**Chuyển đổi combo** dựa trên yêu cầu task.
### 6. Theo dõi hiệu năng Combo
```
Dashboard → Analytics → Combo Usage:
premium-coding:
80% via cc/claude-opus (good, using subscription)
15% via glm/glm-4.7 (acceptable backup)
5% via minimax (rare fallback)
```
**Tối ưu**: Nếu fallback quá nhiều, tăng quota chính hoặc sắp xếp lại model.
---
## Cấu hình Nâng cao
### Đặt Giới hạn Ngân sách cho mỗi Combo
```
Dashboard → Combos → Edit → Budget:
Daily limit: $5
Monthly limit: $50
```
Khi đạt giới hạn, 9Router bỏ qua model trả phí và chỉ dùng free tier.
### Bật/Tắt Model trong Combo
```
Dashboard → Combos → Edit → Models:
✅ cc/claude-opus-4-5 (enabled)
❌ glm/glm-4.7 (temporarily disabled)
✅ if/kimi-k2-thinking (enabled)
```
**Use case**: Tạm tắt model đắt mà không cần xóa combo.
### Clone Combo có sẵn
```
Dashboard → Combos → Clone "premium-coding"
→ Creates copy with "-copy" suffix
→ Modify and save as new combo
```
**Use case**: Tạo biến thể cho các kịch bản khác nhau.
---
## Troubleshooting
**Issue: Combo không xuất hiện trong danh sách model**
**Giải pháp:**
1. Refresh dashboard
2. Kiểm tra combo đã được lưu (dấu tick xanh)
3. Khởi động lại CLI tool để refresh danh sách model
**Issue: Combo luôn dùng model cuối cùng (free tier)**
**Giải pháp:**
1. Kiểm tra quota cho các model chính (Dashboard → Quota)
2. Xác minh API keys hợp lệ (Dashboard → Providers)
3. Kiểm tra giới hạn ngân sách không vượt quá
**Issue: Combo tốn hơn dự kiến**
**Giải pháp:**
1. Dashboard → Analytics → Xem usage combo
2. Kiểm tra model chính có bị hết quota không
3. Sắp xếp lại model (đặt rẻ hơn lên trước)
4. Đặt giới hạn ngân sách
---
## Liên quan
- [Smart Routing](./smart-routing.md) - Cách auto fallback hoạt động
- [Quota Tracking](./quota-tracking.md) - Theo dõi sử dụng và chi phí

View File

@@ -0,0 +1,687 @@
# Quota Tracking & Giám sát Usage
Theo dõi tiêu thụ token thời gian thực, giám sát giới hạn quota, ước tính chi phí và nhận cảnh báo trước khi hết. Không bao giờ lãng phí quota subscription hoặc vượt giới hạn ngân sách.
---
## Tổng quan
9Router cung cấp quota tracking toàn diện cho mọi provider:
- **Tiêu thụ token thời gian thực** - Xem tokens dùng mỗi request
- **Giới hạn quota & còn lại** - Theo dõi usage so với giới hạn
- **Đếm ngược Reset** - Biết khi nào quota refresh
- **Ước tính chi phí** - Tính chi tiêu cho tier trả phí
- **Báo cáo hàng tháng** - Phân tích pattern sử dụng
- **Cảnh báo & thông báo** - Nhận cảnh báo trước giới hạn
---
## Tổng quan Dashboard
### Tóm tắt Quota
```
Dashboard → Home → Quota Overview
┌─────────────────────────────────────────────┐
│ Claude Code (cc/) │
│ ████████████░░░░░░░░ 2.5h / 5h (50%) │
│ Resets in: 2h 30m │
│ Cost: $0 (subscription) │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ Gemini CLI (gc/) │
│ ████████░░░░░░░░░░░░ 450 / 1000 (45%) │
│ Daily reset in: 18h 30m │
│ Monthly: 45K / 180K (25%) │
│ Cost: $0 (free tier) │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ GLM-4.7 (glm/) │
│ ██████████████░░░░░░ 7M / 10M tokens (70%) │
│ Resets: Daily 10:00 AM (in 5h 35m) │
│ Cost today: $4.20 │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ MiniMax M2.1 (minimax/) │
│ ████████████████░░░░ 4M / 5M tokens (80%) │
│ Rolling 5h window │
│ Cost (5h): $0.80 │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ iFlow (if/) │
│ ████████████████████ Unlimited │
│ Cost: $0 (free forever) │
└─────────────────────────────────────────────┘
```
---
## Tiêu thụ Token Thời gian thực
### Theo dõi từng Request
Mỗi request hiển thị usage token chi tiết:
```
Dashboard → Activity → Recent Requests
Request #1234
Model: cc/claude-opus-4-5-20251101
Timestamp: 2026-02-04 04:15:32
Tokens:
Input: 1,250 tokens
Output: 850 tokens
Total: 2,100 tokens
Cost: $0 (subscription quota)
Duration: 3.2s
Status: ✅ Success
```
### Live Usage Monitor
```
Dashboard → Live Monitor
Current request:
Model: glm/glm-4.7
Tokens streamed: 450 / ~800 estimated
Cost so far: $0.0009
Duration: 1.8s
```
### Phân tích Token theo Model
```
Dashboard → Analytics → Token Usage
Today (Feb 4, 2026):
cc/claude-opus-4-5: 15M tokens ($0, subscription)
glm/glm-4.7: 8M tokens ($4.80)
if/kimi-k2-thinking: 3M tokens ($0, free)
Total: 26M tokens
Cost: $4.80
```
---
## Giới hạn Quota & Thời gian Reset
### Subscription Providers
**Claude Code (Pro/Max)**
```
Quota type: Time-based (5-hour rolling)
Limit: 5 hours of usage
Reset: Rolling 5-hour window + Weekly refresh
Tracking: Usage time per model
Dashboard shows:
Opus: 2.5h / 5h used
Sonnet: 1.2h / 5h used
Haiku: 0.8h / 5h used
Weekly reset: Every Monday 00:00 UTC
```
**OpenAI Codex (Plus/Pro)**
```
Quota type: Time-based (5-hour rolling)
Limit: 5 hours (Plus) / 10 hours (Pro)
Reset: Rolling 5-hour window + Weekly refresh
Dashboard shows:
GPT-5.2 Codex: 3.5h / 5h used
Resets in: 1h 30m
```
**Gemini CLI (MIỄN PHÍ)**
```
Quota type: Request count + Monthly tokens
Daily limit: 1,000 requests
Monthly limit: 180,000 completions
Reset: Daily 00:00 UTC + Monthly 1st
Dashboard shows:
Today: 450 / 1,000 requests (45%)
This month: 45K / 180K completions (25%)
Daily reset in: 18h 30m
Monthly reset in: 26 days
```
**GitHub Copilot**
```
Quota type: Monthly usage
Limit: Varies by plan
Reset: 1st of each month
Dashboard shows:
Usage: 60% of monthly quota
Resets: March 1, 2026 (in 25 days)
```
### Cheap Providers
**GLM-4.7**
```
Quota type: Daily token limit
Limit: 10M tokens/day (Coding Plan)
Reset: Daily 10:00 AM Beijing Time (UTC+8)
Dashboard shows:
Used: 7M / 10M tokens (70%)
Remaining: 3M tokens
Resets in: 5h 35m
Cost today: $4.20
```
**MiniMax M2.1**
```
Quota type: Rolling 5-hour window
Limit: 5M tokens per 5 hours
Reset: Continuous rolling window
Dashboard shows:
Used (5h): 4M / 5M tokens (80%)
Oldest usage expires in: 45m
Cost (5h): $0.80
```
**Kimi K2**
```
Quota type: Monthly subscription
Limit: 10M tokens/month ($9 flat)
Reset: Monthly on subscription date
Dashboard shows:
Used: 6M / 10M tokens (60%)
Resets: Feb 15, 2026 (in 11 days)
Cost: $9/month (prepaid)
```
### Free Providers
**iFlow / Qwen / Kiro**
```
Quota type: Unlimited (rate-limited)
Limit: No hard limit
Reset: N/A
Dashboard shows:
Used today: 5M tokens
Cost: $0 (free forever)
Status: ✅ Available
```
---
## Ước tính Chi phí
### Theo dõi Chi phí Thời gian thực
```
Dashboard → Costs → Today
Subscription providers: $0
Claude Code: 15M tokens ($0, included)
Gemini CLI: 3M tokens ($0, free tier)
Paid providers: $4.80
GLM-4.7: 8M tokens ($4.80)
Input: 6M × $0.60/1M = $3.60
Output: 2M × $2.20/1M = $4.40
Total: $4.80
Free providers: $0
iFlow: 3M tokens ($0)
Total today: $4.80
```
### Báo cáo Chi tiêu Hàng tháng
```
Dashboard → Costs → This Month (February 2026)
Week 1 (Feb 1-7):
Subscription: $0 (80M tokens)
Paid: $15.20 (25M tokens)
Free: $0 (10M tokens)
Total: $15.20
Week 2 (Feb 8-14):
Subscription: $0 (75M tokens)
Paid: $12.80 (20M tokens)
Free: $0 (8M tokens)
Total: $12.80
Month to date: $28.00
Projected (30 days): ~$120
Breakdown by provider:
GLM-4.7: $22.00 (78%)
MiniMax M2.1: $6.00 (22%)
Average cost per 1M tokens: $0.62
Savings vs ChatGPT API: 97% ($4,000 → $120)
```
### Dự kiến Chi phí
```
Dashboard → Costs → Projections
Based on last 7 days usage:
Daily average: 50M tokens
Daily cost: $4.50
Monthly projection:
Tokens: 1,500M (1.5B)
Cost: $135
Breakdown:
Subscription: 900M tokens ($0)
GLM-4.7: 450M tokens ($90)
MiniMax: 120M tokens ($24)
Free: 30M tokens ($0)
Budget status:
Daily limit: $5 → 90% used today
Monthly limit: $150 → 90% projected
⚠️ Warning: May exceed monthly budget
```
---
## Dashboard Usage
### Thống kê Tổng quan
```
Dashboard → Analytics → Overview
Today (Feb 4, 2026):
Requests: 1,234
Tokens: 26M
Cost: $4.80
Avg response time: 2.1s
This week:
Requests: 8,456
Tokens: 180M
Cost: $28.00
Success rate: 99.2%
This month:
Requests: 15,234
Tokens: 320M
Cost: $52.00
Top model: cc/claude-opus-4-5 (45%)
```
### Usage theo Model
```
Dashboard → Analytics → Models
Top models (this month):
1. cc/claude-opus-4-5: 145M tokens (45%)
2. glm/glm-4.7: 95M tokens (30%)
3. if/kimi-k2-thinking: 50M tokens (16%)
4. minimax/MiniMax-M2.1: 20M tokens (6%)
5. gc/gemini-3-flash: 10M tokens (3%)
Cost breakdown:
cc/claude-opus: $0 (subscription)
glm/glm-4.7: $45.00
if/kimi-k2-thinking: $0 (free)
minimax/MiniMax-M2.1: $7.00
gc/gemini-3-flash: $0 (free)
```
### Usage theo Thời gian
```
Dashboard → Analytics → Timeline
Hourly usage (today):
00:00 - 01:00: 0.5M tokens
01:00 - 02:00: 0.2M tokens
...
08:00 - 09:00: 3.2M tokens (peak)
09:00 - 10:00: 2.8M tokens
...
23:00 - 00:00: 0.8M tokens
Peak hours: 08:00 - 12:00 (morning coding)
Low hours: 00:00 - 06:00 (night)
```
### Usage theo Combo
```
Dashboard → Analytics → Combos
premium-coding:
Requests: 456
Tokens: 12M
Cost: $2.40
Breakdown:
cc/claude-opus: 8M tokens (67%, $0)
glm/glm-4.7: 3M tokens (25%, $1.80)
minimax/MiniMax-M2.1: 1M tokens (8%, $0.20)
budget-combo:
Requests: 234
Tokens: 6M
Cost: $1.20
Breakdown:
glm/glm-4.7: 4M tokens (67%, $2.40)
if/kimi-k2-thinking: 2M tokens (33%, $0)
```
---
## Cảnh báo & Thông báo
### Cảnh báo Quota
```
Dashboard → Settings → Alerts
Quota warnings:
✅ Alert at 80% quota used
✅ Alert at 90% quota used
✅ Alert when quota exhausted
✅ Notify when quota resets
Delivery:
✅ Dashboard notification
✅ Email (optional)
✅ Webhook (optional)
```
**Ví dụ thông báo:**
```
⚠️ Claude Code quota 80% used
2.5h remaining (resets in 1h 30m)
⚠️ GLM-4.7 quota 90% used
1M tokens remaining (resets in 5h)
✅ Gemini CLI quota reset
1,000 requests available (daily limit)
```
### Cảnh báo Ngân sách
```
Dashboard → Settings → Budget Alerts
Daily budget: $5
✅ Alert at 80% ($4)
✅ Alert at 100% ($5)
✅ Auto-switch to free tier when exceeded
Monthly budget: $150
✅ Alert at 50% ($75)
✅ Alert at 80% ($120)
✅ Alert at 100% ($150)
```
**Ví dụ thông báo:**
```
⚠️ Daily budget 80% used
$4.00 / $5.00 spent today
⚠️ Monthly budget 50% reached
$75 / $150 spent this month
Projected: $135 (within budget)
🚨 Daily budget exceeded
$5.20 / $5.00 spent today
Auto-switched to free tier
```
### Phát hiện Bất thường Chi phí
```
Dashboard → Settings → Anomaly Detection
✅ Detect unusual spending patterns
✅ Alert on cost spikes (>2× daily average)
✅ Warn on quota exhaustion patterns
Example alert:
⚠️ Cost spike detected
Today: $12.50 (2.5× daily average)
Reason: High GLM-4.7 usage (20M tokens)
Suggestion: Check if primary models quota-exhausted
```
---
## Best Practices
### 1. Theo dõi Quota Hàng ngày
```
Daily routine:
1. Check dashboard quota overview (30 seconds)
2. Review reset times
3. Plan usage around quota availability
```
**Ví dụ:**
```
Morning check:
✅ Claude Code: 5h available (fresh reset)
✅ Gemini CLI: 1K requests available
⚠️ GLM-4.7: 2M tokens left (resets 10AM)
Action: Use Claude Code for morning work
```
### 2. Đặt Giới hạn Ngân sách
```
Dashboard → Settings → Budget:
Daily: $5 (prevents overspending)
Monthly: $150 (aligns with budget)
```
**Kết quả**: Auto-switch sang free tier khi đạt giới hạn.
### 3. Tối ưu Combo Usage
```
Dashboard → Analytics → Combos:
Review which models are used most
Adjust combo order to minimize costs
```
**Ví dụ:**
```
Current: cc/claude-opus → glm/glm-4.7
80% via Claude (good)
20% via GLM ($12/month)
Optimized: gc/gemini-3-flash → cc/claude-opus → glm/glm-4.7
50% via Gemini (free)
40% via Claude (subscription)
10% via GLM ($6/month)
Savings: $6/month
```
### 4. Theo dõi Thời gian Reset
```
Dashboard → Quota → Reset Schedule:
Claude Code: 5h rolling + Weekly Monday
Gemini CLI: Daily 00:00 UTC + Monthly 1st
GLM-4.7: Daily 10:00 AM Beijing Time
MiniMax: Rolling 5h window
```
**Chiến lược**: Dùng provider khi quota mới reset.
### 5. Xem Báo cáo Hàng tháng
```
Dashboard → Analytics → Monthly Report:
Total tokens: 1.5B
Total cost: $120
Savings: 97% vs ChatGPT API
Insights:
- 60% usage via subscriptions ($0)
- 30% via GLM ($90)
- 10% via free tier ($0)
Optimization:
- Increase Gemini CLI usage (free)
- Reduce GLM usage (expensive)
```
---
## Truy cập API
### Lấy trạng thái Quota
```bash
GET http://localhost:20128/api/quota
Authorization: Bearer your-api-key
Response:
{
"providers": [
{
"id": "cc",
"name": "Claude Code",
"quota": {
"used": 2.5,
"limit": 5,
"unit": "hours",
"percentage": 50
},
"reset": {
"type": "rolling",
"window": "5h",
"nextReset": "2026-02-04T06:45:00Z"
},
"cost": {
"today": 0,
"month": 0,
"currency": "USD"
}
},
{
"id": "glm",
"name": "GLM-4.7",
"quota": {
"used": 7000000,
"limit": 10000000,
"unit": "tokens",
"percentage": 70
},
"reset": {
"type": "daily",
"time": "10:00 AM UTC+8",
"nextReset": "2026-02-04T10:00:00+08:00"
},
"cost": {
"today": 4.20,
"month": 52.00,
"currency": "USD"
}
}
]
}
```
### Lấy Usage Stats
```bash
GET http://localhost:20128/api/usage?period=today
Authorization: Bearer your-api-key
Response:
{
"period": "today",
"date": "2026-02-04",
"summary": {
"requests": 1234,
"tokens": 26000000,
"cost": 4.80
},
"byModel": [
{
"model": "cc/claude-opus-4-5",
"requests": 456,
"tokens": 15000000,
"cost": 0
},
{
"model": "glm/glm-4.7",
"requests": 234,
"tokens": 8000000,
"cost": 4.80
}
]
}
```
---
## Troubleshooting
**Issue: Quota hiển thị 0% nhưng request thất bại**
**Giải pháp:**
1. Kiểm tra kết nối provider (Dashboard → Providers)
2. Xác minh API keys hợp lệ
3. Kiểm tra provider có down không (trang status)
4. Thử kết nối lại OAuth providers
**Issue: Ước tính chi phí sai**
**Giải pháp:**
1. Dashboard → Settings → Pricing
2. Xác minh giá mỗi provider khớp với mức hiện tại
3. Cập nhật giá nếu provider thay đổi
4. Liên hệ support nếu vẫn lệch
**Issue: Thời gian reset không cập nhật**
**Giải pháp:**
1. Refresh dashboard (F5)
2. Kiểm tra thời gian hệ thống đúng
3. Xác minh cài đặt timezone
4. Khởi động lại 9Router nếu vẫn lỗi
**Issue: Không nhận được cảnh báo**
**Giải pháp:**
1. Dashboard → Settings → Alerts
2. Xác minh địa chỉ email đúng
3. Kiểm tra folder spam
4. Test notification (nút Send Test)
---
## Liên quan
- [Smart Routing](./smart-routing.md) - Auto fallback dựa trên quota
- [Combos](./combos.md) - Tạo chuỗi fallback tùy chỉnh

View File

@@ -0,0 +1,407 @@
# Smart Routing & Auto Fallback
9Router tự động định tuyến request qua provider tốt nhất hiện có bằng hệ thống fallback 3 tầng. Không bao giờ ngừng code vì giới hạn quota hay rate limiting.
---
## Cách hoạt động
9Router dùng định tuyến thông minh để tối đa hóa subscription hiện có, giảm chi phí và đảm bảo khả dụng 24/7:
```
Request → 9Router → Check Tier 1 (Subscription)
↓ quota exhausted
Check Tier 2 (Cheap)
↓ budget limit
Check Tier 3 (Free)
↓
Response
```
### Hệ thống Fallback 3 tầng
**Tier 1: SUBSCRIPTION (Chính)**
- Claude Code (Pro/Max)
- OpenAI Codex (Plus/Pro)
- Gemini CLI (MIỄN PHÍ 180K/tháng)
- GitHub Copilot
- Antigravity (Google)
**Mục tiêu**: Tối đa giá trị từ subscription đã trả tiền.
**Tier 2: CHEAP (Backup)**
- GLM-4.7 ($0.60/1M input)
- MiniMax M2.1 ($0.20/1M input)
- Kimi K2 ($9/tháng cố định)
**Mục tiêu**: Backup siêu rẻ khi hết quota subscription (~90% rẻ hơn ChatGPT API).
**Tier 3: FREE (Khẩn cấp)**
- iFlow (8 models)
- Qwen (3 models)
- Kiro (Claude MIỄN PHÍ)
**Mục tiêu**: Fallback chi phí 0 để code không giới hạn.
---
## Chuyển đổi Tự động
9Router giám sát quota thời gian thực và chuyển provider tự động:
### Kịch bản 1: Hết Quota Subscription
```
User request → cc/claude-opus-4-5
↓ quota exhausted (5-hour limit reached)
Auto switch → glm/glm-4.7
↓ daily quota exhausted
Auto switch → minimax/MiniMax-M2.1
↓ 5-hour quota exhausted
Auto switch → if/kimi-k2-thinking (FREE)
↓
Response delivered ✅
```
**Kết quả**: Zero downtime, trải nghiệm liền mạch.
### Kịch bản 2: Rate Limiting
```
User request → cx/gpt-5.2-codex
↓ rate limited (too many requests)
Auto switch → glm/glm-4.7
↓
Response delivered ✅
```
### Kịch bản 3: Provider không khả dụng
```
User request → cc/claude-opus-4-5
↓ provider error (503)
Auto switch → next available model
↓
Response delivered ✅
```
---
## Logic chọn Model
9Router chọn model tốt nhất dựa trên:
1. **Khả dụng quota** - Kiểm tra provider còn quota không
2. **Tier chi phí** - Ưu tiên subscription → cheap → free
3. **Thời gian reset** - Cân nhắc khi quota reset
4. **Sức khỏe provider** - Bỏ qua provider có lỗi
### Ví dụ Thứ tự Ưu tiên
Cho request đến `cc/claude-opus-4-5`:
```
1. Check Claude Code quota
✅ Available → Use cc/claude-opus-4-5
❌ Exhausted → Continue to step 2
2. Check fallback tier (if configured)
✅ GLM quota available → Use glm/glm-4.7
❌ Exhausted → Continue to step 3
3. Check free tier
✅ iFlow available → Use if/kimi-k2-thinking
❌ All exhausted → Return quota error
```
---
## Tùy chọn Cấu hình
### Cài đặt Dashboard
**1. Bật/Tắt Auto Fallback**
```
Dashboard → Settings → Smart Routing
→ Toggle "Auto Fallback" ON/OFF
```
- **ON** (mặc định): Chuyển tier tự động
- **OFF**: Strict mode, trả lỗi nếu model chính không khả dụng
**2. Đặt Giới hạn Ngân sách**
```
Dashboard → Settings → Budget Control
→ Daily limit: $5
→ Monthly limit: $50
```
Khi đạt ngân sách, 9Router tự động chuyển sang free tier.
**3. Cấu hình Thứ tự Fallback**
```
Dashboard → Settings → Fallback Priority
→ Drag to reorder providers within each tier
```
Ví dụ thứ tự tùy chỉnh:
```
Tier 1: Gemini CLI → Claude Code → Codex
Tier 2: MiniMax → GLM → Kimi
Tier 3: iFlow → Kiro → Qwen
```
**4. Thông báo Reset Quota**
```
Dashboard → Settings → Notifications
→ Email when quota resets
→ Alert when 80% quota used
```
---
## Ví dụ
### Ví dụ 1: Auto Fallback Cơ bản
**Setup:**
```
Model: cc/claude-opus-4-5-20251101
Fallback: Auto (default 3-tier)
```
**Hoạt động:**
```
Morning (fresh quota):
Request → cc/claude-opus-4-5 ✅
Afternoon (quota exhausted):
Request → glm/glm-4.7 ✅ (auto switched)
Evening (GLM quota out):
Request → minimax/MiniMax-M2.1 ✅ (auto switched)
Late night (all paid quota out):
Request → if/kimi-k2-thinking ✅ (free tier)
```
**Chi phí**: ~$5-10/tháng extra (chủ yếu được bao bởi subscription).
### Ví dụ 2: Định tuyến theo Ngân sách
**Setup:**
```
Dashboard → Settings:
Daily budget: $2
Monthly budget: $20
Fallback: Enabled
```
**Hoạt động:**
```
Day 1-15 (within budget):
Requests → glm/glm-4.7 (cheap tier)
Cost: $1.50/day
Day 16 (budget reached):
Requests → if/kimi-k2-thinking (free tier)
Cost: $0
Next month (budget resets):
Requests → glm/glm-4.7 again
```
**Kết quả**: Không bao giờ vượt $20/tháng, luôn khả dụng.
### Ví dụ 3: Chế độ Chỉ Subscription
**Setup:**
```
Dashboard → Settings:
Auto Fallback: OFF
Strict mode: ON
```
**Hoạt động:**
```
Request → cc/claude-opus-4-5
✅ Quota available → Success
❌ Quota exhausted → Return error (no fallback)
```
**Use case**: Khi chỉ muốn dùng subscription trả phí, không phí thêm.
### Ví dụ 4: Chế độ Chỉ Free
**Setup:**
```
Model: if/kimi-k2-thinking
Fallback: qw/qwen3-coder-plus → kr/claude-sonnet-4.5
```
**Hoạt động:**
```
All requests → Free tier only
Cost: $0 forever
```
**Use case**: Dự án cá nhân, học tập, thử nghiệm.
---
## Best Practices
### 1. Tối đa Giá trị Subscription
```
Strategy:
- Set subscription models as Tier 1
- Monitor quota usage in dashboard
- Use cheap tier only when subscription exhausted
```
**Ví dụ combo:**
```
cc/claude-opus-4-5 → glm/glm-4.7 → if/kimi-k2-thinking
```
### 2. Tối ưu Chi phí
```
Strategy:
- Use Gemini CLI free tier first (180K/month)
- Fallback to GLM/MiniMax (ultra-cheap)
- Emergency: iFlow (free)
```
**Ví dụ combo:**
```
gc/gemini-3-flash-preview → glm/glm-4.7 → if/kimi-k2-thinking
```
### 3. Tối ưu Chất lượng
```
Strategy:
- Use best models (Claude Opus, GPT-5.2)
- Fallback to good cheap models (GLM-4.7)
- Last resort: Free tier
```
**Ví dụ combo:**
```
cc/claude-opus-4-5 → cx/gpt-5.2-codex → glm/glm-4.7
```
### 4. Khả dụng 24/7
```
Strategy:
- Always include free tier in fallback
- Monitor quota reset times
- Distribute usage across providers
```
**Ví dụ combo:**
```
cc/claude-opus-4-5 → glm/glm-4.7 → minimax/MiniMax-M2.1 → if/kimi-k2-thinking
```
**Kết quả**: Không bao giờ hết quota, code mọi lúc.
---
## Chiến lược Reset Quota
Lên kế hoạch usage quanh thời gian reset quota:
| Provider | Quota Reset | Chiến lược |
|----------|-------------|----------|
| **Claude Code** | 5 giờ + hàng tuần | Dùng buổi sáng, quota mới |
| **Codex** | 5 giờ + hàng tuần | Dùng sau khi hết quota Claude |
| **Gemini CLI** | Hàng ngày (1K) + Hàng tháng (180K) | Dùng cả ngày |
| **GLM-4.7** | Hàng ngày 10:00 AM | Dùng buổi tối, reset sáng hôm sau |
| **MiniMax M2.1** | 5 giờ rolling | Dùng mọi lúc, theo rolling window |
| **iFlow/Qwen/Kiro** | Không giới hạn | Backup khẩn cấp |
**Ví dụ lịch hàng ngày:**
```
08:00 - 13:00: Claude Code (fresh 5h quota)
13:00 - 18:00: Gemini CLI (1K/day quota)
18:00 - 22:00: GLM-4.7 (cheap, resets 10AM)
22:00 - 08:00: MiniMax or iFlow (5h rolling or free)
```
---
## Giám sát & Cảnh báo
### Dashboard Quota Tracker
```
Dashboard → Quota Overview:
Claude Code: 2.5h / 5h remaining (50%)
Gemini CLI: 450 / 1000 requests today
GLM-4.7: 5M / 10M tokens (resets in 8h)
MiniMax: 3M / 5M tokens (rolling 5h)
```
### Thông báo Thời gian thực
```
Dashboard → Notifications:
⚠️ Claude Code quota 80% used (1h remaining)
✅ GLM-4.7 quota reset (10M tokens available)
💰 Daily budget 50% used ($2.50 / $5)
```
### Usage Analytics
```
Dashboard → Analytics:
Today: 50M tokens
- 30M via Claude Code (subscription)
- 15M via GLM-4.7 ($9)
- 5M via iFlow (free)
Cost: $9 (vs $1000 on ChatGPT API)
Savings: 99%
```
---
## Troubleshooting
**Issue: "All providers quota exhausted"**
**Giải pháp:**
1. Kiểm tra quota tracker trong dashboard
2. Đợi quota reset (xem countdown)
3. Thêm free tier vào fallback chain
4. Hoặc tăng giới hạn ngân sách
**Issue: "Too many fallback switches"**
**Giải pháp:**
1. Kiểm tra provider chính có down không
2. Tăng giới hạn quota (upgrade subscription)
3. Dùng model chính rẻ hơn (GLM thay vì Claude)
**Issue: "Unexpected costs"**
**Giải pháp:**
1. Dashboard → Analytics → Xem usage
2. Đặt giới hạn ngân sách hàng ngày/tháng
3. Chuyển sang free tier cho task không quan trọng
4. Dùng combo với free fallback
---
## Liên quan
- [Combos](./combos.md) - Tạo chuỗi fallback tùy chỉnh
- [Quota Tracking](./quota-tracking.md) - Theo dõi usage và chi phí

View File

@@ -0,0 +1,478 @@
# Cài đặt
Hướng dẫn cài đặt chi tiết cho 9Router với mẹo troubleshooting.
---
## Yêu cầu
### Yêu cầu hệ thống
- **Node.js**: Phiên bản 20.0.0 trở lên
- **npm**: Phiên bản 10.0.0 trở lên (đi kèm Node.js)
- **OS**: macOS, Linux, Windows (khuyên dùng WSL)
- **Dung lượng**: ~200MB để cài đặt
### Kiểm tra Phiên bản
```bash
node --version
# Should show v20.x.x or higher
npm --version
# Should show 10.x.x or higher
```
**Chưa có Node.js?** Cài đặt từ [nodejs.org](https://nodejs.org/)
---
## Phương thức Cài đặt
### Cách 1: Cài Global (Khuyên dùng)
Cài 9Router toàn cục để dùng ở bất kỳ đâu:
```bash
npm install -g 9router
```
**Khởi động 9Router:**
```bash
9router
```
**Lợi ích:**
- ✅ Chạy từ mọi thư mục
- ✅ Lệnh đơn giản: `9router`
- ✅ Auto-update với `npm update -g 9router`
### Cách 2: Cài Local
Cài trong project cụ thể:
```bash
mkdir my-9router
cd my-9router
npm install 9router
```
**Khởi động 9Router:**
```bash
npx 9router
```
**Lợi ích:**
- ✅ Cô lập mỗi project
- ✅ Version control mỗi project
- ✅ Không làm bẩn global namespace
### Cách 3: Từ Source (Development)
Clone và build từ GitHub:
```bash
git clone https://github.com/decolua/9router.git
cd 9router/app
npm install
npm run build
npm start
```
**Lợi ích:**
- ✅ Tính năng phát triển mới nhất
- ✅ Đóng góp cho dự án
- ✅ Tùy chỉnh
---
## Lần chạy Đầu tiên
### Khởi động Server
```bash
9router
```
**Điều gì xảy ra:**
1. Server khởi động tại `http://localhost:20128`
2. Dashboard tự động mở trong browser
3. Data directory được tạo tại `~/.9router`
4. API key được tạo tự động
### Đăng nhập Dashboard
**Credentials mặc định:**
- Mật khẩu: `123456`
**⚠️ Đổi mật khẩu ngay:**
1. Đăng nhập dashboard
2. Settings → Change Password
3. Dùng mật khẩu mạnh
### Lấy API Key
```
Dashboard → Settings → API Keys
→ Copy your API key
→ Use in CLI tools
```
**Ví dụ format API key:**
```
9r_1234567890abcdef1234567890abcdef
```
---
## Xác minh Cài đặt
### Kiểm tra trạng thái Server
```bash
curl http://localhost:20128/health
```
**Phản hồi dự kiến:**
```json
{
"status": "ok",
"version": "1.0.0"
}
```
### Liệt kê Model khả dụng
```bash
curl http://localhost:20128/v1/models \
-H "Authorization: Bearer your-api-key"
```
**Phản hồi dự kiến:**
```json
{
"object": "list",
"data": [
{
"id": "cc/claude-opus-4-5-20251101",
"object": "model",
"created": 1234567890,
"owned_by": "claude-code"
}
]
}
```
### Test Chat Completion
```bash
curl http://localhost:20128/v1/chat/completions \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "cc/claude-opus-4-5-20251101",
"messages": [
{"role": "user", "content": "Hello!"}
]
}'
```
---
## Cấu hình
### Biến môi trường
Tạo file `.env` hoặc set biến môi trường:
```bash
# Security (REQUIRED in production)
export JWT_SECRET="your-secure-secret-change-this"
export INITIAL_PASSWORD="your-password"
# Storage
export DATA_DIR="~/.9router"
# Server
export PORT="20128"
export NODE_ENV="production"
# Logging
export ENABLE_REQUEST_LOGS="false"
```
### Data Directory
**Vị trí mặc định:** `~/.9router`
**Nội dung:**
```
~/.9router/
├── db.json # Database (providers, combos, usage)
├── api-keys.json # API keys
└── logs/ # Request logs (if enabled)
```
**Đổi vị trí:**
```bash
export DATA_DIR="/custom/path"
9router
```
### Cấu hình Port
**Port mặc định:** `20128`
**Đổi port:**
```bash
export PORT="3000"
9router
```
**Hoặc dùng command line:**
```bash
9router --port 3000
```
---
## Troubleshooting
### Port đã được dùng
**Lỗi:**
```
Error: listen EADDRINUSE: address already in use :::20128
```
**Giải pháp 1: Kill process hiện có**
```bash
# Find process using port 20128
lsof -i :20128
# Kill process
kill -9 <PID>
```
**Giải pháp 2: Dùng port khác**
```bash
9router --port 3000
```
### Permission Denied
**Lỗi:**
```
Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/9router'
```
**Giải pháp: Dùng sudo (không khuyến nghị) hoặc fix npm permissions**
```bash
# Fix npm permissions (recommended)
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# Then install again
npm install -g 9router
```
### Node.js Phiên bản quá cũ
**Lỗi:**
```
Error: The engine "node" is incompatible with this module
```
**Giải pháp: Cập nhật Node.js**
```bash
# Using nvm (recommended)
nvm install 20
nvm use 20
# Or download from nodejs.org
```
### Dashboard không mở
**Vấn đề:** Dashboard không tự mở
**Giải pháp 1: Mở thủ công**
```
http://localhost:20128
```
**Giải pháp 2: Kiểm tra firewall**
```bash
# macOS: Allow Node.js in System Preferences → Security
# Linux: Check iptables
# Windows: Check Windows Firewall
```
### Không kết nối được Provider
**Vấn đề:** OAuth login thất bại hoặc API key không hợp lệ
**Giải pháp 1: Kiểm tra kết nối internet**
```bash
ping google.com
```
**Giải pháp 2: Kiểm tra trạng thái provider**
- Claude Code: [status.anthropic.com](https://status.anthropic.com)
- OpenAI: [status.openai.com](https://status.openai.com)
- Gemini: [status.cloud.google.com](https://status.cloud.google.com)
**Giải pháp 3: Tạo lại API key**
```
Dashboard → Provider → Disconnect → Reconnect
```
### Sử dụng RAM cao
**Vấn đề:** 9Router dùng quá nhiều RAM
**Giải pháp: Khởi động lại server**
```bash
# Stop
pkill -f 9router
# Start
9router
```
**Hoặc dùng PM2 để auto-restart:**
```bash
npm install -g pm2
pm2 start 9router --name 9router
pm2 save
```
---
## Tùy chọn Deployment
### Phát triển cục bộ
```bash
npm install -g 9router
9router
```
**Use case:** Code cá nhân, testing
### VPS/Cloud Server
```bash
# Install
npm install -g 9router
# Configure
export JWT_SECRET="your-secure-secret"
export INITIAL_PASSWORD="your-password"
export NODE_ENV="production"
# Start with PM2
npm install -g pm2
pm2 start 9router --name 9router
pm2 save
pm2 startup
```
**Use case:** Team access, remote coding
### Docker
```bash
docker pull 9router/9router:latest
docker run -d \
-p 20128:20128 \
-e JWT_SECRET="your-secure-secret" \
-e INITIAL_PASSWORD="your-password" \
-v 9router-data:/root/.9router \
--name 9router \
9router/9router:latest
```
**Use case:** Containerized deployment, Kubernetes
### Reverse Proxy (Nginx)
```nginx
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:20128;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
# SSE support for streaming
proxy_buffering off;
proxy_read_timeout 86400;
}
}
```
**Use case:** HTTPS, custom domain, load balancing
---
## Gỡ cài đặt
### Gỡ Global Installation
```bash
npm uninstall -g 9router
```
### Xóa Data Directory
```bash
rm -rf ~/.9router
```
### Xóa Cấu hình
```bash
# Remove environment variables from shell config
nano ~/.bashrc # or ~/.zshrc
# Delete 9router-related exports
```
---
## Bước tiếp theo
- [Hướng dẫn Bắt đầu](../getting-started.md) - Kết nối provider và bắt đầu code
- [Tính năng](../features/) - Khám phá quota tracking, combos, deployment
- [Troubleshooting](../troubleshooting.md) - Sửa các vấn đề thường gặp
---
## Cần trợ giúp?
- **Website**: [9router.com](https://9router.com)
- **GitHub**: [github.com/decolua/9router](https://github.com/decolua/9router)
- **Issues**: [github.com/decolua/9router/issues](https://github.com/decolua/9router/issues)

View File

@@ -0,0 +1,247 @@
# Bắt đầu
Khởi chạy 9Router trong 5 phút và bắt đầu định tuyến các request AI một cách thông minh.
---
## Bắt đầu nhanh
### 1. Cài đặt
```bash
npm install -g 9router
```
**Yêu cầu:** Node.js 20+ ([Chi tiết cài đặt](getting-started/installation.md))
### 2. Khởi chạy
```bash
9router
```
🎉 **Dashboard tự động mở** tại `http://localhost:20128`
- Mật khẩu mặc định: `123456` (đổi trong dashboard)
- API key được tạo tự động
- Sẵn sàng kết nối provider
### 3. Kết nối Provider
Bạn có 3 cách để kết nối provider:
#### Cách A: OAuth (Subscription Provider)
**Tốt nhất cho:** Claude Code, Codex, Gemini CLI, GitHub Copilot
```
Dashboard → Providers → Connect [Provider]
→ OAuth login → Auto token refresh
→ Quota tracking enabled
```
**Ví dụ: Claude Code**
1. Click "Connect Claude Code"
2. Đăng nhập tài khoản Claude
3. Cho phép 9Router
4. ✅ Xong! Dùng model: `cc/claude-opus-4-5-20251101`
#### Cách B: API Key (Cheap Provider)
**Tốt nhất cho:** GLM, MiniMax, Kimi, OpenRouter
```
Dashboard → Providers → Add API Key
→ Select provider
→ Paste API key
→ Save
```
**Ví dụ: GLM-4.7**
1. Đăng ký tại [Zhipu AI](https://open.bigmodel.cn/)
2. Lấy API key từ Coding Plan
3. Dashboard → Add API Key → Provider: `glm` → Paste key
4. ✅ Xong! Dùng model: `glm/glm-4.7`
#### Cách C: Free Provider (Miễn phí)
**Tốt nhất cho:** iFlow, Qwen, Kiro
```
Dashboard → Providers → Connect [Free Provider]
→ Device code or OAuth
→ Unlimited usage
```
**Ví dụ: iFlow**
1. Click "Connect iFlow"
2. Đăng nhập tài khoản iFlow
3. Cho phép
4. ✅ Xong! Dùng 8 model: `if/kimi-k2-thinking`, `if/qwen3-coder-plus`, v.v.
---
## 4. Dùng trong CLI Tools
Trỏ công cụ code của bạn tới 9Router:
### Cursor IDE
```
Settings → Models → Advanced:
OpenAI API Base URL: http://localhost:20128/v1
OpenAI API Key: [from 9router dashboard]
Model: cc/claude-opus-4-5-20251101
```
### Claude Desktop
Sửa `~/.claude/config.json`:
```json
{
"anthropic_api_base": "http://localhost:20128/v1",
"anthropic_api_key": "your-9router-api-key"
}
```
### Cline / Continue / RooCode
```
Provider: OpenAI Compatible
Base URL: http://localhost:20128/v1
API Key: [from dashboard]
Model: cc/claude-opus-4-5-20251101
```
### Codex CLI
```bash
export OPENAI_BASE_URL="http://localhost:20128"
export OPENAI_API_KEY="your-9router-api-key"
codex "your prompt"
```
---
## 5. Tạo Smart Combos (Tùy chọn)
Combo cho phép fallback tự động giữa các model:
```
Dashboard → Combos → Create New
Name: premium-coding
Models:
1. cc/claude-opus-4-5-20251101 (Subscription primary)
2. glm/glm-4.7 (Cheap backup, $0.6/1M)
3. if/kimi-k2-thinking (Free fallback)
Use in CLI: premium-coding
```
**Cách hoạt động:**
1. Thử Claude Opus trước (subscription của bạn)
2. Nếu hết quota → GLM-4.7 (siêu rẻ)
3. Nếu hết budget → iFlow (miễn phí)
4. Zero downtime, chuyển đổi tự động!
---
## Model có sẵn
### Subscription Models (Dùng đầu tiên)
**Claude Code (`cc/`)** - Subscription Pro/Max:
- `cc/claude-opus-4-5-20251101` - Claude 4.5 Opus
- `cc/claude-sonnet-4-5-20250929` - Claude 4.5 Sonnet
- `cc/claude-haiku-4-5-20251001` - Claude 4.5 Haiku
**Codex (`cx/`)** - Subscription Plus/Pro:
- `cx/gpt-5.2-codex` - GPT 5.2 Codex
- `cx/gpt-5.1-codex-max` - GPT 5.1 Codex Max
**Gemini CLI (`gc/`)** - MIỄN PHÍ 180K/tháng:
- `gc/gemini-3-flash-preview` - Gemini 3 Flash Preview
- `gc/gemini-2.5-pro` - Gemini 2.5 Pro
**GitHub Copilot (`gh/`)** - Subscription:
- `gh/gpt-5` - GPT-5
- `gh/claude-4.5-sonnet` - Claude 4.5 Sonnet
### Cheap Models (Backup)
**GLM (`glm/`)** - $0.6/$2.2 per 1M:
- `glm/glm-4.7` - GLM 4.7 (reset 10AM hàng ngày)
**MiniMax (`minimax/`)** - $0.20/$1.00 per 1M:
- `minimax/MiniMax-M2.1` - MiniMax M2.1 (reset 5h)
**Kimi (`kimi/`)** - $9/tháng (10M tokens):
- `kimi/kimi-latest` - Kimi Latest
### Model MIỄN PHÍ (Khẩn cấp)
**iFlow (`if/`)** - 8 models MIỄN PHÍ:
- `if/kimi-k2-thinking` - Kimi K2 Thinking
- `if/qwen3-coder-plus` - Qwen3 Coder Plus
- `if/glm-4.7` - GLM 4.7
- `if/deepseek-r1` - DeepSeek R1
**Qwen (`qw/`)** - 3 models MIỄN PHÍ:
- `qw/qwen3-coder-plus` - Qwen3 Coder Plus
- `qw/qwen3-coder-flash` - Qwen3 Coder Flash
**Kiro (`kr/`)** - 2 models MIỄN PHÍ:
- `kr/claude-sonnet-4.5` - Claude Sonnet 4.5
- `kr/claude-haiku-4.5` - Claude Haiku 4.5
---
## Chiến lược Tối ưu Chi phí
### Ngân sách hàng tháng: $10-20/tháng
```
1. Use Gemini CLI free tier (180K/month) for quick tasks
2. Use Claude Code subscription quota fully (you already pay)
3. Fallback to GLM ($0.6/1M) when quota out
4. Emergency: MiniMax M2.1 ($0.20/1M) or iFlow (free)
Real example (100M tokens/month):
60M via Gemini CLI: $0 (free tier)
30M via Claude Code: $0 (subscription you already have)
8M via GLM: $4.80
2M via MiniMax: $0.40
Total: $5.20/month + existing subscriptions
```
### Chiến lược Reset Quota
```
Daily routine:
1. Morning: Fresh Claude Code quota (5h reset)
2. Afternoon: Switch to Gemini CLI (1K/day)
3. Evening: GLM daily quota (reset 10AM next day)
4. Late night: MiniMax (5h rolling) or iFlow (free)
→ Code 24/7 with minimal extra cost!
```
---
## Bước tiếp theo
- [Chi tiết cài đặt](getting-started/installation.md) - Yêu cầu, troubleshooting
- [Tính năng](features/) - Khám phá quota tracking, combos, deployment
- [FAQ](faq.md) - Câu hỏi thường gặp
- [Troubleshooting](troubleshooting.md) - Sửa các vấn đề phổ biến
---
## Cần trợ giúp?
- **Website**: [9router.com](https://9router.com)
- **GitHub**: [github.com/decolua/9router](https://github.com/decolua/9router)
- **Issues**: [github.com/decolua/9router/issues](https://github.com/decolua/9router/issues)

164
gitbook/content/vi/index.md Normal file
View File

@@ -0,0 +1,164 @@
# Chào mừng đến với 9Router
**Dùng Claude, Codex, Gemini MIỄN PHÍ • Lựa chọn siêu rẻ từ $0.20/1M tokens**
9Router là bộ định tuyến mô hình AI giúp tối đa hóa giá trị subscription và giảm chi phí thông qua định tuyến thông minh và fallback tự động.
---
## 9Router là gì?
9Router là một proxy thông minh nằm giữa các công cụ lập trình của bạn (Cursor, Cline, Claude Desktop) và các nhà cung cấp AI. Nó tự động định tuyến request đến model tốt nhất hiện có dựa trên quota, chi phí và tính khả dụng.
**Đừng lãng phí tiền:**
- ❌ Quota subscription hết hạn mỗi tháng mà không dùng đến
- ❌ Rate limit chặn bạn đang lập trình
- ❌ API đắt đỏ ($20-50/tháng cho mỗi provider)
- ❌ Chuyển đổi provider thủ công
**Bắt đầu tối đa hóa giá trị:**
- ✅ **Tối đa Subscription** - Theo dõi và dùng từng chút quota của Claude Code, Codex, Gemini
- ✅ **MIỄN PHÍ** - Truy cập model iFlow, Qwen, Kiro qua CLI
- ✅ **Backup siêu rẻ** - GLM ($0.6/1M), MiniMax M2.1 ($0.20/1M)
- ✅ **Smart Fallback** - Subscription → Cheap → Free, chuyển đổi tự động
---
## Tính năng chính
### 🔄 Smart 3-Tier Fallback
```
Setup once, never stop coding:
Tier 1 (SUBSCRIPTION): Claude Code → Codex → Gemini
↓ quota exhausted
Tier 2 (CHEAP): GLM-4.7 → MiniMax M2.1 → Kimi
↓ budget limit
Tier 3 (FREE): iFlow → Qwen → Kiro
→ Automatic switching, zero downtime!
```
### 📊 Theo dõi Quota
- Tiêu thụ token thời gian thực cho mỗi provider
- Đếm ngược reset (5 giờ, hàng ngày, hàng tuần, hàng tháng)
- Ước tính chi phí cho tier trả phí
- Báo cáo chi tiêu hàng tháng
### 🎯 Hỗ trợ CLI Toàn diện
Hoạt động với mọi công cụ hỗ trợ custom OpenAI endpoint:
✅ **Cursor** • **Cline** • **Claude Desktop** • **Codex** • **RooCode** • **Continue** • **Bất kỳ tool nào tương thích OpenAI**
### 💰 Tối ưu Chi phí
**Ví dụ thực tế (100M tokens/tháng):**
```
60M qua Gemini CLI: $0 (free tier)
30M qua Claude Code: $0 (subscription đã có)
8M qua GLM: $4.80
2M qua MiniMax: $0.40
Tổng: $5.20/tháng so với $2000 trên ChatGPT API!
```
---
## Tại sao chọn 9Router?
### Tối đa hóa Subscription
Đã trả tiền cho Claude Code ($20-100/tháng) hoặc Codex ($20-200/tháng)? Nhận giá trị đầy đủ:
- Theo dõi sử dụng quota thời gian thực
- Tự động chuyển khi quota reset (5 giờ, hàng tuần)
- Dùng hết mọi token trước khi hết hạn
- Gemini CLI: 180K completions/tháng **MIỄN PHÍ**
### Backup Siêu Rẻ
Khi quota subscription hết, trả vài xu:
| Provider | Giá per 1M tokens | Reset |
|----------|-------------------|-------|
| **GLM-4.7** | $0.60 input / $2.20 output | Hàng ngày 10:00 AM |
| **MiniMax M2.1** | $0.20 input / $1.00 output | 5 giờ rolling |
| **Kimi K2** | $9/tháng (10M tokens) | Hàng tháng |
**~90% rẻ hơn ChatGPT API ($20/1M)!**
### Fallback Miễn phí Mãi mãi
Backup khẩn cấp khi mọi thứ khác đều bị giới hạn quota:
- **iFlow**: 8 models (Kimi K2, Qwen3 Coder Plus, GLM 4.7, MiniMax M2)
- **Qwen**: 3 models (Qwen3 Coder Plus/Flash, Vision)
- **Kiro**: Claude Sonnet 4.5, Haiku 4.5 (AWS Builder ID)
---
## Bắt đầu nhanh
Bắt đầu trong 2 phút:
```bash
# Install globally
npm install -g 9router
# Start (dashboard opens automatically)
9router
```
🎉 **Dashboard mở** → Kết nối provider → Bắt đầu code!
**Dùng trong CLI tool:**
```
Endpoint: http://localhost:20128/v1
API Key: [from dashboard]
Model: cc/claude-opus-4-5-20251101
```
[→ Hướng dẫn Bắt đầu đầy đủ](getting-started.md)
---
## Trường hợp sử dụng
### Cho Developer cá nhân
- Tối đa hóa subscription Claude Code/Codex
- Dùng Gemini CLI free tier (180K/tháng)
- Fallback sang model siêu rẻ ($0.20/1M)
- Code 24/7 không bị rate limit
### Cho Team
- Triển khai trên VPS/Cloud để chia sẻ truy cập
- Theo dõi chi tiêu team thời gian thực
- Đặt giới hạn ngân sách cho mỗi tier
- Quản lý provider tập trung
### Cho Mobile/Remote Coding
- Dùng cloud deployment (https://9router.com)
- Truy cập từ iPad, điện thoại, mọi nơi
- Không bị giới hạn localhost
- Mạng Cloudflare edge (300+ vị trí)
---
## Tiếp theo là gì?
- [Bắt đầu](getting-started.md) - Cài đặt và cấu hình trong 5 phút
- [Hướng dẫn cài đặt](getting-started/installation.md) - Hướng dẫn setup chi tiết
- [Tính năng](features/) - Khám phá mọi khả năng
- [FAQ](faq.md) - Các câu hỏi thường gặp
---
<div align="center">
<sub>Built with ❤️ for developers maximizing AI value</sub>
</div>

View File

@@ -0,0 +1,109 @@
# Tích hợp Claude Code
Tích hợp 9Router với Claude Code CLI để định tuyến request API Anthropic qua hệ thống routing thông minh của 9Router.
## Yêu cầu
- Claude Code CLI đã cài đặt
- 9Router đang chạy cục bộ hoặc cloud endpoint đã cấu hình
- API key từ 9Router dashboard
## Setup
### 1. Cấu hình biến môi trường
Đặt các biến môi trường sau trong file cấu hình shell (`~/.bashrc`, `~/.zshrc`, hoặc `~/.bash_profile`):
```bash
# Base URL for 9Router
export ANTHROPIC_BASE_URL="http://localhost:20128/v1"
# Optional: Set default models for aliases
export ANTHROPIC_DEFAULT_OPUS_MODEL="cc/claude-opus-4-5-20251101"
export ANTHROPIC_DEFAULT_SONNET_MODEL="cc/claude-sonnet-4-5-20250929"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="cc/claude-haiku-4-5-20251001"
```
### 2. Reload Shell Configuration
```bash
source ~/.zshrc # or ~/.bashrc
```
### 3. Xác minh Cấu hình
Kiểm tra các biến môi trường đã set đúng:
```bash
echo $ANTHROPIC_BASE_URL
```
## Model Aliases
Claude Code hỗ trợ các alias model sau ánh xạ sang model 9Router:
| Alias | Model | Biến môi trường |
|-------|-------|---------------------|
| `opus` | Claude Opus 4.5 | `ANTHROPIC_DEFAULT_OPUS_MODEL` |
| `sonnet` | Claude Sonnet 4.5 | `ANTHROPIC_DEFAULT_SONNET_MODEL` |
| `haiku` | Claude Haiku 4.5 | `ANTHROPIC_DEFAULT_HAIKU_MODEL` |
## Ví dụ Sử dụng
### Dùng Model Aliases
```bash
# Use Opus model
claude --model opus "Explain quantum computing"
# Use Sonnet model
claude --model sonnet "Write a Python function"
# Use Haiku model
claude --model haiku "Quick code review"
```
### Dùng Full Model Names
```bash
claude --model cc/claude-opus-4-5-20251101 "Your prompt here"
```
## File Settings
Claude Code lưu cấu hình trong `~/.claude/settings.json`. Bạn có thể sửa file này thủ công nếu cần:
```json
{
"baseUrl": "http://localhost:20128/v1",
"defaultModel": "sonnet"
}
```
## Troubleshooting
### Lỗi Connection
Nếu gặp lỗi kết nối:
1. Xác minh 9Router đang chạy: `curl http://localhost:20128/health`
2. Kiểm tra biến môi trường đã set đúng
3. Đảm bảo không firewall nào chặn port 20128
### Model Not Found
Nếu gặp lỗi "model not found":
1. Xác minh tên model khớp với cấu hình 9Router
2. Kiểm tra kết nối provider đang hoạt động trong 9Router dashboard
3. Đảm bảo model có sẵn trong các provider đã kết nối
## Cloud Endpoint
Để dùng 9Router cloud endpoint thay vì localhost:
```bash
export ANTHROPIC_BASE_URL="https://9router.com"
```
Đảm bảo bạn đã cấu hình API key trong 9Router cloud dashboard.

View File

@@ -0,0 +1,201 @@
# Tích hợp Cline
Tích hợp 9Router với extension Cline VSCode để định tuyến request AI qua hệ thống routing thông minh của 9Router.
## Yêu cầu
- Visual Studio Code đã cài đặt
- Extension Cline đã cài đặt từ VSCode marketplace
- 9Router đang chạy cục bộ hoặc cloud endpoint đã cấu hình
- API key từ 9Router dashboard
## Setup
### 1. Mở Cline Settings
1. Mở Visual Studio Code
2. Mở panel extension Cline (click icon Cline trong sidebar)
3. Click icon **Settings** (icon bánh răng) trong panel Cline
### 2. Chọn API Provider
1. Trong Cline settings, tìm dropdown **API Provider**
2. Chọn **Ollama** từ danh sách
- Lưu ý: Chúng ta dùng provider type Ollama vì nó tương thích với API kiểu OpenAI
### 3. Cấu hình Base URL
Đặt base URL tới endpoint 9Router:
**Cho 9Router cục bộ:**
```
http://localhost:20128/v1
```
**Cho 9Router cloud:**
```
https://9router.com
```
**Các bước:**
1. Trong field **Base URL**, nhập endpoint 9Router
2. Đảm bảo bao gồm `/v1` ở cuối
### 4. Thêm API Key
1. Trong field **API Key**, nhập API key 9Router của bạn
2. Bạn có thể tìm API key trong 9Router dashboard tại **Settings → API Keys**
3. Key bắt đầu bằng `sk-9router-`
### 5. Chọn Model
1. Trong dropdown **Model**, bạn có thể:
- Chọn từ model có sẵn (nếu Cline auto-detect)
- Nhập tên model thủ công từ cấu hình 9Router
2. Tên model phổ biến:
- `gpt-4`
- `gpt-4o`
- `claude-opus-4-5`
- `claude-sonnet-4-5`
- `gemini-2.0-flash`
### 6. Lưu Cấu hình
Click **Save** hoặc đóng panel settings. Cline sẽ tự lưu cấu hình.
## Ví dụ Cấu hình
Cline settings của bạn nên trông như sau:
```
API Provider: Ollama
Base URL: http://localhost:20128/v1
API Key: sk-9router-xxxxxxxxxxxxx
Model: gpt-4
```
## Model có sẵn
Bạn có thể dùng bất kỳ model nào đã cấu hình trong 9Router dashboard. Ví dụ phổ biến:
| Tên Model | Provider | Mô tả |
|------------|----------|-------------|
| `gpt-4` | OpenAI | GPT-4 Turbo |
| `gpt-4o` | OpenAI | GPT-4 Optimized |
| `claude-opus-4-5` | Anthropic | Claude Opus 4.5 |
| `claude-sonnet-4-5` | Anthropic | Claude Sonnet 4.5 |
| `gemini-2.0-flash` | Google | Gemini 2.0 Flash |
## Sử dụng
### Chat với AI
1. Mở panel Cline trong VSCode
2. Gõ tin nhắn vào input chat
3. Nhấn Enter để gửi
4. Cline sẽ dùng 9Router để xử lý request
### Tạo Code
1. Yêu cầu Cline tạo code: "Create a React component for a login form"
2. Cline sẽ tạo code qua 9Router
3. Xem và chấp nhận code được tạo
### Giải thích Code
1. Chọn code trong editor
2. Hỏi Cline: "Explain this code"
3. Nhận giải thích AI qua 9Router
### Thao tác File
1. Yêu cầu Cline tạo, sửa hoặc xóa files
2. Cline sẽ dùng 9Router để hiểu context và thực hiện thay đổi
3. Xem thay đổi trước khi chấp nhận
## Troubleshooting
### Lỗi "Connection Failed"
1. Xác minh 9Router đang chạy: `curl http://localhost:20128/health`
2. Kiểm tra base URL đúng và bao gồm `/v1`
3. Đảm bảo không firewall nào chặn port 20128
4. Thử khởi động lại VSCode
### Lỗi "Invalid API Key"
1. Xác minh API key trong 9Router dashboard
2. Đảm bảo bạn sao chép đầy đủ key bao gồm prefix `sk-9router-`
3. Kiểm tra API key chưa hết hạn
4. Thử tạo API key mới
### Lỗi "Model Not Found"
1. Xác minh tên model khớp chính xác với cấu hình 9Router
2. Kiểm tra kết nối provider đang hoạt động trong 9Router dashboard
3. Đảm bảo model có sẵn trong các provider đã kết nối
4. Thử dùng tên model đầy đủ (ví dụ: `openai/gpt-4` thay vì `gpt-4`)
### Cline không phản hồi
1. Kiểm tra panel output Cline để xem thông báo lỗi
2. Xác minh 9Router instance đang chạy và healthy
3. Thử reload cửa sổ VSCode (Cmd/Ctrl + Shift + P → "Reload Window")
4. Kiểm tra logs 9Router để xem lỗi
## Cấu hình Nâng cao
### Dùng Cloud Endpoint
Để dùng 9Router cloud endpoint thay vì localhost:
1. Trong Cline settings, đặt Base URL: `https://9router.com`
2. Đảm bảo bạn đã cấu hình API key trong 9Router cloud dashboard
3. Đảm bảo cloud endpoint đang hoạt động và truy cập được
### Nhiều Model
Bạn có thể chuyển nhanh giữa các model:
1. Mở Cline settings
2. Đổi field **Model** sang model khác
3. Lưu và tiếp tục chat với model mới
### Custom Timeout
Nếu gặp vấn đề timeout với request lớn:
1. Mở VSCode settings (Cmd/Ctrl + ,)
2. Tìm "Cline timeout"
3. Tăng giá trị timeout (mặc định thường là 30 giây)
## Best Practices
1. **Dùng Model phù hợp**: Chọn model nhanh (như Haiku hoặc Flash) cho task đơn giản, model mạnh hơn (như Opus hoặc GPT-4) cho task phức tạp
2. **Theo dõi Usage**: Kiểm tra 9Router dashboard để xem thống kê và chi phí
3. **Quản lý Context**: Giữ cuộc trò chuyện tập trung để giảm token usage
4. **Chuyển Model**: Chuyển model dựa trên độ phức tạp task để tối ưu chi phí và hiệu năng
5. **Bảo mật API Key**: Không bao giờ commit API key vào version control
## Tích hợp với Tính năng 9Router
### Định tuyến Model
9Router tự động định tuyến request đến provider tốt nhất hiện có dựa trên:
- Tính khả dụng của model
- Trạng thái sức khỏe provider
- Tối ưu chi phí
- Load balancing
### Hỗ trợ Fallback
Nếu một provider thất bại, 9Router tự động fallback sang provider khác đã cấu hình trong dashboard.
### Theo dõi Usage
Giám sát usage Cline qua 9Router dashboard:
- Tổng request
- Token usage
- Chi phí mỗi model
- Phân bổ provider

View File

@@ -0,0 +1,136 @@
# Tích hợp OpenAI Codex CLI
Tích hợp 9Router với OpenAI Codex CLI để định tuyến request API OpenAI qua hệ thống routing thông minh của 9Router.
## Yêu cầu
- OpenAI Codex CLI đã cài đặt
- 9Router đang chạy cục bộ hoặc cloud endpoint đã cấu hình
- API key từ 9Router dashboard
## Setup
### 1. Cấu hình biến môi trường
Đặt các biến môi trường sau trong file cấu hình shell (`~/.bashrc`, `~/.zshrc`, hoặc `~/.bash_profile`):
```bash
# Base URL for 9Router
export OPENAI_BASE_URL="http://localhost:20128/v1"
# API Key from 9Router dashboard
export OPENAI_API_KEY="your-9router-api-key"
```
### 2. Reload Shell Configuration
```bash
source ~/.zshrc # or ~/.bashrc
```
### 3. Xác minh Cấu hình
Kiểm tra các biến môi trường đã set đúng:
```bash
echo $OPENAI_BASE_URL
echo $OPENAI_API_KEY
```
## Model có sẵn
9Router cung cấp các model Codex sau:
| Model ID | Mô tả |
|----------|-------------|
| `cx/gpt-5.2-codex` | GPT-5.2 Codex - Phiên bản mới nhất |
| `cx/gpt-5.1-codex-max` | GPT-5.1 Codex Max - Extended context |
## Ví dụ Sử dụng
### Sử dụng Cơ bản
```bash
# Use GPT-5.2 Codex
codex --model cx/gpt-5.2-codex "Write a function to sort an array"
# Use GPT-5.1 Codex Max
codex --model cx/gpt-5.1-codex-max "Explain this complex algorithm"
```
### Tạo Code
```bash
codex --model cx/gpt-5.2-codex "Create a REST API endpoint for user authentication"
```
### Giải thích Code
```bash
codex --model cx/gpt-5.1-codex-max "Explain what this code does: $(cat myfile.js)"
```
## File Cấu hình
Bạn cũng có thể cấu hình Codex CLI qua file cấu hình. Tạo hoặc sửa `~/.codex/config.json`:
```json
{
"baseUrl": "http://localhost:20128/v1",
"apiKey": "your-9router-api-key",
"defaultModel": "cx/gpt-5.2-codex"
}
```
## Troubleshooting
### Lỗi Xác thực
Nếu gặp lỗi xác thực:
1. Xác minh API key đúng trong 9Router dashboard
2. Kiểm tra biến môi trường `OPENAI_API_KEY` đã set
3. Đảm bảo API key chưa hết hạn
### Lỗi Connection
Nếu gặp lỗi kết nối:
1. Xác minh 9Router đang chạy: `curl http://localhost:20128/health`
2. Kiểm tra biến môi trường đã set đúng
3. Đảm bảo không firewall nào chặn port 20128
### Model không khả dụng
Nếu gặp lỗi "model not available":
1. Xác minh tên model khớp với cấu hình 9Router
2. Kiểm tra kết nối provider OpenAI đang hoạt động trong 9Router dashboard
3. Đảm bảo model có sẵn trong các provider đã kết nối
## Cloud Endpoint
Để dùng 9Router cloud endpoint thay vì localhost:
```bash
export OPENAI_BASE_URL="https://9router.com"
```
Đảm bảo bạn đã cấu hình API key trong 9Router cloud dashboard.
## Cấu hình Nâng cao
### Custom Timeout
```bash
export OPENAI_TIMEOUT=60 # seconds
```
### Debug Mode
Bật debug mode để xem logs request/response chi tiết:
```bash
export CODEX_DEBUG=true
codex --model cx/gpt-5.2-codex "Your prompt"
```

View File

@@ -0,0 +1,249 @@
# Tích hợp Continue VSCode Extension
Tích hợp 9Router với extension Continue để mang trợ lý AI trực tiếp vào Visual Studio Code.
## Yêu cầu
- Visual Studio Code đã cài đặt
- Extension Continue đã cài đặt từ VSCode marketplace
- 9Router API key từ [dashboard](https://9router.com/dashboard)
- 9Router đang chạy (cục bộ hoặc cloud)
## Các bước Cấu hình
### 1. Mở Continue Configuration
1. Mở VSCode
2. Nhấn `Cmd+Shift+P` (Mac) hoặc `Ctrl+Shift+P` (Windows/Linux)
3. Gõ "Continue: Open Config" và chọn
4. Mở `~/.continue/config.json`
### 2. Thêm Cấu hình Model 9Router
Thêm cấu hình sau vào `config.json`:
**Setup Một Model:**
```json
{
"models": [
{
"title": "9Router - Claude Opus",
"provider": "openai",
"model": "cc/claude-opus-4-5-20251101",
"apiKey": "your-api-key-from-dashboard",
"apiBase": "http://localhost:20128/v1"
}
]
}
```
**Setup Nhiều Model:**
```json
{
"models": [
{
"title": "9Router - Claude Opus (Best)",
"provider": "openai",
"model": "cc/claude-opus-4-5-20251101",
"apiKey": "your-api-key-from-dashboard",
"apiBase": "http://localhost:20128/v1"
},
{
"title": "9Router - Claude Sonnet (Balanced)",
"provider": "openai",
"model": "cc/claude-sonnet-4-20250514",
"apiKey": "your-api-key-from-dashboard",
"apiBase": "http://localhost:20128/v1"
},
{
"title": "9Router - DeepSeek Chat (Code)",
"provider": "openai",
"model": "cx/deepseek-chat",
"apiKey": "your-api-key-from-dashboard",
"apiBase": "http://localhost:20128/v1"
},
{
"title": "9Router - Claude Haiku (Fast)",
"provider": "openai",
"model": "cc/claude-haiku-4-20250514",
"apiKey": "your-api-key-from-dashboard",
"apiBase": "http://localhost:20128/v1"
}
]
}
```
**Cho Cloud 9Router:**
Thay `apiBase` bằng:
```json
"apiBase": "https://9router.com/v1"
```
### 3. Lưu và Reload
1. Lưu file cấu hình
2. Reload cửa sổ VSCode: `Cmd+Shift+P` → "Developer: Reload Window"
3. Extension Continue sẽ load cấu hình mới
### 4. Chọn Model
1. Mở sidebar Continue (click icon Continue trong panel trái)
2. Click dropdown chọn model ở trên cùng
3. Chọn model 9Router ưa thích
## Model có sẵn
### Claude Models (Anthropic)
- `cc/claude-opus-4-5-20251101` - Mạnh nhất, tốt nhất cho task phức tạp
- `cc/claude-sonnet-4-20250514` - Cân bằng hiệu năng và tốc độ
- `cc/claude-haiku-4-20250514` - Nhanh nhất, phù hợp task đơn giản
### DeepSeek Models
- `cx/deepseek-chat` - Xuất sắc cho tạo code
- `cx/deepseek-reasoner` - Tốt nhất cho giải quyết vấn đề phức tạp
### GLM Models (Zhipu AI)
- `glm/glm-4-plus` - Tiếng Trung và tiếng Anh nâng cao
- `glm/glm-4-flash` - Phản hồi nhanh
## Ví dụ Sử dụng
### Giải thích Code
1. Chọn code trong editor
2. Mở sidebar Continue
3. Gõ: "Explain this code"
4. Model: `cc/claude-sonnet-4-20250514`
### Tạo Code
1. Mở sidebar Continue
2. Gõ: "Create a React component for user profile card"
3. Model: `cx/deepseek-chat`
### Refactoring
1. Chọn code để refactor
2. Gõ: "Refactor this to use async/await"
3. Model: `cc/claude-sonnet-4-20250514`
### Sửa Bug
1. Chọn code có vấn đề
2. Gõ: "Find and fix the bug in this code"
3. Model: `cx/deepseek-reasoner`
## Cấu hình Nâng cao
### Custom System Prompts
Thêm system prompt tùy chỉnh cho hành vi cụ thể:
```json
{
"models": [
{
"title": "9Router - Code Expert",
"provider": "openai",
"model": "cx/deepseek-chat",
"apiKey": "your-api-key",
"apiBase": "http://localhost:20128/v1",
"systemMessage": "You are an expert programmer. Always provide clean, well-documented code with best practices."
}
]
}
```
### Temperature và Parameters
Điều chỉnh hành vi model với parameters:
```json
{
"models": [
{
"title": "9Router - Creative Writer",
"provider": "openai",
"model": "cc/claude-opus-4-5-20251101",
"apiKey": "your-api-key",
"apiBase": "http://localhost:20128/v1",
"temperature": 0.9,
"topP": 0.95
}
]
}
```
### Context Providers
Cấu hình context Continue gửi đến model:
```json
{
"contextProviders": [
{
"name": "code",
"params": {
"maxLines": 100
}
},
{
"name": "diff",
"params": {}
},
{
"name": "terminal",
"params": {}
}
]
}
```
## Phím tắt
- `Cmd+L` (Mac) / `Ctrl+L` (Windows/Linux) - Mở Continue chat
- `Cmd+I` (Mac) / `Ctrl+I` (Windows/Linux) - Inline edit
- `Cmd+Shift+R` (Mac) / `Ctrl+Shift+R` (Windows/Linux) - Tạo lại response
## Troubleshooting
### Model không phản hồi
- Kiểm tra 9Router đang chạy: `curl http://localhost:20128/health`
- Xác minh API key trong config.json
- Kiểm tra VSCode Developer Console để xem lỗi: `Help` → `Toggle Developer Tools`
### Chọn sai Model
- Click dropdown model trong sidebar Continue
- Chọn đúng model 9Router
- Tên model phải khớp chính xác (case-sensitive)
### Cấu hình không Load
- Xác minh JSON syntax hợp lệ (dùng JSON validator)
- Kiểm tra vị trí file: `~/.continue/config.json`
- Reload cửa sổ VSCode sau khi thay đổi
### Hiệu năng Chậm
- Chuyển sang model nhanh hơn (haiku, flash)
- Giảm context size trong contextProviders
- Kiểm tra độ trễ network đến 9Router
## Best Practices
### Chiến lược Chọn Model
- **Edit nhanh**: Dùng `cc/claude-haiku-4-20250514`
- **Tạo code**: Dùng `cx/deepseek-chat`
- **Refactoring phức tạp**: Dùng `cc/claude-opus-4-5-20251101`
- **Giải quyết vấn đề**: Dùng `cx/deepseek-reasoner`
### Quản lý Context
- Chỉ chọn code liên quan trước khi hỏi
- Dùng prompt cụ thể, rõ ràng
- Chia task phức tạp thành các bước nhỏ
### Tối ưu Chi phí
- Dùng model nhanh hơn/rẻ hơn cho task đơn giản
- Giới hạn context size khi có thể
- Cache response thường dùng
## Bước tiếp theo
- [Cấu hình Cursor](cursor.md) cho tích hợp IDE nâng cao
- [Setup Roo](roo.md) cho trợ lý AI
- [Khám phá CLI usage](../cli/basic-usage.md)
- [Tìm hiểu về chọn model](../models/overview.md)

View File

@@ -0,0 +1,149 @@
# Tích hợp Cursor
Tích hợp 9Router với Cursor IDE để định tuyến request AI qua hệ thống routing thông minh của 9Router.
## Yêu cầu
- Cursor IDE đã cài đặt
- Tài khoản Cursor Pro (cần thiết cho custom API endpoint)
- 9Router cloud endpoint đã cấu hình
- API key từ 9Router dashboard
## ⚠️ Lưu ý Quan trọng
> **Yêu cầu Cloud Endpoint**: Cursor định tuyến request qua server của chính nó và không hỗ trợ endpoint localhost. Bạn phải dùng 9Router cloud endpoint: `https://9router.com`
> **Yêu cầu Cursor Pro**: Tính năng này yêu cầu tài khoản Cursor Pro để dùng custom API endpoint.
## Setup
### 1. Mở Cursor Settings
1. Mở Cursor IDE
2. Đi đến **Settings** (Cmd/Ctrl + ,)
3. Đi đến phần **Models**
### 2. Bật OpenAI API
1. Tìm option **OpenAI API key**
2. Bật toggle để kích hoạt cấu hình custom API
### 3. Cấu hình Base URL
Đặt base URL tới 9Router cloud endpoint:
```
https://9router.com
```
**Các bước:**
1. Trong cài đặt Models, tìm field **Base URL**
2. Nhập: `https://9router.com`
3. Click **Save**
### 4. Thêm API Key
1. Trong field **API Key**, nhập API key 9Router
2. Bạn có thể tìm API key trong 9Router dashboard tại **Settings → API Keys**
3. Click **Save**
### 5. Thêm Custom Model
1. Click nút **View All Models**
2. Click **Add Custom Model**
3. Nhập tên model từ cấu hình 9Router (ví dụ: `gpt-4`, `claude-opus-4-5`, v.v.)
4. Click **Add**
### 6. Chọn Model
1. Trong giao diện chat Cursor, click dropdown chọn model
2. Chọn custom model từ danh sách
3. Bắt đầu dùng 9Router với Cursor!
## Ví dụ Cấu hình
Cursor settings của bạn nên trông như sau:
```
OpenAI API: ✓ Enabled
Base URL: https://9router.com
API Key: sk-9router-xxxxxxxxxxxxx
Custom Models: gpt-4, claude-opus-4-5, gemini-2.0-flash
```
## Model có sẵn
Bạn có thể dùng bất kỳ model nào đã cấu hình trong 9Router dashboard. Ví dụ phổ biến:
| Tên Model | Provider | Mô tả |
|------------|----------|-------------|
| `gpt-4` | OpenAI | GPT-4 Turbo |
| `gpt-4o` | OpenAI | GPT-4 Optimized |
| `claude-opus-4-5` | Anthropic | Claude Opus 4.5 |
| `claude-sonnet-4-5` | Anthropic | Claude Sonnet 4.5 |
| `gemini-2.0-flash` | Google | Gemini 2.0 Flash |
## Sử dụng
### Giao diện Chat
1. Mở Cursor chat (Cmd/Ctrl + L)
2. Chọn model từ dropdown
3. Bắt đầu chat với AI qua 9Router
### Tạo Code Inline
1. Chọn code trong editor
2. Nhấn Cmd/Ctrl + K
3. Nhập prompt
4. Cursor sẽ dùng 9Router để tạo code
### Giải thích Code
1. Chọn code trong editor
2. Nhấn Cmd/Ctrl + L
3. Hỏi "Explain this code"
4. Nhận giải thích AI qua 9Router
## Troubleshooting
### Lỗi "Invalid API Key"
1. Xác minh API key trong 9Router dashboard
2. Đảm bảo bạn sao chép đầy đủ key bao gồm prefix `sk-9router-`
3. Kiểm tra API key chưa hết hạn
4. Thử tạo API key mới
### Lỗi "Model Not Found"
1. Xác minh tên model khớp chính xác với cấu hình 9Router
2. Kiểm tra kết nối provider đang hoạt động trong 9Router dashboard
3. Đảm bảo model có sẵn trong các provider đã kết nối
4. Thử dùng tên model đầy đủ (ví dụ: `openai/gpt-4` thay vì `gpt-4`)
### Lỗi Connection
1. Xác minh bạn đang dùng cloud endpoint: `https://9router.com`
2. Kiểm tra kết nối internet
3. Đảm bảo dịch vụ 9Router cloud đang hoạt động
4. Thử tắt VPN hoặc proxy nếu đang bật
### Localhost không hoạt động
> **Nhớ**: Cursor không hỗ trợ endpoint localhost. Bạn phải dùng cloud endpoint `https://9router.com`. Nếu cần dùng 9Router cục bộ, hãy cân nhắc dùng dịch vụ tunneling như ngrok để expose endpoint cục bộ.
## Setup Cloud Endpoint
Nếu bạn chạy 9Router cục bộ và muốn dùng với Cursor:
1. Bật cloud endpoint trong 9Router settings
2. Cấu hình URL cloud endpoint trong 9Router dashboard
3. Dùng URL cloud trong Cursor settings
4. Đảm bảo 9Router instance cục bộ có thể truy cập từ internet
## Best Practices
1. **Dùng Model Aliases**: Tạo alias ngắn cho model thường dùng trong 9Router
2. **Theo dõi Usage**: Kiểm tra 9Router dashboard để xem thống kê và chi phí
3. **Xoay API Key**: Định kỳ xoay API key để bảo mật
4. **Test Model**: Thử các model khác nhau để tìm model tốt nhất cho use case

View File

@@ -0,0 +1,416 @@
# Tích hợp các Công cụ khác
9Router tương thích với mọi công cụ hỗ trợ format API OpenAI. Hướng dẫn này bao gồm pattern tích hợp tổng quát cho nhiều công cụ và ứng dụng tùy chỉnh.
## Tổng quan
9Router cung cấp API endpoint tương thích OpenAI hoạt động với:
- Script và ứng dụng tùy chỉnh
- API client và công cụ test
- Công cụ CLI và utility
- Tích hợp bên thứ ba
- Framework phát triển
## Pattern Setup Tổng quát
Mọi công cụ tương thích OpenAI có thể kết nối đến 9Router bằng các cài đặt sau:
**9Router cục bộ:**
```
Base URL: http://localhost:20128/v1
API Key: your-api-key-from-dashboard
Model: any 9Router model (cc/*, cx/*, glm/*, etc.)
```
**9Router cloud:**
```
Base URL: https://9router.com/v1
API Key: your-api-key-from-dashboard
Model: any 9Router model (cc/*, cx/*, glm/*, etc.)
```
## Model có sẵn
### Claude Models (Anthropic)
- `cc/claude-opus-4-5-20251101`
- `cc/claude-sonnet-4-20250514`
- `cc/claude-haiku-4-20250514`
### DeepSeek Models
- `cx/deepseek-chat`
- `cx/deepseek-reasoner`
### GLM Models (Zhipu AI)
- `glm/glm-4-plus`
- `glm/glm-4-flash`
## Ví dụ Tích hợp
### Python với OpenAI SDK
```python
from openai import OpenAI
client = OpenAI(
api_key="your-api-key-from-dashboard",
base_url="http://localhost:20128/v1"
)
response = client.chat.completions.create(
model="cc/claude-sonnet-4-20250514",
messages=[
{"role": "user", "content": "Hello, how are you?"}
]
)
print(response.choices[0].message.content)
```
### Node.js với OpenAI SDK
```javascript
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "your-api-key-from-dashboard",
baseURL: "http://localhost:20128/v1"
});
const response = await client.chat.completions.create({
model: "cc/claude-sonnet-4-20250514",
messages: [
{ role: "user", content: "Hello, how are you?" }
]
});
console.log(response.choices[0].message.content);
```
### Lệnh cURL
```bash
curl http://localhost:20128/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key-from-dashboard" \
-d '{
"model": "cc/claude-sonnet-4-20250514",
"messages": [
{"role": "user", "content": "Hello, how are you?"}
]
}'
```
### HTTP Client (Postman, Insomnia)
**Request:**
```
POST http://localhost:20128/v1/chat/completions
```
**Headers:**
```
Content-Type: application/json
Authorization: Bearer your-api-key-from-dashboard
```
**Body:**
```json
{
"model": "cc/claude-sonnet-4-20250514",
"messages": [
{"role": "user", "content": "Hello, how are you?"}
],
"temperature": 0.7,
"max_tokens": 1000
}
```
### Tích hợp LangChain
```python
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage
llm = ChatOpenAI(
model_name="cc/claude-sonnet-4-20250514",
openai_api_key="your-api-key-from-dashboard",
openai_api_base="http://localhost:20128/v1",
temperature=0.7
)
messages = [HumanMessage(content="Explain quantum computing")]
response = llm(messages)
print(response.content)
```
### Tích hợp LlamaIndex
```python
from llama_index.llms import OpenAI
llm = OpenAI(
model="cc/claude-sonnet-4-20250514",
api_key="your-api-key-from-dashboard",
api_base="http://localhost:20128/v1"
)
response = llm.complete("What is machine learning?")
print(response.text)
```
## Ví dụ Script Tùy chỉnh
### Script Xử lý Batch
```python
import openai
import json
openai.api_key = "your-api-key-from-dashboard"
openai.api_base = "http://localhost:20128/v1"
def process_batch(prompts, model="cx/deepseek-chat"):
results = []
for prompt in prompts:
response = openai.ChatCompletion.create(
model=model,
messages=[{"role": "user", "content": prompt}]
)
results.append({
"prompt": prompt,
"response": response.choices[0].message.content
})
return results
prompts = [
"Explain AI in one sentence",
"What is machine learning?",
"Define neural networks"
]
results = process_batch(prompts)
print(json.dumps(results, indent=2))
```
### Xử lý Streaming Response
```javascript
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "your-api-key-from-dashboard",
baseURL: "http://localhost:20128/v1"
});
async function streamResponse(prompt) {
const stream = await client.chat.completions.create({
model: "cc/claude-sonnet-4-20250514",
messages: [{ role: "user", content: prompt }],
stream: true
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content || "";
process.stdout.write(content);
}
}
streamResponse("Write a short story about AI");
```
### So sánh Nhiều Model
```python
from openai import OpenAI
client = OpenAI(
api_key="your-api-key-from-dashboard",
base_url="http://localhost:20128/v1"
)
models = [
"cc/claude-sonnet-4-20250514",
"cx/deepseek-chat",
"glm/glm-4-plus"
]
prompt = "Explain quantum computing in simple terms"
for model in models:
response = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}]
)
print(f"\n=== {model} ===")
print(response.choices[0].message.content)
```
## Pattern Tích hợp Phổ biến
### Biến môi trường
Lưu credentials an toàn:
```bash
# .env file
ROUTER_API_KEY=your-api-key-from-dashboard
ROUTER_BASE_URL=http://localhost:20128/v1
ROUTER_MODEL=cc/claude-sonnet-4-20250514
```
```python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("ROUTER_API_KEY"),
base_url=os.getenv("ROUTER_BASE_URL")
)
```
### Xử lý Lỗi
```python
from openai import OpenAI, OpenAIError
client = OpenAI(
api_key="your-api-key",
base_url="http://localhost:20128/v1"
)
try:
response = client.chat.completions.create(
model="cc/claude-sonnet-4-20250514",
messages=[{"role": "user", "content": "Hello"}]
)
print(response.choices[0].message.content)
except OpenAIError as e:
print(f"Error: {e}")
```
### Logic Retry
```python
import time
from openai import OpenAI, RateLimitError
client = OpenAI(
api_key="your-api-key",
base_url="http://localhost:20128/v1"
)
def chat_with_retry(prompt, max_retries=3):
for attempt in range(max_retries):
try:
response = client.chat.completions.create(
model="cc/claude-sonnet-4-20250514",
messages=[{"role": "user", "content": prompt}]
)
return response.choices[0].message.content
except RateLimitError:
if attempt < max_retries - 1:
time.sleep(2 ** attempt) # Exponential backoff
else:
raise
```
## Troubleshooting
### Vấn đề Connection
**Vấn đề:** Không kết nối được đến 9Router
```bash
# Check if 9Router is running
curl http://localhost:20128/health
# Expected response:
{"status": "ok"}
```
**Giải pháp:**
- Xác minh 9Router đang chạy
- Kiểm tra port 20128 không bị chặn
- Đảm bảo base URL đúng (bao gồm `/v1`)
### Lỗi Xác thực
**Vấn đề:** 401 Unauthorized
```
Error: Invalid API key
```
**Giải pháp:**
- Xác minh API key từ dashboard
- Kiểm tra format header Authorization: `Bearer your-api-key`
- Đảm bảo không có khoảng trắng hoặc xuống dòng thừa trong API key
### Model Not Found
**Vấn đề:** 404 Model not found
```
Error: Model 'cc/claude-opus' not found
```
**Giải pháp:**
- Dùng tên model chính xác (case-sensitive)
- Kiểm tra model có sẵn: `curl http://localhost:20128/v1/models`
- Xác minh model được bật trong plan của bạn
### Vấn đề Timeout
**Vấn đề:** Request timeout
```
Error: Request timed out after 30s
```
**Giải pháp:**
- Tăng timeout trong cấu hình client
- Dùng model nhanh hơn cho task nhạy cảm về thời gian
- Kiểm tra kết nối network đến 9Router
### Rate Limiting
**Vấn đề:** 429 Too Many Requests
```
Error: Rate limit exceeded
```
**Giải pháp:**
- Triển khai exponential backoff
- Giảm tần suất request
- Kiểm tra rate limit trong dashboard
- Cân nhắc nâng cấp plan
## Best Practices
### Bảo mật
- Lưu API key trong biến môi trường
- Không bao giờ commit API key vào version control
- Dùng HTTPS cho cloud deployment
- Xoay API key định kỳ
### Hiệu năng
- Dùng model phù hợp với độ phức tạp task
- Triển khai caching cho query lặp lại
- Dùng streaming cho phản hồi dài
- Batch request khi có thể
### Xử lý Lỗi
- Luôn triển khai try-catch block
- Thêm logic retry với exponential backoff
- Log lỗi để debug
- Cung cấp cơ chế fallback
### Tối ưu Chi phí
- Chọn model tiết kiệm chi phí cho task đơn giản
- Cache phản hồi khi phù hợp
- Theo dõi usage trong dashboard
- Đặt giới hạn request trong code
## Bước tiếp theo
- [Cấu hình Cursor](cursor.md) cho tích hợp IDE
- [Setup Continue](continue.md) cho VSCode
- [Khám phá CLI usage](../cli/basic-usage.md)
- [Tìm hiểu về chọn model](../models/overview.md)
- [API Reference](../api/reference.md)

View File

@@ -0,0 +1,127 @@
# Tích hợp Roo AI Assistant
Tích hợp 9Router với Roo AI Assistant để truy cập nhiều model AI qua một giao diện thống nhất.
## Yêu cầu
- Roo AI Assistant đã cài đặt
- 9Router API key từ [dashboard](https://9router.com/dashboard)
- 9Router đang chạy (cục bộ hoặc cloud)
## Các bước Cấu hình
### 1. Mở Roo Settings
Khởi chạy Roo AI Assistant và mở panel settings.
### 2. Cấu hình API Provider
1. Đi đến cài đặt **API Provider**
2. Chọn **Ollama** làm provider type
3. Cấu hình các settings sau:
**Cho 9Router cục bộ:**
```
Base URL: http://localhost:20128/v1
API Key: your-api-key-from-dashboard
```
**Cho 9Router cloud:**
```
Base URL: https://9router.com/v1
API Key: your-api-key-from-dashboard
```
### 3. Chọn Model
Chọn từ các model 9Router có sẵn:
**Claude Models:**
- `cc/claude-opus-4-5-20251101` - Mạnh nhất
- `cc/claude-sonnet-4-20250514` - Cân bằng
- `cc/claude-haiku-4-20250514` - Nhanh
**DeepSeek Models:**
- `cx/deepseek-chat` - Đa năng
- `cx/deepseek-reasoner` - Reasoning phức tạp
**GLM Models:**
- `glm/glm-4-plus` - Nâng cao
- `glm/glm-4-flash` - Phản hồi nhanh
### 4. Test Connection
Gửi tin nhắn test để xác minh tích hợp:
```
Hello! Can you confirm you're connected through 9Router?
```
## Ví dụ Sử dụng
### Chat Cơ bản
```
Ask Roo: "Explain quantum computing in simple terms"
Model: cc/claude-sonnet-4-20250514
```
### Tạo Code
```
Ask Roo: "Write a Python function to calculate Fibonacci numbers"
Model: cx/deepseek-chat
```
### Reasoning Phức tạp
```
Ask Roo: "Analyze the trade-offs between microservices and monolithic architecture"
Model: cx/deepseek-reasoner
```
## Mẹo Chọn Model
- **Task nhanh**: Dùng `cc/claude-haiku-4-20250514` hoặc `glm/glm-4-flash`
- **Hiệu năng cân bằng**: Dùng `cc/claude-sonnet-4-20250514` hoặc `cx/deepseek-chat`
- **Reasoning phức tạp**: Dùng `cc/claude-opus-4-5-20251101` hoặc `cx/deepseek-reasoner`
- **Tối ưu chi phí**: Dùng model DeepSeek hoặc GLM
## Troubleshooting
### Connection Failed
- Xác minh 9Router đang chạy: `curl http://localhost:20128/health`
- Kiểm tra API key đúng
- Đảm bảo Base URL bao gồm hậu tố `/v1`
### Model không khả dụng
- Kiểm tra tên model khớp chính xác (case-sensitive)
- Xác minh model được bật trong 9Router plan
- Thử model khác từ danh sách
### Phản hồi Chậm
- Chuyển sang model nhanh hơn (haiku, flash)
- Kiểm tra kết nối network
- Theo dõi logs 9Router để xem vấn đề
## Cấu hình Nâng cao
### Custom Model Aliases
Bạn có thể tạo shortcut cho model thường dùng trong Roo settings:
```
Alias: "fast" → cc/claude-haiku-4-20250514
Alias: "smart" → cc/claude-opus-4-5-20251101
Alias: "code" → cx/deepseek-chat
```
### Nhiều Profile
Setup profile khác nhau cho use case khác nhau:
- **Development**: Model DeepSeek cho code
- **Writing**: Model Claude cho nội dung
- **Research**: Model Reasoner cho phân tích
## Bước tiếp theo
- [Cấu hình Cursor](cursor.md) cho tích hợp IDE
- [Setup Continue](continue.md) cho VSCode
- [Khám phá CLI usage](../cli/basic-usage.md)

View File

@@ -0,0 +1,462 @@
# Cheap Providers - Backup Siêu Rẻ
Khi hết quota subscription, trả vài xu thay vì vài đô. Rẻ hơn ChatGPT API ~90%!
---
## Tổng quan
Provider tier rẻ là **backup** khi hết quota subscription:
- 💰 **GLM-4.7** - $0.6/$2.2 per 1M tokens (reset hàng ngày)
- 💰 **MiniMax M2.1** - $0.2/$1.0 per 1M tokens (reset 5h)
- 💰 **Kimi K2** - $9/tháng cố định (10M tokens)
**Chiến lược:** Dùng sau khi hết quota subscription, trước free tier. Tiết kiệm chi phí khổng lồ so với ChatGPT API ($20/1M).
---
## GLM-4.7 (Reset Hàng ngày)
### Pricing
| Tier | Input | Output | Reset |
|------|-------|--------|-------|
| Standard | $0.60/1M | $2.20/1M | Hàng ngày 10:00 AM |
| Coding Plan | $0.60/1M | $2.20/1M | Hàng ngày 10:00 AM (3× quota) |
**Ví dụ Chi phí (10M tokens):**
- Input: 10M × $0.60 = $6
- Output: 10M × $2.20 = $22
- **Tổng: $6-22** so với $200 trên ChatGPT API!
### Setup
**Bước 1: Đăng ký**
1. Vào [Zhipu AI](https://open.bigmodel.cn/)
2. Tạo tài khoản (xác thực số điện thoại)
3. Chọn **Coding Plan** để có quota 3× ở cùng giá
**Bước 2: Lấy API Key**
```bash
Dashboard → API Keys → Create New
→ Copy API key (starts with "zhipu-")
```
**Bước 3: Thêm vào 9Router**
```bash
9router
# Dashboard → Providers → Add API Key
Provider: glm
API Key: zhipu-your-api-key-here
```
**Bước 4: Dùng trong CLI**
```
Model: glm/glm-4.7
glm/glm-4.6v (vision)
```
### Model có sẵn
| Model ID | Mô tả | Context | Tốt nhất cho |
|----------|-------------|---------|----------|
| `glm/glm-4.7` | GLM 4.7 | 128K | Coding, task chung |
| `glm/glm-4.6v` | GLM 4.6V Vision | 128K | Phân tích ảnh |
### Mẹo Pro
- **Coding Plan** - 3× quota cùng giá ($0.6/$2.2)
- **Reset hàng ngày** - Quota mới lúc 10:00 AM giờ Bắc Kinh
- **Tốt nhất cho coding** - Tối ưu cho code generation
- **Context 128K** - Xử lý file lớn
### Reset Quota
```
Daily reset: 10:00 AM Beijing Time (UTC+8)
→ 2:00 AM UTC
→ 6:00 PM PST (previous day)
→ 9:00 PM EST (previous day)
Plan your heavy tasks around reset time!
```
---
## MiniMax M2.1 (Reset 5 Giờ)
### Pricing
| Tier | Input | Output | Reset |
|------|-------|--------|-------|
| Standard | $0.20/1M | $1.00/1M | 5 giờ rolling |
**Ví dụ Chi phí (10M tokens):**
- Input: 10M × $0.20 = $2
- Output: 10M × $1.00 = $10
- **Tổng: $2-10** - Lựa chọn rẻ nhất!
### Setup
**Bước 1: Đăng ký**
1. Vào [MiniMax](https://www.minimax.io/)
2. Tạo tài khoản
3. Xác thực email/điện thoại
**Bước 2: Lấy API Key**
```bash
Dashboard → API Management → Create Key
→ Copy API key
```
**Bước 3: Thêm vào 9Router**
```bash
9router
# Dashboard → Providers → Add API Key
Provider: minimax
API Key: your-minimax-api-key
```
**Bước 4: Dùng trong CLI**
```
Model: minimax/MiniMax-M2.1
```
### Model có sẵn
| Model ID | Mô tả | Context | Tốt nhất cho |
|----------|-------------|---------|----------|
| `minimax/MiniMax-M2.1` | MiniMax M2.1 | 1M tokens | Context dài, coding |
### Mẹo Pro
- **Lựa chọn rẻ nhất** - $0.20/1M input (rẻ hơn ChatGPT 90%)
- **5 giờ rolling** - Quota reset mỗi 5 giờ
- **Context 1M** - Cửa sổ context khổng lồ
- **Tốt nhất cho file dài** - Xử lý cả codebase
### Reset Quota
```
5-hour rolling window:
→ Use quota → Wait 5 hours → Fresh quota
Example:
10:00 AM - Use 5M tokens
3:00 PM - Fresh quota available
8:00 PM - Fresh quota available
Code 24/7 with minimal cost!
```
---
## Kimi K2 (Cố định $9/tháng)
### Pricing
| Plan | Chi phí Hàng tháng | Tokens bao gồm | Chi phí Hiệu quả |
|------|--------------|-----------------|----------------|
| Subscription | $9 | 10M tokens | $0.90/1M |
**Ví dụ Chi phí:**
- $9/tháng cố định
- 10M tokens bao gồm
- **Hiệu quả: $0.90/1M** - Giá trị tốt nhất cho sử dụng đều!
### Setup
**Bước 1: Đăng ký**
1. Vào [Moonshot AI](https://platform.moonshot.ai/)
2. Tạo tài khoản
3. Đăng ký plan $9/tháng
**Bước 2: Lấy API Key**
```bash
Dashboard → API Keys → Create New
→ Copy API key
```
**Bước 3: Thêm vào 9Router**
```bash
9router
# Dashboard → Providers → Add API Key
Provider: kimi
API Key: your-kimi-api-key
```
**Bước 4: Dùng trong CLI**
```
Model: kimi/kimi-latest
```
### Model có sẵn
| Model ID | Mô tả | Context | Tốt nhất cho |
|----------|-------------|---------|----------|
| `kimi/kimi-latest` | Kimi Latest | 200K | Coding chung |
### Mẹo Pro
- **Chi phí cố định** - $9/tháng bất kể usage (lên tới 10M)
- **Tốt nhất cho sử dụng đều** - Nếu dùng 10M/tháng, chỉ $0.90/1M
- **Reset hàng tháng** - 10M tokens reset hàng tháng
- **Billing dự đoán được** - Không có chi phí bất ngờ
### Reset Quota
```
Monthly reset: 1st of each month
→ 10M tokens refresh
Example monthly usage:
Week 1: 3M tokens
Week 2: 2M tokens
Week 3: 3M tokens
Week 4: 2M tokens
Total: 10M tokens = $9 flat
```
---
## So sánh Giá
| Provider | Input/1M | Output/1M | Reset | Chi phí 10M | Tốt nhất cho |
|----------|----------|-----------|-------|----------|----------|
| **GLM-4.7** | $0.60 | $2.20 | Hàng ngày 10AM | $6-22 | Dùng quota hàng ngày |
| **MiniMax M2.1** | $0.20 | $1.00 | 5 giờ | $2-10 | **Rẻ nhất!** |
| **Kimi K2** | $0.90 | $0.90 | Hàng tháng | **$9 cố định** | Sử dụng đều |
| ChatGPT API | $20.00 | $20.00 | Không | $200 | ❌ Đắt |
**Tiết kiệm:** Rẻ hơn ChatGPT API 90-95%!
---
## Ví dụ Sử dụng
### Setup Cursor IDE
```
Settings → Models → Advanced:
OpenAI API Base URL: http://localhost:20128/v1
OpenAI API Key: [from 9router dashboard]
Model: glm/glm-4.7
```
### Tạo Combo (Khuyên dùng)
```
Dashboard → Combos → Create New
Name: cheap-backup
Models:
1. cc/claude-opus-4-5 (Subscription primary)
2. glm/glm-4.7 (Cheap backup, daily reset)
3. minimax/MiniMax-M2.1 (Cheapest fallback)
4. if/kimi-k2-thinking (FREE emergency)
Use in CLI: cheap-backup
```
**Kết quả:** Subscription → Cheap → Cheapest → Free
---
## Tối ưu Chi phí
### Chiến lược 1: Lịch Reset Hàng ngày
```
Morning (10AM): Fresh GLM quota
→ Use GLM for heavy tasks
→ Save subscription quota
Afternoon: Subscription quota
→ Use Claude/Codex for complex tasks
Evening: MiniMax (5h reset)
→ Cheap fallback for late work
Night: Free tier (iFlow)
→ Zero cost emergency backup
```
### Chiến lược 2: Ưu tiên Ngân sách
```
Set monthly budget: $20
Allocation:
- $9 Kimi K2 (10M tokens flat)
- $6 GLM daily quota (10M tokens)
- $5 MiniMax overflow (25M tokens)
Total: 45M tokens for $20
vs 1M tokens for $20 on ChatGPT API!
```
### Chiến lược 3: Tối đa Subscription Trước
```
Priority:
1. Gemini CLI (180K/month FREE)
2. Claude Code (subscription you already pay)
3. GLM-4.7 (cheap backup, $0.6/1M)
4. MiniMax M2.1 (cheapest, $0.2/1M)
5. iFlow (FREE emergency)
Monthly cost example (100M tokens):
- 60M via Gemini CLI: $0 (free)
- 30M via Claude Code: $0 (subscription)
- 8M via GLM: $4.80
- 2M via MiniMax: $0.40
Total: $5.20/month!
```
---
## Ví dụ Thực tế
### Ví dụ 1: Tháng Coding Nặng (100M tokens)
```
Breakdown:
- 60M via subscription (Claude/Codex): $0 extra
- 30M via GLM-4.7: $18
- 10M via MiniMax M2.1: $2
Total: $20/month
vs $2000 on ChatGPT API!
Savings: 99% cheaper!
```
### Ví dụ 2: Coder Ngân sách ($10/tháng)
```
Strategy:
- $9 Kimi K2 (10M tokens)
- $1 MiniMax overflow (5M tokens)
Total: 15M tokens for $10
vs 0.5M tokens for $10 on ChatGPT API!
30× more tokens!
```
### Ví dụ 3: Freelancer (Usage Biến thiên)
```
Light month (20M tokens):
- 15M via subscription: $0
- 5M via GLM: $3
Total: $3
Heavy month (150M tokens):
- 60M via subscription: $0
- 60M via GLM: $36
- 30M via MiniMax: $6
Total: $42
Average: $22.50/month
vs $3400 on ChatGPT API!
```
---
## Best Practices
### 1. Theo dõi Quota Hàng ngày
```
Dashboard shows:
- GLM quota: 75% used (reset in 6h)
- MiniMax quota: 50% used (reset in 2h)
- Kimi quota: 8M/10M used (reset in 15 days)
Plan heavy tasks around reset times!
```
### 2. Dùng Coding Plan (GLM)
```
Standard: 1× quota
Coding Plan: 3× quota (same price!)
→ Always choose Coding Plan
```
### 3. Kết hợp với Free Tier
```
Combo:
1. gc/gemini-3-flash (FREE primary)
2. glm/glm-4.7 (cheap backup)
3. minimax/MiniMax-M2.1 (cheapest)
4. if/kimi-k2-thinking (FREE emergency)
Result: Minimize costs, maximize uptime
```
### 4. Đặt Cảnh báo Ngân sách
```
Dashboard → Settings → Budget Alerts
Daily: $2 limit
Weekly: $10 limit
Monthly: $30 limit
→ Auto switch to free tier when limit reached
```
---
## Troubleshooting
### "Quota exhausted"
**Giải pháp:**
- GLM: Đợi đến 10:00 AM giờ Bắc Kinh
- MiniMax: Đợi 5 giờ kể từ lần dùng đầu
- Kimi: Đợi đến ngày 1 tháng sau
- Dùng combo fallback sang free tier
### "API key invalid"
**Giải pháp:**
- Kiểm tra API key sao chép đúng
- Xác minh tài khoản có credits
- Tạo lại API key nếu cần
### "High costs"
**Giải pháp:**
- Kiểm tra usage stats trong Dashboard
- Đặt cảnh báo ngân sách
- Chuyển sang MiniMax ($0.2/1M rẻ nhất)
- Dùng free tier cho task không quan trọng
---
## Bước tiếp theo
- **Thêm free fallback:** [Free Providers](./free.md)
- **Setup subscriptions:** [Subscription Providers](./subscription.md)
- **Tạo combos:** Dashboard → Combos → Create New

View File

@@ -0,0 +1,442 @@
# Free Providers - Fallback Chi phí 0
Backup khẩn cấp khi mọi thứ khác bị giới hạn quota. Code 24/7 với chi phí 0!
---
## Tổng quan
Provider free tier là **fallback** khi hết quota subscription và cheap:
- 🆓 **iFlow** - 8 model MIỄN PHÍ (Kimi K2, Qwen3, GLM 4.7, MiniMax M2...)
- 🆓 **Qwen** - 3 model MIỄN PHÍ (Qwen3 Coder Plus/Flash, Vision)
- 🆓 **Kiro** - 2 model MIỄN PHÍ (Claude Sonnet 4.5, Haiku 4.5)
**Chiến lược:** Dùng làm backup khẩn cấp. Usage không giới hạn, miễn phí mãi mãi!
---
## iFlow (8 Model MIỄN PHÍ)
### Pricing
| Plan | Chi phí Hàng tháng | Models | Quota |
|------|--------------|--------|-------|
| FREE | $0 | 8 models | Không giới hạn |
**Giá trị tốt nhất:** Nhiều model nhất trong free tier! Kimi K2, Qwen3, GLM, MiniMax, DeepSeek.
### Setup
**Bước 1: Kết nối qua Dashboard**
```bash
9router
# Dashboard → Providers → Connect iFlow
```
**Bước 2: Đăng nhập OAuth iFlow**
- Click "Connect iFlow"
- Browser mở → trang đăng nhập iFlow
- Tạo tài khoản hoặc đăng nhập
- Cấp quyền
- Auto token refresh được bật
**Bước 3: Dùng trong CLI**
```
Model: if/kimi-k2-thinking
if/kimi-k2
if/qwen3-coder-plus
if/glm-4.7
if/minimax-m2
if/deepseek-r1
if/deepseek-v3.2-chat
if/deepseek-v3.2-reasoner
```
### Model có sẵn
| Model ID | Mô tả | Tốt nhất cho |
|----------|-------------|----------|
| `if/kimi-k2-thinking` | Kimi K2 Thinking | Reasoning phức tạp |
| `if/kimi-k2` | Kimi K2 | Coding chung |
| `if/qwen3-coder-plus` | Qwen3 Coder Plus | Tạo code |
| `if/glm-4.7` | GLM 4.7 | Tiếng Trung + Anh |
| `if/minimax-m2` | MiniMax M2 | Context dài |
| `if/deepseek-r1` | DeepSeek R1 | Task reasoning |
| `if/deepseek-v3.2-chat` | DeepSeek V3.2 Chat | Conversational |
| `if/deepseek-v3.2-reasoner` | DeepSeek V3.2 Reasoner | Logic phức tạp |
### Mẹo Pro
- **8 model MIỄN PHÍ** - Đa dạng nhất trong free tier
- **Usage không giới hạn** - Không giới hạn quota
- **Kimi K2 Thinking** - Tốt nhất cho reasoning phức tạp
- **DeepSeek R1** - Khả năng reasoning mạnh
---
## Qwen (3 Model MIỄN PHÍ)
### Pricing
| Plan | Chi phí Hàng tháng | Models | Quota |
|------|--------------|--------|-------|
| FREE | $0 | 3 models | Không giới hạn |
### Setup
**Bước 1: Kết nối qua Dashboard**
```bash
9router
# Dashboard → Providers → Connect Qwen
```
**Bước 2: Xác thực Device Code**
- Click "Connect Qwen"
- Dashboard hiển thị device code
- Vào URL xác thực
- Nhập device code
- Đăng nhập tài khoản Qwen
- Auto token refresh được bật
**Bước 3: Dùng trong CLI**
```
Model: qw/qwen3-coder-plus
qw/qwen3-coder-flash
qw/vision-model
```
### Model có sẵn
| Model ID | Mô tả | Tốt nhất cho |
|----------|-------------|----------|
| `qw/qwen3-coder-plus` | Qwen3 Coder Plus | Coding nâng cao |
| `qw/qwen3-coder-flash` | Qwen3 Coder Flash | Phản hồi nhanh |
| `qw/vision-model` | Qwen3 Vision | Phân tích ảnh |
### Mẹo Pro
- **Qwen3 Coder Plus** - Khả năng coding mạnh
- **Qwen3 Coder Flash** - Nhanh cho task nhanh
- **Vision model** - Phân tích ảnh MIỄN PHÍ
- **Usage không giới hạn** - Không giới hạn quota
---
## Kiro (Claude MIỄN PHÍ)
### Pricing
| Plan | Chi phí Hàng tháng | Models | Quota |
|------|--------------|--------|-------|
| FREE | $0 | Claude Sonnet 4.5, Haiku 4.5 | Không giới hạn |
**Giá trị tốt nhất:** Claude MIỄN PHÍ! Cùng chất lượng với Claude Code trả phí.
### Setup
**Bước 1: Kết nối qua Dashboard**
```bash
9router
# Dashboard → Providers → Connect Kiro
```
**Bước 2: AWS Builder ID hoặc OAuth**
- Click "Connect Kiro"
- Chọn phương thức đăng nhập:
- AWS Builder ID (khuyên dùng)
- Tài khoản Google
- Tài khoản GitHub
- Cấp quyền
- Auto token refresh được bật
**Bước 3: Dùng trong CLI**
```
Model: kr/claude-sonnet-4.5
kr/claude-haiku-4.5
```
### Model có sẵn
| Model ID | Mô tả | Tốt nhất cho |
|----------|-------------|----------|
| `kr/claude-sonnet-4.5` | Claude Sonnet 4.5 | Cân bằng chất lượng/tốc độ |
| `kr/claude-haiku-4.5` | Claude Haiku 4.5 | Phản hồi nhanh |
### Mẹo Pro
- **Claude MIỄN PHÍ** - Cùng chất lượng tier trả phí
- **AWS Builder ID** - Setup dễ với tài khoản AWS
- **Usage không giới hạn** - Không giới hạn quota
- **Chất lượng tốt nhất** - Claude 4.5 miễn phí!
---
## So sánh Tính năng
| Provider | Models | Model tốt nhất | Setup | Quota |
|----------|--------|------------|-------|-------|
| **iFlow** | 8 | Kimi K2 Thinking | OAuth | Không giới hạn |
| **Qwen** | 3 | Qwen3 Coder Plus | Device Code | Không giới hạn |
| **Kiro** | 2 | Claude Sonnet 4.5 | AWS Builder ID | Không giới hạn |
**Thắng cuộc:** iFlow vì đa dạng, Kiro vì chất lượng!
---
## Ví dụ Sử dụng
### Setup Cursor IDE
```
Settings → Models → Advanced:
OpenAI API Base URL: http://localhost:20128/v1
OpenAI API Key: [from 9router dashboard]
Model: if/kimi-k2-thinking
```
### Tạo Combo (Khuyên dùng)
```
Dashboard → Combos → Create New
Name: free-combo
Models:
1. if/kimi-k2-thinking (iFlow primary)
2. qw/qwen3-coder-plus (Qwen backup)
3. kr/claude-sonnet-4.5 (Kiro quality)
Use in CLI: free-combo
```
**Kết quả:** Chi phí 0, uptime tối đa!
---
## Chiến lược Fallback Đầy đủ
### Combo 3 Tầng Hoàn chỉnh
```
Dashboard → Combos → Create New
Name: complete-fallback
Models:
1. gc/gemini-3-flash-preview (FREE subscription)
2. cc/claude-opus-4-5 (Paid subscription)
3. glm/glm-4.7 (Cheap backup, $0.6/1M)
4. minimax/MiniMax-M2.1 (Cheapest, $0.2/1M)
5. if/kimi-k2-thinking (FREE fallback)
6. kr/claude-sonnet-4.5 (FREE quality)
Use in CLI: complete-fallback
```
**Kết quả:**
- Tier 1: Subscription MIỄN PHÍ (Gemini CLI)
- Tier 2: Subscription trả phí (Claude Code)
- Tier 3: Backup rẻ (GLM, MiniMax)
- Tier 4: Fallback MIỄN PHÍ (iFlow, Kiro)
**Không bao giờ ngừng code!**
---
## Best Practices
### 1. Dùng làm Backup Khẩn cấp
```
Priority:
1. Subscription tier (maximize paid quota)
2. Cheap tier (pennies per 1M tokens)
3. FREE tier (unlimited, zero cost)
Only use free tier when:
- Subscription quota exhausted
- Budget limit reached
- Testing/non-critical tasks
```
### 2. Chọn Model phù hợp
```
Complex reasoning: if/kimi-k2-thinking
Fast coding: qw/qwen3-coder-flash
Best quality: kr/claude-sonnet-4.5
Long context: if/minimax-m2
Vision tasks: qw/vision-model
```
### 3. Tạo Combo Chỉ Free
```
For zero-cost coding:
Name: zero-cost
Models:
1. kr/claude-sonnet-4.5 (Best quality)
2. if/kimi-k2-thinking (Complex tasks)
3. qw/qwen3-coder-plus (Fast coding)
Cost: $0 forever!
```
### 4. Test Trước Production
```
Use free tier to:
- Test prompts
- Prototype features
- Learn new frameworks
- Non-critical tasks
Save paid quota for:
- Production code
- Complex refactoring
- Critical features
```
---
## Ví dụ Thực tế
### Ví dụ 1: Sinh viên/Người học (Ngân sách 0)
```
Setup:
1. kr/claude-sonnet-4.5 (Best quality)
2. if/kimi-k2-thinking (Complex reasoning)
3. qw/qwen3-coder-plus (Fast coding)
Monthly cost: $0
Usage: Unlimited
Perfect for:
- Learning to code
- Personal projects
- Homework/assignments
```
### Ví dụ 2: Freelancer (Tiết kiệm Ngân sách)
```
Setup:
1. gc/gemini-3-flash-preview (FREE 180K/month)
2. glm/glm-4.7 (Cheap backup, $0.6/1M)
3. if/kimi-k2-thinking (FREE fallback)
Monthly cost: $5-10
Usage: 100M+ tokens
Perfect for:
- Client projects (paid tier)
- Testing (free tier)
- Emergency backup
```
### Ví dụ 3: Heavy User (Tối đa hết tất cả)
```
Setup:
1. gc/gemini-3-flash-preview (FREE 180K/month)
2. cc/claude-opus-4-5 (Subscription $20-100)
3. cx/gpt-5.2-codex (Subscription $20-200)
4. glm/glm-4.7 (Cheap $0.6/1M)
5. minimax/MiniMax-M2.1 (Cheapest $0.2/1M)
6. if/kimi-k2-thinking (FREE unlimited)
7. kr/claude-sonnet-4.5 (FREE quality)
Monthly cost: $40-320 (subscriptions) + $10-20 (cheap tier)
Usage: 500M+ tokens
Perfect for:
- Professional development
- Team projects
- 24/7 coding
```
---
## So sánh Chi phí
### Kịch bản: 100M tokens/tháng
**Phương án 1: Chỉ ChatGPT API**
```
100M × $20/1M = $2,000/month
```
**Phương án 2: Chỉ 9Router Free Tier**
```
100M via free tier = $0/month
Savings: $2,000/month (100%)
```
**Phương án 3: Chiến lược Hoàn chỉnh 9Router**
```
60M via Gemini CLI (FREE): $0
30M via Claude Code (subscription): $0 extra
8M via GLM (cheap): $4.80
2M via iFlow (FREE): $0
Total: $4.80/month + subscriptions you already have
Savings: $1,995/month (99.76%)
```
---
## Troubleshooting
### "OAuth failed"
**Giải pháp:**
- Kiểm tra kết nối internet
- Thử browser khác
- Xóa cache browser
- Kết nối lại trong dashboard
### "Model not available"
**Giải pháp:**
- Kiểm tra provider đã kết nối trong dashboard
- Xác minh OAuth token hợp lệ
- Kết nối lại provider nếu cần
### "Slow responses"
**Giải pháp:**
- Free tier có thể có ưu tiên thấp hơn
- Dùng trong giờ thấp điểm
- Chuyển sang free provider khác
- Nâng cấp lên cheap tier để tăng tốc
---
## Giới hạn
### Cân nhắc Free Tier
- **Tốc độ** - Có thể chậm hơn tier trả phí
- **Ưu tiên** - Ưu tiên thấp hơn trong giờ cao điểm
- **Rate limit** - Có thể bị rate limit (nhưng không giới hạn quota)
- **Tính khả dụng** - Có thể có downtime thỉnh thoảng
**Giải pháp:** Dùng chiến lược fallback 3 tầng để đáng tin cậy!
---
## Bước tiếp theo
- **Setup subscriptions:** [Subscription Providers](./subscription.md)
- **Thêm cheap backup:** [Cheap Providers](./cheap.md)
- **Tạo combos:** Dashboard → Combos → Create New
- **Bắt đầu code:** Dùng combo `complete-fallback` để có độ tin cậy tối đa

View File

@@ -0,0 +1,404 @@
# Subscription Providers - Tối đa hóa Giá trị
Tối đa hóa subscription AI hiện có với quota tracking thông minh và auto fallback. Dùng hết mọi quota subscription trước khi reset!
---
## Tổng quan
Provider tier subscription là lựa chọn **chính** - bạn đã trả tiền cho chúng, hãy lấy đầy đủ giá trị:
- ✅ **Claude Code** (Pro/Max) - Claude 4.5 Opus/Sonnet/Haiku
- ✅ **OpenAI Codex** (Plus/Pro) - GPT 5.2 Codex, GPT 5.1 Codex Max
- ✅ **Gemini CLI** (Free tier!) - 180K completions/tháng
- ✅ **GitHub Copilot** - GPT-5, Claude 4.5, Gemini 3
- ✅ **Antigravity** (Google) - Gemini 3 Pro, Claude Sonnet 4.5
**Chiến lược:** Dùng đầu tiên, theo dõi quota thời gian thực, fallback sang cheap/free khi hết.
---
## Claude Code (Pro/Max)
### Pricing
| Plan | Chi phí Hàng tháng | Quota Reset | Models |
|------|--------------|-------------|--------|
| Pro | $20 | 5 giờ + Hàng tuần | Opus, Sonnet, Haiku |
| Max | $100 | 5 giờ + Hàng tuần | Opus, Sonnet, Haiku |
### Setup
**Bước 1: Kết nối qua Dashboard**
```bash
9router
# Dashboard opens → Providers → Connect Claude Code
```
**Bước 2: Đăng nhập OAuth**
- Click "Connect Claude Code"
- Browser mở → Đăng nhập Claude.ai
- Auto token refresh được bật
- Quota tracking bắt đầu
**Bước 3: Dùng trong CLI**
```
Model: cc/claude-opus-4-5-20251101
cc/claude-sonnet-4-5-20250929
cc/claude-haiku-4-5-20251001
```
### Model có sẵn
| Model ID | Mô tả | Tốt nhất cho |
|----------|-------------|----------|
| `cc/claude-opus-4-5-20251101` | Claude 4.5 Opus | Task phức tạp, kiến trúc |
| `cc/claude-sonnet-4-5-20250929` | Claude 4.5 Sonnet | Cân bằng tốc độ/chất lượng |
| `cc/claude-haiku-4-5-20251001` | Claude 4.5 Haiku | Phản hồi nhanh |
### Mẹo Pro
- **Dùng Opus cho task phức tạp** - Quyết định kiến trúc, refactoring
- **Dùng Sonnet cho tốc độ** - Edit nhanh, tạo code
- **Theo dõi quota mỗi model** - Dashboard hiển thị usage mỗi model
- **Reset 5 giờ** - Quota mới mỗi 5 giờ + reset hàng tuần
---
## OpenAI Codex (Plus/Pro)
### Pricing
| Plan | Chi phí Hàng tháng | Quota Reset | Models |
|------|--------------|-------------|--------|
| Plus | $20 | 5 giờ + Hàng tuần | GPT 5.2, GPT 5.1 |
| Pro | $200 | 5 giờ + Hàng tuần | GPT 5.2 Codex, GPT 5.1 Max |
### Setup
**Bước 1: Kết nối qua Dashboard**
```bash
9router
# Dashboard → Providers → Connect Codex
```
**Bước 2: Đăng nhập OAuth**
- Click "Connect Codex"
- Browser mở đến `http://localhost:1455`
- Đăng nhập tài khoản OpenAI
- Auto token refresh được bật
**Bước 3: Dùng trong CLI**
```
Model: cx/gpt-5.2-codex
cx/gpt-5.1-codex-max
cx/gpt-5.2
cx/gpt-5.1-codex
```
### Model có sẵn
| Model ID | Mô tả | Tốt nhất cho |
|----------|-------------|----------|
| `cx/gpt-5.2-codex` | GPT 5.2 Codex | Model coding mới nhất |
| `cx/gpt-5.1-codex-max` | GPT 5.1 Codex Max | Context tối đa |
| `cx/gpt-5.2` | GPT 5.2 | Task chung |
| `cx/gpt-5.1-codex` | GPT 5.1 Codex | Coding ổn định |
### Mẹo Pro
- **Quota rolling 5 giờ** - Quota mới mỗi 5 giờ
- **Reset hàng tuần** - Reset quota đầy đủ hàng tuần
- **Tier Pro** - Quota gấp 10× Plus
---
## Gemini CLI (MIỄN PHÍ 180K/tháng!)
### Pricing
| Plan | Chi phí Hàng tháng | Quota | Reset |
|------|--------------|-------|-------|
| FREE | $0 | 180K completions/tháng + 1K/ngày | Hàng ngày + Hàng tháng |
**Giá trị tốt nhất:** Free tier khổng lồ! Dùng trước tier trả phí.
### Setup
**Bước 1: Kết nối qua Dashboard**
```bash
9router
# Dashboard → Providers → Connect Gemini CLI
```
**Bước 2: Google OAuth**
- Click "Connect Gemini CLI"
- Browser mở → Đăng nhập tài khoản Google
- Cấp quyền
- Auto token refresh được bật
**Bước 3: Dùng trong CLI**
```
Model: gc/gemini-3-flash-preview
gc/gemini-3-pro-preview
gc/gemini-2.5-pro
gc/gemini-2.5-flash
```
### Model có sẵn
| Model ID | Mô tả | Tốt nhất cho |
|----------|-------------|----------|
| `gc/gemini-3-flash-preview` | Gemini 3 Flash Preview | Phản hồi nhanh |
| `gc/gemini-3-pro-preview` | Gemini 3 Pro Preview | Task phức tạp |
| `gc/gemini-2.5-pro` | Gemini 2.5 Pro | Production ổn định |
| `gc/gemini-2.5-flash` | Gemini 2.5 Flash | Task nhanh |
### Mẹo Pro
- **180K completions/tháng** - Free tier khổng lồ
- **Giới hạn 1K/ngày** - Quota hàng ngày reset lúc nửa đêm
- **Dùng đầu tiên** - Free tier, dùng trước subscription trả phí
- **Không cần thẻ tín dụng** - Hoàn toàn miễn phí với tài khoản Google
---
## GitHub Copilot
### Pricing
| Plan | Chi phí Hàng tháng | Quota Reset | Models |
|------|--------------|-------------|--------|
| Individual | $10 | Hàng tháng (ngày 1) | GPT-5, Claude 4.5, Gemini 3 |
| Business | $19 | Hàng tháng (ngày 1) | GPT-5, Claude 4.5, Gemini 3 |
### Setup
**Bước 1: Kết nối qua Dashboard**
```bash
9router
# Dashboard → Providers → Connect GitHub
```
**Bước 2: OAuth qua GitHub**
- Click "Connect GitHub"
- Browser mở → Đăng nhập GitHub
- Authorize GitHub Copilot
- Auto token refresh được bật
**Bước 3: Dùng trong CLI**
```
Model: gh/gpt-5
gh/gpt-5.1-codex-max
gh/claude-4.5-sonnet
gh/gemini-3-pro
```
### Model có sẵn
| Model ID | Mô tả | Tốt nhất cho |
|----------|-------------|----------|
| `gh/gpt-5` | GPT-5 | Model OpenAI mới nhất |
| `gh/gpt-5.1-codex-max` | GPT-5.1 Codex Max | Context tối đa |
| `gh/claude-4.5-sonnet` | Claude 4.5 Sonnet | Chất lượng Anthropic |
| `gh/gemini-3-pro` | Gemini 3 Pro | Chất lượng Google |
### Mẹo Pro
- **Reset hàng tháng** - Reset quota đầy đủ vào ngày 1 hàng tháng
- **Nhiều model** - Truy cập GPT, Claude, Gemini trong một subscription
- **Tier Business** - Quota cao hơn cho team
---
## Antigravity (Tài khoản Google)
### Pricing
| Plan | Chi phí Hàng tháng | Quota | Models |
|------|--------------|-------|--------|
| FREE | $0 | Tương tự Gemini CLI | Gemini 3 Pro, Claude Sonnet 4.5 |
### Setup
**Bước 1: Kết nối qua Dashboard**
```bash
9router
# Dashboard → Providers → Connect Antigravity
```
**Bước 2: Google OAuth**
- Click "Connect Antigravity"
- Browser mở → Đăng nhập tài khoản Google
- Cấp quyền
- Auto token refresh được bật
**Bước 3: Dùng trong CLI**
```
Model: ag/gemini-3-pro-high
ag/claude-sonnet-4-5
ag/claude-opus-4-5-thinking
```
### Model có sẵn
| Model ID | Mô tả | Tốt nhất cho |
|----------|-------------|----------|
| `ag/gemini-3-pro-high` | Gemini 3 Pro High | Phản hồi chất lượng cao |
| `ag/claude-sonnet-4-5` | Claude Sonnet 4.5 | Chất lượng Anthropic |
| `ag/claude-opus-4-5-thinking` | Claude Opus 4.5 Thinking | Reasoning phức tạp |
### Mẹo Pro
- **Free tier** - Không phí với tài khoản Google
- **Truy cập Claude** - Claude Sonnet/Opus miễn phí
- **Quota tương tự Gemini CLI** - Giới hạn hàng ngày/tháng
---
## So sánh Giá
| Provider | Chi phí Hàng tháng | Quota Reset | Giá trị |
|----------|--------------|-------------|-------|
| **Claude Code Pro** | $20 | 5 giờ + Hàng tuần | ⭐⭐⭐⭐⭐ Chất lượng tốt nhất |
| **Claude Code Max** | $100 | 5 giờ + Hàng tuần | ⭐⭐⭐⭐⭐ Quota cao nhất |
| **Codex Plus** | $20 | 5 giờ + Hàng tuần | ⭐⭐⭐⭐ Giá trị tốt |
| **Codex Pro** | $200 | 5 giờ + Hàng tuần | ⭐⭐⭐⭐⭐ Quota 10× |
| **Gemini CLI** | **$0** | Hàng ngày + Hàng tháng | ⭐⭐⭐⭐⭐ MIỄN PHÍ 180K/tháng! |
| **GitHub Copilot** | $10-19 | Hàng tháng (ngày 1) | ⭐⭐⭐⭐ Đa model |
| **Antigravity** | **$0** | Hàng ngày + Hàng tháng | ⭐⭐⭐⭐ Claude MIỄN PHÍ! |
---
## Ví dụ Sử dụng
### Setup Cursor IDE
```
Settings → Models → Advanced:
OpenAI API Base URL: http://localhost:20128/v1
OpenAI API Key: [from 9router dashboard]
Model: cc/claude-opus-4-5-20251101
```
### Tạo Combo (Khuyên dùng)
```
Dashboard → Combos → Create New
Name: premium-coding
Models:
1. gc/gemini-3-flash-preview (FREE, use first)
2. cc/claude-opus-4-5-20251101 (Subscription)
3. cx/gpt-5.2-codex (Subscription backup)
Use in CLI: premium-coding
```
**Kết quả:** Tối đa free tier → Dùng subscription → Auto fallback
---
## Quota Tracking
9Router theo dõi quota thời gian thực:
- **Tiêu thụ token** - Tokens input/output mỗi request
- **Đếm ngược reset** - Thời gian đến lần reset tiếp theo
- **Phần trăm usage** - Đã dùng bao nhiêu quota
- **Auto fallback** - Chuyển sang tier sau khi hết
**Dashboard view:**
```
Claude Code Pro
├─ Quota: 75% used
├─ Reset: 2h 15m (5-hour)
├─ Weekly reset: 3 days
└─ Fallback: glm/glm-4.7 (cheap tier)
```
---
## Best Practices
### 1. Dùng Free Tier Trước
```
Priority:
1. Gemini CLI (180K/month FREE)
2. Antigravity (FREE Claude)
3. Claude Code/Codex (paid subscriptions)
```
### 2. Theo dõi Quota Hàng ngày
- Kiểm tra dashboard mỗi sáng
- Lên kế hoạch task nặng quanh thời gian reset quota
- Dùng cheap/free tier cho task không quan trọng
### 3. Tạo Smart Combos
```
Example combo:
1. gc/gemini-3-flash-preview (FREE primary)
2. cc/claude-opus-4-5 (Complex tasks)
3. glm/glm-4.7 (Cheap backup)
4. if/kimi-k2-thinking (FREE fallback)
```
### 4. Tối ưu theo Thời gian
```
Morning: Fresh 5-hour quota (Claude/Codex)
Afternoon: Gemini CLI (1K/day)
Evening: Subscription quota
Night: Cheap/free tier
```
---
## Troubleshooting
### "Quota exhausted"
**Giải pháp:**
- Kiểm tra quota tracker trong dashboard
- Đợi reset (5 giờ hoặc hàng ngày)
- Dùng combo fallback sang cheap/free tier
### "OAuth token expired"
**Giải pháp:**
- Auto-refresh bởi 9Router
- Nếu vẫn lỗi: Dashboard → Provider → Reconnect
### "Rate limiting"
**Giải pháp:**
- Hết quota subscription
- Thêm fallback: `cc/claude-opus → glm/glm-4.7`
- Dùng free tier: `if/kimi-k2-thinking`
---
## Bước tiếp theo
- **Setup cheap backup:** [Cheap Providers](./cheap.md)
- **Thêm free fallback:** [Free Providers](./free.md)
- **Tạo combos:** Dashboard → Combos → Create New

View File

@@ -0,0 +1,351 @@
# Troubleshooting
Các vấn đề và giải pháp phổ biến khi dùng 9Router.
---
## "Language model did not provide messages"
**Vấn đề:** Request thất bại với phản hồi rỗng hoặc thông báo lỗi.
**Nguyên nhân:**
- Hết quota provider
- API key không hợp lệ hoặc hết hạn
- Model không khả dụng
**Giải pháp:**
1. **Kiểm tra trạng thái quota:**
```
Dashboard → Providers → View quota tracker
```
Nếu hết quota, đợi reset hoặc đổi provider.
2. **Dùng fallback combo:**
```
Dashboard → Combos → Create fallback chain
Example: cc/claude-opus → glm/glm-4.7 → if/kimi-k2
```
3. **Xác minh kết nối provider:**
```
Dashboard → Providers → Reconnect if needed
```
---
## Rate Limiting
**Vấn đề:** Lỗi "Rate limit exceeded" hoặc "Too many requests".
**Nguyên nhân:**
- Hết quota subscription (giới hạn 5h/ngày/tuần)
- Đạt API rate limit
- Quá nhiều request đồng thời
**Giải pháp:**
1. **Kiểm tra thời gian reset:**
```
Dashboard → Quota Tracking → View reset countdown
```
2. **Chuyển sang tier rẻ:**
```
Use: glm/glm-4.7 ($0.6/1M tokens)
minimax/MiniMax-M2.1 ($0.20/1M tokens)
```
3. **Thêm fallback combo:**
```
Dashboard → Combos → Add backup models
Primary: cc/claude-opus (subscription)
Backup: glm/glm-4.7 (cheap)
Emergency: if/kimi-k2 (free)
```
---
## OAuth Token hết hạn
**Vấn đề:** Lỗi "Unauthorized" hoặc "Token expired".
**Nguyên nhân:**
- OAuth token hết hạn (auto-refresh thất bại)
- Session provider không hợp lệ
- Vấn đề network khi refresh
**Giải pháp:**
1. **Auto-refresh (mặc định):**
9Router tự refresh tokens. Đợi 30 giây rồi thử lại.
2. **Kết nối lại thủ công:**
```
Dashboard → Providers → [Provider Name] → Reconnect
→ Complete OAuth flow again
```
3. **Kiểm tra trạng thái provider:**
Xác minh provider service đang online (Claude Code, Codex, v.v.)
---
## Chi phí cao
**Vấn đề:** Sử dụng hoặc chi phí cao bất ngờ.
**Nguyên nhân:**
- Dùng model đắt không cần thiết
- Không fallback sang tier rẻ hơn
- Context window lớn
**Giải pháp:**
1. **Kiểm tra usage stats:**
```
Dashboard → Usage Stats → View token consumption
→ Identify high-cost models
```
2. **Chuyển sang model rẻ hơn:**
```
Replace: cc/claude-opus ($20-100/month subscription)
With: glm/glm-4.7 ($0.6/1M tokens)
minimax/MiniMax-M2.1 ($0.20/1M tokens)
```
3. **Dùng free tier:**
```
if/kimi-k2-thinking (FREE)
qw/qwen3-coder-plus (FREE)
kr/claude-sonnet-4.5 (FREE)
gc/gemini-3-flash-preview (FREE 180K/month)
```
4. **Tối ưu prompt:**
- Giảm context size
- Dùng streaming cho phản hồi dài
- Cache prompt thường dùng
---
## Connection Refused
**Vấn đề:** Lỗi "ECONNREFUSED" hoặc "Cannot connect to localhost:20128".
**Nguyên nhân:**
- 9Router không chạy
- Port 20128 bị chặn
- Firewall chặn kết nối
**Giải pháp:**
1. **Khởi động 9Router:**
```bash
9router
```
Dashboard sẽ mở tại http://localhost:3000
2. **Xác minh port 20128:**
```bash
# Check if port is listening
lsof -i :20128
# Or on Windows
netstat -ano | findstr :20128
```
3. **Kiểm tra firewall:**
- macOS: System Settings → Network → Firewall
- Windows: Windows Defender Firewall → Allow app
- Linux: `sudo ufw allow 20128`
4. **Dùng cloud endpoint:**
Nếu localhost không hoạt động (ví dụ: Cursor IDE):
```
Endpoint: https://9router.com/v1
```
---
## Dashboard không mở
**Vấn đề:** Dashboard không load tại http://localhost:3000.
**Nguyên nhân:**
- Port 3000 đã được dùng
- 9Router bị crash
- Vấn đề cache browser
**Giải pháp:**
1. **Kiểm tra 9Router có chạy không:**
```bash
# Check process
ps aux | grep 9router
# Check port 3000
lsof -i :3000
```
2. **Kill process xung đột:**
```bash
# macOS/Linux
lsof -ti:3000 | xargs kill -9
# Windows
netstat -ano | findstr :3000
taskkill /PID <PID> /F
```
3. **Khởi động lại 9Router:**
```bash
# Stop
pkill -f 9router
# Start
9router
```
4. **Xóa cache browser:**
- Chrome: Ctrl+Shift+Delete → Clear cache
- Thử chế độ ẩn danh
5. **Kiểm tra cài đặt firewall:**
Đảm bảo port 3000 không bị chặn.
---
## Model Not Found
**Vấn đề:** Lỗi "Model not found" hoặc "Invalid model".
**Nguyên nhân:**
- Provider chưa kết nối
- Sai chính tả model ID
- Provider không hoạt động
**Giải pháp:**
1. **Xác minh kết nối provider:**
```
Dashboard → Providers → Check status (green = active)
```
2. **Kiểm tra format model ID:**
```
Correct: cc/claude-opus-4-5-20251101
Wrong: claude-opus-4-5-20251101
Format: [provider-prefix]/[model-name]
```
3. **Liệt kê model khả dụng:**
```bash
curl http://localhost:20128/v1/models \
-H "Authorization: Bearer your-api-key"
```
4. **Kết nối lại provider:**
```
Dashboard → Providers → [Provider] → Reconnect
```
---
## Phản hồi chậm
**Vấn đề:** Request mất quá lâu hoặc timeout.
**Nguyên nhân:**
- Độ trễ provider
- Vấn đề network
- Context/response lớn
- Provider rate limiting
**Giải pháp:**
1. **Kiểm tra trạng thái provider:**
```
Dashboard → Providers → View latency stats
```
2. **Chuyển sang model nhanh hơn:**
```
Fast: cc/claude-haiku-4-5 (Haiku is faster than Opus)
gc/gemini-3-flash-preview
qw/qwen3-coder-flash
```
3. **Dùng streaming:**
```json
{
"model": "cc/claude-opus-4-5",
"messages": [...],
"stream": true
}
```
4. **Kiểm tra network:**
```bash
# Test latency
ping api.anthropic.com
ping api.openai.com
```
5. **Giảm context size:**
- Cắt bớt lịch sử tin nhắn
- Dùng prompt nhỏ hơn
- Bật context pruning trong CLI tool
---
## API Key không hợp lệ
**Vấn đề:** Lỗi "Invalid API key" hoặc "Authentication failed".
**Nguyên nhân:**
- Sao chép sai API key
- API key hết hạn
- API key chưa được tạo
**Giải pháp:**
1. **Tạo lại API key:**
```
Dashboard → Settings → API Keys → Generate New Key
→ Copy and use new key
```
2. **Xác minh format key:**
```
Correct: 9r_xxxxxxxxxxxxxxxxxxxxxxxx
Wrong: Missing 9r_ prefix
```
3. **Kiểm tra key trong CLI config:**
```bash
# Cursor
Settings → Models → OpenAI API Key
# Cline
Settings → API Key
# Environment variable
export OPENAI_API_KEY="9r_your_key"
```
4. **Test API key:**
```bash
curl http://localhost:20128/v1/models \
-H "Authorization: Bearer 9r_your_key"
```
---
## Cần trợ giúp thêm?
- **GitHub Issues:** [github.com/decolua/9router/issues](https://github.com/decolua/9router/issues)
- **Documentation:** [9router.com/docs](https://9router.com/docs)
- **FAQ:** [faq.md](faq.md)