CLI Proxy API - Chuyển tiếp API request vào tài khoản thay cho gọi bằng API Key
Vấn đề hiện nay nhiều nhà cung cấp như Google, OpenAI, Claude sẽ tách gói cước thông thường và lượt gọi qua API nhất là gọi qua các công cụ CLI (sử dụng AI bằng terminal) dẫn tới việc bạn không thực sự tối ưu hóa được chi phí bỏ ra hàng tháng của bạn cho tất cả tác vụ khác. Dự án này sinh ra để giúp giải quyết vấn đề này bằng việc giả lập môi trường để bạn chuyển tiếp toàn bộ request cho dù từ CLI hay từ API (n8n chẳng hạn) đi qua tài khoản của bạn để tận dụng gói cước mà bạn đã mua.
CLI Proxy API là gì?
CLI Proxy API hoạt động như một "máy chủ proxy kết nối các mô hình CLI với thiết lập API", làm cho chúng tương thích với các nền tảng như OpenAI, Gemini và Claude. Thay vì các lệnh terminal thủ công, các nhà phát triển có thể sử dụng các yêu cầu API tiêu chuẩn.
Các Tính năng Chính:
- Hỗ trợ Đa Nền tảng: Tương thích với các endpoint của OpenAI, Gemini và Claude.
- Phản hồi Linh hoạt: Hỗ trợ cả đầu ra dạng streaming (thời gian thực) và non-streaming.
- Công cụ Thông minh: Cho phép gọi hàm (function calls) và tích hợp công cụ.
- Hỗ trợ Hình ảnh: Chấp nhận đầu vào hình ảnh ngoài văn bản.
- Quản lý Đa Tài khoản: Xử lý đồng thời nhiều tài khoản với tính năng cân bằng tải.
Cách Cài đặt CLI Proxy API
Các bước cài đặt
Clone Repository
Mở terminal và chạy lệnh:
git clone https://github.com/luispater/CLIProxyAPI.git
cd CLIProxyAPI
go build -o cli-proxy-api ./cmd/server
Lệnh này tạo ra file cli-proxy-api trong thư mục của bạn.
Hoặc với MacOS user thì làm vậy luôn cho dễ
Biên dịch mã nguồn thành file thực thi:
brew install cliproxyapi
brew services start cliproxyapi
Bị bug gì đó copy lỗi hỏi AI nó hướng dẫn cho thêm hoặc chat với AI ở góc màn hình của mình nó hướng dẫn cho.
Cách thiết lập CLI Proxy API: Các Bước Cơ bản
Bước 1: Đăng nhập
Xác thực bằng tài khoản Google của bạn:
./cli-proxy-api --login
Bước 2: Khởi động Máy chủ
Khởi chạy máy chủ proxy (mặc định là cổng 8317):
./cli-proxy-api
Bước 3: Thực hiện Gọi API
Bắt đầu Trò chuyện:
Gửi yêu cầu POST đến http://localhost:8317/v1/chat/completions
{
"model": "gemini-2.5-pro",
"messages": [
{
"role": "user",
"content": "Xin chào, bạn khỏe không?"
}
],
"stream": true
}
Liệt kê Các Mô hình Có sẵn:
GET http://localhost:8317/v1/models
Tùy chỉnh CLI Proxy API
Cấu hình được quản lý thông qua tệp YAML (mặc định: config.yaml). Để chỉ định một tệp khác:
./cli-proxy-api --config ~/CLIProxyAPI/config.yaml
Nãy các bạn clone dự án này về đâu thì vào đó chỉnh hoặc nếu cài bằng brew dùng câu lệnh trên là được
Bạn muốn giao diện dễ dùng nhất thì nên bật tùy chọn allow-remote: true trong file cấu hình lúc này bạn chỉ cần truy cập http://localhost:8317/management.html là có giao diện để quản lý rồi

Mẫu config.yaml:
port: 8317
remote-management:
allow-remote: true
auth-dir: "~/.cli-proxy-api"
debug: false
proxy-url: ""
quota-exceeded:
switch-project: true
switch-preview-model: true
api-keys:
- "your-api-key-1"
- "your-api-key-2"
generative-language-api-key:
- "AIzaSy...01"
- "AIzaSy...02"
Các Tính năng Nâng cao
Bạn cũng có thể triển khai cái này trên docker trên máy chủ VPS để tiện truy cập từ nhiều máy tính khác. Chi tiết có thể xem ở
Tuy nhiên mình khuyên là nên cài trên máy của bạn để bảo mật và dễ thao tác authen (cấp quyền truy cập) vào các tài khoản. Sau đó download Auth file về upload lên môi trường cài qua docker vậy là dễ nhất.
Triển khai Docker
Đăng nhập:
docker run --rm -p 8085:8085 -v /path/to/your/config.yaml:/CLIProxyAPI/config.yaml -v /path/to/your/auth-dir:/root/.cli-proxy-api eceasy/cli-proxy-api:latest /CLIProxyAPI/CLIProxyAPI --login
Khởi động Máy chủ:
docker run --rm -p 8317:8317 -v /path/to/your/config.yaml:/CLIProxyAPI/config.yaml -v /path/to/your/auth-dir:/root/.cli-proxy-api eceasy/cli-proxy-api:latest
Thêm CLI Proxy API vào n8n
Hiện tại cho dù dùng AI model nào thì bạn cũng phải sử dụng OpenAI và các node của OpenAI để cấu hình nhé, vì chỉ cái này hỗ trợ giao thức mà tác giả dự án đang khai thác.

Nếu n8n bạn lưu trữ ở VPS tức ngoài mạng LAN bạn cần đưa CLI Proxy API lên domain để kết nối. Hoặc nếu truy cập trong LAN mà máy cài n8n và cài Proxy khác nhau thì cũng cần nhập chính xác IP của máy chủ cài proxy vào bước Base URL nhé.
Sau đó thì sử dụng gắn vào các AI node để chat như bình thường, gửi hình ảnh vào vẫn được luôn nhé.
Dùng để tạo hình ảnh
Cái này thì phức tạp hơn chút, bạn chỉ có cách gọi qua node HTTP Request với cài đặt như sau
Giao thức POST: https://your-proxy-domain/v1/chat/completions
Nhớ thay thế bằng link proxy domain của bạn hoặc IP local
Send Header:
AuthorizationBearer your-api-key-1
Body:
{
"model": "gemini-2.5-flash-image",
"messages": [
{
"role": "user",
"content": "{{ $json.prompt }}"
}
],
"modalities": ["image", "text"],
"image_config": {
"aspect_ratio": "16:9"
}
}
Sau khi lấy về hình ảnh sẽ là dạng base64 nên cần có một bước chuyển đổi trung gian nữa. Ở dưới đây mình share một đoạn workflow mẫu bạn copy code trên paste trực tiếp vào workflow của bạn trong n8n để hiểu nhé.
Workflow mẫu (chứa HTTP request và convert):
{
"nodes": [
{
"parameters": {
"method": "POST",
"url": "https://your-proxy-domain/v1/chat/completions",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer your-api-key-1"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"model\": \"gemini-2.5-flash-image\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"{{ $json.prompt }}\"\n }\n ],\n \"modalities\": [\"image\", \"text\"],\n \"image_config\": {\n \"aspect_ratio\": \"16:9\"\n }\n} ",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
1152,
512
],
"id": "28028c22-8042-43b3-8e87-7cbe0d4bb3e6",
"name": "Generate Image"
},
{
"parameters": {
"operation": "toBinary",
"sourceProperty": "base64Data",
"options": {}
},
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1.1,
"position": [
1568,
512
],
"id": "685cf2c3-ee62-4b76-8602-bc30a165dc1a",
"name": "Convert to File"
},
{
"parameters": {
"jsCode": "const dataUrl = $json.choices[0].message.images[0].image_url.url;\nconst base64Data = dataUrl.replace(/^data:image\\/\\w+;base64,/, '');\nreturn { base64Data };"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1360,
512
],
"id": "c1032c53-d09d-4eef-9779-faff6752f8d0",
"name": "Get base64"
}
],
"connections": {
"Generate Image": {
"main": [
[
{
"node": "Get base64",
"type": "main",
"index": 0
}
]
]
},
"Convert to File": {
"main": [
[]
]
},
"Get base64": {
"main": [
[
{
"node": "Convert to File",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {},
"meta": {
"instanceId": "87a32b77896263bd56ebc621c5133167cbeee66743c9f89999f622d0ecb8f05e"
}
}
Thêm CLI Proxy API vào Claude Code, Codex, Gemini CLI
Ở đây người ta hướng dẫn hết rồi nhé, mình toàn xài Claude Code với Gemini Model cho tiết kiệm.
Chúc bạn thành công!