L03 参考解:有版本、有权限、有证据的检索与上下文
这是可讨论的参考设计,不是唯一架构。先完成实验题面,再对照本解。
关键推导
先过滤再排名的意义不只是隐藏结果。若敏感文本已经送入模型或第三方reranker,最后页面不显示它并不能撤销泄露。参考代码在计算语料统计量与评分前过滤租户和active。
RRF示例:A=1/61≈0.016393,B=1/62+1/61≈0.032522,C=1/62≈0.016129,因此顺序B/A/C。不要把BM25原始分和相似度直接相加后称作校准概率。
Context builder的参考答案不是“永远保留最近N条”。先固定不可丢失状态,再按任务相关性选择证据,最后压缩冗余输出。摘要属于派生视图;未确认副作用与审批状态必须保留在持久系统中,不能只写进自然语言摘要。
参考算法与实现位置
visible_docs = filter(tenant=current_tenant AND active=true)
lexical = bm25(query, visible_docs)
optional_dense = embedding_search(query, visible_docs)
ranked = rrf([lexical.ids, optional_dense.ids])
context = mandatory_state + selected_evidence_with_ids + bounded_history
不要在没有dense检索时伪造一份“语义排名”;RRF单元测试的第二份列表明确是教学输入。
应当得到的可检查结果
| 输入 | 验收 |
|---|---|
| shop-a任意查询 | 不返回P06 |
| 查询含“旧版退款” | 不返回inactive的P05 |
| 空查询/limit=0 | 空列表,不报成功证据 |
| RRF [A,B]+[B,C] | B第一,分数1/62+1/61 |
| 排名[A,A] | A只获得一次贡献 |
| 压缩后继续待确认退款 | operation_id与unknown状态仍可恢复 |
怎样判断替代实现是否等价
替代实现必须保留题面中的身份来源、状态归属和失败语义。数据库/框架可以更换,但应把相同故障窗口重新跑一遍。只在正常路径输出一致,不足以证明恢复与授权等价。异步或并发实现还必须解释取消传播、竞争窗口和资源回收。
常见错误与修正
第一类错误是把协议或框架提供的局部保证放大成业务保证:格式正确不等于授权,执行结束不等于业务成功,持久化不等于外部副作用恰好一次。修正方式是找到事实源并把不变量放在拥有该事实的层。
第二类错误是用演示数据替代证据。已有fixture可以检查确定性公式与状态机,但真实模型、网络或容器的结论需要实际运行。报告同时写出“已验证”“仅模拟”“未验证”,比宣称全部完成更有工程价值。
实现范围与限制
参考仓库提供检索基线与融合,不包含真实embedding服务或自动摘要模型。context策略的实验要求和答案有文字规格,需学习者实现并测试。
开放题评分要点
权限与版本30;基线正确性25;引用与状态保留20;实验15;局限解释10。 正确的反例、失败分析和替代方案论证应获得分数;框架堆叠、只报最终成功截图、删除失败成本不应获得同等评价。