我希望别人拿到仓库后能跑起来,也希望面试时展示的是已经验证的行为。最后这一轮,把前面的结果整理成可复现的交付。
要解决什么
我电脑上能跑,不代表另一台机器能编译;浏览器模拟测试通过,也不代表真实存储和 Worker 能接通。
有哪些方案
全靠手工容易遗漏,所有提交都跑 GPU 全链路又太重。我选分层验证:普通机器跑业务检查,指定硬件跑模型检查,演示环境跑完整流程。
具体怎样做
先固定 Go、whisper.cpp、Go binding、模型与 FFmpeg 的版本。当前转写 Dockerfile 从仓库默认分支拉源码,准备改成明确版本;升级时验证 binding 和原生库是否匹配。Linux 检查二进制动态依赖,Mac 单独验证原生构建与实际计算后端。
把启动路径写成两份:一份本机开发,另一份 VPS 加边缘节点。配置示例只用占位值,说明服务发现、文件地址、凭证和模型路径。启动先检查依赖与连通性,不能要求读者猜内部容器域名。
测试按三层安排:
| 层次 | 覆盖什么 | 运行条件 |
|---|---|---|
| 业务与契约 | 状态转换、去重、租约、版本与权限 | 假推理器,普通 CI |
| 集成 | 真实 Postgres、RabbitMQ、存储及 FFmpeg | 隔离测试环境 |
| 设备与端到端 | 模型加载、后端、录音上传到结果阅读 | 指定硬件和浏览器 |
已有 web/tests/browser.cjs 使用模拟 API 和虚拟麦克风,要保留这个边界。新增真实链路测试用独立测试账户、短音频和临时存储空间,跑完按引用关系清理数据。
迁移采用先新增字段、兼容读写、验证数据、再移除旧字段的顺序。至少试一次上一版本 Worker 收到不支持的消息版本时怎样处理,不能让滚动更新期间静默误读字段。
演示怎样安排
用一段短材料展示上传或录音、转写阅读、词汇回放和带引用的总结。然后停掉一个节点,展示当前 attempt 过期、另一个节点接手、旧结果被拒绝。后半段只在第 05 篇真正实现并验证后演示。
README 保留架构分工、启动步骤、已知限制、测试证据和性能报告入口。没有做完的项目明确写计划,不把队列持久化写成绝不丢任务,也不把运行在 Mac 写成已经验证 Metal。
验收方式很简单:从干净环境开始,按说明完成一次任务;换一个人照着走,记下他卡在哪一步。修掉这些断点,比再加一个服务名更有用。