Gemini
平台特色:OpenAI 兼容模式
本平台采用 OpenAI 兼容格式,让您无需学习新的 API 文档,即可轻松调用 Google 的 Gemini 系列模型。
核心优势:一套代码,多种模型
用 OpenAI 格式跑通后,只需要更换模型名称 (model) 即可切换到 Claude、Gemini 等其他大模型,无需重写代码!这种设计让您可以轻松对比不同模型的效果,或根据成本和性能需求灵活切换。
支持的 Google 模型
gemini-3.1-pro-preview(最新)gemini-3.1-flash-lite-previewgemini-3-flash-previewgemini-3-pro-preview(已下架,迁移至gemini-3.1-pro-preview)gemini-2.5-flash(计划于26年10月下架)gemini-2.5-pro(计划于26年10月下架)gemini-2.5-flash-lite
基础信息 & 认证
API 端点 (Endpoint)
https://api.exchangetoken.ai/v1Chat 请求路径
POST /v1/chat/completions认证方式
所有 API 请求需要在 Header 中包含认证信息:
Authorization: Bearer YOUR_API_KEY3. 请求参数
3.1 Header 参数
| 参数名称 | 类型 | 必须 | 说明 | 示例值 |
|---|---|---|---|---|
Content-Type | string | 是 | 设置请求头类型,必须为 application/json | application/json |
Accept | string | 是 | 设置响应类型,建议统一为 application/json | application/json |
Authorization | string | 是 | 身份验证所需的 API_KEY,格式 Bearer $YOUR_API_KEY | Bearer $YOUR_API_KEY |
3.2 Body 参数 (application/json)
| 参数名称 | 类型 | 必须 | 说明 | 示例 |
|---|---|---|---|---|
model | string | 是 | 要使用的模型 ID。详见概述列出的可用版本,如 gemini-2.5-flash。 | gemini-2.5-flash |
messages | array | 是 | 聊天消息列表,格式与 OpenAI 兼容。数组中的每个对象包含 role (角色) 与 content (内容)。 | [{"role": "user", "content": "你好"}] |
role | string | 否 | 消息角色,可选值:system、user、assistant。 | user |
content | string/array | 否 | 消息的具体内容。 | 你好,请给我讲个笑话。 |
temperature | number | 否 | 采样温度,取值 0~2。数值越大,输出越随机;数值越小,输出越集中和确定。 | 0.7 |
top_p | number | 否 | 另一种调节采样分布的方式,取值 0~1。和 temperature 通常二选一设置。 | 0.9 |
n | number | 否 | 为每条输入消息生成多少条回复。 | 1 |
stream | boolean | 否 | 是否开启流式输出。设置为 true 时,返回类似 ChatGPT 的流式数据。 | false |
stop | string | 否 | 最多可指定 4 个字符串,一旦生成的內容出现这几个字符串之一,就停止生成更多 tokens。 | "\n" |
max_tokens | number | 否 | 单次回复可生成的最大 token 数量,受模型上下文长度限制。 | 1024 |
presence_penalty | number | 否 | -2.0 ~ 2.0。正值会鼓励模型输出更多新话题,负值会降低输出新话题的概率。 | 0 |
frequency_penalty | number | 否 | -2.0 ~ 2.0。正值会降低模型重复字句的频率,负值会提高重复字句出现的概率。 | 0 |
reasoning_effort | string | 否 | 用来控制模型在推理任务中投入多少"计算精力"。目前只有 gemini-2.5-flash-preview-04-17 支持。支持 low medium high none。默认为 low。 | low |
web_search_options | object | 否 | 用来控制是否开启 google搜索提示依据。 | {} |
完整代码示例
bash
curl -X POST "https://api.exchangetoken.ai/v1/chat/completions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-2.5-flash",
"messages": [
{"role": "system", "content": "你是一个有用的AI助手。"},
{"role": "user", "content": "你好!请介绍一下自己。"}
],
"temperature": 0.7,
"max_tokens": 1000
}'python
from openai import OpenAI
# 初始化客户端
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.exchangetoken.ai/v1"
)
# 发送聊天请求
response = client.chat.completions.create(
model="gemini-2.5-flash",
messages=[
{"role": "system", "content": "你是一个有用的AI助手。"},
{"role": "user", "content": "你好!请介绍一下自己。"}
],
temperature=0.7,
max_tokens=1000
)
print(response.choices[0].message.content)python
import requests
import json
url = "https://api.exchangetoken.ai/v1/chat/completions"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"model": "gemini-2.5-flash",
"messages": [
{"role": "system", "content": "你是一个有用的AI助手。"},
{"role": "user", "content": "你好!请介绍一下自己。"}
],
"temperature": 0.7,
"max_tokens": 1000
}
response = requests.post(url, headers=headers, json=data)
result = response.json()
if response.status_code == 200:
print(result["choices"][0]["message"]["content"])
else:
print(f"错误: {result}")javascript
const OpenAI = require('openai');
const client = new OpenAI({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.exchangetoken.ai/v1'
});
async function chatCompletion() {
try {
const response = await client.chat.completions.create({
model: 'gemini-2.5-flash',
messages: [
{"role": "system", "content": "你是一个有用的AI助手。"},
{"role": "user", "content": "你好!请介绍一下自己。"}
],
temperature: 0.7,
max_tokens: 1000
});
console.log(response.choices[0].message.content);
} catch (error) {
console.error('API调用错误:', error);
}
}
chatCompletion();java
import okhttp3.*;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.*;
public class LaoZhangExample {
private static final String API_KEY = "YOUR_API_KEY";
private static final String BASE_URL = "https://api.exchangetoken.ai/v1";
public static void main(String[] args) throws IOException {
OkHttpClient client = new OkHttpClient();
Gson gson = new Gson();
// 构建请求体
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("model", "gemini-2.5-flash");
requestBody.put("temperature", 0.7);
requestBody.put("max_tokens", 1000);
List<Map<String, String>> messages = Arrays.asList(
Map.of("role", "system", "content", "你是一个有用的AI助手。"),
Map.of("role", "user", "content", "你好!请介绍一下自己。")
);
requestBody.put("messages", messages);
RequestBody body = RequestBody.create(
gson.toJson(requestBody),
MediaType.parse("application/json")
);
Request request = new Request.Builder()
.url(BASE_URL + "/chat/completions")
.addHeader("Authorization", "Bearer " + API_KEY)
.addHeader("Content-Type", "application/json")
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
System.out.println(response.body().string());
}
}
}csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
class Program
{
private static readonly string API_KEY = "YOUR_API_KEY";
private static readonly string BASE_URL = "https://api.exchangetoken.ai/v1";
static async Task Main(string[] args)
{
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {API_KEY}");
var requestBody = new
{
model = "gemini-2.5-flash",
messages = new[]
{
new { role = "system", content = "你是一个有用的AI助手。" },
new { role = "user", content = "你好!请介绍一下自己。" }
},
temperature = 0.7,
max_tokens = 1000
};
var json = JsonConvert.SerializeObject(requestBody);
var content = new StringContent(json, Encoding.UTF8, "application/json");
try
{
var response = await client.PostAsync($"{BASE_URL}/chat/completions", content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
catch (Exception ex)
{
Console.WriteLine($"错误: {ex.Message}");
}
}
}go
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
type Message struct {
Role string `json:"role"`
Content string `json:"content"`
}
type ChatRequest struct {
Model string `json:"model"`
Messages []Message `json:"messages"`
Temperature float64 `json:"temperature"`
MaxTokens int `json:"max_tokens"`
}
func main() {
apiKey := "YOUR_API_KEY"
baseURL := "https://api.exchangetoken.ai/v1"
reqData := ChatRequest{
Model: "gemini-2.5-flash",
Messages: []Message{
{Role: "system", Content: "你是一个有用的AI助手。"},
{Role: "user", Content: "你好!请介绍一下自己。"},
},
Temperature: 0.7,
MaxTokens: 1000,
}
jsonData, _ := json.Marshal(reqData)
req, _ := http.NewRequest("POST", baseURL+"/chat/completions", bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer "+apiKey)
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Printf("请求错误: %v\n", err)
return
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}流式响应 (Streaming)
开启流式输出
在请求中设置 stream: true:
json
{
"model": "gemini-2.5-flash",
"messages": [{"role": "user", "content": "Hello"}],
"stream": true
}流式响应格式
响应将以 Server-Sent Events (SSE) 格式返回:
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1699000000,"model":"gemini-2.5-flash","choices":[{"delta":{"content":"Hello"},"index":0}]}
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1699000000,"model":"gemini-2.5-flash","choices":[{"delta":{"content":" there"},"index":0}]}
data: [DONE]错误处理
错误响应格式
json
{
"error": {
"message": "Invalid API key provided",
"type": "invalid_request_error",
"param": null,
"code": "invalid_api_key"
}
}常见错误码
| 错误码 | HTTP状态码 | 说明 |
|---|---|---|
invalid_api_key | 401 | API密钥无效 |
insufficient_quota | 429 | 额度不足 |
model_not_found | 404 | 模型不存在 |
invalid_request_error | 400 | 请求参数错误 |
server_error | 500 | 服务器错误 |
rate_limit_exceeded | 429 | 请求过于频繁 |
