Skip to content

OpenAI 兼容接口

本站支持 OpenAI 常用接口格式,适合绝大多数 SDK、聊天应用、自动化脚本和后端服务接入。最常用的是 /v1/chat/completions,也可以按需使用 /v1/responses/v1/embeddings

接口信息

接口方法完整请求地址用途
Chat CompletionsPOSThttps://api.gemai.cc/v1/chat/completions对话、图像理解、流式输出、工具调用
ResponsesPOSThttps://api.gemai.cc/v1/responsesOpenAI 新版 Responses 请求格式
EmbeddingsPOSThttps://api.gemai.cc/v1/embeddings文本向量化、检索、RAG

Chat Completions

基础文本对话

INFO

这是最常用的调用方式。messages 按顺序传入系统提示词、用户消息和历史上下文,模型会返回一条 assistant 回复。

bash
curl --location 'https://api.gemai.cc/v1/chat/completions' \
  --header 'Authorization: Bearer sk-你的令牌' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "[官逆]gemini-2.5-pro",
    "messages": [
      {
        "role": "system",
        "content": "你是一个有帮助的助手。"
      },
      {
        "role": "user",
        "content": "你能做什么?"
      }
    ]
  }'

流式响应

INFO

开启 stream: true 后,服务端会按 SSE 事件流逐段返回内容,适合聊天界面边生成边展示。

bash
curl --location 'https://api.gemai.cc/v1/chat/completions' \
  --header 'Authorization: Bearer sk-你的令牌' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "[官逆]gemini-2.5-pro",
    "stream": true,
    "messages": [
      {
        "role": "user",
        "content": "请用三句话介绍一下哈基米 API。"
      }
    ]
  }'

图片分析对话

INFO

支持多模态的模型可以在 content 中同时传入文本和图片。图片可以使用公网 URL,也可以使用 Base64 Data URL。

bash
curl --location 'https://api.gemai.cc/v1/chat/completions' \
  --header 'Authorization: Bearer sk-你的令牌' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "[官逆]gemini-2.5-pro",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "请描述这张图片的内容。"
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "https://example.com/image.png"
            }
          }
        ]
      }
    ]
  }'

JavaScript 示例

INFO

如果你在 Node.js 项目中调用,建议把 API Key 放在环境变量里,例如 GEMAI_API_KEY

javascript
const response = await fetch('https://api.gemai.cc/v1/chat/completions', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.GEMAI_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: '[官逆]gemini-2.5-pro',
    messages: [
      { role: 'user', content: '你好,请写一句欢迎语。' },
    ],
  }),
})

const data = await response.json()
console.log(data.choices?.[0]?.message?.content)

Python 示例

INFO

Python 脚本同样建议从环境变量读取 Key,避免把密钥写死在代码中。

python
import os
import requests

response = requests.post(
    'https://api.gemai.cc/v1/chat/completions',
    headers={
        'Authorization': f"Bearer {os.environ['GEMAI_API_KEY']}",
        'Content-Type': 'application/json',
    },
    json={
        'model': '[官逆]gemini-2.5-pro',
        'messages': [
            {'role': 'user', 'content': '你好,请写一句欢迎语。'},
        ],
    },
    timeout=120,
)

response.raise_for_status()
data = response.json()
print(data['choices'][0]['message']['content'])

更多语言示例

INFO

下面用标签页补充常见后端语言示例。它们与上面的 JavaScript / Python 示例调用的是同一个 Chat Completions 接口。

bash
curl --location 'https://api.gemai.cc/v1/chat/completions' \
  --header "Authorization: Bearer $GEMAI_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "[官逆]gemini-2.5-pro",
    "messages": [
      {
        "role": "user",
        "content": "你好,请写一句欢迎语。"
      }
    ]
  }'
javascript
const response = await fetch('https://api.gemai.cc/v1/chat/completions', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.GEMAI_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: '[官逆]gemini-2.5-pro',
    messages: [
      { role: 'user', content: '你好,请写一句欢迎语。' },
    ],
  }),
})

const data = await response.json()
console.log(data.choices?.[0]?.message?.content)
python
import os
import requests

response = requests.post(
    'https://api.gemai.cc/v1/chat/completions',
    headers={
        'Authorization': f"Bearer {os.environ['GEMAI_API_KEY']}",
        'Content-Type': 'application/json',
    },
    json={
        'model': '[官逆]gemini-2.5-pro',
        'messages': [
            {'role': 'user', 'content': '你好,请写一句欢迎语。'},
        ],
    },
    timeout=120,
)

response.raise_for_status()
data = response.json()
print(data['choices'][0]['message']['content'])
java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class GemaiChatExample {
    public static void main(String[] args) throws Exception {
        String apiKey = System.getenv("GEMAI_API_KEY");
        String body = """
            {
              "model": "[官逆]gemini-2.5-pro",
              "messages": [
                {
                  "role": "user",
                  "content": "你好,请写一句欢迎语。"
                }
              ]
            }
            """;

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.gemai.cc/v1/chat/completions"))
            .header("Authorization", "Bearer " + apiKey)
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(body))
            .build();

        HttpResponse<String> response = HttpClient.newHttpClient()
            .send(request, HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
go
package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	body := []byte(`{
		"model": "[官逆]gemini-2.5-pro",
		"messages": [
			{
				"role": "user",
				"content": "你好,请写一句欢迎语。"
			}
		]
	}`)

	req, err := http.NewRequest(
		http.MethodPost,
		"https://api.gemai.cc/v1/chat/completions",
		bytes.NewReader(body),
	)
	if err != nil {
		panic(err)
	}

	req.Header.Set("Authorization", "Bearer "+os.Getenv("GEMAI_API_KEY"))
	req.Header.Set("Content-Type", "application/json")

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	data, err := io.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}

	fmt.Println(string(data))
}
rust
use reqwest::Client;
use serde_json::json;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let api_key = std::env::var("GEMAI_API_KEY")?;

    let response = Client::new()
        .post("https://api.gemai.cc/v1/chat/completions")
        .bearer_auth(api_key)
        .json(&json!({
            "model": "[官逆]gemini-2.5-pro",
            "messages": [
                {
                    "role": "user",
                    "content": "你好,请写一句欢迎语。"
                }
            ]
        }))
        .send()
        .await?
        .text()
        .await?;

    println!("{response}");
    Ok(())
}

Responses

基础调用

INFO

/v1/responses 是 OpenAI 新版响应接口格式。部分新客户端或 SDK 会优先使用它。

bash
curl --location 'https://api.gemai.cc/v1/responses' \
  --header 'Authorization: Bearer sk-你的令牌' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "[官逆]gemini-2.5-pro",
    "input": "请用一句话解释什么是 API。"
  }'

Embeddings

文本向量化

INFO

向量接口常用于语义检索、相似度计算和 RAG 知识库。input 可以是字符串,也可以是字符串数组。

bash
curl --location 'https://api.gemai.cc/v1/embeddings' \
  --header 'Authorization: Bearer sk-你的令牌' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "qwen3-embedding-8b",
    "input": "哈基米 API 支持多种模型接口调用。"
  }'

返回格式

Chat Completions 成功时通常返回如下结构:

json
{
  "id": "chatcmpl-xxx",
  "object": "chat.completion",
  "created": 1741569952,
  "model": "[官逆]gemini-2.5-pro",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "你好!我能为你提供帮助。"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 19,
    "completion_tokens": 10,
    "total_tokens": 29
  }
}

注意事项

  • OpenAI 兼容 SDK 的 baseURL 一般填写 https://api.gemai.cc/v1
  • 自己拼接请求时,请使用完整接口地址,例如 https://api.gemai.cc/v1/chat/completions
  • 多模态图片输入需要选择支持图片理解的模型。
  • Embeddings 需要使用向量模型,普通聊天模型不一定支持向量化。