介绍:

知识库检索模块是派聪明这个 RAG 项目的核心功能模块,我们是基于 Elasticsearch 实现的文档混合检索能力,将语义检索和关键词检索结果结合起来,为用户提供更高质量的搜索体验。

该模块依赖于文件上传与解析模块完成的向量化处理,直接使用存储在 Elasticsearch 中的向量数据进行检索。系

模块整体分为两大块:

①、知识库检索:

混合检索:结合语义检索和关键词检索结果,按权重排序返回搜索结果
支持指定返回结果数量:通过 topK 参数控制结果数量
②、权限控制:

基于组织标签的数据权限:确保用户只能访问有权限的文档

支持层级权限验证:父标签权限自动包含所有子标签文档的访问权限

默认标签全局可访问:DEFAULT 标签资源对所有用户kaifang

用到的技术栈包括:

整体的流程是这样的:

一、依赖的数据结构

01、MySQL表结构

document_vectors 表:

file_upload 表:

02、Elasticsearch索引结构

二.关键流程:

1. 接收搜索请求:

- 控制器

接收用户的搜索请求,包括查询字符串和返回结果数量
- 从请求属性中获取用户ID(如果已登录)
- 记录搜索性能和业务日志
- 根据是否有用户ID选择不同的搜索方法

2. 权限验证
负责组件 : HybridSearchService

核心流程 :

- 获取用户的有效组织标签(包含层级关系)
- 获取用户的数据库ID用于权限过滤
- 构建权限过滤条件,确保用户只能搜索:
  - 自己的文档
  - 公开文档
  - 所属组织的文档

 3. 混合搜索
负责组件 : HybridSearchService

核心流程 :

- 向量生成 :调用 EmbeddingClient 生成查询向量


- KNN搜索 :使用向量进行KNN搜索,召回相关文档


- 权限过滤 :应用权限过滤条件


- 文本匹配 :使用BM25算法进行文本匹配

- 结果重排序 :结合向量相似度和文本匹配分数进行重排序

 4. 结果处理
负责组件 : HybridSearchService

核心流程 :

- 处理搜索结果,转换为 SearchResult 对象
- 附加文件名信息
- 处理异常情况,提供后备搜索方案

技术特点
1. 混合搜索 :结合向量搜索和文本搜索,提高搜索准确性
2. 权限控制 :确保用户只能搜索有权限访问的文档
3. 异常处理 :当向量搜索失败时,自动切换到纯文本搜索
4. 性能优化 :使用KNN召回窗口和BM25重排序
5. 结果增强 :附加文件名等元信息,提高用户体验
## 权限过滤机制
系统实现了细粒度的权限过滤,确保用户只能搜索:

- 个人文档 :用户自己上传的文档
- 公开文档 :标记为公开的文档
- 组织文档 :用户所属组织的文档(支持组织层级)
## 搜索策略
1. 优先使用混合搜索 :结合向量相似度和文本匹配
2. 后备方案 :当向量生成失败时,使用纯文本搜索
3. 权限过滤 :无论使用哪种搜索方法,都会应用权限过滤
## 搜索结果结构
搜索结果包含以下信息:

- 文件MD5
- 分块ID
- 文本内容
- 相似度分数
- 用户ID
- 组织标签
- 是否公开
- 文件名
- 页码
- 锚文本
- 搜索类型

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐