2034 words
10 minutes
IELTS Speaking APP

雅思口语陪练 App(IELTS Speaking Coach)#

一款专注于「地道表达 + 智能纠错」的雅思口语备考应用,基于 Tauri 2 跨平台开发,可运行在 Android / iOS / 桌面。

区别于传统背单词软件,它的核心目标不是记忆孤立词汇,而是帮你掌握口语中常用、地道、且自身容易出错的短语和完整句子——通过「实战练习 + AI 纠错 + 素材沉淀」形成闭环,持续提升表达准确度与流利度。


功能特性#

1. 题库浏览与选题#

内置 980 道雅思口语真题(Part 1:432 题 / Part 2:201 题 / Part 3:347 题),覆盖 16 个高频话题(Hometown、Education、Work or Studies、Food、Travel、Technology、Environment 等),并带「旧题 / 新题 / 必考 / 高频」标签与难度档位,方便按需选题进入练习。

2. 录音与语音转写(支持手动干预)#

  • 录音:WebView 内 getUserMedia + PCM→WAV,无需原生录音插件。
  • 转写:调用 Stepfun stepaudio-2.5-asr(SSE 流式),实时返回识别结果。
  • 可任意编辑转写结果,也可跳过录音、直接手动输入英文回答。

3. AI 智能纠错与优化#

调用推理模型(默认 Stepfun step-3.7-flash,可切换任意 OpenAI 兼容厂商)完成:

  • 四维评分:流利度 FC / 语法 GA / 词汇 LR / 发音 PR,含预估总分与主要短板;
  • 语法纠错 + 表达优化:逐条指出错误 / 给出更地道的替换,并自动生成复习卡片;
  • 高分润色:温和升级你的回答为高分范文;
  • 诊断与建议:中式英语问题、跑题检测、Part 2 要点覆盖检查、改进建议。

4. 卡片式错题收藏#

纠错点自动生成复习卡片,支持按话题 / 类型 / Part / 掌握度筛选、标记掌握程度、离线复习、导出 Markdown 笔记。

5. 素材库(地道表达沉淀)#

一句话 / 一段话的地道表达统一入库管理,支持五种类型:句子 sentence、段落 passage、短语 phrase、词汇 vocab、观点 idea。录入方式有四种:

方式说明
手动录入表单填写 topic / type / 英文 / 中文 / 亮点 / 贴士
规范 MD 导入按《素材记录规范》写的 Markdown,本地确定性解析,免费零误差
AI 智能提取粘贴任意自由文本,AI 自动提取成结构化素材
纠错自动沉淀练习纠错产出的「表达优化」自动作为素材候选入库

素材格式规范见 素材记录规范.md。

6. 快捷翻译#

输入一句英语(或中文),AI 自动改写为地道的雅思口语表达,附带中文释义、话题归类、关键表达与用法贴士,并直接收入素材库。

7. 历史记录#

每次完成 AI 点评后,回答与完整点评结果自动保存,支持按题目关键词检索、回看自己过往表现、追踪每道题的练习次数。

8. 数据备份 / 恢复#

素材库、复习卡片、历史记录可整体导出为 JSON 文本(复制后跨设备粘贴导入)或 .json 文件,实现手机与电脑之间的数据同步。

9. 双语界面#

内置中文 / English 双语,支持「跟随系统」自动切换,界面与 AI 回复语言可分别配置。

10. 自动检查更新#

Android 端启动时静默检测 GitHub 发布的最新版本,有新版本则弹出横幅提示下载(基于 Netlify 公开分发 + latest.json)。


技术栈#

层技术
跨平台框架Tauri 2(Android / iOS / 桌面)
前端React 18 + TypeScript + Vite
后端Rust(reqwest + rusqlite)
本地存储SQLite(卡片 / 素材 / 历史记录离线可用)
语音识别Stepfun stepaudio-2.5-asr(POST /step_plan/v1/audio/asr/sse,SSE 流式)
推理纠错默认 Stepfun step-3.7-flash(OpenAI 兼容,可切换 DeepSeek / Kimi / OpenAI 等)
应用插件tauri-plugin-dialog / fs / opener
自动更新Netlify 公开分发 + latest.json 版本检测

目录结构#

ielts-speaking-app/
├── src/                          # 前端源码
│   ├── data/questionBank.ts      # 内置题库(980 题,Part 1/2/3)
│   ├── lib/audio.ts              # 录音 + PCM→WAV + 波形
│   ├── lib/api.ts                # Tauri invoke 封装
│   ├── lib/updater.ts            # Android 自动更新检测(Netlify latest.json)
│   ├── i18n/                     # 中英文双语字典
│   ├── components/               # 界面组件(题库/练习/纠错/素材/翻译/复习/历史/设置)
│   └── App.tsx
├── src-tauri/
│   ├── src/commands/             # Rust 命令:asr / correct / translate / cards / materials / history / backup / config
│   ├── src/config.rs             # API 密钥安全读取
│   ├── src/db.rs                 # SQLite 初始化
│   ├── tauri.conf.json
│   └── icons/                    # 应用图标
├── scripts/
│   ├── gen_icon.py               # 图标生成脚本(Pillow)
│   ├── import_materials_data.py  # 素材数据批量导入脚本
│   ├── patch-android-manifest.mjs    # Android 补丁:麦克风权限 + 软键盘 adjustResize
│   ├── patch-android-signing.mjs     # Android 签名配置补丁
│   └── patch-ios-info-plist.mjs      # iOS 麦克风权限补丁
├── 素材记录规范.md               # 素材库 Markdown 格式规范
└── .github/workflows/            # CI:build-android / build-ios / release / keystore

环境准备#

  • Node.js ≥ 20
  • Rust 工具链(stable)
  • Tauri 系统依赖(见 Tauri 官方前置要求)
  • Android:JDK 17 + Android SDK(tauri android 会引导)
  • iOS(仅 macOS):Xcode

本地开发#

npm install

# 生成完整图标集(含 Android / iOS)
npx tauri icon src-tauri/app-icon.png

# 桌面端调试
npm run tauri dev

# 移动端调试(需先初始化对应平台)
npm run tauri android init
npm run tauri android dev

npm run tauri ios init
npm run tauri ios dev

API 密钥配置(重要)#

密钥绝不硬编码在源代码中,按以下优先级加载:

  1. App「设置」页手动填入(推荐移动端使用,写入本地应用配置目录,仅本机可读)
  2. 运行期环境变量 STEPFUN_API_KEY(桌面端开发)
  3. 构建期环境变量 STEPFUN_API_KEY(CI 构建时注入,通过 option_env! 编译进二进制)
# 桌面端本地调试
export STEPFUN_API_KEY="你的密钥"
npm run tauri dev

也可参考 .env.example。不要把真实密钥提交到仓库。

打包构建#

本地#

# 桌面
npm run tauri build

# Android APK
node scripts/patch-android-manifest.mjs   # 若为首次 init
npm run tauri android build

# iOS
npm run tauri ios build

GitHub Actions(自动构建)#

  • Android release(.github/workflows/release.yml):打 v* tag 触发,构建 arm64 release APK 并部署到 Netlify 公开站点,同时生成 latest.json 供 App 端检测更新。
  • Android CI(.github/workflows/build-android.yml):推送代码触发,产出已签名 release APK 作为 Artifact。
  • iOS(.github/workflows/build-ios.yml):在 macOS runner 上编译(simulator 目标,无需签名)。

配置 Secret#

打开仓库 Settings → Secrets and variables → Actions,按需添加:

Secret用途
STEPFUN_API_KEY构建期注入(可选,不注入则用户在 App 设置页手动填写)
ANDROID_RELEASE_KEYSTORE_BASE64 / _PASSWORD / KEY_ALIAS / KEY_PASSWORD正式 release 签名
ANDROID_DEBUG_KEYSTORE_BASE64降级签名兜底
NETLIFY_AUTH_TOKEN / NETLIFY_SITE_ID / NETLIFY_SITE_URL自动更新分发

Android 签名(release keystore)#

Android 构建默认产出 release APK(配合 Cargo.toml 的 [profile.release] 体积优化,从约 170MB 降到约 30MB)。签名方式:

  • 推荐(正式签名):手动触发 Generate Android release keystore 工作流,一次性生成固定 release keystore,把日志打印的 4 个值存为 Secrets。
  • 降级(未配置时):自动回退用固定的 debug keystore 签名,同样可安装、可覆盖升级,只是不适合上架商店。

⚠️ release keystore 务必妥善保存,丢失后无法对已发布包做升级签名。

iOS 签名(正式 IPA)#

iOS 可分发安装包必须使用 Apple Developer 证书与描述文件签名,无法在无账号的情况下自动化。建议使用 fastlane match 或在工作流中配置 APPLE_CERTIFICATE、APPLE_PROVISION_PROFILE 等 Secrets 完成签名。

Stepfun API 说明#

  • 语音识别:POST {base}/step_plan/v1/audio/asr/sse,Content-Type: application/json、Accept: text/event-stream,音频 base64 + WAV 格式,服务端流式返回 transcript.text.delta / transcript.text.done / error 事件。
  • 推理模型:POST {base}/step_plan/v1/chat/completions,OpenAI 兼容,支持 reasoning_effort(low/medium/high)。
  • base 默认 https://api.stepfun.com,可用环境变量 STEPFUN_BASE_URL 覆盖(海外 https://api.stepfun.ai)。

可调环境变量:

变量默认值说明
STEPFUN_API_KEY-API 密钥
STEPFUN_BASE_URLhttps://api.stepfun.comAPI 基础地址
STEPFUN_ASR_MODELstepaudio-2.5-asr语音识别模型
STEPFUN_LLM_MODELstep-3.7-flash推理模型
STEPFUN_REASONING_EFFORTmedium推理强度

说明与注意事项#

  • 录音采用 WebView 内 getUserMedia + PCM→WAV,无需原生录音插件,兼容 Android WebView / iOS WKWebView。
  • 纠错提示词内置了个人偏好:流利度优先、避免中式英语,以及内容黑名单(不用 teacher / 猫狗熊猫 / 春节等示例)。
  • 语音识别语言默认 en(雅思口语为英文作答),如需中文可在 PracticeView.tsx 中修改 ASR_LANGUAGE。
  • 界面与 AI 回复语言可在「设置 → 语言」切换(中文 / English / 跟随系统)。
IELTS Speaking APP
https://zycreverse.netlify.app/posts/speakingapp/
Author
摸鱼的bz画手
Published at
2026-09-29