D-viva-assistant-agent
案例所证明的能力 把来源材料转化为练习、反馈与复盘的阶段化学习工作流
- Next.js
- TypeScript
- AI SDK v6
- SQLite / better-sqlite3
- Tailwind CSS
- Zod
- Vitest
- Electron
一个面向论文答辩准备的私有桌面 app。它把学生自己的论文转成带来源的练习题、评分与修订任务,同时把论文文件与练习记录留在本机。
项目概览
角色 独立开发者 — 产品设计、架构、数据库层、LLM 整合、校验与测试
场景
现有答辩准备工具要么是通用闪卡,要么每道题都要手打。真正的瓶颈是 grounding:AI 考官只有在问题能追溯到论文原文时才有用;判分只有在能引用所用证据时才可信。
产品策略
我做了一套私有桌面流程:论文先导入成 evidence blocks,练习题与评分都引用这些 blocks,低分回答进入复盘队列。除非用户主动选择 provider,文件与历史都留在本机。
评测
我在真实论文答辩准备中持续使用,检查问题能否回到论文原文、反馈能否形成具体改进,以及薄弱回答能否进入可执行的复盘队列。
成果与当前阶段
已完成本地优先论文答辩准备 app · 带来源练习 · 隐私优先桌面使用
我的工作
- 论文 ingest 管线 — PDF / MD / TXT → 段落 evidence block,附导入质量报告;所有下游 AI 调用 grounded 到 ingest 输出,不靠模型先验
- AI 备考包生成 — 论文摘要、关键数字、方法问答、高压问答、文献卡;每条引用来源 evidence block,落库前过校验器
- 可编辑备考项、重新校验、review queue,以及带无 key 静态 fallback 的 training plan 生成器
- 实时 AI 考官 — 从证据块中生成问题,从准确性、深度、语言、方法论和沉着度五个维度评估回答,并提供问题诊断、英文改写和追问
- STT 练习闭环 — 录音 → 转写(Browser Web Speech 或 Google Cloud STT)→ 判分;低分项进复盘修复板
- Provider-agnostic LLM 层 — AI SDK v6 generateObject + Zod 结构化判分;支持 Gemini / Claude / OpenAI;无 key 时优雅降级(练习和转写仍可用)
- Electron + electron-builder macOS 打包,形成私有、单用户的桌面 app
技术证据
- 本地优先数据模型:SQLite(better-sqlite3、WAL、FTS5)存论文、evidence block、备考包与练习记录;DB 完全在本机
- 隐私设计:云端 AI 是 opt-in 并明告「发什么给谁」;API key 在 .env.local(gitignore);日志脱敏;录音不同步
- Next.js App Router,DB 仅服务端(runtime=nodejs 边界、globalThis 单例、serverExternalPackages for better-sqlite3);AI 调用 env 解析后启用
- 测试默认注入 MockLlmClient;真实模型调用由 RUN_LIVE_AI=1 开关控制,且只对公开样本论文运行
让每条生成都 grounded
导入的论文(PDF / Markdown / 纯文本)被抽取成段落 evidence block,附质量报告。所有下游内容——摘要、关键数字、方法问答、高压问答、文献卡与 training plan——都绑定到 evidence block 并过落库前校验。judge 与 examiner 以绑定证据作为判定依据。
考官闭环
实时考官从 evidence block 出题,对回答做五维评分,附诊断、英文改写与追问。可以打字或粘贴,也可以录音——音频被转写(Browser Web Speech 或 Google Cloud STT)并判分。低分项进入 review queue 与复盘修复板。
本地优先,云端 AI opt-in
SQLite 库、录音与论文文件都留在本机。云端 AI 是可选功能,有 provider key 时启用,并会清楚预览发送内容与接收方;本地模式仍可使用练习与转写。
已发布的是私有、单用户桌面 app。provider-agnostic LLM 层支持 Gemini、Claude 与 OpenAI;测试使用 mock client,受 gate 控制的 live checks 则只运行于公开样本论文。