Skip to content

Bud-Open/gemini-antiblock-go

 
 

Repository files navigation

Gemini Antiblock Proxy (Go 版本)

这是一个用 Go 语言重写的 Gemini API 代理服务器,具有强大的流式重试和标准化错误响应功能。它可以处理模型的"思考"过程,并在重试后过滤思考内容以保持干净的输出流。

功能特性

  • 流式响应处理: 支持 Server-Sent Events (SSE)流式响应
  • 智能重试机制: 当流被中断时自动重试,最多支持 100 次连续重试
  • 思考内容过滤: 可以在重试后过滤模型的思考过程,保持输出的整洁
  • 标准化错误响应: 提供符合 Google API 标准的错误响应格式
  • CORS 支持: 完整的跨域资源共享支持
  • 速率限制: 可配置的请求速率限制功能
  • 详细日志记录: 支持调试模式和详细的操作日志

快速开始

使用 Docker(推荐)

方式一:使用预构建镜像

# 拉取并运行
docker run -d \
  --name gemini-antiblock \
  -p 8080:8080 \
  -e UPSTREAM_URL_BASE=https://generativelanguage.googleapis.com \
  ghcr.io/davidasx/gemini-antiblock-go:latest

方式二:使用 Docker Compose

git clone https://github.com/Davidasx/gemini-antiblock-go.git
cd gemini-antiblock-go
docker-compose up -d

方式三:本地构建

git clone https://github.com/Davidasx/gemini-antiblock-go.git
cd gemini-antiblock-go
docker build -t gemini-antiblock-go .
docker run -d --name gemini-antiblock -p 8080:8080 gemini-antiblock-go

从源码运行

# 前置要求:Go 1.21+
git clone https://github.com/Davidasx/gemini-antiblock-go.git
cd gemini-antiblock-go
go mod download
go run main.go

配置

环境变量

变量名 默认值 描述
UPSTREAM_URL_BASE https://generativelanguage.googleapis.com Gemini API 的基础 URL
PORT 8080 服务器监听端口
DEBUG_MODE true 是否启用调试日志
MAX_CONSECUTIVE_RETRIES 100 流中断时的最大连续重试次数
RETRY_DELAY_MS 750 重试间隔时间(毫秒)
SWALLOW_THOUGHTS_AFTER_RETRY true 重试后是否过滤思考内容
ENABLE_RATE_LIMIT false 是否启用速率限制
RATE_LIMIT_COUNT 10 速率限制请求数
RATE_LIMIT_WINDOW_SECONDS 60 速率限制窗口时间(秒)
ENABLE_PUNCTUATION_HEURISTIC true 启用句末标点启发式优化

配置文件

从示例文件创建配置:

cp .env.example .env

Docker 完整配置示例

docker run -d \
  --name gemini-antiblock \
  -p 8080:8080 \
  -e UPSTREAM_URL_BASE=https://generativelanguage.googleapis.com \
  -e PORT=8080 \
  -e DEBUG_MODE=false \
  -e MAX_CONSECUTIVE_RETRIES=100 \
  -e RETRY_DELAY_MS=750 \
  -e SWALLOW_THOUGHTS_AFTER_RETRY=true \
  -e ENABLE_RATE_LIMIT=false \
  -e RATE_LIMIT_COUNT=10 \
  -e RATE_LIMIT_WINDOW_SECONDS=60 \
  -e ENABLE_PUNCTUATION_HEURISTIC=true \
  ghcr.io/davidasx/gemini-antiblock-go:latest

使用方法

代理服务器启动后,你可以将 Gemini API 的请求发送到这个代理服务器。代理会自动:

  1. 转发请求到上游 Gemini API
  2. 处理流式响应
  3. 在流中断时自动重试
  4. 注入系统提示确保响应以[done]结尾
  5. 过滤重试后的思考内容(如果启用)

示例请求

curl "http://127.0.0.1:8080/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse" \
   -H "x-goog-api-key: $GEMINI_API_KEY" \
   -H 'Content-Type: application/json' \
   -X POST --no-buffer  -d '{
    "contents": [
      {
        "role": "user",
        "parts": [
          {
            "text": "Hello"
          }
        ]
      }
    ],
    "generationConfig": {
      "thinkingConfig": {
        "includeThoughts": true
      }
    }
  }'

健康检查

curl http://localhost:8080/health

项目结构

gemini-antiblock-go/
├── main.go                 # 主程序入口
├── config/
│   └── config.go          # 配置管理
├── logger/
│   └── logger.go          # 日志记录
├── handlers/
│   ├── errors.go          # 错误处理和CORS
│   ├── health.go          # 健康检查
│   ├── proxy.go           # 代理处理逻辑
│   └── ratelimiter.go     # 速率限制
├── streaming/
│   ├── sse.go             # SSE流处理
│   └── retry.go           # 重试逻辑
├── mock-server/           # 测试模拟服务器
├── Dockerfile             # Docker构建文件
├── docker-compose.yml     # Docker Compose配置
└── README.md              # 项目文档

高级功能

重试机制

当检测到以下情况时,代理会自动重试:

  1. 流中断: 流意外结束而没有完成标记
  2. 内容被阻止: 检测到内容被过滤或阻止
  3. 思考中完成: 在思考块中检测到完成标记(无效状态)
  4. 异常完成原因: 非正常的完成原因
  5. 不完整响应: 响应看起来不完整

重试时会:

  • 保留已生成的文本作为上下文
  • 构建继续对话的新请求
  • 在达到最大重试次数后返回错误

日志记录

代理提供三个级别的日志:

  • DEBUG: 详细的调试信息(仅在调试模式下显示)
  • INFO: 一般信息和操作状态
  • ERROR: 错误信息和异常

测试和开发

项目包含一个 Mock Server 用于测试,支持多种测试场景:

cd mock-server
go run main.go

详细测试说明请参考 mock-server/README.md

生产部署

生产环境建议

  1. 使用特定版本标签

    docker pull ghcr.io/davidasx/gemini-antiblock-go:v1.0.0
  2. 设置资源限制

    docker run -d \
      --name gemini-antiblock \
      --memory=256m \
      --cpus=0.5 \
      -p 8080:8080 \
      ghcr.io/davidasx/gemini-antiblock-go:v1.0.0
  3. 启用速率限制

    -e ENABLE_RATE_LIMIT=true \
    -e RATE_LIMIT_COUNT=100 \
    -e RATE_LIMIT_WINDOW_SECONDS=60
  4. 配置监控

    • 健康检查:/health 端点
    • 日志轮转:避免日志文件过大
    • 重启策略:确保服务高可用

多架构支持

Docker 镜像支持:

  • linux/amd64 (x86_64)
  • linux/arm64 (ARM64)

CI/CD

项目使用 GitHub Actions 自动构建和发布:

  • 触发条件:推送到 main/master 分支或创建标签
  • 构建平台:支持 linux/amd64linux/arm64
  • 发布位置ghcr.io/davidasx/gemini-antiblock-go

许可证

MIT License

原始版本

这是基于 Cloudflare Worker 版本的 Go 语言重写版本。原始 JavaScript 版本提供了相同的功能,但运行在 Cloudflare Workers 平台上。

About

Gemini Antiblock Proxy (Go 版本)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 97.1%
  • Dockerfile 2.9%