ChatterPal 更新 让 AI 英语口语练习有反馈也有后续
和 AI 用英语聊上几轮已经不难了。更值得关注的是对话结束以后刚才哪句话值得改改完能不能再练一次过几天换个问题还能不能自己说出来围绕这些问题我给之前开源的ChatterPal做了一轮更新并在 2026 年 10 月 27 日发布了 v0.1.0-alpha.1。ChatterPal 是一个可以自行部署的英语口语练习应用。这次更新把情境对话、录音核对、原话反馈、单句重练和延迟复习连接起来让一次练习有清楚的开始也有下一步。项目地址github.com/likebeans/ChatterPal新版今日练习界面。配图来自仓库中的实际运行截图使用独立演示身份与合成语音。先完成一件小事 再留下一个练习重点新版的任务学习从三个熟悉的情境开始情境这次要练什么描述周末说清过去的活动、同行的人以及自己的感受或原因在餐厅点餐说明餐点和数量、饮品选择再提出一个要求或问题办理酒店入住说明已有预订、提供任务需要的信息再询问一项住宿信息这些任务给每次开口一个具体目标。比如选择“描述周末”就可以围绕自己的经历完成多轮对话。输入既可以是文字也可以是录音使用录音时先试听、核对识别文字再确认提交。对话结束后反馈会展示任务目标对应的原话依据并保留最多两个改进重点。你可以回听自己的录音选一句继续重练也可以主动把表达保存到复习中隔一段时间再用一次。原有的自由对话仍然保留。React 与 FastAPI 承载新的任务学习主流程Gradio 和终端入口也继续可用。已有用户可以继续自由练习也可以从“今日练习”进入这套新流程。具体入口见本版本 README。录音先核对 再进入正式对话语音应用里ASR 输出的一段文字很容易被直接当作用户的表达。但识别结果可能有误。一旦后续对话和反馈建立在错误转写上用户就得花时间纠正系统的理解。所以这次把录音输入拆成了两个明确的阶段。第一阶段只做识别。用户上传录音后系统生成一份转写草稿提供原音试听和可编辑的文字。这个阶段不会调用教练、生成评价或合成回复也不会推进正式会话。第二阶段由用户确认。核对完成后前端把草稿编号和确认文字一起提交。后续对话与文字反馈使用确认后的内容同时保存机器转写和用户确认文本保留两者的区别。接口中的关键字段大致如下编号为示意{request_id:confirm-example-001,expected_revision:1,transcription_id:draft-uuid,confirmed_text:I went hiking with friends last Saturday.}确认时会复用同一份原音不再执行一次 ASR。保存记录时machine_transcript和confirmed_text分别记录机器识别结果与用户确认结果后续回看时输入来源仍然清楚。这套流程也处理了重复点击和调用失败成功提交时消费草稿、关联音频和保存练习记录在同一事务内完成已经消费的草稿不能再次提交。模型调用失败时草稿仍可在有效期内用于明确重试。任务回答、单句重练、复习共用这套录音核对流程。实现可以从 transcription.py 和学习 API 契约 看起。每条反馈都要能找到对应的原话一条对学习者有帮助的反馈应该说清楚它针对哪句话以及下一次可以怎样调整。在仓库的实际演示中用户谈论上个周末时说了I go hiking反馈引用这段原话建议调整为I went hiking并解释过去时的使用。旁边直接提供“针对这一句重练”和“保存这个表达到复习”的入口。反馈引用原句展示任务目标依据并把建议连接到下一次练习。这张实际演示截图展示的是文字表达反馈。为了让这种反馈有明确依据服务端会校验模型输出每个改进重点必须关联一个真实的用户回合。引用的原文必须是该回合中确实存在的文字片段。建议表达必须与原文不同重点数量最多为两个。判断任务目标已达成时必须提供可以核对的用户原话证据。这涉及严格的结构化输出校验以及回合归属、引用文字和任务评价项的检查。模型返回的引用无法核实时系统会移除无效部分或标记为未核实、部分可用、不可用。代码校验可以约束证据来源语法建议与语义判断的质量仍取决于模型。当前反馈聚焦文字表达与任务目标声学发音评分需要另外的测量和校准不能从转写结果直接推导出来。相应实现集中在 feedback.py。我希望用户看完反馈之后能明确选出一句值得再练的话。隔天换个问题 检查能否独立表达单句重练之后ChatterPal 还可以把表达保存下来安排延迟复习。首次保存后复习约在次日到期。系统会换一个相关问题让用户尝试把表达用到新的回答中。目前三个情境各有两道人工编写的迁移题共六道。这部分实现中我特别区分了不同的作答条件。看过提示、看过参考表达、提前练习、重复旧题和延迟后独立完成新题都会分别记录。它们都有练习价值但提供的学习证据不同。只有复习已经到期、本轮未使用提示或查看答案、题目尚未使用、回答不是原句复述并且评价可用且达成要求时才会继续按约三天、七天的间隔安排后续复习。提示和查看答案的行为由服务端记录。前端不能通过提交一个“我没看提示”的字段改变已经发生的事实。新的人工题目用完后仍然可以重复练习但重复题不会继续增加独立迁移记录。这些是当前明确的练习调度规则。进度页呈现完成了哪些任务、做过哪些尝试以及在什么条件下作答保留每次练习的具体依据。调度逻辑可以直接阅读 review_rules.py复习记录与接口见学习 API 契约。把学习规则留在应用里从开发者视角看这次更新的一个重点是让任务状态、反馈依据、复习规则和数据恢复都有明确的代码位置。项目沿用已有的 ASR、LLM、TTS 接入能力在它们之上增加学习层。按职责简化后结构如下React 练习界面FastAPI 学习接口学习服务与任务状态SQLite 记录与操作状态有界后台执行ASR 语音识别LLM 对话与文字反馈TTS 语音合成校验版本与操作状态学习层通过识别、回复和合成三个能力接口使用提供商。任务规则留在learning/底层能力适配保留在core/。切换模型服务时任务目标、反馈引用校验和复习排程仍然由应用管理。每段任务还会保留内容快照后续反馈与重练对照当时的任务定义。这样修改任务内容时历史练习仍然有自己的评价上下文。相关接口与任务状态可见 ports.py 和 sessions.py。请求中断后 能查清刚才发生了什么模型调用需要时间页面也可能刷新用户还可能重复点击提交。如果请求已经成功、浏览器却没收到响应应用需要有办法找回这个结果。学习写操作因此带有request_id服务端持久保存操作状态。同一身份、操作类型、请求编号和相同有效内容可以恢复原有操作或结果相同编号对应不同内容时返回冲突。耗时操作提供状态查询失败也不会自动重放付费调用。ASR、LLM、TTS 在有界后台执行环境中运行调用过程位于数据库事务之外。结果写回前再检查来源记录是否仍然存在、版本是否匹配以及操作是否仍有效。记录已经删除或操作已经中断时迟到的模型结果不能把旧状态重新写回来。SQLite 保存任务、反馈、练习尝试和操作记录。在使用同一浏览器身份与同一数据库的前提下已经保存的学习记录可以在刷新或 API 重启后继续读取。代码与约定见 runtime.py 和学习存储契约。自己部署 跑一遍完整练习默认配置使用下面这组服务也可以按项目支持的提供商配置替换环节默认实现语音识别本地 Whisperbase对话与文字反馈阿里百炼qwen-plus语音合成在线 Edge TTS准备好 Git、uv、Python 3.12、Node.js 20以及 FFmpeg、PortAudio 等对应平台的原生音频依赖后可以从本次发布版本开始gitclone--branchv0.1.0-alpha.1--depth1https://github.com/likebeans/ChatterPal.gitcdChatterPal uv pythoninstall3.12uvsync--locked--python3.12cp.env.example .env在.env中填写所选提供商配置。默认组合需要填写DASHSCOPE_API_KEYWhisper 首次使用时会下载模型Edge TTS 需要访问在线服务。Windows PowerShell 复制配置时使用Copy-Item .env.example .env。在仓库根目录启动 APIuv run--frozenchatterpal-run--modeapi另开终端在仓库根目录启动前端npm--prefixfrontend cinpm--prefixfrontend run dev打开 http://localhost:3010选择“描述周末”就可以从录音核对开始体验。项目也提供 Docker Compose 部署方式各平台依赖、精简安装、提供商配置和跨设备录音所需的 HTTPS 设置见部署指南。自行部署可以管理应用和学习记录数据是否发送到外部取决于选择的服务。默认组合中的 LLM 与 TTS 会使用在线服务Whisper 的识别在本地执行。学习记录支持 JSON 导出与删除录音默认提供一小时临时回放主动开启保留后默认为七天。具体规则见数据与隐私说明。这次也补上了验证和协作入口随着练习流程变长验证也需要覆盖跨步骤的行为。例如识别完成后刷新页面能否恢复重复提交是否会新增回合提示使用记录能否保留模型调用失败后已有记录是否还在。本次发布的 Tag CI 已通过包含后端离线回归与覆盖率检查、前端测试、构建、lint以及两套 Playwright 浏览器回归。仓库还保留了真实提供商与浏览器验收记录使用合成语音验证识别、确认、模型回复、语音回放和练后反馈等流程。验收输入和范围在最终功能验收中分别说明。项目目前仍处于 Alpha部署范围是单 API 实例与本地 SQLite适合个人练习、自行部署和工程学习。学习身份依赖当前浏览器的 cookie账号登录和跨设备同步还未提供。这次更新把更多精力放在每次练习的后续确认自己说了什么看懂一条有依据的建议把一句表达再练一次再在之后的任务里尝试使用。如果你想找一个可以自己部署的英语口语练习项目或者正在做语音与大模型应用欢迎来试试 ChatterPal。也欢迎从任务内容、反馈质量、录音体验、测试或部署文档入手参与改进。项目采用 MIT License。如果觉得有帮助欢迎点一个 Star遇到问题或有新的想法可以到 Issues 交流。GitHublikebeans/ChatterPal