Ba giá trị bạn cần
Mọi client tương thích OpenAI đều yêu cầu cùng ba thứ này. Dưới đây là các giá trị cho dịch vụ này.
| Cài đặt | Giá trị |
|---|---|
| URL gốc | https://api.getcodexapi.com/v1 |
| Khóa API | Khóa API của bạn từ trang API key |
| Mô hình | uncensored |
Khóa được gửi dưới dạng Authorization: Bearer YOUR_KEY. Hai endpoint bạn có thể gọi là POST /v1/chat/completions và GET /v1/models. Đây là một dịch vụ độc lập chạy một mô hình trọng số mở, không phải Codex của OpenAI, vì vậy đừng dán endpoint hoặc khóa của OpenAI vào cùng cài đặt đó.
Kiểm tra kết nối với curl
Trước khi chỉnh sửa cấu hình ứng dụng, hãy xác nhận khóa và URL hoạt động từ terminal. Liệt kê các mô hình là cách kiểm tra rẻ nhất vì không cần prompt:
curl https://api.getcodexapi.com/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"
Bạn sẽ nhận được một danh sách JSON bao gồm mô hình uncensored. Sau đó gửi một yêu cầu completion thực sự:
curl https://api.getcodexapi.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "Say hello in five words."}]
}'
Nếu cả hai lệnh gọi đều hoạt động, vấn đề trong mọi lỗi sau này nằm ở cấu hình client của bạn, không phải dịch vụ. Tiêu đề phản hồi bao gồm X-Request-Id, hữu ích để lưu lại nếu bạn cần truy vết một lệnh gọi cụ thể, và X-Balance-USD, hiển thị tín dụng còn lại của bạn.
Python với SDK OpenAI
Gói openai chính thức nhận URL cơ sở trong hàm tạo client. Không có gì khác về mã của bạn thay đổi.
from openai import OpenAI
client = OpenAI(
base_url="https://api.getcodexapi.com/v1",
api_key="YOUR_API_KEY",
)
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "Explain what a base URL is in two sentences."},
],
)
print(resp.choices[0].message.content)
Nếu bạn muốn giữ cấu hình ra khỏi mã, SDK cũng đọc OPENAI_BASE_URL và OPENAI_API_KEY từ môi trường:
export OPENAI_BASE_URL="https://api.getcodexapi.com/v1"
export OPENAI_API_KEY="YOUR_API_KEY"
Với những giá trị đã được thiết lập, OpenAI() không cần tham số sẽ tự nhận chúng. Điều này rất tiện vì nhiều công cụ bên thứ ba dựa trên SDK sẽ kế thừa cùng các biến này mà không cần thay đổi mã.
Node.js
SDK JavaScript sử dụng cùng tên tùy chọn, được viết là baseURL.
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.getcodexapi.com/v1",
apiKey: process.env.API_KEY,
});
const stream = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "Write a haiku about version control." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
Truyền phát trả về các sự kiện do máy chủ gửi với stream: true, và thông tin sử dụng được bao gồm ở cuối. Hãy lưu ý rằng một yêu cầu truyền phát chiếm một trong các khe đồng thời của bạn cho đến khi luồng kết thúc, vì vậy một luồng bạn bỏ rơi mà không đóng sẽ vẫn tính vào giới hạn.
Các ứng dụng có màn hình cài đặt
Các công cụ và trình soạn thảo trên máy tính thường đặt tên cho trường này theo một trong ba cách: "Base URL", "API Base" hoặc "endpoint tương thích OpenAI". Tất cả đều yêu cầu cùng một chuỗi. Một vài ghi chú giúp tiết kiệm thời gian:
- Chọn loại nhà cung cấp OpenAI hoặc "custom OpenAI-compatible", không chọn loại dành riêng cho nhà cung cấp cụ thể.
- Gõ tên mô hình bằng tay nếu ứng dụng có hộp văn bản tự do.
uncensoredlà ID chính xác. - Nếu ứng dụng có nút "kiểm tra kết nối", nó thường gọi danh sách mô hình, mà API này hỗ trợ.
- Một số ứng dụng lưu cache danh sách mô hình từ nhà cung cấp trước đó. Hãy xóa mục cũ và thêm mục mới nếu danh sách thả xuống hiển thị sai.
Để xem ví dụ chi tiết trong một trình soạn thảo cụ thể, hãy xem hướng dẫn kết nối Cursor, hoặc trang API lập trình để có cái nhìn tổng quan. Tài liệu tham khảo đầy đủ về các tham số có trong Tài liệu API.
Khi kết nối hoạt động, hãy lưu các giá trị chính xác vào một nơi bạn có thể tìm lại sau: URL, tên mô hình và ngày bạn tạo khóa. Các nhóm thường mất một giờ sau đó để tìm lại một bản sao cấu hình vẫn giữ giá trị cũ. Một tệp ví dụ dùng chung trong kho lưu trữ, với một giá trị giữ chỗ thay cho khóa thật, sẽ ngăn chặn điều đó.
Lỗi thường gặp và cách khắc phục
URL bị thành /v1/v1
Một số ứng dụng tự thêm /v1 vào cuối. Nếu yêu cầu của bạn bị lỗi và nhật ký ứng dụng hiển thị đường dẫn có /v1/v1/chat/completions, hãy bỏ /v1 khỏi URL cơ sở bạn đã nhập. Ngược lại cũng xảy ra: một ứng dụng không thêm nó cần nó trong cài đặt của bạn. Nhật ký đường dẫn yêu cầu sẽ giải quyết vấn đề này một cách nhanh chóng.
Bạn đặt toàn bộ endpoint vào URL cơ sở
URL cơ sở dừng lại ở /v1. Đừng nhập /chat/completions vào đó. SDK thêm đường dẫn cho mỗi lệnh gọi.
Dấu gạch chéo cuối hoặc lỗi chính tả trong tên máy chủ
Hầu hết các SDK đều chấp nhận dấu gạch chéo cuối, nhưng một vài công cụ cũ hơn xây dựng đường dẫn bằng cách nối chuỗi đơn giản và kết thúc với dấu gạch chéo kép. Hãy xóa nó nếu bạn thấy phản hồi 404 bất thường.
Khóa sai hoặc khóa của dịch vụ khác
Khóa OpenAI sẽ không hoạt động ở đây, và khóa của chúng tôi sẽ không hoạt động ở đó. Lỗi xác thực hầu như luôn có nghĩa là vấn đề sao chép-dán, chẳng hạn như thiếu ký tự hoặc khoảng trắng ở cuối.
Nó hoạt động trong curl nhưng không hoạt động trong ứng dụng của bạn
Nếu curl thành công và ứng dụng thất bại với cùng URL và khóa, sự khác biệt nằm ở môi trường. Hãy kiểm tra xem ứng dụng có chạy qua proxy hoặc trong container không có quyền truy cập ra ngoài, liệu nó có đọc biến môi trường cũ như OPENAI_BASE_URL còn sót lại từ dự án khác hay không, và liệu tệp cấu hình có ghi đè giá trị bạn đặt trong mã hay không. In ra URL cuối cùng mà client sẽ gọi, ngay trước khi yêu cầu, sẽ giải quyết hầu hết các trường hợp này trong vòng một phút.
HTTP 429
Điều này có nghĩa là đã đạt giới hạn. Mã lỗi rate_limited là yêu cầu mỗi phút, và concurrency là quá nhiều yêu cầu cùng lúc. Khóa đầy đủ cho phép 8 yêu cầu đồng thời và 300 mỗi phút; khóa dùng thử cho phép 2 và 60. Khi quá tải tạm thời, bạn cũng nhận được 429 với tiêu đề Retry-After: 5, vì vậy hãy đợi năm giây và thử lại.
LangChain và giữ URL ở một nơi
Các framework dựa trên client OpenAI sẽ nhận cùng giá trị. Trong tích hợp OpenAI của LangChain, các đối số được đặt tên như sau:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="uncensored",
base_url="https://api.getcodexapi.com/v1",
api_key="YOUR_API_KEY",
)
print(llm.invoke("Name three uses of a base URL.").content)
Bất kể khung công cụ nào, đừng phân tán URL khắp mã của bạn. Hãy đặt nó trong một biến môi trường hoặc một tệp cài đặt duy nhất, và đọc nó từ đó. Bằng cách đó, việc chuyển đổi giữa khóa thử nghiệm và khóa sản xuất, hoặc giữa các máy, chỉ có nghĩa là thay đổi một dòng duy nhất. Nó cũng giữ khóa ra khỏi kho lưu trữ của bạn: hãy lưu khóa trong biến môi trường hoặc bộ quản lý bí mật, không bao giờ trong tệp đã commit.
Nếu bạn đang tìm endpoint chính thức của OpenAI cho các sản phẩm Codex của họ, thì đây không phải là nó. URL cơ sở và xác thực của họ được OpenAI tài liệu hóa, vì vậy hãy làm theo tài liệu hiện tại của họ cho mục đích đó. Địa chỉ trên trang này thuộc về một dịch vụ độc lập và chỉ chấp nhận các khóa được cấp tại đây.
Những gì bạn có thể gửi sau khi kết nối
Endpoint này hỗ trợ truyền phát (streaming), gọi hàm (tools, tool_choice, với kết quả được trả về dưới dạng thông điệp role: "tool") và chế độ JSON thông qua response_format: {"type": "json_object"}. Các tham số temperature, top_p, stop, seed và các hình phạt được chuyển tiếp. Cửa sổ ngữ cảnh là 100.000 token cho prompt cộng với kết quả, và kích thước tối đa của yêu cầu là 8 MB.
Chỉ có văn bản. Không có tạo hình ảnh hoặc âm thanh, không có embedding và không có tinh chỉnh, vì vậy một tính năng của client phụ thuộc vào những thứ đó sẽ không hoạt động với base URL này. Việc sử dụng được tính phí theo token với giá $0,15 cho mỗi 1M token đầu vào và $0,50 cho mỗi 1M token đầu ra; trang giá cả có các ví dụ thực tế.
