URL cơ sở là phần dễ dàng nhất khi rời bỏ một nhà cung cấp; các đường dẫn lỗi mới là nơi quá trình di chuyển thường gặp trục trặc. Để di chuyển từ OpenAI sang TokenLab, bạn thay đổi hai giá trị trong client SDK OpenAI của mình: base_url và api_key. Phần còn lại của hướng dẫn này bao gồm những điều cần xác nhận xung quanh thay đổi đó. Điều đó có nghĩa là ID mô hình bạn gửi, giá hiện tại của nó, streaming, gọi công cụ (tool calls), xử lý lỗi, thời gian chờ (timeouts) và thanh toán. Các thông tin dưới đây đến từ tài liệu của TokenLab và API mô hình trực tiếp, mỗi thông tin đều kèm theo ngày quan sát.
Những điểm chính cần lưu ý
- Thay đổi cốt lõi là hai giá trị: URL cơ sở của TokenLab
https://api.tokenlab.sh/v1và khóa API TokenLab (bắt đầu bằngsk-). - TokenLab hỗ trợ SDK OpenAI cho Chat Completions và Responses. Các tham số tùy chọn, tùy chọn công cụ và các trường chỉ dành cho Responses vẫn phụ thuộc vào mô hình được chọn.
- Hãy đọc giá của mô hình từ API trực tiếp trước khi quyết định bất cứ điều gì. Vào ngày 03/10/2026,
gpt-5.5có giá niêm yết là 1,50 USD cho đầu vào và 9,00 USD cho đầu ra trên mỗi 1 triệu token. - Chạy danh sách kiểm tra ở cuối bài trước khi chuyển lưu lượng truy cập thực tế (production traffic). Hầu hết các bất ngờ nằm ở khâu xử lý lỗi, thời gian chờ và thanh toán, chứ không phải ở luồng hoạt động bình thường.
Thay đổi hai giá trị để di chuyển từ OpenAI sang TokenLab
Bắt đầu với khóa API. Theo Quickstart (quan sát ngày 03/10/2026), bạn tạo tài khoản, tạo khóa API và lưu lại toàn bộ giá trị ngay lập tức. Nó chỉ được hiển thị một lần và tiền tố trong danh sách khóa không thể xác thực các yêu cầu. Hãy kiểm tra số dư trước khi thực hiện cuộc gọi đầu tiên, vì các yêu cầu sẽ được tính phí theo giá hiện tại của mô hình đã chọn.
Sau đó thay đổi client. Hướng dẫn di chuyển (quan sát ngày 03/10/2026) mô tả công thức như sau: đặt base_url / baseURL thành https://api.tokenlab.sh/v1, thay thế khóa và chọn ID mô hình từ GET /v1/models.
Ví dụ, hãy tưởng tượng một dịch vụ có chuỗi gpt-5.5 trong cấu hình của nó. Sau khi thay đổi hai giá trị, chuỗi đó vẫn là một yêu cầu hợp lệ, nhưng chúng ta vẫn nên xác nhận ID trước. GET /v1/models và GET /v1/models/{model} là các điểm cuối khám phá công khai và hoạt động mà không cần khóa.
Python
import os
from openai import OpenAI
# Trước đây: client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
client = OpenAI(
api_key=os.environ["TOKENLAB_API_KEY"],
base_url="https://api.tokenlab.sh/v1",
timeout=30.0,
max_retries=0,
)
response = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "Hello, world!"}],
)
print(response.choices[0].message.content)
Node.js
import OpenAI from 'openai';
// Trước đây: new OpenAI({ apiKey: process.env.OPENAI_API_KEY })
const client = new OpenAI({
apiKey: process.env.TOKENLAB_API_KEY,
baseURL: 'https://api.tokenlab.sh/v1',
timeout: 30_000,
maxRetries: 0,
});
const completion = await client.chat.completions.create({
model: 'gpt-5.5',
messages: [{ role: 'user', content: 'Hello' }],
});
console.log(completion.choices[0].message.content);
cURL
curl https://api.tokenlab.sh/v1/chat/completions \
-H "Authorization: Bearer $TOKENLAB_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-5.5","messages":[{"role":"user","content":"Say hello"}]}'
Các cài đặt thời gian chờ và thử lại trong hai mẫu đầu tiên phản ánh các ví dụ trong Quickstart (quan sát ngày 03/10/2026), sử dụng thời gian chờ 30 giây và không thử lại SDK. Chúng tôi giữ số lần thử lại bằng 0 trong quá trình kiểm tra để một yêu cầu thất bại có thể được nhìn thấy thay vì bị thử lại một cách âm thầm.
Hãy truyền URL cơ sở một cách rõ ràng trong cấu hình client. Hướng dẫn SDK (quan sát ngày 03/10/2026) khuyến nghị cách này thay vì dựa vào các bí danh biến môi trường cũ. Giữ khóa trên máy chủ và trong trình quản lý bí mật, không bao giờ để trong mã phía client.
Chọn ID mô hình và đọc giá của nó
Một quá trình di chuyển không nên giả định ID mô hình hoặc giá cả. Cả hai đều nằm trong API mô hình. Chúng tôi đã đọc https://api.tokenlab.sh/v1/models/gpt-5.5 và https://api.tokenlab.sh/v1/models/laguna-s-2.1 vào ngày 03/10/2026. Giá cho cả hai đã được cập nhật lần cuối vào 2026-10-02T16:53:30.068Z.
| Trường | gpt-5.5 |
laguna-s-2.1 |
|---|---|---|
| Giai đoạn vòng đời | active | active |
| Số lượng token đầu vào / đầu ra tối đa | 1.000.000 / 128.000 | 1.048.576 / 131.072 |
| Các định dạng yêu cầu được chấp nhận | openai_chat_completions, openai_responses |
openai_chat_completions |
| Các khả năng được liệt kê | coding, json-mode, prompt-cache, reasoning, tool-use, vision | tool-use |
| Đầu vào, USD trên 1 triệu token | 1,5 | 0,1 |
| Đầu ra, USD trên 1 triệu token | 9 | 0,2 |
| Đọc bộ nhớ đệm, USD trên 1 triệu token | 0,15 | 0,01 |
Nguồn: gpt-5.5 và laguna-s-2.1, cả hai đều được quan sát vào ngày 03/10/2026.
Để chuyển đổi các mức giá đó thành con số cụ thể, đây là ước tính với cách tính chi tiết. Hãy lấy một công việc với 1 triệu token đầu vào và 100 nghìn token đầu ra, không có lượt truy cập bộ nhớ đệm nào.
gpt-5.5: 1 × 1,50 USD + 0,1 × 9,00 USD = 1,50 USD + 0,90 USD = 2,40 USD.laguna-s-2.1: 1 × 0,10 USD + 0,1 × 0,20 USD = 0,10 USD + 0,02 USD = 0,12 USD.
Đây là các ước tính từ mức giá trên mỗi token được liệt kê. Khoản phí cuối cùng của bạn là bản ghi Sử dụng (Usage). Token hóa khác nhau tùy theo mô hình, vì vậy cùng một văn bản tạo ra số lượng token khác nhau trên các mô hình khác nhau.
Chúng tôi không khẳng định đây là khoản tiết kiệm. Để so sánh với những gì bạn đang trả hiện nay, hãy đặt mức giá TokenLab bên cạnh hóa đơn OpenAI của bạn, hoặc trang giá của OpenAI, vào ngày bạn chuyển đổi. Giá cả thay đổi và hướng dẫn thanh toán (quan sát ngày 03/10/2026) khuyên không nên mã hóa cứng (hard-code) một bảng giá đã sao chép. Nó trỏ đến GET /v1/models/:model/pricing để biết các giá trị hiện tại.
Các ID mô hình khác cũng tuân theo mô hình tương tự. Các ví dụ trong tài liệu sử dụng gpt-5.6-terra và gpt-5.6-luna cho Chat Completions, và claude-sonnet-5 cùng gemini-3.5-flash trên các lộ trình riêng của chúng. Hãy đọc các định dạng được chấp nhận của từng mô hình trước khi hướng lưu lượng truy cập vào đó. Để so sánh rộng hơn, hãy xem danh mục mô hình, so sánh OpenRouter với TokenLab và bảng xếp hạng mô hình. Các nhóm làm về hình ảnh và video có thể bắt đầu với API mô hình hình ảnh AI tốt nhất 2026 và API mô hình video AI tốt nhất 2026. Đối với các tác vụ lập trình, hãy xem các mô hình AI tốt nhất để lập trình.
Những điều cần kiểm tra tiếp theo khi bạn di chuyển từ OpenAI sang TokenLab
TokenLab ghi nhận SDK OpenAI hoạt động với Chat Completions và Responses. Đó là khả năng tương thích với định dạng yêu cầu và phản hồi, không phải là lời hứa rằng mọi mô hình đều hoạt động giống nhau. Hướng dẫn định dạng API (quan sát ngày 03/10/2026) cho biết các tham số tùy chọn phụ thuộc vào mô hình. Nó cũng cho biết một mô hình không nhất thiết phải chấp nhận tất cả bốn định dạng API, và tokenlab.accepted_request_formats hiển thị những định dạng mà nó chấp nhận. Hãy coi mỗi lĩnh vực dưới đây là thứ cần kiểm tra với lưu lượng truy cập thực tế của bạn.
Streaming
stream: true gửi các phần tin nhắn delta dưới dạng sự kiện do máy chủ gửi (server-sent events). Thiết lập stream_options với include_usage: true để nhận mức sử dụng token trong các đoạn stream, như tài liệu Tham chiếu Tạo Chat Completion (quan sát ngày 03/10/2026) đã ghi.
stream = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "Count to five."}],
stream=True,
stream_options={"include_usage": True},
)
for chunk in stream:
if chunk.choices:
print(chunk.choices[0].delta.content or "", end="")
Hai hành vi cần lập kế hoạch. Nếu một stream bị gián đoạn sau khi đầu ra đã đến, đừng coi đó là một phản hồi hoàn chỉnh. Hướng dẫn xử lý lỗi (quan sát ngày 03/10/2026) cảnh báo rằng việc lặp lại nó có thể tạo ra đầu ra khác hoặc bị tính phí lần thứ hai. Và streaming có thể kết thúc trước khi việc thanh toán hoàn tất, vì vậy ID thanh toán có thể bị thiếu.
Gọi công cụ (Tool calls)
Tham chiếu Chat Completions liệt kê tools, tool_choice và parallel_tool_calls. Nó cho biết các cuộc gọi song song hoạt động "khi được mô hình đã chọn hỗ trợ". Gọi hàm (function calling) được ghi nhận là "được hỗ trợ bởi mô hình đã chọn", vì vậy hãy kiểm tra danh sách khả năng. Trong bảng trên, cả gpt-5.5 và laguna-s-2.1 đều liệt kê tool-use, nhưng chỉ gpt-5.5 liệt kê json-mode và vision. Hãy gửi các lược đồ công cụ thực tế của bạn, không phải ví dụ đồ chơi, và kiểm tra xem các đối số được trả về có phân tích cú pháp được không.
Nếu bạn định gọi các mô hình Claude, hãy lưu ý quy tắc trong hướng dẫn di chuyển. Các cuộc gọi công cụ, khối suy nghĩ (thinking blocks) và các trường tin nhắn của Anthropic thuộc về /v1/messages, và Chat Completions không đảm bảo chúng.
Hình dạng lỗi
Chat Completions và Responses trả về một đối tượng error kiểu OpenAI. Theo hướng dẫn xử lý lỗi, chỉ message và type là luôn có mặt. Các trường như code, param, retryable và retry_after xuất hiện khi có liên quan. Hãy phân nhánh dựa trên trạng thái HTTP và code, không phải trên văn bản thông báo, và làm cho trình phân tích cú pháp của bạn chấp nhận các trường bị thiếu. Anthropic Messages và Gemini giữ các định dạng lỗi riêng của chúng, vì vậy một trình phân tích cú pháp sẽ không bao phủ được mọi lộ trình.
| Trạng thái | Mã | Ý nghĩa |
|---|---|---|
| 401 | invalid_api_key |
Khóa bị thiếu, không hợp lệ, không hoạt động hoặc bị thu hồi |
| 401 | expired_api_key |
Khóa đã hết hạn |
| 402 | insufficient_balance |
Số dư tài khoản không đủ để chi trả cho yêu cầu |
| 402 | quota_exceeded |
Đã đạt đến giới hạn sử dụng của khóa |
| 403 | model_not_allowed |
Khóa này không thể sử dụng mô hình được yêu cầu |
| 429 | rate_limit_exceeded |
Quá nhiều yêu cầu; hãy đợi Retry-After |
Nguồn: Xác thực và xử lý lỗi, quan sát ngày 03/10/2026.
Bảng này sửa chữa một giả định phổ biến. Số dư trống là lỗi 402, không phải 401. Nếu mã hiện tại của bạn coi mọi lỗi 4xx là khóa xấu, hãy cập nhật nó.
Thời gian chờ và thử lại
Hướng dẫn di chuyển cho biết mã thử lại, thời gian chờ và streaming hiện có thường có thể giữ nguyên. Hãy xem xét nó dựa trên các quy tắc thử lại đã được ghi lại.
- Không lặp lại các phản hồi 400, 401, 402, 403, 404 hoặc 413 mà không thay đổi.
- Thử lại 429 sau khoảng thời gian trễ do máy chủ cung cấp.
- Chỉ thử lại 500–504 khi
retryablelàtrue, và tôn trọngretry_after. - Một lỗi
503 all_channels_failedcó thể trả về vớiretryable: false. Trong trường hợp đó, hoạt động không có nguồn cung cấp trong tầng phân phối đã chọn, vì vậy việc lặp lại nó sẽ không giúp ích gì.
Lưu ID Yêu cầu (Request ID) từ các tiêu đề phản hồi cùng với mô hình và ID công việc của riêng bạn. Đó là những gì bạn cần để điều tra.
Thanh toán
Một số dư hoạt động trên tất cả các mô hình, không cần đăng ký hoặc chi tiêu tối thiểu, theo hướng dẫn thanh toán. Mỗi yêu cầu hoàn thành được tính phí một lần, cho tùy chọn phân phối đã tạo ra nó. Các tùy chọn là TokenLab Verified, Official và Auto, và Auto sẽ thử Verified trước, sau đó đến Official. Thiết lập giới hạn chi tiêu trên mỗi khóa API nếu bạn muốn dừng lại cứng. Khi đạt đến giới hạn, các yêu cầu với khóa đó sẽ trả về 402.
Các phản hồi tương thích với OpenAI không streaming bao gồm billing_transaction_id khi việc thanh toán hoàn tất trước khi phản hồi được gửi. Nó cũng có thể xuất hiện trong tiêu đề X-Billing-Transaction-ID. Hãy lưu trữ nó và đối chiếu với trang Sử dụng (Usage) thay vì tính toán token của riêng bạn.
Danh sách kiểm tra xác minh sau khi bạn di chuyển từ OpenAI sang TokenLab
Chạy các bước này theo thứ tự với khóa staging trước khi di chuyển lưu lượng truy cập production. Mỗi hàng đều truy xuất đến một hành vi đã được ghi lại ở trên.
| Bước | Những gì cần chạy | Những gì bạn sẽ thấy |
|---|---|---|
| 1. Khám phá mô hình | GET /v1/models/gpt-5.5 (không cần khóa) |
Vòng đời active và các định dạng được chấp nhận mà bạn dự định sử dụng |
| 2. Yêu cầu xác thực | Mẫu Python hoặc cURL ở trên | Câu trả lời không trống; yêu cầu xuất hiện trong chế độ xem Requests với mô hình, trạng thái và mức sử dụng |
| 3. Các trường sử dụng | Đọc usage trên phản hồi không streaming |
prompt_tokens, completion_tokens, total_tokens |
| 4. Streaming | stream: true với include_usage: true |
Các đoạn SSE, sau đó là mức sử dụng; một stream bị gián đoạn được xử lý là không hoàn chỉnh |
| 5. Gọi công cụ | tools và tool_choice thực tế của bạn |
Các đối số phân tích cú pháp và khớp với lược đồ của bạn |
| 6. Vision hoặc JSON mode | Chỉ khi mô hình liệt kê vision hoặc json-mode |
Đầu ra mong đợi; bỏ qua kiểm tra nếu khả năng không được liệt kê |
| 7. Khóa xấu | Yêu cầu với khóa đã xóa hoặc sai | 401 invalid_api_key |
| 8. Không có số dư hoặc giới hạn khóa | Sử dụng khóa có giới hạn thấp hoặc không gian làm việc trống | 402 insufficient_balance hoặc quota_exceeded |
| 9. Hạn chế mô hình | Hạn chế danh sách mô hình của khóa, sau đó yêu cầu mô hình khác | 403 model_not_allowed |
| 10. Thời gian chờ và thử lại | Buộc thời gian chờ trong staging | Mã của bạn chỉ thử lại theo retryable và retry_after |
| 11. Thanh toán | So sánh billing_transaction_id và Usage với ước tính của bạn |
Phí khớp với giá hiện tại của mô hình và số lượng token được ghi lại |
Sau khi bảng kiểm tra vượt qua, hãy thay đổi cấu hình production của bạn và triển khai. Giữ khóa OpenAI cũ hoạt động cho đến khi Usage xác nhận lộ trình mới đã ổn định.
Các câu hỏi thường gặp
Tôi có cần thay đổi tên mô hình khi chuyển từ OpenAI không?
Không nhất thiết, nhưng hãy xác nhận từng cái. ID mô hình TokenLab là các chuỗi chính xác, vì vậy hãy kiểm tra chúng bằng GET /v1/models hoặc GET /v1/models/{model}. Vào ngày 03/10/2026, API trực tiếp liệt kê gpt-5.5 là active. Nếu một yêu cầu trả về model_not_found, ID đó không xác định hoặc không khả dụng. Hãy đọc danh sách mô hình và sử dụng ID hiện tại.
Streaming và gọi công cụ có hoạt động chính xác như API của OpenAI không?
TokenLab ghi nhận streaming thông qua SSE và gọi hàm thông qua định dạng yêu cầu tương thích với OpenAI. Tài liệu cũng cho biết các tùy chọn được hỗ trợ phụ thuộc vào mô hình được chọn. Do đó, chúng tôi coi kết quả là tương thích, không phải giống hệt. Hãy kiểm tra streaming, tools, tool_choice và bất kỳ response_format nào bạn sử dụng với mô hình cụ thể mà bạn dự định chạy.
Tôi nhận được mã trạng thái nào khi số dư hết?
Bạn nhận được HTTP 402 với mã insufficient_balance. Một khóa đã đạt đến giới hạn chi tiêu của riêng nó cũng trả về 402, với quota_exceeded. Một khóa bị thiếu, không hợp lệ hoặc bị thu hồi trả về 401. Đừng thử lại bất kỳ lỗi nào trong số này mà không thay đổi. Hãy nạp thêm số dư, tăng giới hạn khóa hoặc thay thế khóa.
Tôi có thể gọi các mô hình Claude hoặc Gemini từ cùng một client OpenAI không?
Danh mục mô hình liệt kê claude-sonnet-5 và gemini-3.5-flash với openai_chat_completions trong số các định dạng yêu cầu của chúng. Do đó, chat cơ bản có thể đi qua cùng một client. Các trường dành riêng cho Claude như khối suy nghĩ và sử dụng công cụ Claude thuộc về /v1/messages. Các trường gốc của Gemini vẫn nằm trên lộ trình /v1beta. Hãy giữ một định dạng API cho mỗi cuộc trò chuyện.
Bắt đầu xây dựng trên TokenLab
Tạo khóa tại TokenLab, đặt URL cơ sở thành https://api.tokenlab.sh/v1 và chạy yêu cầu Quickstart trước khi chạm vào production.
Nguồn
Giá quan sát ngày 2026-10-03
- TokenLab Docs: QuickstartQuan sát ngày 2026-10-03
- TokenLab Docs: AuthenticationQuan sát ngày 2026-10-03
- TokenLab Docs: Migration GuidesQuan sát ngày 2026-10-03
- TokenLab Docs: SDKs & LibrariesQuan sát ngày 2026-10-03
- TokenLab Docs: API formatsQuan sát ngày 2026-10-03
- TokenLab Docs: Handle API errorsQuan sát ngày 2026-10-03
- TokenLab Docs: Billing and pricingQuan sát ngày 2026-10-03
- TokenLab Docs: Create Chat CompletionQuan sát ngày 2026-10-03



