在国内低成本无障碍使用 Gemini Pro

gemini pro 与 gpt-3.5 的性能对比
gemini pro 与 gpt-3.5 的性能对比

Google 的 Gemini Pro 有着超越 GPT-3.5 的性能表现, 最重要的是还免费, 尽管有每分钟60次的请求频率限制, 但对于大部人来说日常使用是完全足够了。

由于 Google 并未向中国开放该服务, 加上 Google 也是被我国认证的企业, 所以 Gemini Pro 是无法直连使用的。 如果要使用就需要使用请问中转服务, 一个稳定的中转服务器都不便宜, 普通的一年也需要几百块钱。

除了购买梯子或服务器自建,其实还有另外一种更经济的方法,那就是用各大云服务商提供的云函数。云函数是一种无需管理服务器即可运行代码的计算服务, 你只需要上传你的代码, 云函数就会帮你运行, 你只需要按照运行的时间和内存使用量付费。 价格很便宜, 那腾讯云来说一年100万次调用才 40 块钱, 现在还免费送 3 个月。

利用腾讯云云函数访问 Gemini Pro

  1. 首先你需要一个腾讯云账号,没有的话先注册一个;

  2. 进入云函数控制台: https://console.cloud.tencent.com/scf/list

  3. 依次点击【新建】->【从头开始】,然后按照以下配置创建一个云函数

  • 函数类型: Web函数
  • 函数名称: gemini-proxy (请随意)
  • 地域: 硅谷 (或美国其他区域)
  • 运行环境: Nodejs 16.13 (或者更高的版本)
  • 高级配置:
    • 内存: 64M
    • 执行超时时间: 900 秒
    • 请求多并发: 2 并发
  • 日志配置 -> 日志投递:不启用
  • 函数代码:
    • 本地上传zip包 (点我下载 ZIP 包)(感兴趣的可以看本文末尾的代码清单)
  • 触发器配置(这里可能要创建一个新的触发器):
    • 默认触发器
    • 触发别名/版本:默认流量
    • 请求方法: ANY
    • 发布环境: 发布
    • 鉴权方法: 免鉴权

然后点击“完成”按钮,进入【函数管理】,在【函数代码】中找到【访问路径】, 类似

https://service-43fsa347fs-423324234932.usw.tencentapigw.com/release/

这就是你的访问地址, 注意使用的时候要把最后的 /release 部分删除。

如何使用

本文假设你应该已经有了一个 Gemini Pro 的 API key, 如果没有的话可以点我获取(请科学上网)。

你现在需要的只剩一个可以适配 Gemini Pro 的客户端应用了。 这里我们推荐自家的 5ire, Mac 和 Windows 用户都可以使用,不过目前还在内测阶段,需要的话请联系我们。

效果如下

5ire 客户端
在 5ire 客户端中使用 Gemini Pro
需要注意的是,由于云函数不支持流式输出,因此需要在客户端中关闭流式输出。

代码清单

代码部分如下, 不感兴趣的可以忽略, 直接在这里下载

package.json

{
  "name": "gemini",
  "version": "1.0.0",
  "description": "",
  "main": "sls.js",
  "scripts": {
    "start": "node app.js"
  },
  "author": "Ironben",
  "license": "MIT",
  "dependencies": {
    "express": "~4.16.1",
    "http-proxy-middleware": "^2.0.6"
  }
}

app.js

const express = require('express')
const {
  createProxyMiddleware
} = require('http-proxy-middleware');
const app = express()
const port = 9000

app.use('/', createProxyMiddleware({
  target: 'https://generativelanguage.googleapis.com',
  changeOrigin: true,
  onProxyReq: (proxyReq, req, res) => {
    proxyReq.removeHeader('x-forwarded-for');
    proxyReq.removeHeader('x-real-ip');
  },
  onProxyRes: function (proxyRes, req, res) {
    proxyRes.headers['Access-Control-Allow-Origin'] = '*';
  }
}));

app.listen(port, () => {
  console.log(`Proxy is listening at http://localhost:${port}`)
})

serverless.yml

component: scf
name: Gemini
inputs: 
  src: 
    src: ./
    exclude: 
      - .env
  # 指定 SCF 类型为 Web 类型
  type: web
  name: ${name} 
  region: na-siliconvalley-2 # 美国东部区域
  runtime: Nodejs12.16
  memorySize: 512 # 内存大小,为保证性能,web 函数请配置 512 MB 及以上
  events: 
    - apigw: 
        parameters: 
          protocols: 
            - http
            - https
          environment: release
          endpoints: 
            - path: /
              method: ANY

scf_bootstrap

#!/bin/sh
/var/lang/node12/bin/node app.js