科学工具
科学工具让世界更美好
让世界更美好

Gemini CLI OpenAI Worker 安装使用手册(将Google Gemini模型转换为OpenAI兼容的API端点)Gemini CLI OpenAI Worker 安装使用手册(将Google Gemini模型转换为OpenAI兼容的API端点)

Gemini CLI OpenAI Worker借助Cloudflare Workers,可以将谷歌的Gemini模型转换为兼容OpenAI的端点,通过熟悉的OpenAI API模式,就能访问谷歌最先进的AI模型,背后依托OAuth2认证,以及驱动官方Gemini CLI的同一套基础设施。

Gemini CLI OpenAI Worker特性

🔐 OAuth2认证:无需API密钥,使用谷歌账号即可

🎯 兼容OpenAI API:可直接替代OpenAI端点

📚 支持OpenAI SDK:能与官方OpenAI SDK及库配合使用

🖼️ 视觉支持:支持图像(base64格式及URL)的多模态对话

🌐 第三方集成:兼容Open WebUI、ChatGPT客户端等

⚡ Cloudflare Workers:全球边缘部署,延迟低

🔄 智能令牌缓存:借助KV存储实现智能令牌管理

🆓 免费层级访问:通过Code Assist API利用谷歌的免费层级

📡 实时流传输:基于服务器发送事件的实时响应

🎭 多模型支持:可访问最新Gemini模型,包括实验性模型

Gemini CLI OpenAI Worker支持的模型

模型ID 上下文窗口 最大令牌数 思维支持 描述
gemini-2.5-pro 100万 6.5万 最新Gemini 2.5 Pro模型,具备推理能力
gemini-2.5-flash 100万 6.5万 快速的Gemini 2.5 Flash模型,具备推理能力

注:思维支持需要设置环境变量ENABLE_FAKE_THINKING=true。启用后,这些模型会在给出最终答案前展示推理过程。

Gemini CLI OpenAI Worker工作原理

该Worker充当转换层,将OpenAI API调用转换为谷歌Code Assist API格式,同时自动管理OAuth2认证。

流程如下:

1、客户端请求发送至Cloudflare Worker

2、检查KV缓存中是否有令牌

• 有:使用缓存的令牌

• 无:检查环境令牌

• 令牌有效:缓存并使用该令牌

• 令牌无效:刷新令牌,缓存新令牌

3、调用Gemini API

4、流传输响应,并转换为OpenAI格式

5、向客户端返回响应

Gemini CLI OpenAI Worker搭建步骤

前提条件

• 有权访问Gemini的谷歌账号

• 启用Workers的Cloudflare账号

• 已安装Wrangler CLI(npm install -g wrangler

步骤1:获取OAuth2凭证

需要从已访问过Gemini的谷歌账号获取OAuth2凭证。最简单的方式是通过官方Gemini CLI。

使用Gemini CLI: 1、安装Gemini CLI:

npm install -g @google/gemini-cli

2、启动Gemini CLI:

gemini

3、通过谷歌认证: 选择● Login with Google。此时会打开浏览器窗口,提示用谷歌账号登录。 4、找到凭证文件: • Windows:

C:\Users\USERNAME\.gemini\oauth_creds.json

• macOS/Linux:

~/.gemini/oauth_creds.json
    ```
5、复制凭证:文件包含如下格式的JSON:
```json
{
    "access_token": "ya29.a0AS3H6Nx...",
    "refresh_token": "1//09FtpJYpxOd...",
    "scope": "https://www.googleapis.com/auth/cloud-platform ...",
    "token_type": "Bearer",
    "id_token": "eyJhbGciOiJSUzI1NiIs...",
    "expiry_date": 1750927763467
}

步骤2:创建KV命名空间

# 为令牌缓存创建KV命名空间
wrangler kv:namespace create "GEMINI_CLI_KV"

记录返回的命名空间ID,在wrangler.toml中更新KV命名空间ID:

kv_namespaces = [
  { binding = "GEMINI_CLI_KV", id = "your-kv-namespace-id" }
]

步骤3:环境设置

创建.dev.vars文件:

# 必需:来自Gemini CLI认证的OAuth2凭证JSON
GCP_SERVICE_ACCOUNT={"access_token":"ya29...","refresh_token":"1//...","scope":"...","token_type":"Bearer","id_token":"eyJ...","expiry_date":1750927763467}

# 可选:谷歌云项目ID(未设置则自动发现)
# GEMINI_PROJECT_ID=your-project-id

# 可选:用于认证的API密钥(未设置则API公开)
# 设置后,客户端必须包含"Authorization: Bearer <your-api-key>"头
# 示例:sk-1234567890abcdef1234567890abcdef
OPENAI_API_KEY=sk-your-secret-api-key-here

对于生产环境,设置密钥:

wrangler secret put GCP_SERVICE_ACCOUNT
wrangler secret put OPENAI_API_KEY  # 可选,仅在需要认证时设置

步骤4:部署

# 安装依赖
npm install

# 部署到Cloudflare Workers
npm run deploy

# 或在本地运行以进行开发
npm run dev

API端点

基础URL

https://your-worker.your-subdomain.workers.dev

列出模型

GET /v1/models

响应:

{
  "object": "list",
  "data": [
    {
      "id": "gemini-2.5-pro",
      "object": "model",
      "created": 1708976947,
      "owned_by": "google-gemini-cli"
    }
  ]
}

聊天补全

POST /v1/chat/completions

Content-Type: application/json

{
  "model": "gemini-2.5-flash",
  "messages": [
    {
      "role": "system",
      "content": "你是一个有帮助的助手。"
    },
    {
      "role": "user",
      "content": "你好!最近怎么样?"
    }
  ]
}

响应(流传输):

data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1708976947,"model":"gemini-2.5-flash","choices":[{"index":0,"delta":{"role":"assistant","content":"你好"},"finish_reason":null}]}

data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1708976947,"model":"gemini-2.5-flash","choices":[{"index":0,"delta":{"content":"!我"},"finish_reason":null}]}

data: [DONE]

调试端点

• 检查令牌缓存:GET /v1/debug/cache

• 测试认证:POST /v1/token-test

• 测试:POST /v1/test

使用示例

OpenAI SDK(Python)

from openai import OpenAI

# 用你的worker端点初始化
client = OpenAI(
    base_url="https://your-worker.workers.dev/v1",
    api_key="sk-your-secret-api-key-here"  # 若启用认证,使用你的OPENAI_API_KEY
)

# 聊天补全
response = client.chat.completions.create(
    model="gemini-2.5-flash",
    messages=[
        {"role": "system", "content": "你是一个有帮助的助手。"},
        {"role": "user", "content": "用简单的语言解释机器学习"}
    ],
    stream=True
)

for chunk in response:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

OpenAI SDK(JavaScript/TypeScript)

import OpenAI from 'openai';

const openai = new OpenAI({
  baseURL: 'https://your-worker.workers.dev/v1',
  apiKey: 'sk-your-secret-api-key-here', // 若启用认证,使用你的OPENAI_API_KEY
});

const stream = await openai.chat.completions.create({
  model: 'gemini-2.5-flash',
  messages: [
    { role: 'user', content: '写一首关于编程的俳句' }
  ],
  stream: true,
});

for await (const chunk of stream) {
  const content = chunk.choices[0]?.delta?.content || '';
  process.stdout.write(content);
}

Open WebUI集成

添加为兼容OpenAI的端点:

• 基础URL:https://your-worker.workers.dev/v1

• API密钥:sk-your-secret-api-key-here(若启用认证,使用你的OPENAI_API_KEY)

配置模型:Open WebUI会通过/v1/models端点自动发现可用的Gemini模型。

开始聊天:像使用OpenAI模型一样使用任何Gemini模型!

cURL

curl -X POST https://your-worker.workers.dev/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-your-secret-api-key-here" \
  -d '{
    "model": "gemini-2.5-flash",
    "messages": [
      {"role": "user", "content": "解释量子计算"}
    ]
  }'

原生JavaScript/TypeScript

const response = await fetch('https://your-worker.workers.dev/v1/chat/completions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'gemini-2.5-flash',
    messages: [
      { role: 'user', content: '你好,世界!' }
    ]
  })
});

const reader = response.body.getReader();
const decoder = new TextDecoder();

while (true) {
  const { done, value } = await reader.read();
  if (done) break;

  const chunk = decoder.decode(value);
  const lines = chunk.split('\n');

  for (const line of lines) {
    if (line.startsWith('data: ') && line !== 'data: [DONE]') {
      const data = JSON.parse(line.substring(6));
      const content = data.choices[0]?.delta?.content;
      if (content) {
        console.log(content);
      }
    }
  }
}

原生Python(不使用SDK)

import requests
import json

url = "https://your-worker.workers.dev/v1/chat/completions"

data = {
    "model": "gemini-2.5-flash",
    "messages": [
        {"role": "user", "content": "写一个计算斐波那契数列的Python函数"}
    ]
}

response = requests.post(url, json=data, stream=True)

for line in response.iter_lines():
    if line and line.startswith(b'data: '):
        try:
            chunk = json.loads(line[6:].decode())
            content = chunk['choices'][0]['delta'].get('content', '')
            if content:
                print(content, end='')
        except json.JSONDecodeError:
            continue

图像支持(视觉)

Worker支持具有视觉能力的模型进行多模态对话。图像可提供为base64编码的数据URL或外部URL。

支持的图像格式:

• JPEG、PNG、GIF、WebP

• base64编码(推荐,更可靠)

• 外部URL(部分服务可能有限制)

具备视觉能力的模型:

gemini-2.5-pro

gemini-2.5-flash

gemini-2.0-flash-001

gemini-2.0-flash-lite-preview-02-05

gemini-2.0-pro-exp-02-05

带base64图像的示例

from openai import OpenAI
import base64

# 编码图像
with open("image.jpg", "rb") as image_file:
    base64_image = base64.b64encode(image_file.read()).decode('utf-8')

client = OpenAI(
    base_url="https://your-worker.workers.dev/v1",
    api_key="sk-your-secret-api-key-here"
)

response = client.chat.completions.create(
    model="gemini-2.5-flash",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "这张图片里有什么?"
                },
                {
                    "type": "image_url",
                    "image_url": {
                        "url": f"data:image/jpeg;base64,{base64_image}"
                    }
                }
            ]
        }
    ]
)

print(response.choices[0].message.content)

带图像URL的示例

curl -X POST https://your-worker.workers.dev/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-your-secret-api-key-here" \
  -d '{
    "model": "gemini-2.5-pro",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "详细描述这张图片。"
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "https://example.com/image.jpg",
              "detail": "high"
            }
          }
        ]
      }
    ]
  }'

多图像

可在单条消息中包含多个图像:

{
  "model": "gemini-2.5-pro",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "比较这两张图片。"
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "data:image/jpeg;base64,..."
          }
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "data:image/png;base64,..."
          }
        }
      ]
    }
  ]
}

Gemini CLI OpenAI Worker配置

环境变量

变量 必需 描述
GCP_SERVICE_ACCOUNT OAuth2凭证JSON字符串
GEMINI_PROJECT_ID 谷歌云项目ID(未设置则自动发现)
OPENAI_API_KEY 用于认证的API密钥(未设置则API公开)
ENABLE_FAKE_THINKING 为思维模型启用合成思维输出(设为"true"启用)

认证安全:

• 当设置OPENAI_API_KEY后,所有/v1/*端点都需要认证

• 客户端必须包含头:Authorization: Bearer <your-api-key>

• 没有该环境变量时,API可公开访问

• 推荐格式:sk-后跟随机字符串(例如sk-1234567890abcdef...

思维模型:

• 当ENABLE_FAKE_THINKING设为"true"时,标记为thinking: true的模型会在实际响应前生成合成推理文本

• 这模拟类似OpenAI o3模型的思维过程,展示模型的推理步骤

• 推理输出会在兼容OpenAI的响应格式中以reasoning块的形式流传输

• 未设置或设为"true"以外的值时,思维模型的行为与普通模型相同

KV命名空间

绑定 用途
GEMINI_CLI_KV 令牌缓存和会话管理

Gemini CLI OpenAI Worker故障排除

常见问题

401认证错误

• 检查OAuth2凭证是否有效

• 确保刷新令牌可用

• 验证凭证格式完全匹配

令牌刷新失败

• 凭证可能来自错误的OAuth2客户端

• 刷新令牌可能已过期或被撤销

• 检查调试缓存端点的令牌状态

项目ID发现失败

• 手动设置GEMINI_PROJECT_ID环境变量

• 确保谷歌账号有权访问Gemini

调试命令

# 检查KV缓存状态
curl https://your-worker.workers.dev/v1/debug/cache

# 仅测试认证
curl -X POST https://your-worker.workers.dev/v1/token-test

# 测试完整流程
curl -X POST https://your-worker.workers.dev/v1/test