Repository navigation
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
将API Key与分配的域名填入AI客户端即可使用,如果有多个API Key用逗号分隔 ### Deno 部署 (推荐用于 Function Calling) [](https://dash.deno.com/new?url=https://github.com/muskke/gemini-balance-edge&entry=src/deno_index.ts&env=GEMINI_API_KEY,AUTH_TOKEN) 对于需要使用 `Function Calling` 等可能耗时较长的操作,Vercel 或 Netlify 的 Serverless 函数可能会因为超时(通常为 10-25 秒)而被中断。Deno Deploy 没有此限制,是更稳定可靠的选择。 1. **登录 Deno Deploy**: - 访问 [https://dash.deno.com/](https://dash.deno.com/) 并使用您的 GitHub 账号登录。 2. **创建新项目**: - 点击 "**New Project**",然后选择 "**Deploy from GitHub repository**"。 - 选择您的 `gemini-balance-edge` 仓库,并选择 `main` (或主) 分支。 3. **配置部署设置**: - **Entry Point (入口文件)**: Deno Deploy 会尝试自动检测。请务必将其设置为 `src/deno_index.ts`。 - 点击 "**Link**" 完成关联。 4. **添加环境变量**: - 项目关联后,进入项目的 "**Settings**" -> "**Environment Variables**"。 - 添加以下环境变量: - `GEMINI_API_KEY`: 您的 Google Gemini API 密钥 (多个密钥请用逗号隔开)。 - `AUTH_TOKEN`: (可选) 您为服务设置的访问令牌。 5. **完成部署**: - 添加完环境变量后,Deno Deploy 会自动触发一次新的部署。 - 部署成功后,您将获得一个 `*.deno.dev` 的域名。请使用此域名作为新的 API 端点。 ### EdgeOne Pages 部署 (推荐用于国内访问) [](https://console.cloud.tencent.com/edgeone/pages) EdgeOne Pages 是腾讯云提供的静态网站托管服务,特别适合国内用户使用,具有低延迟、高可用性的特点。 **重要**: EdgeOne Pages 使用 Pages Functions 来处理服务端逻辑,项目已包含 `node-functions/` 目录和相应的函数文件。 1. **登录 EdgeOne 控制台**: - 访问 [EdgeOne Pages 控制台](https://console.cloud.tencent.com/edgeone/pages) 并使用您的腾讯云账号登录。 2. **创建 Pages 项目**: - 在控制台中,点击 "**Pages**" -> "**新建项目**"。 - 选择 "**从 Git 仓库导入**" 或 "**上传文件**"。 3. **配置项目设置**: - **项目名称**: 输入一个描述性的名称,如 `gemini-balance-edge`。 - **构建命令**: 如果使用 Git 仓库,可以配置构建命令(可选)。 - **输出目录**: 设置为项目根目录。 4. **配置环境变量**: - 在项目设置中,找到 "**环境变量**" 选项。 - 添加以下环境变量: - `GEMINI_API_KEY`: 您的 Google Gemini API 密钥 (多个密钥请用逗号隔开)。 - `AUTH_TOKEN`: (可选) 您为服务设置的访问令牌。 - `GEMINI_BASE_URL`: (可选) Gemini API 基址。 - `GEMINI_API_VERSION`: (可选) Gemini API 版本。 5. **部署项目**: - 如果使用 Git 仓库,EdgeOne 会自动检测 `edgeone.json` 配置文件。 - 如果上传文件,确保包含 `edgeone.json` 配置文件。 - 点击 "**部署**" 开始部署过程。 6. **配置路由规则**: - 项目中的 `edgeone.json` 文件已简化为统一入口: - `/verify` → `/node-functions/verify.js` - `/(.*)` → `/node-functions/edgeone_index.js` - 模型列表与所有 API 路由由统一入口根据路径自动判断,并设置正确的鉴权头(OpenAI Authorization 或 Gemini x-goog-api-key)。 7. **获取访问域名**: - 部署完成后,您将获得一个 EdgeOne Pages 提供的域名。 - 使用此域名作为您的 API 端点。 8. **国内访问优化**: - EdgeOne Pages 在国内有多个节点,访问速度较快。 - 支持自定义域名绑定,提升用户体验。 **注意**: - EdgeOne Pages 使用 Pages Functions 架构,需要将 API 文件放在 `node-functions/` 目录中 - 根据 [EdgeOne Pages 文档](https://pages.edgeone.ai/zh/document/pages-functions-overview),Node Functions 提供完整的 Node.js 兼容性,适合深度依赖 Node.js 生态的业务场景 ## 本地调试 1. 安装 Node.js 和 Vercel CLI: `npm install -g vercel` 2. 克隆项目并进入目录。 3. 关联 Vercel 项目: `vercel link` 4. 拉取环境变量: `vercel env pull .env.development.local` 5. 启动开发服务器: `vercel dev` ## 自动化部署 (CI/CD) 本项目包含一个 GitHub Actions 工作流配置 (`.github/workflows/deploy.yml`),可以在您将代码推送到 `main` 分支时自动将应用部署到 Vercel。 要启用此功能,您需要在您的 GitHub 仓库中设置以下 Secrets: 1. **导航到仓库设置**: 在您的 GitHub 仓库页面,点击 "Settings" -> "Secrets and variables" -> "Actions"。 2. **添加以下 Secrets**: - `VERCEL_TOKEN`: 您的 Vercel 账户访问令牌。您可以从 Vercel 的 [Account Settings](https://vercel.com/account/tokens) 页面生成一个。 - `VERCEL_ORG_ID`: 您的 Vercel 组织 ID。可以从 `.vercel/project.json` 文件中找到 (`orgId`)。 - `VERCEL_PROJECT_ID`: 您的 Vercel 项目 ID。可以从 `.vercel/project.json` 文件中找到 (`projectId`)。 - `GEMINI_API_KEY`: 您需要部署的 Gemini API 密钥,多个请用逗号隔开。 - `GEMINI_BASE_URL` (可选): 代理的 Gemini API URL。 - `GEMINI_API_VERSION` (可选): 代理的 Gemini API 版本。 完成这些设置后,每当您向 `main` 分支推送提交,GitHub Actions 就会自动为您完成部署。 ## 使用方式 > **两种授权模式:** > > 1. **Gemini 原生格式 (`x-goog-api-key`)**: > - **客户端密钥**: 在请求头中提供 `x-goog-api-key: `。 > - **服务端密钥**: 在请求头中提供 `x-goog-api-key: ` (前提是服务端已配置 `AUTH_TOKEN` 和 `GEMINI_API_KEY`)。 > - **模型列表**: 访问 `/${GEMINI_API_VERSION}/models`(例如 `/v1beta/models`)。 > > 2. **OpenAI 兼容格式 (`Authorization`)**: > - **客户端密钥**: 在请求头中提供 `Authorization: Bearer `。 > - **服务端密钥**: 在请求头中提供 `Authorization: Bearer ` (前提是服务端已配置 `AUTH_TOKEN` 和 `GEMINI_API_KEY`)。 > - **模型列表**: 访问 `/openai/models` 或 `/v1/models`(统一入口会映射到 `/${GEMINI_API_VERSION}/openai/models`)。 > > \* **注意**: 如果请求中未提供任何有效的凭证,请求将被拒绝。 1) Gemini 原生格式 - 非流式 ```bash curl --location 'https:///v1beta/models/gemini-2.5-pro:generateContent' \ --header 'Content-Type: application/json' \ --header 'x-goog-api-key: ,' \ --data '{ "contents":[{"role":"user","parts":[{"text":"Hello"}]}] }' ``` - 流式(SSE) ```bash curl --location 'https:///v1beta/models/gemini-2.5-pro:generateContent?alt=sse' \ --header 'Content-Type: application/json' \ --header 'x-goog-api-key: ,' \ --data '{ "contents":[{"role":"user","parts":[{"text":"Hello"}]}] }' ``` 2) OpenAI 兼容格式 - 支持 /chat/completions、/embeddings、/models ```bash curl --location 'https:///chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer ' \ --data '{ "model":"gpt-3.5-turbo", "messages":[{"role":"user","content":"你好"}], "stream": false }' ``` 3) API Key 校验(SSE) - 需在服务端配置 AUTH_TOKEN 时,携带 Authorization: Bearer ```bash curl --location 'https:///verify' \ --header 'Authorization: Bearer ' \ --header 'x-goog-api-key: ,' ``` SSE 事件: - : verify-start(注释帧) - data: {"key":"xxxxxxx......xxxxxxx","status":"GOOD|BAD|ERROR", "error":"可选"} - : heartbeat(每 5s) - : verify-end(注释帧) ## 负载均衡与健康策略 - 平滑加权轮询(SWRR):每个健康 Key 维护 currentWeight,按权重累加并选择最大者,选中后 currentWeight 减去总权重,实现更平滑分配 - 健康判定: - 401/403:标记不健康(可能为 Key 失效、禁用) - 429/5xx/网络错误:不直接标记不健康,建议客户端重试或降级 - 4xx(如 400/404):多为请求问题,不影响 Key 健康 - 恢复:后台周期性探活恢复不健康 Key ## CORS 与预检 - 全局 OPTIONS:返回 204,允许任意方法与头(仅演示,生产可按需收窄) - 正常与错误响应均附加: - Access-Control-Allow-Origin: * - Referrer-Policy: no-referrer - SSE 响应额外设置: - Content-Type: text/event-stream; charset=utf-8 - Cache-Control: no-cache - Connection: keep-alive ## 安全建议 - 强烈建议设置 AUTH_TOKEN,限制代理与 /verify 的滥用 - 前端/日志系统不要记录完整密钥;本项目在日志层已对敏感头进行脱敏 - 如需进一步控制,建议在边缘层增加速率限制与 IP/令牌级配额(本项目暂未内置) ## 部署 - Vercel:一键部署后在环境变量中配置 GEMINI_API_KEY(支持权重)、可选 AUTH_TOKEN 等。注意:当前无 KV 持久化 - Netlify:功能类似,无持久化 - Deno Deploy:推荐用于长时间交互(Function Calling 等),无平台超时限制。同样为内存态 - EdgeOne:推荐用于国内用户,低延迟、高可用性,支持自定义域名 ## 本地开发 - 推荐使用 Vercel CLI npm i -g vercel vercel dev - 或在 Deno 环境直接部署测试(见项目根目录的 deno 部署说明与 src/deno_index.ts)。 ## 变更记录(相较此前版本) - 文档调整为“无持久化,仅进程内存”,移除 Vercel KV 相关描述 - 仅在 401/403 时标记 Key 不健康;移除对网络异常的误伤 - 实现 SWRR,减少临时大数组的构造开销 - 统一 CORS/预检处理;SSE 增加心跳与注释帧 - OpenAI 兼容层不再包含 /completions 路由 - 日志默认脱敏敏感头,减少泄露风险 ## 版权 MIT License. 改编自:技术爬爬虾(gemini-balance-lite),致谢原作者。# Test change