一个本地优先的学术证据核验工作区,用确定性 NLI judge 对照来源证据审查论点与引用。它提供 Electron 桌面 app 与 MCP-capable core,外部 scite / Consensus 证据检索保持明确 opt-in。
问题 大规模文献审查容易出错:LLM 会虚构 supports 关系;词汇 judge 无法识别矛盾,所谓 'supports' 毫无意义。每条 claim 都需要可溯源的定位器,而不是模型猜测。
成果 317 个离线测试 · 42 条人工标注 gold set · 最新打包版本覆盖 macOS arm64 / x64 / universal
角色 独立开发者 — 架构、核心管线、Electron app、MCP server、评测框架
项目截图
对照已导入来源证据检查引用。 案例详情
查看案例→ 查看源码↗
解法
我做了一条本地优先流程:导入论文、检索证据、用确定性 NLI 判断论点,并把裁定、片段与定位器一起呈现。外部证据检索保持 opt-in,私有草稿与文献库默认不外发。
我的工作
- Draft Citation Audit — 逐句审查:每条引用解析到来源、判定(supports / weakly_supports / unsupported / contradicts / unclear),附原文片段、字符跨度定位器、置信度与建议改写;语料库反例会自动浮现
- Thesis Review — 论文拆解 → 检索 → 逐条判断 → 共识裁定(supported / contested / refuted / insufficient),附比例、决定性指数和支持/矛盾证据图
- 混合检索 — BM25 + 稠密向量(本地 ONNX:all-MiniLM / bge-small / nomic,角色感知)+ reciprocal-rank fusion;定位器从页面追踪到字符跨度
- 离线优先 judge — 默认使用确定性 DeBERTa-NLI(零外呼);OpenAI-compatible 与 Ollama 一键预设支持云端/本地 LLM judge
- 持久化文献库 — PDF 拖入(GROBID 章节感知 + unpdf fallback);本地 SQLite(Source / Chunk / vectors);切换 embedder 自动重索引
- 迭代 agent-loop checker — 顶层证据不确定时,审查次级候选并追踪步骤;failure mode 量化后作为诊断指标暴露
- 三轴评测:准确率(macro-F1 + 分类 + 混淆矩阵)、忠实度(answer_groundedness)和治理(policy_compliance:grounded-locator 率 + snippet-only 率 + 外发字符数)
- Provider ablation runner — 横向对比 hash+mock / all-MiniLM+NLI / agentic 在三轴上的表现;本地 vs 云端、单轮 vs agentic 的取舍,有数字为证
- 写作台(Writing Desk)— 贴入一个段落:拆分并分类每条 claim(因果 / 比较 / 方法等),对照文献库标记 needs_citation / overclaimed / contradicted,并给出更稳妥的改写;可针对每条论点,用一段可编辑、已告知的查询词查找外部证据
- 外部研究与引用健康(可选)— 在 app 内检索 scite / Consensus 以获取候选外部证据;并把 scite 的引文分析呈现为风险徽章(无明显问题 / 存在一些反驳 / 值得注意的问题 / 已撤稿或严重通告),附支持 / 反驳 / 提及计数与撤稿通告,覆盖三处:检索结果、已导入的文献库论文(在引用前抓出被撤稿的文献),以及一篇论文经 GROBID 解析出的参考文献
- 可复用的 MCP OAuth — 基于 MCP SDK 的 OAuth 2.1 PKCE + 动态客户端注册(DCR)浏览器登录,用于需 OAuth 的 MCP server:127.0.0.1 回环流程,token 只存于钥匙串,worker 除一个 bearer access token 外什么都拿不到
- 桌面发布管线 — 最新公开 release 已打包 macOS arm64 / x64 / universal,让审查者可直接以真实 app 方式检视,而不只依赖 source checkout
技术证据
- 共享核心,两个接口:纯 TS 引擎在 src/(ingest · retrieve · check · plan · eval · trace);MCP server 与 Electron app 是薄适配层,src/ 不 import Electron
- 确定性来自离线 mock(HashEmbedder / MockJudge / MockPlanner);模型加载测试加 env gate,CI 全程离线
- Gold set:42 条人工标注 claims,附 integrity-gated sources.lock.json;gold 必须人工标注,绝不让被测模型自评
- 可选的出站,且边界严格 — 外部调用仅在明确动作下触发,只送出查询词或公开 DOI,绝不送出语料库或草稿(唯一例外:写作台的证据检索,送出一段可编辑、已告知的查询词);OAuth token 留在钥匙串,只以一个 bearer 标量抵达 worker,并在每个边界被脱敏
- 密钥存 OS keychain(Electron safeStorage),不进 config/git/trace/日志;317 个测试覆盖 retrieval / check / eval / trace 与外部研究层,全程离线(live 网络冒烟测试以 env gate 隔离)
- Electron 打包覆盖最新 packaged release 的 macOS arm64 / x64 / universal 产物,同时保留非 macOS 目标的 source-run fallback