03. 使用mongodb-atlas嵌入(Embedding)

221 阅读2分钟

嵌入模型(Embedding Model)负责将文本数据映射到高维向量空间中,将输入的文档片段转换为对应的嵌入向量(embedding vectors)。这些向量捕捉了文本的语义信息,并被存储在向量库(VectorStore)中,以便后续检索使用。用户查询(Query)同样通过嵌入模型的处理生成查询嵌入向量,这些向量用于在向量数据库中通过向量检索(Vector Retrieval)匹配最相似的文档片段。

向量数据库有很多种,比如Qdrant, Pinecone, Chroma等等。在这里使用mongodb-atlas做向量数据库 mongodb atlas文档

使用docker-compose搭建

使用mongodb atlas做向量库数据存储时,需要使用到vectorSearch索引进行搜索。

Atlas Vector Search 支持在运行 MongoDB v6.0.11、v7.0.2 或更高版本的集群上进行 ANN 搜索,并在运行 MongoDB v6.0.16、v7.0.10、v7.3.2 或更高版本的集群上进行 ENN 搜索。

services:
  mongodb-atlas:
    image: mongodb/mongodb-atlas-local:8.0.3
    container_name: mongodb-atlas
    hostname: mongodb-atlas
    environment:
      MONGODB_INITDB_ROOT_USERNAME: root
      MONGODB_INITDB_ROOT_PASSWORD: 123456
    ports:
      - "27018:27017"
    volumes:
      - './conf/mongodb-atlas:/data/configdb'
      - './data/mongodb-atlas:/data/db'
    networks:
      - bg-ai
networks:
  bg-ai:
    driver: bridge
    name: bg-ai

创建索引

使用mongodb atlas进行向量搜索时,我们需要创建好对应的索引信息,如果不提前创建索引,会检索不到对应的数据 创建vectorSearch索引

创建索引时, 如果对numDimensions值不清楚时, 可以调用ollama api的 generate-embedding 查看返回回来的数组大小。

如图:使用qwen2.5:3b模型进行embedding存储时,返回的数组大小是2048,numDimensions在创建索引时应设置为2047 image.png

使用mongovector对文档进行存储

获取mongovector时,需要设置的我们创建的索引名称,这样在进行搜索时才能根据索引去进行向量搜索。

vstore := mongovector.New(mongoClient.Coll(), embedder, mongovector.WithIndex(indexDP2048))

本文代码仓库