这是一个用 Go 语言重写的 Gemini API 代理服务器,具有强大的流式重试和标准化错误响应功能。它可以处理模型的"思考"过程,并在重试后过滤思考内容以保持干净的输出流。
- 流式响应处理: 支持 Server-Sent Events (SSE)流式响应
- 智能重试机制: 当流被中断时自动重试,最多支持 100 次连续重试
- 思考内容过滤: 可以在重试后过滤模型的思考过程,保持输出的整洁
- 标准化错误响应: 提供符合 Google API 标准的错误响应格式
- CORS 支持: 完整的跨域资源共享支持
- 速率限制: 可配置的请求速率限制功能
- 详细日志记录: 支持调试模式和详细的操作日志
# 拉取并运行
docker run -d \
--name gemini-antiblock \
-p 8080:8080 \
-e UPSTREAM_URL_BASE=https://generativelanguage.googleapis.com \
ghcr.io/davidasx/gemini-antiblock-go:latestgit clone https://github.com/Davidasx/gemini-antiblock-go.git
cd gemini-antiblock-go
docker-compose up -dgit 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 .envdocker 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 的请求发送到这个代理服务器。代理会自动:
- 转发请求到上游 Gemini API
- 处理流式响应
- 在流中断时自动重试
- 注入系统提示确保响应以
[done]结尾 - 过滤重试后的思考内容(如果启用)
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/healthgemini-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 # 项目文档
当检测到以下情况时,代理会自动重试:
- 流中断: 流意外结束而没有完成标记
- 内容被阻止: 检测到内容被过滤或阻止
- 思考中完成: 在思考块中检测到完成标记(无效状态)
- 异常完成原因: 非正常的完成原因
- 不完整响应: 响应看起来不完整
重试时会:
- 保留已生成的文本作为上下文
- 构建继续对话的新请求
- 在达到最大重试次数后返回错误
代理提供三个级别的日志:
- DEBUG: 详细的调试信息(仅在调试模式下显示)
- INFO: 一般信息和操作状态
- ERROR: 错误信息和异常
项目包含一个 Mock Server 用于测试,支持多种测试场景:
cd mock-server
go run main.go详细测试说明请参考 mock-server/README.md。
-
使用特定版本标签
docker pull ghcr.io/davidasx/gemini-antiblock-go:v1.0.0
-
设置资源限制
docker run -d \ --name gemini-antiblock \ --memory=256m \ --cpus=0.5 \ -p 8080:8080 \ ghcr.io/davidasx/gemini-antiblock-go:v1.0.0
-
启用速率限制
-e ENABLE_RATE_LIMIT=true \ -e RATE_LIMIT_COUNT=100 \ -e RATE_LIMIT_WINDOW_SECONDS=60
-
配置监控
- 健康检查:
/health端点 - 日志轮转:避免日志文件过大
- 重启策略:确保服务高可用
- 健康检查:
Docker 镜像支持:
linux/amd64(x86_64)linux/arm64(ARM64)
项目使用 GitHub Actions 自动构建和发布:
- 触发条件:推送到
main/master分支或创建标签 - 构建平台:支持
linux/amd64和linux/arm64 - 发布位置:
ghcr.io/davidasx/gemini-antiblock-go
MIT License
这是基于 Cloudflare Worker 版本的 Go 语言重写版本。原始 JavaScript 版本提供了相同的功能,但运行在 Cloudflare Workers 平台上。