Files
Trading_Studio/README.md
T
dekun eb71e28427 Add local GPU preset voices with dropdown selection.
Generate ChatTTS sample_random_speaker presets without cloud APIs; choose clone or preset in synthesize UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-12 17:28:17 +08:00

276 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Trading Studio
**本地量化交易复盘 → B 站长视频配音生产流水线**
Trading Studio 是一套运行在 Ubuntu 物理服务器(RTX 3060 Ti)上的自动化配音系统,专为数字资产量化交易员设计。通过「盲录碎碎念 → 本地 GPU 识别 → 局域网大模型严厉润色 → 本地 GPU 声音克隆」的闭环,高效产出 B 站反思类长视频配音,辅助交易纪律的自我进化。
**Git 仓库:** https://git.bz121.com/dekun/Trading_Studio.git
---
## 系统定位
| 环节 | 技术栈 | 运行位置 |
|------|--------|----------|
| 碎碎念录音转写 | Faster-Whisper (CUDA float16) | 本地 3060 Ti |
| 纪律审判式润色 | Gemma4 Abliterated @ Ollama | 局域网 `192.168.8.64` |
| 固定音色配音 | ChatTTS (CUDA) | 本地 3060 Ti |
| Web 中控 | Gradio | 端口 **5683** |
---
## 架构说明
```
┌─────────────────────────────────────────────────────────────┐
│ Gradio 中控 (app.py:5683) │
├──────────────┬──────────────────────┬───────────────────────┤
│ 音色锁定 │ 音频识别 │ 润色 + 合成 │
│ tts_service │ whisper_service │ llm_service │
│ │ │ tts_service │
└──────┬───────┴──────────┬───────────┴──────────┬────────────┘
│ │ │
▼ ▼ ▼
speaker_emb.pt Faster-Whisper Ollama HTTP
(本地持久化) CUDA / small 192.168.8.64:11434
gemma-4-abliterated
```
### 模块解耦
| 文件 | 职责 |
|------|------|
| `config.py` | Ollama 地址、模型名、Prompt、路径等全局配置 |
| `whisper_service.py` | Faster-Whisper CUDA 转写 |
| `llm_service.py` | 远程 Ollama HTTP 非流式润色 |
| `tts_service.py` | ChatTTS 音色提取与 wav 合成 |
| `app.py` | Gradio 前端与流程编排 |
---
## 快速开始
> 完整环境配置请参阅 [DEPLOY.md](./DEPLOY.md)
### 一键部署(生产环境推荐)
**root** 用户部署到 `/opt/Trading_Studio` 并由 PM2 常驻:
```bash
sudo -i
git clone https://git.bz121.com/dekun/Trading_Studio.git /opt/Trading_Studio
cd /opt/Trading_Studio
chmod +x deploy.sh
bash deploy.sh
```
浏览器访问:`http://<服务器IP>:5683`
**首次部署后必做 — 预下载 AI 模型**(内网服务器无外网时必需,否则 Whisper 报 `Network is unreachable`):
```bash
cd /opt/Trading_Studio
bash scripts/download_all_models.sh
pm2 restart trading_studio
```
日常更新(代码已 `git push` 到远端后,在服务器执行):
```bash
cd /opt/Trading_Studio
bash server-update.sh
```
若更新涉及模型脚本或首次部署,追加:
```bash
bash scripts/download_all_models.sh
pm2 restart trading_studio
```
完整说明见 [DEPLOY.md §0.4.2 / §0.8](./DEPLOY.md)。
### 手动部署(开发调试)
```bash
git clone https://git.bz121.com/dekun/Trading_Studio.git /opt/Trading_Studio
cd /opt/Trading_Studio
python3 -m venv venv
source venv/bin/activate
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install -r requirements.txt
python app.py
```
---
## 使用流程
### 配音音色(全部本地 GPU,无需 API)
| 方式 | 说明 |
|------|------|
| **我的锁定音色** | 「音色锁定」上传你的人声 → 声音克隆(`speaker_emb.pt` |
| **预设男/女声** | ChatTTS 内置说话人,合成页下拉选择(类似微软音色列表) |
首次使用预设音色(服务器执行一次):
```bash
bash scripts/generate_voice_presets.sh
pm2 restart trading_studio
```
### 首次使用:锁定音色(可选,用于克隆自己的声音)
1. 进入 **「音色锁定」** 标签页
2. 上传 10-30 秒干净人声参考(你的碎碎念盲录样本)
3. 填写参考音频的精确转写(强烈建议)
4. 点击 **锁定音色** → 生成 `speaker_emb.pt`
### 日常生产
**方式 A — 分步操作:**
1. **音频极速识别**:上传复盘录音 → Whisper 转写
2. **Gemma4 纪律审判**:一键润色,生成逻辑清晰、语气严厉的反思稿
3. **ChatTTS 合成**:输出 24kHz `.wav` 成品配音
**方式 B — 一键生产:**
上传录音后点击 **启动全流程**,系统自动串联三步。
---
## 核心配置(config.py
| 配置项 | 默认值 |
|--------|--------|
| 中控端口 | `5683``0.0.0.0` 局域网可访问) |
| Ollama 地址 | `http://192.168.8.64:11434` |
| 模型名称 | `huihui_ai/gemma-4-abliterated:e4b` |
| Whisper 模型 | `small` / CUDA / float16,本地路径 `models/whisper/small/` |
| ChatTTS 模型 | `models/ChatTTS/`(须预下载脚本) |
| HF 镜像 | `HF_ENDPOINT=https://hf-mirror.com``.env` 可改) |
| 音色文件 | `speaker_emb.pt` |
| 音频输出 | `outputs/` 目录 |
---
## PM2 守护运行
标准路径 `/opt/Trading_Studio`root 用户:
```bash
# 一键部署 + PM2 启动(推荐)
cd /opt/Trading_Studio && bash deploy.sh
# 或手动 PM2
pm2 start ecosystem.config.js
# 常用管理
pm2 status
pm2 logs trading_studio
bash deploy.sh restart # 重启
bash deploy.sh update # 拉代码 + 更新依赖 + 重启
pm2 save && pm2 startup # 开机自启(deploy.sh 已自动配置)
```
---
## .gitignore 配置
提交 Git 时请确保忽略以下产物(已在 `.gitignore` 中预设):
```gitignore
venv/
*.wav
*.pt
*.log
uploads/
outputs/
```
**说明:**
- `venv/` — Python 虚拟环境,每台机器独立创建
- `*.wav` — 录音与合成音频,体积大且含隐私
- `*.pt` — ChatTTS 音色 Embedding 与模型权重
- `*.log` — 运行日志
---
## 目录结构
```
Trading_Studio/
├── deploy.sh # 一键部署脚本(/opt + PM2
├── server-update.sh # 强制同步远端 main + PM2 重启
├── app.py # Gradio 主入口
├── config.py # 全局配置(Ollama 等请用 .env 覆盖)
├── whisper_service.py # Whisper CUDA 识别(优先本地模型)
├── llm_service.py # Ollama 远程润色
├── tts_service.py # ChatTTS 音色与合成(优先本地模型)
├── scripts/
│ ├── download_all_models.sh # Whisper + ChatTTS 一键下载
│ ├── download_whisper_models.sh
│ └── download_chattts_models.sh
├── models/ # AI 模型(预下载,不入 Git)
│ ├── whisper/small/
│ └── ChatTTS/
├── ecosystem.config.js # PM2 守护配置
├── requirements.txt # Python 依赖
├── .env.example # 服务器本地配置模板 → 复制为 .env
├── README.md # 本文件
├── DEPLOY.md # 部署指南(含模型预下载、故障排查)
├── PWA_NPS.md # HTTPS / NPS 穿透 / 手机麦克风教程
├── .gitignore
├── speaker_emb.pt # 音色文件(运行时生成,不入库)
├── uploads/ # 上传临时目录
└── outputs/ # 合成 wav 输出
```
**生产标准路径:** `/opt/Trading_Studio`
---
## 硬件要求
- **GPU** NVIDIA RTX 3060 Ti8GB 显存,建议锁定 120W 功耗墙)
- **系统:** Ubuntu 22.04 / 24.04 LTS
- **CUDA** 12.1+(与 PyTorch cu121 匹配)
- **局域网:** 可访问 `192.168.8.64:11434` 的 Ollama 节点
---
## 常见问题
**Q: Whisper 报 `Network is unreachable`**
A: 内网服务器无法访问 HuggingFace。执行 `bash scripts/download_whisper_models.sh small`,确认 `models/whisper/small/model.bin` 存在后 `pm2 restart trading_studio`。详见 [DEPLOY.md §0.8](./DEPLOY.md)。
**Q: Whisper 报 CUDA 错误?**
A: 确认 `nvidia-smi` 正常,且未同时运行其他占显存任务。Whisper 使用 `float16` 已针对 8GB 优化。可在 `.env` 设置 `WHISPER_MODEL_SIZE=base` 并重新下载。
**Q: ChatTTS 报 GitHub / 下载超时?**
A: 执行 `bash scripts/download_chattts_models.sh`,或一键 `bash scripts/download_all_models.sh`
**Q: Ollama 连接失败?**
A: 在服务器上执行 `curl http://192.168.8.64:11434/api/tags` 验证连通性,确认模型已 `ollama pull`。Ollama IP 写在 `.env``OLLAMA_HOST`
**Q: 手机显示「找不到麦克风」?**
A: `http://内网IP:5683` 非 HTTPS,浏览器禁用麦克风。请按 [PWA_NPS.md](./PWA_NPS.md) 配置 HTTPS 域名,或改用 Web UI **「上传」** 录音文件。
**Q: TTS 音色不稳定?**
A: 重新锁定音色,填写参考音频精确转写,并保持 `temperature=0.3` 低随机性。
**Q: 合成报 `Corrupt input data`**
A: 音色参数格式问题。删除 `speaker_emb.pt`,重新锁定音色并**填写参考音频精确转写**。详见 [DEPLOY.md §10.5](./DEPLOY.md)。
**Q: 合成音频为空或噪声?**
A: 检查润色文本长度(过短可能导致异常),确认 `speaker_emb.pt` 存在且有效。
---
## License
Private — 仅供个人量化交易复盘使用。