Vector Store 使用指南

Vector Store 是用于存储、管理和检索向量嵌入的组件,支持工作空间管理、相似度搜索和元数据过滤等功能。

核心概念

工作空间(Workspace):每个工作空间是一个独立的向量存储单元,用于组织和管理相关的向量节点。

向量节点(VectorNode):包含文本内容、向量嵌入和元数据的数据单元,是存储和检索的基本单位。

嵌入模型(Embedding Model):用于将文本转换为向量嵌入,支持自动生成节点向量和查询向量。

可用的实现类型

FlowLLM 提供了多种 Vector Store 实现,适用于不同的使用场景:

  • LocalVectorStore代码路径):基于本地文件的实现,使用 JSONL 格式持久化存储,适合单机部署和小规模数据
  • MemoryVectorStore代码路径):内存实现,数据存储在内存中,访问速度快,适合临时数据或测试场景
  • QdrantVectorStore代码路径):基于 Qdrant 向量数据库,支持高性能向量搜索,适合大规模生产环境
  • ChromaVectorStore代码路径):基于 ChromaDB 的实现,提供持久化存储和元数据过滤能力
  • EsVectorStore代码路径):基于 Elasticsearch 的实现,支持强大的全文搜索和向量搜索组合

所有 Vector Store 实现都继承自 BaseVectorStore代码路径),提供统一的接口规范。

核心功能

工作空间管理

  • 创建工作空间:创建新的工作空间用于存储向量节点
  • 删除工作空间:删除工作空间及其所有数据
  • 检查工作空间:检查指定工作空间是否存在
  • 列出工作空间:获取所有已存在的工作空间列表
  • 复制工作空间:将一个工作空间的数据复制到另一个工作空间

节点操作

  • 插入节点:向工作空间插入向量节点,支持单个或批量插入,自动生成向量嵌入
  • 删除节点:根据节点 ID 删除指定节点
  • 迭代节点:遍历工作空间中的所有节点

向量搜索

  • 相似度搜索:基于文本查询进行向量相似度搜索,返回最相似的前 K 个结果
  • 元数据过滤:支持基于元数据的过滤条件,包括精确匹配和范围查询
  • 相似度评分:搜索结果包含相似度评分,用于评估匹配程度

数据导入导出

  • 导出工作空间:将工作空间数据导出到文件或指定路径
  • 导入工作空间:从文件或节点列表导入数据到工作空间
  • 回调函数:支持在导入导出过程中使用回调函数进行数据转换

同步与异步接口

所有 Vector Store 实现都提供同步和异步两套接口:

  • 同步接口:直接调用方法,适用于同步代码环境
  • 异步接口:以 async_ 前缀命名,适用于异步代码环境,提供更好的并发性能

异步接口在以下场景中特别有用: - 使用异步嵌入模型生成向量 - 在高并发环境中执行批量操作 - 与其他异步组件集成

配置选项

通用配置

  • embedding_model:嵌入模型实例,用于生成向量嵌入
  • batch_size:批量操作的大小,默认 1024

LocalVectorStore 配置

  • store_dir:存储目录路径,默认 ./local_vector_store

MemoryVectorStore 配置

  • store_dir:持久化存储目录,默认 ./memory_vector_store

QdrantVectorStore 配置

  • url:Qdrant 服务地址(可选,用于 Qdrant Cloud 或自定义部署)
  • host:Qdrant 服务器主机,默认 localhost
  • port:Qdrant 服务器端口,默认 6333
  • api_key:API 密钥(用于 Qdrant Cloud 认证)
  • distance:距离度量方式,支持 COSINE、EUCLIDEAN、DOT,默认 COSINE

ChromaVectorStore 配置

  • store_dir:ChromaDB 数据存储目录,默认 ./chroma_vector_store

EsVectorStore 配置

  • hosts:Elasticsearch 主机地址,可以是字符串或列表,默认 http://localhost:9200
  • basic_auth:基本认证凭据(用户名和密码)

配置文件示例

flowllm/config/default.yaml 中配置 Vector Store,所有配置都在 vector_store 部分下。基本配置结构如下:

vector_store:
  default:
    backend: <backend_name>        # 必需:向量库后端类型
    embedding_model: default       # 必需:嵌入模型配置名称
    params:                        # 可选:后端特定参数
      # 后端特定参数

配置字段说明

  • backend(必需):向量库后端类型,可选值:localmemorychromaqdrantelasticsearch
  • embedding_model(必需):嵌入模型配置名称,引用 embedding_model 部分的配置
  • params(可选):后端特定参数字典,将传递给向量库构造函数

各类型配置示例

1. LocalVectorStore 配置

最简单的本地文件存储,适合开发和测试。

代码实现flowllm/core/vector_store/local_vector_store.py

vector_store:
  default:
    backend: local
    embedding_model: default
    params:
      store_dir: "./local_vector_store"  # 存储目录(可选,默认:"./local_vector_store")

2. MemoryVectorStore 配置

内存存储,访问速度快,适合临时数据或测试。

代码实现flowllm/core/vector_store/memory_vector_store.py

vector_store:
  default:
    backend: memory
    embedding_model: default
    params:
      store_dir: "./memory_vector_store"  # 持久化目录(可选,默认:"./memory_vector_store")

3. ChromaVectorStore 配置

基于 ChromaDB 的持久化存储,支持元数据过滤。

代码实现flowllm/core/vector_store/chroma_vector_store.py

vector_store:
  default:
    backend: chroma
    embedding_model: default
    params:
      store_dir: "./chroma_vector_store"  # ChromaDB 数据目录(可选,默认:"./chroma_vector_store")

4. QdrantVectorStore 配置

代码实现flowllm/core/vector_store/qdrant_vector_store.py

本地 Qdrant 实例:

vector_store:
  default:
    backend: qdrant
    embedding_model: default
    params:
      host: "localhost"      # Qdrant 服务器主机(可选,默认:localhost)
      port: 6333             # Qdrant 服务器端口(可选,默认:6333)
      distance: "COSINE"     # 距离度量方式(可选,默认:COSINE,可选值:COSINE、EUCLIDEAN、DOT)

Qdrant Cloud 配置:

vector_store:
  default:
    backend: qdrant
    embedding_model: default
    params:
      url: "https://your-cluster.qdrant.io:6333"  # Qdrant Cloud 地址
      api_key: "your-api-key-here"                 # API 密钥
      distance: "COSINE"

5. EsVectorStore 配置

代码实现flowllm/core/vector_store/es_vector_store.py

基本配置(本地 Elasticsearch):

vector_store:
  default:
    backend: elasticsearch
    embedding_model: default
    params:
      hosts: "http://localhost:9200"  # Elasticsearch 主机地址(可选,默认:http://localhost:9200)

带认证的配置:

vector_store:
  default:
    backend: elasticsearch
    embedding_model: default
    params:
      hosts: "http://elasticsearch.example.com:9200"
      basic_auth: ["username", "password"]  # 基本认证凭据

多主机配置:

vector_store:
  default:
    backend: elasticsearch
    embedding_model: default
    params:
      hosts:
        - "http://es-node1:9200"
        - "http://es-node2:9200"
        - "http://es-node3:9200"

完整配置示例

以下是一个完整的 default.yaml 配置示例,包含嵌入模型和向量库配置:

# 嵌入模型配置
embedding_model:
  default:
    backend: openai_compatible
    model_name: text-embedding-v4
    params:
      dimensions: 1024

# 向量库配置
vector_store:
  default:
    backend: elasticsearch
    embedding_model: default
    params:
      hosts: "http://localhost:9200"

环境变量支持

部分 Vector Store 支持通过环境变量进行配置,作为 YAML 配置的补充:

  • ElasticsearchFLOW_ES_HOSTS - Elasticsearch 主机地址
  • Qdrant
  • FLOW_QDRANT_HOST - Qdrant 主机(默认:localhost
  • FLOW_QDRANT_PORT - Qdrant 端口(默认:6333
  • FLOW_QDRANT_API_KEY - Qdrant API 密钥

当 YAML 配置中未明确指定参数时,系统会使用环境变量作为后备值。

元数据过滤

支持两种类型的元数据过滤:

  • 精确匹配:直接指定字段值进行精确匹配
  • 范围查询:使用 gteltegtlt 操作符进行数值范围查询
  • 嵌套字段:支持使用点号访问嵌套的元数据字段

使用场景建议

  • 开发测试:使用 MemoryVectorStore 或 LocalVectorStore,无需额外服务
  • 小规模应用:使用 LocalVectorStore 或 ChromaVectorStore,简单易用
  • 生产环境:使用 QdrantVectorStore 或 EsVectorStore,提供高性能和可扩展性
  • 混合搜索:使用 EsVectorStore,结合向量搜索和全文搜索能力

注意事项

  • 确保嵌入模型的维度与 Vector Store 配置一致
  • 大规模数据建议使用专业的向量数据库(Qdrant、Elasticsearch)
  • 异步接口在异步环境中能提供更好的性能
  • 定期备份重要数据,特别是使用内存存储时
  • 根据数据规模选择合适的批量大小以优化性能