Quay lại blog

Bắt đầuHướng dẫn

Chuyển từ OpenRouter sang CheapTokens: base_url, key, model id

Đổi base_url, API key và model id trong OpenAI SDK (Python và JavaScript), gửi request đầu tiên và kiểm tra xem đã thành công chưa.

Bởi CheapTokens TeamĐã xuất bản 5 phút đọc

Ảnh bìa: chuyển một ứng dụng dùng OpenAI SDK từ OpenRouter sang CheapTokens bằng cách đổi base_url, key và model id
Trên trang này
  1. Điều gì thực sự thay đổi
  2. Code sau khi chuyển đổi
  3. Kiểm tra xem đã thành công chưa
  4. Mô hình nào thay thế cái gì
  5. Cùng lưu lượng đó tốn bao nhiêu
  6. Nếu không hoạt động
  7. Trước khi phát hành

Ứng dụng của bạn đã gọi OpenRouter qua OpenAI SDK, và bạn muốn nó gọi CheapTokens thay thế. Bạn đổi ba giá trị — base_url, API key và id model — và xoá hai header tuỳ chọn. Phần còn lại của code giữ nguyên.

Dưới đây là các dòng chính xác cho Python, JavaScript và curl, một cách nhanh để xác nhận việc chuyển đổi đã thành công, và bảng mô hình nào phù hợp với việc gì. Nếu bạn chưa từng gửi request tới CheapTokens, hướng dẫn gửi API request đầu tiên đề cập tài khoản và key; tài liệu có đầy đủ tham chiếu.

Điều gì thực sự thay đổi#

Quickstart của OpenRouter (kiểm tra ngày 27 tháng 10 năm 2026) cấu hình OpenAI client với base URL https://openrouter.ai/api/v1 và đặt tên mô hình dạng provider/model-name. CheapTokens nói cùng định dạng OpenAI Chat Completions tại https://api.cheaptokens.dev/v1. Vì vậy class client, chat.completions.create và cách bạn đọc câu trả lời không thay đổi.

Trước và sau: ba giá trị thay đổi khi chuyển từ OpenRouter sang CheapTokens
Ba giá trị cần hoán đổi. Key hiển thị dưới dạng biến môi trường, không bao giờ nằm trong code.

Đó là một lần hoán đổi mỗi dòng:

  • base URL — https://api.cheaptokens.dev/v1 thay cho địa chỉ OpenRouter;
  • API key — key từ tài khoản CheapTokens của bạn, đọc từ biến môi trường;
  • model id — id đầy đủ của CheapTokens, ví dụ deepseek-ai/DeepSeek-V4-Flash-0731. Lấy id từ tài liệu CheapTokens: các nhà cung cấp khác nhau đặt tên khác nhau cho cùng một mô hình, và id rút gọn từ nhãn giá không được chấp nhận.

Và một lần xoá. Các header HTTP-Referer và X-OpenRouter-Title của OpenRouter là tuỳ chọn và chỉ cấp dữ liệu cho bảng xếp hạng của OpenRouter. Xoá chúng khỏi default_headers / defaultHeaders; ở đây bạn không cần chúng.

Code sau khi chuyển đổi#

Cùng một request, ba runtime. Chọn cái mà ứng dụng của bạn dùng.

Code của bạn sau khi chuyển đổi

Python

python
import os
from openai import OpenAI

client = OpenAI(
    base_url='https://api.cheaptokens.dev/v1',
    api_key=os.environ['CHEAPTOKENS_API_KEY'],
)

resp = client.chat.completions.create(
    model='deepseek-ai/DeepSeek-V4-Flash-0731',
    messages=[{'role': 'user', 'content': 'Reply with one word: ready'}],
    max_tokens=20,
)
print(resp.choices[0].message.content)

JavaScript

javascript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://api.cheaptokens.dev/v1',
  apiKey: process.env.CHEAPTOKENS_API_KEY,
});

const resp = await client.chat.completions.create({
  model: 'deepseek-ai/DeepSeek-V4-Flash-0731',
  messages: [{ role: 'user', content: 'Reply with one word: ready' }],
  max_tokens: 20,
});
console.log(resp.choices[0].message.content);

curl

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "deepseek-ai/DeepSeek-V4-Flash-0731", "messages": [{"role": "user", "content": "Reply with one word: ready"}], "max_tokens": 20}'

Một điều nữa trước khi chạy. Nếu request của bạn mang các trường chỉ dành cho OpenRouter — danh sách routing hoặc fallback, tuỳ chọn nhà cung cấp, id mô hình ~alias — thì chúng thuộc về OpenRouter. Giữ request chỉ với các trường Chat Completions tiêu chuẩn: model, messages, temperature, max_tokens, stream.

Kiểm tra xem đã thành công chưa#

Có câu trả lời chưa đủ để chứng minh. In ba thứ bên cạnh nó: mô hình nào đã trả lời, vì sao nó dừng, và nó tính bao nhiêu token.

python
print(resp.model)
print(resp.choices[0].finish_reason)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)
Môi trường và script kiểm tra chạy trong terminal
Đặt key một lần, chạy kiểm tra, đọc model, finish_reason và usage.

finish_reason của stop nghĩa là mô hình đã tự kết thúc. length nghĩa là max_tokens đã cắt câu trả lời. usage hiển thị token đầu vào và đầu ra riêng biệt, và đó là hai con số tạo nên hoá đơn của bạn — cũng chính là hai con số bạn đang theo dõi trên OpenRouter.

Tự mình thử xemThử xem: finish_reason nói gì nếu bạn đặt max_tokens bằng 1?Hiện đáp án

Nó nói length — câu trả lời bị cắt bởi max_tokens. Một bài kiểm tra tốt để biết code của bạn xử lý câu trả lời bị cắt cụt.

Mô hình nào thay thế cái gì#

Chọn mô hình theo công việc, không theo tên bạn đã dùng trên OpenRouter. Các số liệu dưới đây lấy từ bảng giá CheapTokens kiểm tra ngày 27 tháng 10 năm 2026; một số dư bao trùm cả ba mô hình và giá không thay đổi theo thời điểm trong ngày.

Mô hình id model Ngữ cảnh Câu trả lời tối đa
DeepSeek-V4-Flash deepseek-ai/DeepSeek-V4-Flash-0731 380K 32.768 token
GLM-5.3-Flash zai-org/GLM-5.3-Flash 390K 8.192 token
MiniMax-M2.7 MiniMaxAI/MiniMax-M2.7 180K 8.192 token

Không chắc dòng nào là của bạn? Bắt đầu từ việc ứng dụng làm gì:

Chọn trường hợp của bạn

Ứng dụng của bạn chủ yếu làm gì?

Request ngắn, thường xuyên — phân loại, trích xuất, trả lời hỗ trợ

Thử zai-org/GLM-5.3-Flash: ngữ cảnh 390K, câu trả lời tối đa 8.192 token, và tổng cộng rẻ hơn OpenRouter khi tính cả đầu vào lẫn đầu ra.

Câu trả lời dài, code, vòng lặp agent

Thử deepseek-ai/DeepSeek-V4-Flash-0731: câu trả lời tối đa 32.768 token, ngữ cảnh 380K, một mức giá bất kể giờ nào trong ngày.

Khối lượng công việc ổn định mà bạn đang trả mức giá OpenRouter cao

Thử MiniMaxAI/MiniMax-M2.7: ngữ cảnh 180K, câu trả lời tối đa 8.192 token, và tổng cộng rẻ hơn OpenRouter.

Cùng lưu lượng đó tốn bao nhiêu#

Giả sử bot của bạn gửi 1.000 request, mỗi request khoảng 500 token đầu vào và 300 token đầu ra. Đó là giả định — hãy thay bằng số của bạn từ usage. Bảng dưới đây là trực tiếp: giá của chúng tôi và cột OpenRouter lấy từ bảng giá hiện tại, tính cả đầu vào lẫn đầu ra.

Mô hình Mỗi yêu cầu 1.000 yêu cầu OpenRouter, 1.000 yêu cầu
GLM-5.3-Flash $0.000022 $0.022 $0.0434
DeepSeek-V4-Flash $0.000038 $0.0375 $0.0708
MiniMax-M2.7 $0.00007 $0.07 $0.51

500 token đầu vào và 300 token đầu ra mỗi yêu cầu. Giá trên 1 triệu token là giá hiện hành và thay đổi cùng với biểu phí của chúng tôi; cột OpenRouter hiển thị giá tham chiếu cho cùng khối lượng công việc.

Với DeepSeek-V4-Flash, 1.000 request đó tốn $0.0375. Giá đầy đủ ở trang giá; ý tưởng về những gì bạn bị tính phí nằm trong token đầu vào vs đầu ra.

Nếu không hoạt động#

Sau khi chuyển đổi, ba lỗi bao trùm phần lớn vấn đề. Khớp thông báo với nguyên nhân:

Ghép cặp

Khớp từng triệu chứng với nguyên nhân

  • 401 UnauthorizedKey bị thiếu, gõ sai, hoặc vẫn là key OpenRouter
  • 404 Not FoundĐường dẫn base URL sai hoặc model id không phải id đầy đủ của CheapTokens
  • Câu trả lời bị cắt giữa câumax_tokens thấp hơn mức câu trả lời cần; finish_reason nói length

Bài viết khắc phục sự cố 401 và 404 đi qua từng lỗi với thông báo chính xác, và base_url là gì giải thích vì sao một dấu gạch chéo sai làm hỏng đường dẫn.

Trước khi phát hành#

Danh sách kiểm tra

Danh sách kiểm tra chuyển đổi