检索要能"先筛后搜"
只靠语义相似度,用户常遇到两类糟糕结果 ✗:**过期的**(三年前的方案 ✔)与**不该看的**(别的团队/客户的内容 ✔)。
解法是在检索入口加**可筛选维度** ✔:时间、来源、类型、权限 ✔。
**先筛后搜**(filter-then-search)通常比"搜完再过滤"更准也更快 ✔ ——
尤其当筛选能把候选集缩小一个量级时 ✔。
一、四个必备筛选维度
1. **时间**:`published_at` 范围("只看近一年" ✔);
2. **来源/权威度**:官方文档 / 内部规范 / 社区帖子 ✔(等级表人工维护 ✔,不要模型猜 ✔);
3. **类型**:教程 / 规范 / 会议纪要 / 工单 ✔;
4. **权限**:谁能看哪些文档 ✔(这一条是**硬约束**,不是排序因素 ✔)。
二、权限必须做在检索层(不能只在展示层)
最常见的漏洞 ✗:先检索出全部,再在界面上隐藏无权内容 ✔ —— 但**模型已经读过了** ✔,
它可能在答案里**复述**出来 ✔(这就成了越权泄露 ✔)。
正确做法:
三、筛选要"可发现、可解释"
四、三个常见坑
五、落地顺序
1. 先补元数据(时间、来源、类型 ✔)—— 没有元数据,筛选无从谈起 ✔;
2. 再加**权限过滤**(安全优先 ✔,这一条不能等 ✔);
3. 然后加时间与来源筛选(用户最常用 ✔);
4. 最后做筛选的可见性与解释 ✔(含"被筛掉多少"的提示 ✔)。
一条判据
> 抽 10 个问题,**只看检索层**(不看最终答案 ✔),能否保证"无权内容根本没被取到" ✔?
> 不能,就说明权限做在了错误的位置 ✗。