PRJ-04 WIP
EchoPilot 实时面试参考助手
real-time interview copilot for remote interviews
听见面试官的提问,3 秒给出锚定你简历的参考回答
- AI Agent
- Rust
- TypeScript
P50 ≤ 3s
从提问结束到要点提纲上屏的设计目标
86 个
sidecar 单元 / 集成测试(CI 全量执行)
2 通道
系统音频 = 面试官、麦克风 = 你,无需声纹注册
// 01
问题背景
远程视频面试中,候选人卡壳往往不是因为不会,而是短时间内组织不出结构化的表达。市面上的「提词器」类产品要么通用聊天、不懂你的简历,要么把音频存到云端,隐私风险极高。
EchoPilot 想做的是「懂你档案的实时副驾」:回答严格锚定用户粘贴的简历与目标 JD,档案外的公司名 / 数字 / 项目名自动标红警示——宁可明说「没有素材」,也不让 LLM 编故事。
// 02
系统架构
桌面壳层
Tauri(React + Rust)双窗口形态
采集与识别层
Python sidecar 的实时音频管线
AI 流水线层
LangGraph 单轮图:从问题到校验过的回答
存储与隐私层
纯本地、无账号体系
// 03
关键技术决策
每一条都包含「为什么这样选」与「代价是什么」——这是我理解这个项目的方式。
Tauri 壳 + Python sidecar,而非全 Rust
LLM / ASR 生态(LangGraph、流式 SDK)在 Python 侧成熟度碾压 Rust,全 Rust 意味着重复造轮子。拆成 Tauri 壳(窗口 / 快捷键 / 进程守护)+ FastAPI sidecar(AI 管线),中间走 WebSocket 实时流 + REST 控制。代价是多了一个运行时与打包复杂度(PyInstaller 打单文件再进 Tauri bundle),但各段都用各自生态里最成熟的工具,迭代速度完全不同量级。
双通道采集代替声纹识别区分说话人
面试场景里「谁在说话」必须 100% 可靠。声纹注册方案要先采集面试官声纹,体验差且不准;说话人分离模型又重又稳不住重叠语音。利用物理通道天然隔离:系统音频(ScreenCaptureKit)就是面试官,麦克风就是你,零注册、零误判。代价是强依赖 macOS 屏幕录制权限,跨平台(Windows)需要重做采集层。
两级展示:先提纲后全文,流式补齐
面试中用户只有几秒扫一眼屏幕,直接吐 300 字长文等于没答。设计为先出 3–5 条要点提纲(token 数少一个数量级,P50 压到 ≤3s),再流式补完整参考回答,快捷键可循环切换简洁 / 标准 / 详细三档长度。代价是同一个问题要管两次生成状态,前端浮窗的状态机复杂度上升,但用户感知的延迟由最快的那一级决定。
幻觉防线作为硬约束而非 prompt 建议
「请不要编造」写进 prompt 是不可靠的——LLM 会用听起来合理的通用经历去填空,面试场景这种错误是致命的。把幻觉校验做成流水线独立节点:生成结果与档案素材做实体比对,档案外的公司名 / 数字 / 项目名标红警示,检索不到素材就明说。代价是多一次校验计算与少量延迟,但这是面试场景的信任底线。
Spec 驱动开发:spec / plan / task / checklist 四文档先行
项目从 dev-docs 的四份文档起步——需求、架构、任务、验收逐层派生,AI 编码协作时上下文不漂移。配合 ECHOPILOT_FAKE_LLM 联调模式与回放脚本(samples 里的真实转写样本可加速回放),不依赖真实 API Key 也能跑全链路测试,CI 里 sidecar 86 个 pytest 全量执行。
// 04
我的职责与产出
RESPONSIBILITIES
- 设计 Tauri + Python sidecar 双进程架构与 WebSocket / REST 通信协议
- 实现双通道音频采集(ScreenCaptureKit Swift 助手 + 麦克风)与 VAD 判停
- 实现 LangGraph 单轮流水线:分类 / 检索 / 生成 / 幻觉校验
- 实现档案卡片化与向量检索,搭建幻觉防线的实体比对机制
- 实现 React 双窗口 UI 与全局快捷键交互
- 搭建 CI(pytest + 前端构建 + Rust 编译)与 Release 打包流水线(PyInstaller → DMG)
OUTCOMES
- 从提问结束到提纲上屏的全链路延迟按 P50 ≤ 3s 设计并落地
- sidecar 86 个单元 / 集成测试纳入 CI,fake LLM 模式支持无 Key 全链路联调
- 回答严格锚定简历素材,档案外实体标红,幻觉防线可用
- V0.1 开发者预览版发布(macOS 13+,Apple Silicon / Intel 均可)
// 05
踩坑与复盘
最大的教训是「实时系统没有中间态」:采集、ASR、生成任何一环卡住,用户感知就是「死了」,逼着我给每一跳都加超时与降级。其次是延迟预算的分配——把分类与检测交给廉价模型、只把回答生成留给旗舰模型,这一步对延迟和成本的影响比任何 prompt 优化都大。下一步是声纹注册与多面试官区分、AI 复盘报告、练习模式,以及 Windows 支持。
// 06
技术栈
- Tauri 2
- React
- Rust
- Python
- LangGraph
- FastAPI
- SQLite