I. Tổng quan
Trang web này cung cấp khả năng truy cập tương thích với định dạng Google Gemini API, hỗ trợ hai phương thức gọi là generateContent và tạo luồng (streaming). Các dự án sử dụng Google GenAI SDK hoặc máy khách tương thích với Gemini có thể kết nối bằng cách trỏ địa chỉ yêu cầu đến cổng Gemini của trang web chúng tôi và thay khóa API bằng khóa sk- do hệ thống cung cấp.
Các dòng mô hình Gemini hiện có được dựa trên bảng danh mục mô hình (ví dụ: gemini-3.7-flash, gemini-3.6-flash, gemini-3.5-flash, gemini-3.5-flash-lite, v.v.). Danh sách đầy đủ và đơn giá có thể được truy vấn thông qua GET /v1/models.
II. Địa chỉ giao diện (API Endpoint)
| Phương thức | Đường dẫn | Mô tả |
|---|---|---|
| POST | /v1beta/models/{model}:generateContent | Cổng vào tạo nội dung Gemini, thân yêu cầu là payload của generateContent |
| POST | /v1beta/models/{model}:streamGenerateContent?alt=sse | Tạo nội dung theo luồng (SSE) |
| GET | /v1/models | Danh sách mô hình và đơn giá (không yêu cầu xác thực) |
Địa chỉ Gateway: https://www.relay-api.com. Tên mô hình được nối vào URL (/v1beta/models/{model}:generateContent, giống với Google chính thức); thân yêu cầu là payload của generateContent.
III. Phương thức xác thực
Tương tự như các giao diện khác trên trang web của chúng tôi, hãy sử dụng khóa sk- của bạn:
Authorization: Bearer sk-khóa_của_bạn
Cũng hỗ trợ tiêu đề x-api-key và tiêu đề x-goog-api-key: sk-khóa_của_bạn theo chuẩn Google.
IV. Bắt đầu nhanh (curl)
4.1 Không theo luồng (Non-streaming)
curl -X POST https://www.relay-api.com/v1beta/models/gemini-3.7-flash:generateContent \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-khóa_của_bạn" \
-d '{
"contents": [
{
"role": "user",
"parts": [{"text": "Giới thiệu về Gemini API trong một câu"}]
}
],
"generationConfig": {
"temperature": 0.7,
"maxOutputTokens": 512
}
}'
4.2 Kèm theo chỉ dẫn hệ thống (systemInstruction)
curl -X POST https://www.relay-api.com/v1beta/models/gemini-3.7-flash:generateContent \
-H "Content-Type: application/json" \
-H "x-api-key: sk-khóa_của_bạn" \
-d '{
"model": "gemini-3.5-flash",
"systemInstruction": {
"parts": [{"text": "Bạn là một kỹ sư tích hợp API dày dặn kinh nghiệm, hãy trả lời ngắn gọn."}]
},
"contents": [
{"role": "user", "parts": [{"text": "Làm thế nào để chọn giữa giao diện luồng và không theo luồng?"}]}
]
}'
V. Tham số yêu cầu
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
| model | string | Có | Slug mô hình, ví dụ: gemini-3.7-flash |
| contents | array | Có | Nội dung hội thoại, phần tử là {role, parts[]}; role nhận giá trị user / model |
| contents[].parts | array | Có | Khối nội dung, thường dùng khối văn bản {text} |
| systemInstruction | object | Không | Chỉ dẫn hệ thống, cấu trúc {parts: [{text}]} |
| generationConfig.temperature | number | Không | Nhiệt độ lấy mẫu, mặc định 1.0 |
| generationConfig.topP | number | Không | Lấy mẫu nhân (top-p) |
| generationConfig.topK | int | Không | Lấy mẫu Top-K |
| generationConfig.maxOutputTokens | int | Không | Số token đầu ra tối đa |
| generationConfig.stopSequences | array | Không | Chuỗi dừng |
| stream | bool | Không | Có trả về theo luồng không, mặc định false |
VI. Cấu trúc phản hồi
{
"candidates": [
{
"content": {
"role": "model",
"parts": [{"text": "Gemini API hỗ trợ đầu vào văn bản, đa phương thức và đầu ra theo luồng."}]
},
"finishReason": "STOP",
"index": 0
}
],
"usageMetadata": {
"promptTokenCount": 16,
"candidatesTokenCount": 20,
"totalTokenCount": 36
}
}
| Trường | Mô tả |
|---|---|
| candidates[].content.parts[].text | Văn bản do mô hình tạo ra |
| candidates[].finishReason | Lý do kết thúc: STOP / MAX_TOKENS / SAFETY / RECITATION |
| usageMetadata.promptTokenCount | Số token đầu vào (căn cứ tính phí) |
| usageMetadata.candidatesTokenCount | Số token đầu ra (căn cứ tính phí) |
| usageMetadata.totalTokenCount | Tổng số token |
VII. Đầu ra theo luồng (Streaming)
Sau khi thêm "stream": true vào thân yêu cầu, máy chủ sẽ trả về nội dung ứng viên theo từng khối thông qua SSE:
data: {"candidates": [{"content": {"parts": [{"text": "Gemini"}]}, "index": 0}]}
data: {"candidates": [{"content": {"parts": [{"text": " API hỗ trợ đầu ra"}]}, "index": 0}]}
data: {"candidates": [{"content": {"parts": [{"text": "theo luồng."}]}, "index": 0, "finishReason": "STOP"}]}
Máy khách phân tích từng dòng data: và nối candidates[0].content.parts[0].text; khi finishReason của chunk cuối cùng là STOP, nghĩa là việc tạo nội dung đã hoàn tất.
VIII. Mã lỗi phổ biến
| Mã trạng thái HTTP | Ý nghĩa | Khuyên dùng |
|---|---|---|
| 400 | Định dạng yêu cầu sai (thiếu contents, mô hình không tồn tại, v.v.) | Kiểm tra thân yêu cầu và tên mô hình |
| 401 | Khóa API không hợp lệ hoặc bị thiếu | Kiểm tra tiêu đề Authorization / x-api-key |
| 403 | Khóa bị vô hiệu hóa, không đủ số dư, hoặc khóa không được cấp quyền cho mô hình/tuyến đường này | Nạp tiền hoặc kiểm tra quyền của khóa |
| 404 | Mô hình hoặc điểm cuối không tồn tại | Xác nhận lại slug mô hình |
| 429 | Yêu cầu quá thường xuyên | Chờ và thử lại (backoff) |
| 500 | Lỗi máy chủ nội bộ | Thử lại sau, nếu lỗi tiếp diễn vui lòng liên hệ CSKH |
Thân phản hồi lỗi có cấu trúc đồng nhất: {"code": mã_trạng_thái, "message": "mô_tả_lỗi", "data": null}.
IX. Ghi chú về tính tương thích
- Google GenAI SDK (
google-genai) có thể được truy cập thông qua điểm cuối tùy chỉnh. - Hỗ trợ tất cả các máy khách tương thích với Gemini nhắm mục tiêu vào
generateContent. - Tên mô hình dựa trên slug được trả về bởi
GET /v1/models.
Ghi chú về Base URL: Trang web này chấp nhận cả /v1beta/models/... và /v1beta/v1beta/models/... (cũng như /v1/... và /v1/v1/...), vì vậy việc máy khách có tự bổ sung /v1 hay /v1beta hay không đều không ảnh hưởng đến việc gọi API: Bạn có thể điền Base URL là tên miền gốc hoặc địa chỉ chứa /v1beta đều được. Vui lòng tra cứu và sao chép ID mô hình từ mục "ID mô hình" ở góc trên bên phải của trang "Mã thông báo" trong bảng điều khiển.
