rita / README.md
Spooker's picture
Upload 2943 files
c6393bd verified
---
title: rita2api
emoji: 🚀
colorFrom: indigo
colorTo: blue
sdk: docker
pinned: false
app_port: 7860
---
# Hugging Face Spaces 部署说明
这个仓库已经适配 **Docker Space**
## 在 Hugging Face Space 里需要设置的 Secrets / Variables
建议至少配置:
- `AUTH_TOKEN`: 管理面板/API 鉴权口令
- `FLASK_SECRET`: Flask session secret
- `RITA_DATA_DIR`: 建议设为 `/data`
按需配置:
- `RITA_TOKEN``RITA_TOKENS`
- `RITA_VISITOR_ID``RITA_VISITOR_IDS`
- `YESCAPTCHA_KEY`
- `GPTMAIL_API_KEY`
- `GPTMAIL_API_BASE`
- `YYDSMAIL_API_KEY`
- `YYDSMAIL_API_BASE`
- `DISABLE_SSL_VERIFY`
## 推荐的 Space 设置
- SDK: `Docker`
- Port: `7860`
- Persistent Storage: 建议开启,并把数据目录设为 `/data`
## 启动后访问
- WebUI: `/`
- Health Check: `/health`
- OpenAI Compatible API: `/v1/chat/completions`
---
# rita2api
<p align="center">
<a href="https://linux.do" target="_blank">
<img src="https://img.shields.io/badge/LINUX-DO-FFB003?style=for-the-badge&logo=linux&logoColor=white" alt="LINUX DO" />
</a>
</p>
OpenAI 兼容的 [Rita.ai](https://www.rita.ai) 反向代理,支持多账号轮换、自动注册补号、WebUI 管理面板。
## 功能
- **OpenAI 兼容** `/v1/chat/completions` 直接对接 OpenAI 客户端(流式 + 非流式)
- **多账号轮换** Round-robin 负载均衡 + 自动故障转移 + 点数系统
- **自动注册** 使用 YesCaptcha + GPTMail/YYDSMail 全自动注册 Rita 账号
- **自动补号** 活跃账号低于阈值时后台自动注册补充
- **WebUI 管理** 五页 Tab 面板:聊天广场 / 账号注册 / 账号管理 / 邮箱服务 / 配置管理
- **数据库配置** SQLite 持久化,所有配置支持 WebUI 热更新
- **Tool Calling** prompt 注入方式支持 function calling
## 快速开始
```bash
git clone <repo>
cd rita2api
pip install -r requirements.txt
python server.py
```
启动后访问 `http://localhost:10089` 进入管理面板。
### 初次使用
1. 打开 WebUI → **配置管理** Tab
2. 设置 `AUTH_TOKEN`(管理面板密码,留空则无需登录)
3. 打开 **账号管理** Tab → 添加账号(填入 Rita token)
4. 或者打开 **账号注册** Tab → 配置 `YESCAPTCHA_KEY` + `GPTMAIL_API_KEY` → 点击手动注册
5. 访问[YESCAPTCHA](https://yescaptcha.com/i/w9X0Ae)获取验证码解决方案
## 架构
```
客户端 (OpenAI API)
|
v
rita2api (Flask :10089)
| - 多账号 Round-robin
| - 自动创建对话 (newConversation)
| - 消息格式转换 (OpenAI -> Rita)
| - SSE 流转换 (Rita -> OpenAI chunk)
| - token + Cookie 双头鉴权
v
Rita API (api_v2.rita.ai)
/aichat/completions (SSE)
```
### 鉴权模型
Rita API 需要 `token` 同时出现在 HTTP Header 和 Cookie 中:
```
Header: token: <gosplit_token>
Cookie: token=<gosplit_token>
```
对话流程:
1. `POST /chatgpt/newConversation {"model":"model_25"}` → 获取 `chat_id`
2. `POST /aichat/completions {"model":"model_25","messages":[...],"chat_id":xxx}` → SSE 流
模型 ID 格式为 `model_xxx`(如 `model_25` = Rita, `model_69` = GPT-5.4),通过 `/v1/models` 查看完整列表。
## API
### 代理接口
| 方法 | 路径 | 说明 |
|------|------|------|
| `POST` | `/v1/chat/completions` | OpenAI Chat Completions(流式 + 非流式) |
| `POST` | `/v1/responses` | OpenAI Responses API(流式 + 非流式) |
| `GET` | `/v1/models` | 模型目录(来自 Rita) |
| `POST` | `/v1/chat/init` | 创建新对话 |
| `GET` | `/v1/tools` | 可用 AI 工具列表 |
| `POST` | `/v1/tools/execute` | 执行 AI 工具 |
| `GET` | `/health` | 健康检查 |
### 管理接口(需 AUTH_TOKEN)
| 方法 | 路径 | 说明 |
|------|------|------|
| `GET` | `/api/accounts` | 账号列表 |
| `POST` | `/api/accounts` | 添加账号 |
| `POST` | `/api/accounts/batch` | 批量导入 |
| `POST` | `/api/accounts/batch-action` | 批量操作(启用/禁用/删除/测试/刷新) |
| `PUT` | `/api/accounts/<id>` | 编辑账号 |
| `DELETE` | `/api/accounts/<id>` | 删除账号 |
| `POST` | `/api/accounts/<id>/toggle` | 启用/禁用 |
| `POST` | `/api/accounts/<id>/test` | 测试连通性 |
| `POST` | `/api/accounts/<id>/refresh` | 重新登录刷新 Token |
| `POST` | `/api/accounts/<id>/ticket` | 获取 Ticket |
| `POST` | `/api/accounts/reset` | 重置所有故障计数 |
| `POST` | `/api/accounts/purge-invalid` | 清除无效账号 |
| `GET/PUT` | `/api/config` | 读取/修改系统配置 |
| `POST` | `/api/auto-register` | 手动触发注册 |
| `GET` | `/api/auto-register/config` | 注册配置状态 |
| `POST` | `/api/health-check/run` | 运行健康检查 |
| `GET` | `/api/mail/status` | 邮件服务状态 |
| `POST` | `/api/mail/check-code` | 查询验证码 |
| `GET` | `/api/accounts/emails` | 有邮箱的账号列表 |
## 配置
所有配置存储在 SQLite 数据库(`data/rita.db`),可通过 WebUI **配置管理** 页面实时修改。
首次启动会自动创建默认值,也可通过 `.env` 文件或环境变量覆盖。
### 核心配置
| Key | 默认值 | 说明 |
|-----|--------|------|
| `RITA_UPSTREAM` | `https://api_v2.rita.ai` | 上游 API 地址 |
| `RITA_ORIGIN` | `https://www.rita.ai` | 请求 Origin 头 |
| `AUTH_TOKEN` | *(空)* | 管理面板密码,留空则无需登录 |
| `DISABLE_SSL_VERIFY` | `1` | 跳过上游 SSL 验证 |
| `HOST` | `0.0.0.0` | 监听地址 |
| `PORT` | `10089` | 监听端口 |
### 自动注册配置
| Key | 默认值 | 说明 |
|-----|--------|------|
| `AUTO_REGISTER_ENABLED` | `0` | 启用后台自动补号 |
| `AUTO_REGISTER_MIN_ACTIVE` | `2` | 活跃账号低于此值时触发补号 |
| `AUTO_REGISTER_BATCH` | `1` | 每次补号注册数量 |
| `AUTO_REGISTER_PASSWORD` | `@qazwsx123456` | 注册时设置的默认密码 |
| `YESCAPTCHA_KEY` | *(空)* | YesCaptcha API Key |
| `GPTMAIL_API_KEY` | *(空)* | GPTMail API Key |
| `GPTMAIL_API_BASE` | `https://mail.chatgpt.org.uk` | GPTMail API 地址 |
| `YYDSMAIL_API_KEY` | *(空)* | YYDSMail API Key |
| `YYDSMAIL_API_BASE` | `https://maliapi.215.im/v1` | YYDSMail API 地址 |
### 注册流程
```
1. GPTMail 创建临时邮箱
2. gosplit authenticate (初始化会话)
3. gosplit sign_process (提交邮箱 + agree)
4. YesCaptcha 解决 reCAPTCHA v2 (最多重试 4 次)
5. gosplit sign_process (提交 captcha, 含 email+agree)
6. gosplit emailCode (显式触发验证码发送)
7. 轮询邮箱获取验证码 (90s 超时, 最多重发 2 次)
8. gosplit code_sign (提交验证码, 失败自动重发重试)
9. gosplit authenticate (获取 token + ticket)
10. gosplit silent_edit (设置密码)
```
## 点数系统
每个账号初始 100 点,不同模型消耗不同点数(与 Rita 官方一致):
| 点数 | 模型 |
|------|------|
| 0 | Rita, GPT-4.1-nano, GPT-5-nano |
| 1 | Rita-Pro, GPT-4.1-mini, GPT-5-mini, Gemini-2.5-Pro-0605, Gemini-3-Flash, DeepSeek-V3, DeepSeek-R1 |
| 2 | DeepSeek-V3.1 |
| 4-5 | GPT-4o, GPT-4.1, GPT-5, GPT-5.1, GPT-5.2, GPT-5.4, GPT-o3/o4-mini, Grok-4/4.1, Gemini-2.5-Pro, Gemini-3.1-Pro, Perplexity 系列 |
| 7-8 | Grok-3, Claude-3.7-Sonnet, Claude-4-Sonnet, Claude-4.5-Sonnet (含 Thinking) |
| 10-16 | Gemini-3.1-Pro-Thinking, GPT-5.1-Thinking, Claude-Opus-4.5/4.6 (含 Thinking), 图像模型 |
| 35-45 | Claude-4-Opus (含 Thinking), Claude-Sonnet-4.6, 图像直连模型 |
## API 鉴权
设置 `AUTH_TOKEN` 后,所有接口(包括 `/v1/*` 代理接口)都需要鉴权:
```bash
# OpenAI 客户端标准方式
curl http://localhost:10089/v1/chat/completions \
-H "Authorization: Bearer your-auth-token" \
-H "Content-Type: application/json" \
-d '{"model":"model_25","messages":[{"role":"user","content":"hello"}]}'
```
也支持 query 参数 `?auth=your-auth-token` 或 session cookie(WebUI 登录后自动设置)。
`AUTH_TOKEN` 为空时所有接口无需鉴权。
## WebUI 管理面板
五个功能 Tab:
- **聊天广场** 选择模型直接对话,支持模型目录浏览
- **账号注册** 查看注册配置状态,手动触发注册,实时日志
- **账号管理** 账号列表(以邮箱为主键),批量操作(全选/勾选 → 批量测试/启用/禁用/刷新/删除),点数显示
- **邮箱服务** GPTMail/YYDSMail 状态,从已注册账号选择邮箱查询验证码
- **配置管理** 按语义分组的 inline 编辑,布尔值用 Toggle 开关,敏感值显示/隐藏,实时搜索
## 项目结构
```
rita2api/
server.py # Flask 主服务:路由、代理、API
accounts.py # 账号管理器:CRUD、轮换、健康检查
auto_register.py # 自动注册:完整注册流程、Token 刷新
database.py # SQLite 数据层:账号、配置、用量日志
quota.py # 模型点数计费
migrate.py # JSON → SQLite 数据迁移
templates/
index.html # WebUI 单页面(5 Tab)
data/
rita.db # SQLite 数据库(自动创建)
register/ # 独立批量注册工具(参考实现)
```
## 使用示例
### Chat Completions API
```bash
# 非流式对话
curl http://localhost:10089/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-auth-token" \
-d '{"model":"model_25","messages":[{"role":"user","content":"你好"}]}'
# 流式对话
curl http://localhost:10089/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-auth-token" \
-d '{"model":"model_25","messages":[{"role":"user","content":"你好"}],"stream":true}'
```
### Responses API
```bash
# 非流式
curl http://localhost:10089/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-auth-token" \
-d '{"model":"model_25","input":"你好","instructions":"你是一个友好的助手"}'
# 流式 (SSE)
curl http://localhost:10089/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-auth-token" \
-d '{"model":"model_25","input":"你好","stream":true}'
# 多轮对话 (message array)
curl http://localhost:10089/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-auth-token" \
-d '{
"model":"model_25",
"instructions":"你是一个友好的助手",
"input":[
{"role":"user","content":"我叫小明"},
{"role":"assistant","content":"你好小明!"},
{"role":"user","content":"你还记得我叫什么吗?"}
]
}'
```
```bash
# 查看模型列表
curl http://localhost:10089/v1/models
```
## License
CC BY-NC-SA 4.0