AI 英语教练 —— AI 英语学习 App
基于 FastAPI + Flutter 的 AI 英语学习 App:AI 口语陪练、SM-2 单词复习、阅读助手、作文批改、CET 全题型训练与学习统计,语音支持本地 ASR 与 TTS。
角色 独立开发(项目规划 / 后端 / Flutter 前端 / 部署 / 测试与文档)
基于 FastAPI + Flutter 的 AI 英语学习 App(Android),覆盖 CET-4 / CET-6 备考与日常英语学习:AI 口语陪练(DeepSeek 对话 + 语法纠错 + SSE 流式)、单词学习(SM-2 间隔复习 + 多题型测验 + 生词本)、阅读助手、作文批改、学习统计与学习计划、语音(ASR / TTS / 发音评测)、CET 全题型专项训练与数据备份。
规模为 19 个后端路由模块、88 个接口、26 张表、31 个 Flutter 页面;后端已部署到云服务器,App 内可随时切换服务器地址。
主流备考 App 多是「题库 + 背单词」,缺少能对话、能纠错、能给反馈的 AI 教练;市面 AI 口语产品价格高,且不针对四六级备考场景。
学习数据分散在多个 App:背单词一个、听力一个、作文一个,无法形成「计划 → 练习 → 统计 → 调整」的闭环。
语音能力往往依赖云端付费接口,成本与隐私都不可控。
做一款能日常使用的 AI 英语教练 App:既覆盖 CET 全题型备考,也支持日常英语学习场景。
AI 能力可插拔、可本地化:LLM 可切换、语音转写支持本地 Whisper、语音合成走 Edge TTS。
工程可维护:后端 API 化并配文档(88 接口),移动端服务器地址可配置,前后端都有可运行的测试。
后端把所有能力做成 API 化的 19 个路由模块,业务逻辑集中在 18 个 Service 层,出入参统一由 Pydantic 校验、异常由全局处理器统一返回。
AI 能力做成可替换的两条通道:LLM 走 OpenAI 兼容协议(DeepSeek / OpenAI 只改配置),语音转写支持本地 faster-whisper 与云端切换,TTS 用 Edge TTS 并加内存 / 磁盘缓存。
移动端把 API 地址做成三级优先级(App 内设置 > 编译期 --dart-define > assets 默认值)并提供连接测试,解决模拟器、真机与云服务器三种环境地址不同的问题。
Flutter Android App(Provider 状态管理 / GoRouter 路由 / Dio HTTP)→ HTTP(JSON / SSE 流式 / multipart 音频上传)→ FastAPI 后端(:8002,API 基础路径 /api/v1):19 个路由模块(auth / chat / vocabulary / reading / writing / stats / plan / profile / speech / cet_* / backup / reminder / server 等)→ 18 个 Service 业务层 + Pydantic schema 校验 → SQLAlchemy 2 异步 ORM(26 张表,SQLite 单文件数据库);AI 服务层包含 DeepSeek / OpenAI(可切换)、faster-whisper(本地)与 Edge TTS(含磁盘缓存);词库导入工具支持 CET4 / CET6 / 考研 / IELTS / TOEFL 约 2500 词。
LLM 走 OpenAI 兼容协议(DeepSeek / OpenAI 切换只改配置),ASR 支持本地 faster-whisper 与云端双通道,TTS 用 Edge TTS + 内存 / 磁盘缓存避免重复合成。
SM-2 间隔复习调度学习节奏;CET 写作按 15 分制批改、口语模拟四维评分,结果都回流到统计与画像。
AI 对话走 SSE 流式输出;前端 Dio 拦截器统一处理 401 跳登录 / 500 提示 / 网络异常。
AI 不可用时按用户弱项生成兜底建议(测试专门覆盖 ai fail fallback 场景),功能不白屏。
API 地址三级优先级(App 内设置 > 编译期 --dart-define > assets/config 默认值)并支持连接测试;Gradle + Kotlin DSL 一键出 release APK。
所有 UI 文案收敛到 AppStrings,后端返回的英文错误经 server_messages 统一本地化(含变量占位),前端不再硬编码中文。
语音能力实现方式
选了 本地 Whisper + Edge TTS + 缓存,而不是 全部依赖云端语音接口 —— 成本与隐私更可控,也减少对外部服务的强依赖。
代价:需要控制模型与语音文件体积(用 gitignore 排除,不进仓库与安装包)。
AI 不可用时的行为
选了 按弱项返回兜底建议,而不是 直接提示失败 —— 学习类应用的核心页面不应因为外部接口波动而不可用。
代价:需要额外维护兜底逻辑并为其补测试。
数据存储方案
选了 SQLite 单文件数据库,而不是 引入独立数据库服务 —— 单用户学习类应用的写入量与并发都很低。
代价:多实例水平扩展受限,需要随规模变化再评估。
规模:后端 19 个路由模块、88 个接口、26 张表(17 个模型文件、18 个 Service);Flutter 31 个页面。
后端测试:冒烟脚本 8/8 全部通过(本次实测运行,覆盖画像、目标、AI 建议、缓存、计划调整与 AI 失败降级)。
前端测试:flutter test 12 个用例全部通过(本次实测:服务端文案本地化 4 个 + 组件 / 流程 8 个);flutter analyze 0 error / 0 warning(134 条 info 级 lint 建议)。
构建:release APK 构建成功(app-release.apk 57.5 MB,BUILD_EXIT=0)。
部署:后端已上线云服务器并在线(在线 API 文档 https://english.myiskg.com/docs ,健康检查 https://english.myiskg.com/health 返回 healthy;线上 OpenAPI 暴露 80 条路径 / 90 个操作),App 内可随时切换服务器地址。自 2026-09-24 起启用 HTTPS。
词库:内置 CET4 / CET6 / 考研 / IELTS / TOEFL 约 2500 词导入工具。
AI 相关功能必须显式设计失败路径:把「AI 不可用」当成正常分支处理并写进测试,页面才不会因为外部接口波动而不可用。
移动端的环境差异要在一开始就抽象掉:模拟器、真机与服务器三种地址用优先级解析处理,比后期逐个改配置可靠。
文案与错误消息应该集中维护:统一收敛到 AppStrings / server_messages 之后,本地化与改动都不再依赖搜索替换。





