菜单

向量存储组件

相关源文件

PrivateGPT 中的向量存储组件负责存储和检索文档块的向量嵌入。它通过实现高效的相似性搜索,在回答用户查询时找到相关的文档块,从而成为检索增强生成(RAG)管道的关键部分。

系统架构中的目的和位置

图 1:系统架构中的向量存储组件

来源:private_gpt/components/vector_store/vector_store_component.py

向量存储组件主要有两大功能

  1. 在文档摄取过程中存储向量嵌入
  2. 在问答过程中检索语义相似的文档块

支持的向量存储

PrivateGPT 支持多种向量存储后端,每种后端具有不同的特性和用例

向量存储描述配置键额外包
Qdrant默认向量存储,针对扩展过滤进行了优化qdrantvector-stores-qdrant
Chroma嵌入式向量数据库chromavector-stores-chroma
PostgreSQL/pgvector带有向量扩展的 PostgreSQLpostgresvector-stores-postgres
Milvus可扩展向量数据库milvusvector-stores-milvus
ClickHouse支持向量的列式 DBMSclickhousevector-stores-clickhouse

来源:private_gpt/components/vector_store/vector_store_component.py40-195 fern/docs/pages/manual/vectordb.mdx1-187

组件实现

图 2:向量存储组件类结构

来源:private_gpt/components/vector_store/vector_store_component.py32-218

向量存储组件被实现为一个单例类,它根据配置设置初始化相应的向量存储。初始化过程根据 vectorstore.database 设置选择向量存储实现,并根据提供的参数进行配置。

配置

向量存储组件通过 settings.yaml 文件进行配置。主要的配置是 vectorstore.database 属性,它决定了使用哪种向量存储实现

每个向量存储都有自己的配置选项,这些选项在设置文件中各自的部分下指定。例如,Qdrant 配置

来源:fern/docs/pages/manual/vectordb.mdx11-168

向量存储和检索流程

图 3:向量检索流程

来源:private_gpt/components/vector_store/vector_store_component.py197-213

检索机制

该组件提供一个 get_retriever 方法,用于创建针对特定向量存储配置的 VectorIndexRetriever。该检索器支持

  1. 通过 context_filter 参数按文档 ID 进行过滤
  2. 通过 similarity_top_k 配置返回结果的数量
  3. 适应每个向量存储的特定之处(例如,Qdrant 使用直接的 doc_ids,而其他存储使用过滤器)

来源:private_gpt/components/vector_store/vector_store_component.py197-213

安装要求

要使用特定的向量存储,需要安装相应的额外包。例如,要使用 Qdrant

如果未安装所需的依赖项,组件将引发相应的 ImportError,并附带如何安装所需包的说明。

来源:private_gpt/components/vector_store/vector_store_component.py43-105 fern/docs/pages/installation/concepts.mdx22-67

与其他组件的集成

向量存储组件与以下组件紧密协作:

  1. 嵌入组件 (3.2):提供存储在向量数据库中的向量嵌入
  2. RAG 管道:根据查询相似性检索相关文档块
  3. 摄取服务 (4.1):在摄取过程中使用向量存储索引文档块

来源:private_gpt/components/vector_store/vector_store_component.py

资源管理

向量存储组件实现了一个 close 方法,用于在关闭时清理资源

这确保了应用程序终止时数据库连接的正确清理。

来源:private_gpt/components/vector_store/vector_store_component.py215-217