RAG 与 MongoDB Vector Search 第1部分
Source: Dev.to
什么是 RAG?
检索增强生成(Retrieval‑augmented generation,RAG)是一种让大型语言模型(LLM)能够检索并融合新信息的技术。RAG 向 LLM 提供上下文数据,以生成更准确、更有依据的答案。
为什么向量搜索在 RAG 中很重要?
传统的关键词搜索在查询模糊、改写或语义丰富时会失效。向量搜索通过将文本表示为高维嵌入向量来解决此问题,这些向量编码的是意义而非字面文字。
嵌入
将文档和用户查询转换为捕获语义含义的高维向量。
索引
使用这些向量构建近似最近邻(ANN)结构,如 HNSW、IVF‑Flat 或 PQ,从而实现高效的相似度搜索。
检索
对输入查询进行嵌入,并与已索引的向量进行比较,返回基于语义相似度的最近匹配项。
示例场景
来源
- 来源 1 – “Hono 是一个基于 Web 标准的快速、轻量级 JavaScript 框架。它侧重于低开销、边缘友好执行以及最小化的 API 表面。”
- 来源 2 – “Elysia 是一个针对 Bun 优化的 Web 框架,提供强类型、模式校验和卓越性能。它旨在构建具备良好开发者体验的可扩展 HTTP 服务。”
- 来源 3 – “Express 是一个极简且被广泛采用的 Node.js 框架。由于其简单性、丰富的生态系统和灵活的中间件模型,常用于构建 REST API。”
用户查询
如何在 JavaScript 中构建一个后端服务,以更好地集成 Bun 运行时?
当此查询被 嵌入 时,生成的向量会表示后端服务、API 开发、HTTP 框架以及 JavaScript 服务器端技术等概念。
典型的嵌入模型(Voyage、OpenAI、HuggingFace 等)会生成 512 到 3072 维的向量。示例向量:
[
0.0182, -0.0925, 0.0441, 0.0107, -0.0713, 0.1234, -0.0089, 0.0562,
-0.0041, 0.0977, 0.0229, -0.0335, 0.1412, -0.0611, 0.0054, 0.0883,
-0.0122, 0.0745, -0.1099, 0.0671, 0.0144, -0.0528, 0.0995, -0.0173,
0.0811, -0.0442, 0.0368, 0.1210, -0.0075, 0.0932, -0.0661, 0.0152,
0.0473, -0.0891, 0.1329, 0.0287, -0.0174, 0.0721, -0.0554, 0.1012,
0.0069, -0.0312, 0.1184, -0.0251, 0.0526, 0.0048, -0.0903, 0.1301,
0.0110, -0.0782, 0.0433, 0.0271, -0.0622, 0.0999, -0.0148, 0.0711,
0.0835, -0.0222, 0.0579, -0.0384
]
向量搜索使用 索引 将该查询向量与来源生成的向量进行比较。相似度搜索识别出在语义上最接近查询意图的来源,并 检索 它们。
检索结果
[
{
"text": "Elysia is a Bun‑optimized web framework that provides strong typing, schema validation, and excellent performance. It is designed for building scalable HTTP services with good developer ergonomics.",
"score": 0.91
},
{
"text": "Express is a minimalistic and widely adopted Node.js framework. It is commonly used to build REST APIs because of its simplicity, extensive ecosystem, and flexible middleware model.",
"score": 0.78
},
{
"text": "Hono is a fast, lightweight JavaScript framework built on Web Standards. It focuses on low overhead, edge‑friendly execution, and a minimal API surface.",
"score": 0.61
}
]
为什么使用 MongoDB Atlas 向量搜索?
MongoDB Atlas 向量搜索将向量相似度、元数据过滤和文档存储整合到 单一、统一的系统 中。无需在向量数据库和业务数据库之间拆分堆栈,Atlas 让嵌入、原始文档和业务数据并存。这消除了同步两个系统的开销,降低了延迟,并简化了架构。
对于 RAG 流程,这一点尤为关键:你可以把原始来源、它们的嵌入以及任何上下文元数据(标签、时间戳、访问规则、版本)全部存放在同一个位置,并在一次往返中查询所有内容。
MongoDB 向量搜索的工作原理
MongoDB 将嵌入向量存储在集合中的数组字段里,和其他普通字段没有区别。当在该字段上启用向量搜索时,Atlas 会构建一个针对快速语义相似度查找优化的 ANN 索引。

查询到来时,Atlas 使用你的嵌入输入(通常来自应用或 LLM 工作流),将查询向量与已索引的向量进行比较,并返回距离最小的文档。
在 MongoDB Atlas 中创建向量搜索索引
要在 MongoDB Atlas 中启用向量搜索,需要在存放嵌入的字段上定义向量索引。该索引告诉 Atlas 如何构建 ANN 图(HNSW)以及使用哪种相似度度量。
索引定义
{
"mappings": {
"dynamic": false,
"fields": {
"embedding": {
"type": "knnVector",
"dimensions": 1536,
"similarity": "cosine"
}
}
}
}
embedding– 每个文档存放向量表示的字段。dimensions– 必须与所使用的嵌入模型的维度相匹配。similarity– 定义检索时的距离计算方式(例如余弦相似度)。
向量搜索查询
{
"$vectorSearch": {
"index": "frameworks_vector_index",
"path": "embedding",
"queryVector": [/* query embedding values */],
"numCandidates": 50,
"limit": 3
}
}
Atlas 使用 queryVector 在 HNSW 图中遍历,依据配置的相似度度量找出最近的节点,并返回前几名结果。
关键要求:存储文档和传入查询必须使用同一嵌入模型。混用模型或版本会导致向量不兼容,进而削弱相似度搜索效果。
结论
本文概述了 RAG、向量搜索与 MongoDB Atlas 在实际工作流中的协同方式。后续文章将进一步探讨更深层的 RAG 架构、向量索引策略、混合搜索等内容,敬请期待。