将 OpenAI 风格的 /v1/responses 请求转换并转发到只支持 /v1/chat/completions 的上游服务,同时提供中文 Web 管理台,用于管理上游、路由、密钥、健康检查和请求日志。
适用场景:
- 客户端需要调用
/v1/responses - 上游服务只支持
/v1/chat/completions - 需要一个可视化后台管理多上游和下游密钥
- 希望通过 Docker 在单机环境快速部署
仓库地址:
Release 页面:
- 入站接口:
POST /v1/responses - 模型列表:
GET /v1/models - 健康检查:
GET /healthz、GET /readyz - 中文管理台:
/admin - 多上游管理
- 路由管理与模型映射
- 下游 API Key 管理
- 请求日志与健康检查记录
- SQLite 持久化
- Docker / Docker Compose 部署
- 后端:Node.js + TypeScript + Fastify
- 前端:React + Vite
- 数据库:SQLite
- ORM:Prisma
- 部署:Docker / Docker Compose
.
├─ apps/
│ ├─ server/
│ │ ├─ prisma/
│ │ ├─ scripts/
│ │ ├─ src/
│ │ │ ├─ adapters/
│ │ │ ├─ lib/
│ │ │ ├─ plugins/
│ │ │ ├─ routes/
│ │ │ ├─ services/
│ │ │ ├─ types/
│ │ │ └─ utils/
│ │ └─ tests/
│ └─ web/
│ └─ src/
│ ├─ api/
│ ├─ components/
│ ├─ features/admin/
│ ├─ pages/
│ └─ styles/
├─ docker-compose.yml
├─ Dockerfile
├─ package.json
└─ .env.example
当前项目统一按 8080:8080 使用:
- 代码默认监听端口:
8080 - 容器暴露端口:
8080 - Docker Compose 默认映射:宿主机
8080-> 容器8080 - 本地访问地址:
http://localhost:8080
常用入口:
- 管理台:
http://localhost:8080/admin - API:
http://localhost:8080
默认配置如下:
PORT=8080
DATABASE_URL=file:./prisma/dev.db
ADMIN_INITIAL_PASSWORD=admin123456
ADMIN_JWT_SECRET=responses-proxy-jwt-secret-change-me
ENCRYPTION_SECRET=responses-proxy-encryption-secret-change-me这些默认值仅适合测试环境,公网部署前请务必修改密钥和密码。
- 进入项目目录
cd Responses-proxy- 安装依赖
npm install- 复制环境变量文件
Linux / macOS:
cp .env.example .envWindows PowerShell:
Copy-Item .env.example .env- 修改
.env
至少建议设置:
PORT=8080ADMIN_INITIAL_PASSWORDADMIN_JWT_SECRETENCRYPTION_SECRET
- 生成 Prisma Client
npm run db:generate- 初始化数据库
npm run db:init- 构建项目
npm run build- 启动服务
npm run start后端:
npm run dev前端:
npm run dev:web- 准备环境变量文件
cp .env.example .env- 确认
.env中设置:
PORT=8080
HOST_PORT=8080- 启动
docker compose up -d --build- 查看日志
docker compose logs -f- 停止
docker compose down默认会创建两个 Docker volume:
responses_proxy_dataresponses_proxy_logs
docker run -d \
--name responses-proxy \
-p 8080:8080 \
-e PORT=8080 \
-e ADMIN_INITIAL_PASSWORD=admin123456 \
-e ADMIN_JWT_SECRET=responses-proxy-jwt-secret-change-me \
-e ENCRYPTION_SECRET=responses-proxy-encryption-secret-change-me \
-v responses_proxy_data:/app/apps/server/prisma \
-v responses_proxy_logs:/app/logs \
responses-proxy:latest推荐值:
PORT=8080
NODE_ENV=production
DATABASE_URL=file:./prisma/dev.db
HOST_BIND=0.0.0.0
HOST_PORT=8080
ADMIN_INITIAL_PASSWORD=admin123456
ADMIN_JWT_SECRET=responses-proxy-jwt-secret-change-me
ENCRYPTION_SECRET=responses-proxy-encryption-secret-change-me
LOG_LEVEL=info
LOG_REQUEST_BODIES=false
HEALTHCHECK_INTERVAL_MS=30000
CIRCUIT_OPEN_THRESHOLD=3
CIRCUIT_OPEN_MS=120000
DEFAULT_RATE_LIMIT_WINDOW_MS=60000
DEFAULT_RATE_LIMIT_REQUESTS=60默认管理员账号:
- 用户名:
admin - 密码:
admin123456
首次进入后建议立即修改密码。
管理台可完成:
- 添加和编辑上游
- 配置路由与模型映射
- 创建和复制下游密钥
- 查看请求日志
- 查看健康检查结果
curl http://localhost:8080/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-your-client-key" \
-d '{
"model": "gpt-5.4",
"input": "你好,给我一句测试回复。"
}'curl http://localhost:8080/v1/models \
-H "Authorization: Bearer sk-your-client-key"curl http://localhost:8080/healthz
curl http://localhost:8080/readyz当前 Release 中上传的是按版本号命名的 Docker 镜像导出包,例如:
responses-proxy-v0.1.0.tar.gz
它可用于离线导入或迁移部署。
导入方式:
docker load < responses-proxy-v0.1.0.tar.gz导入后运行:
docker run -d -p 8080:8080 -e PORT=8080 responses-proxy:latestnpm install
npm run lint
npm run test
npm run build
npm run start
npm run db:generate
npm run db:init
docker compose up -d --build
docker compose logs -f数据库默认位于:
apps/server/prisma/dev.db
Docker Compose 默认使用以下 volume 持久化:
responses_proxy_dataresponses_proxy_logs
删除容器不会自动删除这些数据;删除 volume 才会清空数据。
- 公网部署前修改管理员密码
- 公网部署前修改
ADMIN_JWT_SECRET - 公网部署前修改
ENCRYPTION_SECRET - 默认不要开启
LOG_REQUEST_BODIES - 建议通过反向代理或防火墙限制管理台访问
当前项目重点是:
- 兼容
/v1/responses - 适配只支持
/v1/chat/completions的上游 - 提供简洁可用的单机部署管理台
Anthropic 协议不是当前版本重点。