嵌入模型(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
使用mongovector对文档进行存储
获取mongovector时,需要设置的我们创建的索引名称,这样在进行搜索时才能根据索引去进行向量搜索。
vstore := mongovector.New(mongoClient.Coll(), embedder, mongovector.WithIndex(indexDP2048))