Files

1 line
29 KiB
JSON
Raw Permalink 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.
{"repo": "carl-ai-lab/ai-accent-coach", "files": {"README.md": {"59e3eaaeed5a004ecd3a800a6997dc807c907486": {"t": 1785747352.5585701, "n": 5119, "h": "0c4e59690cb418b5", "c": "<p align=\"center\">\n <img src=\"assets/logo.png\" alt=\"Accent Coach\" width=\"480\"/>\n</p>\n\n# AI Accent Coach — AI 美式英语口语教练\n\n自部署的 AI 口语练习工具,By **卡尔AI工坊**\n\n支持实时对话、发音纠正、生词本和间隔重复复习\n\nA self-hosted AI speaking coach for American English learners — real conversation practice, pronunciation coaching, vocabulary notebook, and spaced-repetition review.\n\n![carl](carl.png)\n\n---\n\n## 功能 / Features\n\n- **实时对话** — 与 AI 教练进行流式对话(streaming LLM)\n- **语音识别** — 本地运行 [faster-whisper](https://github.com/SYSTRAN/faster-whisper),支持 GPU / CPU,零额外 API 费用\n- **语音合成** — 通过 [edge-tts](https://github.com/rany2/edge-tts) 免费朗读,无需 API Key\n- **点击查词** — 点击教练回复中的任意单词,即时查看释义并自动存入生词本\n- **选中查短语** — 选中一段文本获取上下文翻译\n- **间隔重复复习** — 基于 Leitner Box 的生词本复习系统\n- **6 种对话场景** — 日常聊天 / 商务 / 旅行 / 面试 / 讨论 / 故事\n- **3 个难度等级** — 入门 / 中级 / 高级\n- **单文件前端** — 无构建步骤,不依赖 Node.js\n\n## 架构 / Architecture\n\n```text\n┌───────────────────────────────────┐\n│ Browser (index.html) │\n│ mic → WebM → /api/transcribe │\n│ text → /api/chat (SSE stream) │\n│ audio ← /api/tts │\n└──────────────┬────────────────────┘\n │ HTTPS(自签名证书 / self-signed)\n┌──────────────▼────────────────────┐\n│ FastAPI backend │\n│ ┌──────────┐ ┌───────────────┐ │\n│ │ Whisper │ │ OpenAI-compat │ │\n│ │ (本地) │ │ LLM API │ │\n│ └──────────┘ └───────────────┘ │\n│ ┌──────────┐ ┌───────────────┐ │\n│ │ edge-tts │ │ JSON 存储 │ │\n│ └──────────┘ └───────────────┘ │\n└───────────────────────────────────┘\n```\n\n## 目录结构 / Directory Structure\n\n```text\nai-accent-coach/\n├── app.py # FastAPI 后端(所有 API)\n├── coach.sh # 服务管理脚本(start/stop/restart/status/log)\n├── requirements.txt\n├── .env.example # ← 复制为 .env 并填写配置\n├── static/\n│ └── index.html # 单文件前端\n└── assets/\n └── logo.png\n```\n\n## 快速开始 / Quick Start\n\n```bash\ngit clone https://github.com/Carl-AI-Lab/ai-accent-coach.git\ncd ai-accent-coach\n\npython3 -m venv venv && source venv/bin/activate # 推荐使用虚拟环境\npip install -r requirements.txt\n\ncp .env.example .env\n# 编辑 .env —— 至少填写 OPENAI_API_KEY\n# 没有 GPU?把 WHISPER_DEVICE 改为 cpu\n```\n\n启动服务 / Start:\n\n```bash\nbash coach.sh start # 后台运行,日志输出到 accent-coach.log\n# 或\npython app.py # 前台运行,实时输出\n```\n\n> **首次启动说明:** Whisper 模型(distil-large-v3 约 1.5 GB)会在首次使用时自动从 HuggingFace 下载,请耐心等待。国内用户可在 `.env` 中取消 `HF_ENDPOINT` 的注释以使用镜像加速。\n\n打开浏览器访问 **https://localhost:8443**。\n\n> 由于使用自签名证书,浏览器会显示安全警告——点击 **\"高级\"→\"继续前往\"**(Chrome)或 **\"接受风险并继续\"**(Firefox)即可。\n\n停止服务 / Stop:\n\n```bash\nbash coach.sh stop\n```\n\n## 环境变量 / Configuration\n\n所有配置项均在 **`.env`** 文件中(参考 [.env.example](.env.example)):\n\n| 变量 Variable | 默认值 Default | 说明 Description |\n|---|---|---|\n| `OPENAI_API_KEY` | *(必填 required)* | 任意 OpenAI 兼容服务的 API Key |\n| `OPENAI_BASE_URL` | `https://api.openai.com/v1` | LLM 接口地址,支持 OpenAI / DeepSeek / Ollama 等 |\n| `LLM_MODEL` | `gpt-4.1-mini` | 模型名称 |\n| `WHISPER_DEVICE` | `cpu` | `cuda` = GPU,`cpu` = 仅 CPU |\n| `WHISPER_MODEL` | `distil-large-v3` | Whisper 模型大小 |\n| `WHISPER_UNLOAD_TIMEOUT` | `120` | 空闲多少秒后自动卸载模型(节省显存) |\n| `TTS_VOICE` | `en-US-AndrewMultilingualNeural` | edge-tts 语音名称 |\n| `PORT` | `8443` | HTTPS 监听端口 |\n\n### 切换 LLM 服务商 / Using a Different LLM Provider\n\n支持任意 OpenAI 兼容接口:\n\n```bash\n# OpenAI(默认)\nOPENAI_BASE_URL=https://api.openai.com/v1\nOPENAI_API_KEY=sk-...\nLLM_MODEL=gpt-4.1-mini\n\n# DeepSeek\nOPENAI_BASE_URL=https://api.deepseek.com/v1\nOPENAI_API_KEY=sk-...\nLLM_MODEL=deepseek-chat\n\n# Ollama(本地运行,免费)\nOPENAI_BASE_URL=http://localhost:11434/v1\nOPENAI_API_KEY=ollama\nLLM_MODEL=llama3.1\n```\n\n## GPU 与 CPU 对比 / GPU vs CPU\n\nWhisper 在本地运行语音识别,可选 GPU 或 CPU 模式。\n\n### GPU 模式(推荐)\n\n```bash\nWHISPER_DEVICE=cuda\n```\n\n需要 NVIDIA GPU + **cuBLAS** + **cuDNN**(CUDA 12)。\n\n先安装 CUDA 运行时库(如果系统未自带):\n\n```bash\npip install nvidia-cublas-cu12 nvidia-cudnn-cu12\n```\n\n然后设置 `LD_LIBRARY_PATH`,让 `faster-whisper` 能找到它们:\n\n```bash\n# 查找 pip 安装的库路径\npython3 -c \"import nvidia.cublas.lib, nvidia.cudnn.lib; print(nvidia.cublas.lib.__path__[0]); print(nvidia.cudnn.lib.__path__[0])\"\n\n# 输出示例:\n# /home/you/venv/lib/python3.11/site-packages/nvidia/cublas/lib\n# /home/you/venv/lib/python3.11/site-packages/nvidia/cudnn/lib\n\n# 启动前设置(或取消 coach.sh 中对应行的注释):\nexport LD_LIBRARY_PATH=\"/home/you/venv/.../nvidia/cublas/lib:/home/you/venv/.../nvidia/cudnn/lib\"\n```\n\n### CPU 模式\n\n```bash\nWHISPER_DEVICE=cpu\n```\n\n无需 GPU,任何机器都能运行,但速度明显更慢——见下方性能对比。\n\n> **提示:** 在 CPU 上建议使用较小的模型以加快响应速度:\n> ```bash\n> WHISPER_MODEL=base # 最快,准确率较低\n> WHISPER_MODEL=small # 速度与准确率平衡\n> WHISPER_MODEL=medium # 准确率更高,速度更慢\n> ```\n\n### 性能实测 / Benchmark\n\n在同一台机器上测试,10 秒音频片段,`distil-large-v3` 模型,`beam_size=5`,`vad_filter=True`:\n\n| | 设备 Device | 计算类型 | 模型加载 | 转录耗时(3 次平均) |\n|---|---|---|---|---|\n| **GPU** | NVIDIA RTX 4060 Laptop (8 GB) | float16 | 16.5 s | **0.51 s** |\n| **CPU** | Intel i7-12700H (20 threads) | int8 | 5.7 s | **5.52 s** |\n\n> **CPU 转录速度约慢 11 倍**,但模型加载反而快 3 倍(跳过 CUDA 初始化)。日常练习时 CPU 延迟(~5 秒/句)可以接受;追求流畅对话体验建议使用 **GPU**。\n\n## 环境要求 / Requirements\n\n- Python ≥ 3.9\n- 一个 OpenAI 兼容的 API Key(用于 LLM)\n- *(GPU 模式)* NVIDIA GPU + CUDA 12 + cuBLAS + cuDNN 9\n- *(CPU 模式)* 无额外硬件要求,x86_64 或 ARM 均可\n\n## 许可证 / License\n\n[Apache License 2.0](LICENSE)\n"}, "21a9201672a4c02b1ede5295a85e60b20b3ded26": {"t": 1785772712.9456112, "n": 4867, "h": "19ff02eeec07b3a5", "c": "<p align=\"center\">\n <img src=\"assets/logo.png\" alt=\"Accent Coach\" width=\"480\"/>\n</p>\n\n# AI Accent Coach — AI 美式英语口语教练\n\n自部署的 AI 口语练习工具,By **卡尔AI工坊**\n\n支持实时对话、发音纠正、生词本和间隔重复复习\n\nA self-hosted AI speaking coach for American English learners — real conversation practice, pronunciation coaching, vocabulary notebook, and spaced-repetition review.\n\n![carl](carl.png)\n\n---\n\n## 功能 / Features\n\n- **实时对话** — 与 AI 教练进行流式对话(streaming LLM)\n- **语音识别** — 本地运行 [faster-whisper](https://github.com/SYSTRAN/faster-whisper),支持 GPU / CPU,零额外 API 费用\n- **语音合成** — 通过 [edge-tts](https://github.com/rany2/edge-tts) 免费朗读,无需 API Key\n- **点击查词** — 点击教练回复中的任意单词,即时查看释义并自动存入生词本\n- **选中查短语** — 选中一段文本获取上下文翻译\n- **间隔重复复习** — 基于 Leitner Box 的生词本复习系统\n- **6 种对话场景** — 日常聊天 / 商务 / 旅行 / 面试 / 讨论 / 故事\n- **3 个难度等级** — 入门 / 中级 / 高级\n- **单文件前端** — 无构建步骤,不依赖 Node.js\n\n## 架构 / Architecture\n\n```text\n┌───────────────────────────────────┐\n│ Browser (index.html) │\n│ mic → WebM → /api/transcribe │\n│ text → /api/chat (SSE stream) │\n│ audio ← /api/tts │\n└──────────────┬────────────────────┘\n │ HTTPS(自签名证书 / self-signed)\n┌──────────────▼────────────────────┐\n│ FastAPI backend │\n│ ┌──────────┐ ┌───────────────┐ │\n│ │ Whisper │ │ OpenAI-compat │ │\n│ │ (本地) │ │ LLM API │ │\n│ └──────────┘ └───────────────┘ │\n│ ┌──────────┐ ┌───────────────┐ │\n│ │ edge-tts │ │ JSON 存储 │ │\n│ └──────────┘ └───────────────┘ │\n└───────────────────────────────────┘\n```\n\n## 目录结构 / Directory Structure\n\n```text\nai-accent-coach/\n├── app.py # FastAPI 后端(所有 API)\n├── coach.sh # 服务管理脚本(start/stop/restart/status/log)\n├── requirements.txt\n├── .env.example # ← 复制为 .env 并填写配置\n├── static/\n│ └── index.html # 单文件前端\n└── assets/\n └── logo.png\n```\n\n## 快速开始 / Quick Start\n\n```bash\ngit clone https://github.com/Carl-AI-Lab/ai-accent-coach.git\ncd ai-accent-coach\n\npython3 -m venv venv && source venv/bin/activate # 推荐使用虚拟环境\npip install -r requirements.txt\n\ncp .env.example .env\n# 编辑 .env —— 至少填写 OPENAI_API_KEY\n```\n\n启动服务 / Start:\n\n```bash\nbash coach.sh start # 后台运行,日志输出到 accent-coach.log\n# 或\npython app.py # 前台运行,实时输出\n```\n\n打开浏览器访问 **https://localhost:8443**(接受自签名证书即可)。\n\n停止服务 / Stop:\n\n```bash\nbash coach.sh stop\n```\n\n## 环境变量 / Configuration\n\n所有配置项均在 **`.env`** 文件中(参考 [.env.example](.env.example)):\n\n| 变量 Variable | 默认值 Default | 说明 Description |\n|---|---|---|\n| `OPENAI_API_KEY` | *(必填 required)* | 任意 OpenAI 兼容服务的 API Key |\n| `OPENAI_BASE_URL` | `https://api.openai.com/v1` | LLM 接口地址,支持 OpenAI / DeepSeek / Ollama 等 |\n| `LLM_MODEL` | `gpt-4.1-mini` | 模型名称 |\n| `WHISPER_DEVICE` | `cuda` | `cuda` = GPU,`cpu` = 仅 CPU |\n| `WHISPER_MODEL` | `distil-large-v3` | Whisper 模型大小 |\n| `WHISPER_UNLOAD_TIMEOUT` | `120` | 空闲多少秒后自动卸载模型(节省显存) |\n| `TTS_VOICE` | `en-US-AndrewMultilingualNeural` | edge-tts 语音名称 |\n| `PORT` | `8443` | HTTPS 监听端口 |\n\n### 切换 LLM 服务商 / Using a Different LLM Provider\n\n支持任意 OpenAI 兼容接口:\n\n```bash\n# OpenAI(默认)\nOPENAI_BASE_URL=https://api.openai.com/v1\nOPENAI_API_KEY=sk-...\nLLM_MODEL=gpt-4.1-mini\n\n# DeepSeek\nOPENAI_BASE_URL=https://api.deepseek.com/v1\nOPENAI_API_KEY=sk-...\nLLM_MODEL=deepseek-chat\n\n# Ollama(本地运行,免费)\nOPENAI_BASE_URL=http://localhost:11434/v1\nOPENAI_API_KEY=ollama\nLLM_MODEL=llama3.1\n```\n\n## GPU 与 CPU 对比 / GPU vs CPU\n\nWhisper 在本地运行语音识别,可选 GPU 或 CPU 模式。\n\n### GPU 模式(推荐)\n\n```bash\nWHISPER_DEVICE=cuda\n```\n\n需要 NVIDIA GPU + **cuBLAS** + **cuDNN**(CUDA 12)。\n\n如果通过 pip 安装了 CUDA 库(`nvidia-cublas-cu12`、`nvidia-cudnn-cu12`),需要设置 `LD_LIBRARY_PATH`,让 `faster-whisper` 能找到它们:\n\n```bash\n# 查找 pip 安装的库路径\npython3 -c \"import nvidia.cublas.lib, nvidia.cudnn.lib; print(nvidia.cublas.lib.__path__[0]); print(nvidia.cudnn.lib.__path__[0])\"\n\n# 输出示例:\n# /home/you/venv/lib/python3.11/site-packages/nvidia/cublas/lib\n# /home/you/venv/lib/python3.11/site-packages/nvidia/cudnn/lib\n\n# 启动前设置(或取消 coach.sh 中对应行的注释):\nexport LD_LIBRARY_PATH=\"/home/you/venv/.../nvidia/cublas/lib:/home/you/venv/.../nvidia/cudnn/lib\"\n```\n\n### CPU 模式\n\n```bash\nWHISPER_DEVICE=cpu\n```\n\n无需 GPU,任何机器都能运行,但速度明显更慢——见下方性能对比。\n\n> **提示:** 在 CPU 上建议使用较小的模型以加快响应速度:\n> ```bash\n> WHISPER_MODEL=base # 最快,准确率较低\n> WHISPER_MODEL=small # 速度与准确率平衡\n> WHISPER_MODEL=medium # 准确率更高,速度更慢\n> ```\n\n### 性能实测 / Benchmark\n\n在同一台机器上测试,10 秒音频片段,`distil-large-v3` 模型,`beam_size=5`,`vad_filter=True`:\n\n| | 设备 Device | 计算类型 | 模型加载 | 转录耗时(3 次平均) |\n|---|---|---|---|---|\n| **GPU** | NVIDIA RTX 4060 Laptop (8 GB) | float16 | 16.5 s | **0.51 s** |\n| **CPU** | Intel i7-12700H (20 threads) | int8 | 5.7 s | **5.52 s** |\n\n> **CPU 转录速度约慢 11 倍**,但模型加载反而快 3 倍(跳过 CUDA 初始化)。日常练习时 CPU 延迟(~5 秒/句)可以接受;追求流畅对话体验建议使用 **GPU**。\n\n## 环境要求 / Requirements\n\n- Python ≥ 3.9\n- 一个 OpenAI 兼容的 API Key(用于 LLM)\n- *(GPU 模式)* NVIDIA GPU + CUDA 12 + cuBLAS + cuDNN 9\n- *(CPU 模式)* 无额外硬件要求,x86_64 或 ARM 均可\n\n## 许可证 / License\n\n[Apache License 2.0](LICENSE)\n"}, "606c378ba7d454f11d95f596a699809a49d64c99": {"t": 1785772715.4630685, "n": 4834, "h": "ee8c909d5d1420f7", "c": "<p align=\"center\">\n <img src=\"assets/logo.png\" alt=\"Accent Coach\" width=\"480\"/>\n</p>\n\n# AI Accent Coach — AI 美式英语口语教练\n\n自部署的 AI 口语练习工具,支持实时对话、发音纠正、生词本和间隔重复复习。\n\nA self-hosted AI speaking coach for American English learners — real conversation practice, pronunciation coaching, vocabulary notebook, and spaced-repetition review.\n\n---\n\n## 功能 / Features\n\n- **实时对话** — 与 AI 教练进行流式对话(streaming LLM)\n- **语音识别** — 本地运行 [faster-whisper](https://github.com/SYSTRAN/faster-whisper),支持 GPU / CPU,零额外 API 费用\n- **语音合成** — 通过 [edge-tts](https://github.com/rany2/edge-tts) 免费朗读,无需 API Key\n- **点击查词** — 点击教练回复中的任意单词,即时查看释义并自动存入生词本\n- **选中查短语** — 选中一段文本获取上下文翻译\n- **间隔重复复习** — 基于 Leitner Box 的生词本复习系统\n- **6 种对话场景** — 日常聊天 / 商务 / 旅行 / 面试 / 讨论 / 故事\n- **3 个难度等级** — 入门 / 中级 / 高级\n- **单文件前端** — 无构建步骤,不依赖 Node.js\n\n## 架构 / Architecture\n\n```text\n┌───────────────────────────────────┐\n│ Browser (index.html) │\n│ mic → WebM → /api/transcribe │\n│ text → /api/chat (SSE stream) │\n│ audio ← /api/tts │\n└──────────────┬────────────────────┘\n │ HTTPS(自签名证书 / self-signed)\n┌──────────────▼────────────────────┐\n│ FastAPI backend │\n│ ┌──────────┐ ┌───────────────┐ │\n│ │ Whisper │ │ OpenAI-compat │ │\n│ │ (本地) │ │ LLM API │ │\n│ └──────────┘ └───────────────┘ │\n│ ┌──────────┐ ┌───────────────┐ │\n│ │ edge-tts │ │ JSON 存储 │ │\n│ └──────────┘ └───────────────┘ │\n└───────────────────────────────────┘\n```\n\n## 目录结构 / Directory Structure\n\n```text\nai-accent-coach/\n├── app.py # FastAPI 后端(所有 API)\n├── coach.sh # 服务管理脚本(start/stop/restart/status/log)\n├── requirements.txt\n├── .env.example # ← 复制为 .env 并填写配置\n├── static/\n│ └── index.html # 单文件前端\n└── assets/\n └── logo.png\n```\n\n## 快速开始 / Quick Start\n\n```bash\ngit clone https://github.com/Carl-AI-Lab/ai-accent-coach.git\ncd ai-accent-coach\n\npython3 -m venv venv && source venv/bin/activate # 推荐使用虚拟环境\npip install -r requirements.txt\n\ncp .env.example .env\n# 编辑 .env —— 至少填写 OPENAI_API_KEY\n```\n\n启动服务 / Start:\n\n```bash\nbash coach.sh start # 后台运行,日志输出到 accent-coach.log\n# 或\npython app.py # 前台运行,实时输出\n```\n\n打开浏览器访问 **https://localhost:8443**(接受自签名证书即可)。\n\n停止服务 / Stop:\n\n```bash\nbash coach.sh stop\n```\n\n## 环境变量 / Configuration\n\n所有配置项均在 **`.env`** 文件中(参考 [.env.example](.env.example)):\n\n| 变量 Variable | 默认值 Default | 说明 Description |\n|---|---|---|\n| `OPENAI_API_KEY` | *(必填 required)* | 任意 OpenAI 兼容服务的 API Key |\n| `OPENAI_BASE_URL` | `https://api.openai.com/v1` | LLM 接口地址,支持 OpenAI / DeepSeek / Ollama 等 |\n| `LLM_MODEL` | `gpt-4.1-mini` | 模型名称 |\n| `WHISPER_DEVICE` | `cuda` | `cuda` = GPU,`cpu` = 仅 CPU |\n| `WHISPER_MODEL` | `distil-large-v3` | Whisper 模型大小 |\n| `WHISPER_UNLOAD_TIMEOUT` | `120` | 空闲多少秒后自动卸载模型(节省显存) |\n| `TTS_VOICE` | `en-US-AndrewMultilingualNeural` | edge-tts 语音名称 |\n| `PORT` | `8443` | HTTPS 监听端口 |\n\n### 切换 LLM 服务商 / Using a Different LLM Provider\n\n支持任意 OpenAI 兼容接口:\n\n```bash\n# OpenAI(默认)\nOPENAI_BASE_URL=https://api.openai.com/v1\nOPENAI_API_KEY=sk-...\nLLM_MODEL=gpt-4.1-mini\n\n# DeepSeek\nOPENAI_BASE_URL=https://api.deepseek.com/v1\nOPENAI_API_KEY=sk-...\nLLM_MODEL=deepseek-chat\n\n# Ollama(本地运行,免费)\nOPENAI_BASE_URL=http://localhost:11434/v1\nOPENAI_API_KEY=ollama\nLLM_MODEL=llama3.1\n```\n\n## GPU 与 CPU 对比 / GPU vs CPU\n\nWhisper 在本地运行语音识别,可选 GPU 或 CPU 模式。\n\n### GPU 模式(推荐)\n\n```bash\nWHISPER_DEVICE=cuda\n```\n\n需要 NVIDIA GPU + **cuBLAS** + **cuDNN**(CUDA 12)。\n\n如果通过 pip 安装了 CUDA 库(`nvidia-cublas-cu12`、`nvidia-cudnn-cu12`),需要设置 `LD_LIBRARY_PATH`,让 `faster-whisper` 能找到它们:\n\n```bash\n# 查找 pip 安装的库路径\npython3 -c \"import nvidia.cublas.lib, nvidia.cudnn.lib; print(nvidia.cublas.lib.__path__[0]); print(nvidia.cudnn.lib.__path__[0])\"\n\n# 输出示例:\n# /home/you/venv/lib/python3.11/site-packages/nvidia/cublas/lib\n# /home/you/venv/lib/python3.11/site-packages/nvidia/cudnn/lib\n\n# 启动前设置(或取消 coach.sh 中对应行的注释):\nexport LD_LIBRARY_PATH=\"/home/you/venv/.../nvidia/cublas/lib:/home/you/venv/.../nvidia/cudnn/lib\"\n```\n\n### CPU 模式\n\n```bash\nWHISPER_DEVICE=cpu\n```\n\n无需 GPU,任何机器都能运行,但速度明显更慢——见下方性能对比。\n\n> **提示:** 在 CPU 上建议使用较小的模型以加快响应速度:\n> ```bash\n> WHISPER_MODEL=base # 最快,准确率较低\n> WHISPER_MODEL=small # 速度与准确率平衡\n> WHISPER_MODEL=medium # 准确率更高,速度更慢\n> ```\n\n### 性能实测 / Benchmark\n\n在同一台机器上测试,10 秒音频片段,`distil-large-v3` 模型,`beam_size=5`,`vad_filter=True`:\n\n| | 设备 Device | 计算类型 | 模型加载 | 转录耗时(3 次平均) |\n|---|---|---|---|---|\n| **GPU** | NVIDIA RTX 4060 Laptop (8 GB) | float16 | 16.5 s | **0.51 s** |\n| **CPU** | Intel i7-12700H (20 threads) | int8 | 5.7 s | **5.52 s** |\n\n> **CPU 转录速度约慢 11 倍**,但模型加载反而快 3 倍(跳过 CUDA 初始化)。日常练习时 CPU 延迟(~5 秒/句)可以接受;追求流畅对话体验建议使用 **GPU**。\n\n## 环境要求 / Requirements\n\n- Python ≥ 3.9\n- 一个 OpenAI 兼容的 API Key(用于 LLM)\n- *(GPU 模式)* NVIDIA GPU + CUDA 12 + cuBLAS + cuDNN 9\n- *(CPU 模式)* 无额外硬件要求,x86_64 或 ARM 均可\n\n## 许可证 / License\n\n[Apache License 2.0](LICENSE)\n"}, "28d17577028823df064d8030a56eb2338d9504f4": {"t": 1785772717.6429486, "n": 5879, "h": "40d8e7d18490b8a5", "c": "<p align=\"center\">\n <img src=\"assets/logo.png\" alt=\"AccentCoach\" width=\"480\"/>\n</p>\n\n<p align=\"center\">\n <b>Self-hosted AI speaking coach for American English learners.</b><br/>\n Real conversation practice · Pronunciation coaching · Vocabulary notebook · Spaced-repetition review\n</p>\n\n---\n\n## Features\n\n- **Real-time conversation** with an AI coach (streaming LLM)\n- **Speech-to-text** via local [faster-whisper](https://github.com/SYSTRAN/faster-whisper) (GPU or CPU)\n- **Text-to-speech** via [edge-tts](https://github.com/rany2/edge-tts) (free, no API key)\n- **Tap-to-lookup** — click any word in coach replies for instant meaning + auto-save to notebook\n- **Phrase selection** — select a phrase for contextual translation\n- **Spaced-repetition notebook** with Leitner box review\n- **6 conversation scenarios** (Daily Chat, Business, Travel, Interview, Discussion, Stories)\n- **3 difficulty levels** (Beginner / Intermediate / Advanced)\n- **Zero external STT API cost** — Whisper runs 100% locally\n- **Single-file frontend** — no build step, no Node.js\n\n## Architecture\n\n```text\n┌───────────────────────────────────┐\n│ Browser (index.html) │\n│ mic → WebM → /api/transcribe │\n│ text → /api/chat (SSE stream) │\n│ audio ← /api/tts │\n└──────────────┬────────────────────┘\n │ HTTPS (self-signed)\n┌──────────────▼────────────────────┐\n│ FastAPI backend │\n│ ┌──────────┐ ┌───────────────┐ │\n│ │ Whisper │ │ OpenAI-compat │ │\n│ │ (local) │ │ LLM API │ │\n│ └──────────┘ └───────────────┘ │\n│ ┌──────────┐ ┌───────────────┐ │\n│ │ edge-tts │ │ JSON storage │ │\n│ └──────────┘ └───────────────┘ │\n└───────────────────────────────────┘\n```\n\n## Directory Structure\n\n```text\nai-accent-coach/\n├── app.py # FastAPI backend (all APIs)\n├── coach.sh # Service manager (start/stop/restart/status/log)\n├── requirements.txt\n├── .env.example # ← copy to .env and fill in\n├── static/\n│ └── index.html # Single-file frontend\n└── assets/\n └── logo.png\n```\n\n## Quick Start\n\n```bash\ngit clone https://github.com/Carl-AI-Lab/ai-accent-coach.git\ncd ai-accent-coach\n\npython3 -m venv venv && source venv/bin/activate # recommended\npip install -r requirements.txt\n\ncp .env.example .env\n# Edit .env — at minimum set OPENAI_API_KEY\n```\n\nStart the server:\n\n```bash\nbash coach.sh start # background, logs to accent-coach.log\n# or\npython app.py # foreground with live output\n```\n\nOpen **https://localhost:8443** in your browser (accept the self-signed certificate).\n\nStop:\n\n```bash\nbash coach.sh stop\n```\n\n## Configuration\n\nAll settings live in **`.env`** (see [.env.example](.env.example)):\n\n| Variable | Default | Description |\n|---|---|---|\n| `OPENAI_API_KEY` | *(required)* | API key for any OpenAI-compatible service |\n| `OPENAI_BASE_URL` | `https://api.openai.com/v1` | LLM endpoint. Works with OpenAI, DeepSeek, Ollama, etc. |\n| `LLM_MODEL` | `gpt-4.1-mini` | Model name |\n| `WHISPER_DEVICE` | `cuda` | `cuda` for GPU, `cpu` for CPU-only |\n| `WHISPER_MODEL` | `distil-large-v3` | Whisper model size |\n| `WHISPER_UNLOAD_TIMEOUT` | `120` | Seconds idle before auto-unloading the model from memory |\n| `TTS_VOICE` | `en-US-AndrewMultilingualNeural` | edge-tts voice name |\n| `PORT` | `8443` | HTTPS listen port |\n\n### Using a Different LLM Provider\n\nAccentCoach works with any OpenAI-compatible API:\n\n```bash\n# OpenAI (default)\nOPENAI_BASE_URL=https://api.openai.com/v1\nOPENAI_API_KEY=sk-...\nLLM_MODEL=gpt-4.1-mini\n\n# DeepSeek\nOPENAI_BASE_URL=https://api.deepseek.com/v1\nOPENAI_API_KEY=sk-...\nLLM_MODEL=deepseek-chat\n\n# Ollama (local, free)\nOPENAI_BASE_URL=http://localhost:11434/v1\nOPENAI_API_KEY=ollama\nLLM_MODEL=llama3.1\n```\n\n## GPU vs CPU\n\nWhisper runs locally for speech-to-text. You can choose GPU or CPU mode.\n\n### GPU Mode (recommended)\n\n```bash\nWHISPER_DEVICE=cuda\n```\n\nRequires NVIDIA GPU with **cuBLAS** and **cuDNN** for CUDA 12.\n\nIf you installed CUDA libraries via pip (`nvidia-cublas-cu12`, `nvidia-cudnn-cu12`), you need to set `LD_LIBRARY_PATH` so that `faster-whisper` can find them:\n\n```bash\n# Find the library paths installed by pip\npython3 -c \"import nvidia.cublas.lib, nvidia.cudnn.lib; print(nvidia.cublas.lib.__path__[0]); print(nvidia.cudnn.lib.__path__[0])\"\n\n# Example output:\n# /home/you/venv/lib/python3.11/site-packages/nvidia/cublas/lib\n# /home/you/venv/lib/python3.11/site-packages/nvidia/cudnn/lib\n\n# Set before starting (or uncomment the line in coach.sh):\nexport LD_LIBRARY_PATH=\"/home/you/venv/.../nvidia/cublas/lib:/home/you/venv/.../nvidia/cudnn/lib\"\n```\n\n### CPU Mode\n\n```bash\nWHISPER_DEVICE=cpu\n```\n\nNo GPU required. Works on any machine. Significantly slower — see benchmark below.\n\n> **Tip:** On CPU, consider using a smaller model for faster response:\n> ```bash\n> WHISPER_MODEL=base # fastest, lower accuracy\n> WHISPER_MODEL=small # good balance\n> WHISPER_MODEL=medium # better accuracy, slower\n> ```\n\n### Benchmark (actual measurements)\n\nTested on the same machine with a 10-second audio clip, `distil-large-v3` model, `beam_size=5`, `vad_filter=True`:\n\n| | Device | Compute Type | Model Load | Transcription (avg of 3) |\n|---|---|---|---|---|\n| **GPU** | NVIDIA RTX 4060 Laptop (8 GB) | float16 | 16.5 s | **0.51 s** |\n| **CPU** | Intel i7-12700H (20 threads) | int8 | 5.7 s | **5.52 s** |\n\n> **CPU is ~11× slower for transcription**, but model loading is actually 3× faster since it skips CUDA initialization. For casual practice the CPU latency (~5 s per utterance) is acceptable. For fluid conversation, **GPU is strongly recommended**.\n\n## Requirements\n\n- Python ≥ 3.9\n- An OpenAI-compatible API key (for the LLM)\n- *(GPU mode)* NVIDIA GPU + CUDA 12 + cuBLAS + cuDNN 9\n- *(CPU mode)* No extra hardware — works on any x86_64 or ARM machine\n\n## License\n\n[Apache License 2.0](LICENSE)\n"}}}}