Chào anh em,
Anh em làm automation hay dev thường đứng trước sự lựa chọn khó khăn:
- Pay-per-token: Trả phí "đắt đỏ" theo từng token qua API chính thức (OpenAI, Anthropic API...).
- Chat UI (Gói Plus/Advanced): Mua gói tháng rẻ hơn nhưng bị giới hạn trong giao diện Chat, không thể cắm vào tool tự động hóa.
Vấn đề: Làm sao để tận dụng sức mạnh của Claude 4.5 Sonnet hay Gemini 3 Pro trong n8n, Cursor, Coding Agent... bằng chính gói thuê bao cá nhân (20$/tháng) mà không phải đốt tiền vào API Key?
Hôm nay mình xin giới thiệu và hướng dẫn anh em setup CLIProxyAPI - giải pháp biến tài khoản Google/Claude cá nhân thành API chuẩn OpenAI.
1. CLIProxyAPI là gì?
Hiểu đơn giản, CLIProxyAPI là một middleware (máy chủ trung gian).
- Đầu vào: Nó mở một cổng API chuẩn OpenAI (tương thích n8n, VS Code...).
- Xử lý: Nó "đánh chặn" request, gỡ bỏ API Key giả, và tiêm OAuth Token (được lấy từ tài khoản Google/Claude của bạn).
- Đầu ra: Nó giả lập các công cụ dòng lệnh (CLI) chính chủ của Google/Anthropic để gửi request đi. Server của hãng sẽ hiểu đây là người dùng đang chat qua CLI chứ không phải API doanh nghiệp -> Tiết kiệm chi phí.
2. Hướng dẫn cài đặt (Khuyên dùng Docker)
Cách ổn định nhất để chạy 24/7 cho server/homelab là dùng Docker.
Bước 1: Chuẩn bị file docker-compose.yml
Tạo file docker-compose.yml với nội dung sau:
services:
cli-proxy-api:
image: eceasy/cli-proxy-api:latest
container_name: cli-proxy-api
pull_policy: always
restart: unless-stopped
ports:
- "8317:8317" # Cổng API chính (Base URL)
- "8085:8085" # Cổng Web UI quản lý
- "54545:54545" # Cổng Callback bắt buộc để login OAuth
volumes:
# Config file (tạo file rỗng trước khi chạy)
- ./config.yaml:/CLIProxyAPI/config.yaml
# Lưu token đăng nhập (QUAN TRỌNG: để không phải login lại khi reset)
- ./auths:/root/.cli-proxy-api
# Logs
- ./logs:/CLIProxyAPI/logs
environment:
- TZ=Asia/Ho_Chi_Minh
Bước 2: Tạo file Config và Chạy Container
- Tạo một file
config.yamlrỗng hoặc copy từ mẫu này để cùng thư mục. -
Chạy lệnh:
docker-compose up -d
Bước 3: Đăng nhập tài khoản
Sau khi container chạy, anh em cần exec vào trong để login:
# Login Gemini (Google Account)
docker exec -it cli-proxy-api ./CLIProxyAPI -login
# Login Claude
docker exec -it cli-proxy-api ./CLIProxyAPI -claude-login
Lưu ý với VPS: Khi login, tool sẽ tạo link localhost:54545. Nếu cài trên VPS không giao diện, anh em cần SSH Tunnel về máy cá nhân để xác thực:
ssh -L 54545:127.0.0.1:54545 user@ip-vps
3. Cấu hình Google Cloud (Bắt buộc cho Gemini)
Để dùng Gemini Free/Advanced qua API này, anh em cần tạo Google Cloud Project:
- Bật API: Vào Google Cloud Console > APIs & Services > Library > Tìm và Enable "Google Generative Language API".
- OAuth Screen: Vào "OAuth consent screen" > Chọn User Type là External.
- Quan trọng: Thêm email của bạn vào phần Test users.
- Tạo Credential: Vào Credentials > Create Credentials > OAuth client ID > Chọn Desktop app.
- Lấy
Client IDvàClient Secretđể dùng khi tool yêu cầu login.
- Lấy
4. Tối ưu file config.yaml
File này là "bộ não" của hệ thống. Dưới đây là các block quan trọng cần cấu hình:
4.1. Bảo mật & Web UI
Nếu muốn quản lý qua giao diện web, anh em bật remote-management:
port: 8317
remote-management:
allow-remote: true # Bật Web UI từ IP khác
secret-key: "DatMatKhauThatKhoVaoDay" # Bắt buộc có pass nếu allow-remote: true
Truy cập Web UI tại: http://ip-server:8317/management.html
4.2. Quản lý Model (Mapping)
Giúp đánh lừa các app cũ chỉ hỗ trợ model GPT. Ví dụ map gpt-4 trỏ về gemini-pro.
models:
- name: "gemini-2.0-flash-exp" # Model thực tế chạy
alias: "gpt-4o-mini" # Tên model client gửi lên
- name: "claude-3-5-sonnet-20241022"
alias: "claude-3-opus"
4.3. API Key bảo vệ
Đây là key do anh em tự đặt để bảo vệ Proxy này, không phải key của Google.
api-keys:
- "sk-my-secret-key-123"
5. Tích hợp vào n8n (Xử lý ảnh/Vision)
Đây là phần nhiều anh em vướng nhất. Node OpenAI mặc định của n8n gửi ảnh dạng URL, trong khi Proxy này cần Base64.
Giải pháp: Dùng Node HTTP Request thay vì Node OpenAI.
Bước 1: Node Code (Convert Image to Base64)
Nối sau node nhận ảnh (Telegram/Drive...), dùng code JS sau:
const items = $input.all();
return items.map(item => {
// Giả sử binary data nằm ở field 'data'
const binaryData = item.binary.data;
return {
json: {
base64_image: binaryData.data // n8n tự lưu data dưới dạng base64 string
}
};
});
Bước 2: Node HTTP Request (Gửi tới Proxy)
Cấu hình như sau:
- Method: POST
-
URL:
http://cli-proxy-api:8317/v1/chat/completions(hoặc IP LAN/Domain nếu n8n khác server). -
Header Auth:
Authorization: Bearer <key-trong-config-yaml> - Body (JSON):
{
"model": "gemini-2.0-flash-exp",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "Phân tích bức ảnh này giúp tôi."
},
{
"type": "image_url",
"image_url": {
"url": "data:image/jpeg;base64,{{ $json.base64_image }}"
}
}
]
}
],
"stream": false
}
6. Các lỗi thường gặp
| Lỗi | Nguyên nhân & Cách Fix |
|---|---|
| HTTP 401 | Token hết hạn. Cần chạy lại lệnh login (docker exec... -login). |
| Model not found (404) | Sai tên model. Kiểm tra lại config.yaml phần alias. |
| Address in use | Port 8317 bị trùng. Đổi port trong docker-compose và config. |
CLIProxyAPI là giải pháp cực ngon để tận dụng gói Gemini Advanced/Claude Pro cho các tác vụ nặng đô mà không lo về giá token. Tuy nhiên, đây là dự án cộng đồng, anh em nên dùng cho mục đích cá nhân/nghiên cứu (Homelab), tránh dùng cho Production quy mô lớn vì phụ thuộc vào chính sách của Google/Anthropic.
Chúc anh em setup thành công! Có thắc mắc gì cứ comment bên dưới nhé.

Top comments (0)