Recall:把保存的资料变成能追问、能回查的知识库
Recall 把文章、视频和自己的笔记保存在同一个资料库中,并提供摘要和 AI 问答。它适合经常收集材料、写作时又想找回原始依据的人。
先尝试拆解问题、设计和实现,再展开思路,检查状态、边界与取舍,并设计验证用例。思路提供分析路径,不给出完整实现。
01
代码思考进阶
资料更新后,旧引用怎样保留依据?
为教学问答系统设计引用校验器。每张资料有cardId和递增整数revision;回答生成时保存一份快照,记录使用的(cardId,revision)及引用片段。当前资料可能更新或删除。快照是当时使用内容的固定副本,不随资料变化。
- 校验每条引用,区分“当前版本一致”“已有更新”“当前已删除”“快照缺失”。保留回答原引用,不能悄悄把新版文字替换进去。
- 样例:回答引用A@2与B@1;当前A@3,B已删除,但两份快照都存在。列出状态及读者还能查看什么;再令B@1快照缺失。
- 交付数据关系、校验规则与测试表。覆盖同卡片多个版本、重复引用、空引用和不存在的卡片;不需要实现检索或模型。
查看思路
- 将当前资料索引和回答快照分开,引用键至少同时包含资料标识与版本。仅存cardId无法确认当时依据。
- 先检查快照是否存在,再比较当前版本。已有更新表示当前内容不同,不意味着旧回答一定错误。
- 样例A@2标为已有更新并仍可读快照;B@1当前已删除但快照可读。快照缺失时只能说明缺口,不能用其他版本补齐后继续称原引用。
- 通过重复引用和多版本样例检查归属稳定性;明确是否允许按同一键合并展示,但不能合并不同版本的证据。
02
界面实现进阶
回答乱序返回时,如何保住来源归属?
设计教学用网页问答面板。用户能选择来源范围Recall、Web、Both,并添加资料卡片。每次提交保存requestId、scope和选中cardIds;提交后仍可修改范围。问题回答异步返回,此题不代表Recall内部实现。
- 当前输入设置变化后,已发出的请求保留原快照。回答必须显示它实际使用的范围和资料,不能套用此刻输入框设置。
- 同一面板仅以最后一次提交的请求作为主结果。推演q1(Recall,A)→改为Web→提交q2(Web,空)→q2成功→q1成功,以及只改范围但未再提交。
- 交付状态划分、结果接收条件和测试表。覆盖取消、失败重试、重复响应、空资料选择;键盘可完成范围选择、添加资料和提交,并能读到加载或错误提示。
查看思路
- 把正在编辑的条件与提交时快照分开。修改输入设置不改写旧回答的标签,只改设置未再提交时仍可展示q1及其原范围。
- 用最后一次提交的requestId决定主结果接收资格。样例显示q2,迟到q1不得覆盖;重试也分配新标识。
- AbortController可减少无用请求,但取消不是归属判断的替代。成功、错误和结束加载三类回调都应核对请求身份。
- 用可控响应顺序验证旧失败不会清空新成功;再走一遍全键盘流程,确保控件有名称、焦点可见,状态文字能够被辅助技术感知。