谷歌的Gemini系列大模型是我们能够免费使用的AI大模型里面最强大的,但是国内访问存在限制,让我来尝试解决它…

前置条件

  • 注册Cloudflare账号 官网:https://www.cloudflare-cn.com/
  • 拥有自己的域名并托管在Cloudflare上
  • 准备好Google Cloud的API密钥 官网:https://ai.google.dev/gemini-api/

创建Worker

  • 登录Cloudflare
  • 点击左侧菜单栏 Workers 和 Pages
  • 点击 创建 并选择 Workers 选项卡
  • 点击 创建Worker 按钮 输入 名称 后点击 部署

部署成功后点击右上角的 编辑代码 按钮,将下列兼容OpenAI API接口的服务代码粘贴进编辑器中:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
async function handleRequest(request) {
    try {
        if (request.method === "OPTIONS") {
            return getResponse("", 204);
        }
        
        const authHeader = request.headers.get("Authorization");
        if (!authHeader || !authHeader.startsWith("Bearer ")) {
            return getResponse("Unauthorized", 401);
        }
  
        if (request.method !== "POST") {
            return getResponse("Only POST requests are allowed", 405);
        }

        if (!request.url.endsWith("/v1/chat/completions") 
            && !request.url.endsWith("/v1beta/openai/chat/completions")
        ) {
            return getResponse("Not Found", 404);
        }
  
        const apiUrl = `https://generativelanguage.googleapis.com/v1beta/openai/chat/completions`;
        const response = await fetch(apiUrl, {
            method: 'POST',
            headers: {
                'Authorization': authHeader,
                'Content-Type': 'application/json'
            },
            body: request.body
        });

        if (!response.ok) {
            const errorText = await response.text();
            return getResponse(
                `Error from API: ${response.statusText} - ${errorText}`, 
                response.status
            );
        }
  
        const newResponse = new Response(response.body, {
            status: response.status,
            headers: {
                ...Object.fromEntries(response.headers),
                'Access-Control-Allow-Origin': '*',
                'Access-Control-Allow-Methods': '*',
                'Access-Control-Allow-Headers': '*'
            }
        });
  
        return newResponse;
    } catch (error) {
        return getResponse(JSON.stringify({
            error: `处理请求失败: ${error.message}`
        }), 500);
    }
  }
  
  function getResponse(resp, status) {
    return new Response(resp, {
        status: status,
        headers: {
            "Content-Type": "application/json",
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Methods": "*",
            "Access-Control-Allow-Headers": "*"
        }
    });
  }
  
  addEventListener('fetch', event => {
    event.respondWith(handleRequest(event.request))
  })

完成后点击 保存并部署 按钮,等待部署完成退出编辑器。

配置自定义域名

  • 在当前Worker面板中点击‘设置’选项卡,在‘域和路由’中点击‘添加’选择‘自定义域’
  • 输入已经托管在Cloudflare上的域名,点击‘保存’完成

此时Cloudflare会自动为域名解析添加一条解析记录,并生成一个SSL证书,Worker已经部署完毕。

开始使用

  • 向域名发送POST请求,请求路径为 /v1/chat/completions/v1beta/openai/chat/completions
  • 在请求头中添加 Authorization 字段,值为 Bearer <API_KEY>,其中 <API_KEY> 为googlecloud平台的API密钥
  • 构造请求体,请求体格式为JSON,其中 字段 model 为模型名称 , messages 为系统提示词和用户输入文本

代码示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
curl "https://<你的域名>/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <API_KEY>" \
-d '{
    "model": "gemini-2.0-flash-exp",
    "messages": [
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "9.9与9.11那个大?"}
    ]
    }'

python示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
from openai import OpenAI

client = OpenAI(
    api_key="<API_KEY>",
    base_url="https://<你的域名>/v1" // 或者 "https://<你的域名>/v1beta/openai/"
)

response = client.chat.completions.create(
  model="gemini-2.0-flash-exp",
  messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Hello!"}
  ],
  stream=True // 流式响应
)

for chunk in response:
    print(chunk.choices[0].delta)

nodejs示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import OpenAI from "openai";

const openai = new OpenAI({
    apiKey: "<API_KEY>",
    baseURL: "https://<你的域名>/v1"
});

async function main() {
  const completion = await openai.chat.completions.create({
    model: "gemini-2.0-flash-exp",
    messages: [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "Hello!"}
    ],
    stream: true,
  });

  for await (const chunk of completion) {
    console.log(chunk.choices[0].delta.content);
  }
}

main();