项目结构
txt
assemblyai-hub/
├── app/
│ ├── main.py # FastAPI 应用、生命周期(建表、导入、轮询、代理启动)
│ ├── config.py # 全部环境变量与默认值、上游域名表
│ ├── db.py # SQLAlchemy 模型与自动补列迁移
│ ├── security.py # Hub Key 生成、哈希、加解密、请求鉴权
│ ├── proxy.py # 对外 API:/v2、/v3/token、/llm-gateway、/sync、/dictation、/hub
│ ├── streaming.py # /v3/ws 实时中继
│ ├── upstream.py # 调用 AssemblyAI:选号、换号重试、按账号走代理
│ ├── pool.py # 账号池:选号规则、冷却与异常标记
│ ├── jobs.py # 转写任务:提交、刷新、轮询、转发客户端回调
│ ├── webhook.py # 接收 AssemblyAI 回调
│ ├── services.py # 账号 / Key 的新增、导入解析、启动时导入
│ ├── admin.py # 控制台路由
│ ├── llm.py # 自定义 OpenAI 兼容 LLM
│ ├── compress.py # ffmpeg 压缩
│ ├── proxies.py # 代理节点、订阅、sing-box 进程、测速
│ ├── proxyparse.py # 订阅与节点链接解析
│ ├── labels.py # 用量类型、状态的显示名称
│ ├── i18n.py # 中英文切换
│ ├── i18n_en.py # 英文翻译表
│ ├── templates/ # Jinja2 页面
│ └── static/ # CSS、JS、图标
├── docs/ # API 覆盖说明、设计规范
├── docs-site/ # 本文档站(VitePress)
├── skills/assemblyai-hub/ # Agent Skill 技能包(文档站「Agent Skill」页提供下载)
├── tests/smoke.py # 端到端冒烟测试
├── Dockerfile
├── docker-compose.yml
├── .env.example
├── VERSION # 当前版本号
└── CHANGELOG.md主要数据表
| 表 | 内容 |
|---|---|
accounts | 上游账号(Key 加密存储)、区域、权重、并发、状态、代理 |
api_keys | Hub Key(哈希 + 加密)、区域、请求次数 |
jobs | 转写任务、所属账号与 Key、状态、参数、客户端回调、AI 结果 |
uploads | upload_url 与账号的对应关系 |
usage | 用量事件 |
proxy_nodes / proxy_subs | 代理节点与订阅 |
settings | 控制台保存的设置(如自定义 LLM) |
请求在代码中的路径
以 POST /v2/transcript 为例:
proxy.create_transcript调用security.client_key校验 Key。jobs.submit接管webhook_url、兼容旧模型参数,查uploads决定是否绑定账号。upstream.bound或upstream.any_account发出请求,后者通过pool.pick选号并在失败时换号。- 成功后写入
jobs,响应返回给客户端。 - AssemblyAI 回调
webhook.py,或jobs.poller轮询到结束状态,调用jobs.notify_client转发给客户端。