PORTFOLIO CASE STUDY

让“我好像看过”,
变成可验证的答案。

Recall 是一个本地优先的个人文档 RAG 产品。它不追求回答所有问题,而是让用户能够回到原始证据,并在知识不足时得到诚实拒答。

ROLEAI 产品设计 · 全栈实现 · 评测
SCOPEPDF / 图片 / 文字知识库
STACKQwen3 · Qdrant · SQLite
01 · PROBLEM

用户缺的不是更多答案,
而是能信任的依据。

课程资料、PDF 和截图不断积累,但真正要使用知识时,用户往往只记得“我看过”,无法找到原文。普通搜索依赖关键词,通用大模型又可能脱离用户资料生成答案。

如何把多种格式低成本沉淀为可检索知识?
如何验证证据真的能够回答问题?
证据不足时,如何避免模型编造?
02 · SOLUTION

从资料进入,
到有据可查的回答。

本地 Qwen3 负责分类、重排、证据判断与生成;SQLite 保存内容元数据,Qdrant Local 保存语义向量。

ExtractPDF / OCR / Text
→
Chunk保留 PDF 页码
→
RetrieveKeyword + Vector
→
RerankQwen3 二阶段排序
→
Ground回答或明确拒答
03 · ITERATION

技术不是堆出来的,
而是被问题推出来的。

使用同一组 45 个标注问题运行 V0、V1、V2,分别验证 Embedding、Hybrid Search、Reranker 和 evidence gate 带来的真实变化。

V0

Keyword

Hit@182.9%
Hit@597.1%
拒答80%
延迟1 ms

建立快速、可解释的词法基线,但无法稳定处理用户与原文措辞不同的问题。

V1

Embedding

Hit@177.1%
Hit@5100%
拒答80%
延迟93 ms

正确页面全部进入 Top 5,但同主题中“相关却不回答问题”的片段更容易排到首位。

V2

Hybrid + Reranker

Final
Hit@185.7%
Hit@5100%
拒答100%
延迟9.5 s

融合关键词与向量召回,再将排序和证据充分性拆开,最终兼顾命中与拒答。

04 · BAD CASES

三个失败,改变了最终方案。

01

语义相关,不等于能够回答

Embedding 把正确页面带进 Top 5,却让同主题的宽泛片段排在首位。因此加入 Hybrid 候选与二阶段重排,而不是把向量相似度当作最终答案。

02

“选出最好”会诱导模型错误放行

小模型同时做排序和充分性判断时,对 10 个知识库外问题全部回答。最终把 ranking 与 answerability 拆成两个独立任务。

03

严格拒答也会伤害可用性

第一版 evidence gate 错拒 7 个有答案的问题。加入语义证据保护阈值后错误拒答降至 0,但明确记录阈值只对当前数据集有效。

05 · PRODUCT JUDGEMENT

选择可信度,
也公开它的代价。

V2 把 Hit@3、Hit@5 和拒答准确率提升到 100%,但检索阶段平均延迟达到 9.5 秒。产品没有隐藏这项代价,而是在界面中解释召回、重排、核验和生成阶段。

当前结果来自一份 8 页 PDF 和同一批校准问题,因此它证明的是迭代方法,而不是通用生产质量。

06 · NEXT

下一步,不是再加一个模型。

01扩展到 5–10 份文档和 100 个问题
02拆分 calibration 与 held-out test set
03增加 claim-level citation accuracy
04优化超时恢复、缓存与端到端测试
EXPLORE THE PRODUCT

现在体验 Recall 的静态产品 Demo

打开 Demo