浅谈 RAG 并基于 NodeJS 实现基础向量检索服务
浅谈 RAG 并基于 NodeJS 实现基础向量检索服务一、RAG 技术原理为什么需要向量检索大语言模型LLM虽然强大但存在两个致命短板知识截止日期和幻觉问题。检索增强生成Retrieval-Augmented Generation, RAG通过外部知识库动态注入上下文成为解决上述问题的工业级方案。其核心流程可拆解为三步1.离线索引将文档切块Chunking通过嵌入模型Embedding Model转化为高维向量存入向量数据库。2.在线检索将用户查询编码为向量在向量空间中用相似度算法如余弦相似度召回最相关的 Top-K 片段。3.增强生成将检索到的上下文拼接到 Prompt 中交给 LLM 生成回答。这里的核心难点在于向量检索的效率与精度。本文不依赖外部向量数据库而是用 NodeJS 从零实现一个轻量级向量检索服务聚焦于索引构建与近似最近邻ANN搜索。### 二、基础架构设计内存向量索引为了便于理解我们设计一个纯内存的向量索引支持以下功能- 向量维度固定如 384 维对应常见 MiniLM 嵌入模型。- 支持批量插入与单条查询。- 采用暴力搜索Brute Force即线性扫描所有向量计算余弦相似度适合小规模数据集10万条。为什么不用 HNSW 或 FAISS 这些库实现复杂如多层图、PQ 量化本文聚焦原理暴力搜索是最直观的基线方法。生产环境可替换为hnswlib-node或pgvector。### 三、实现基础向量索引首先定义向量存储类包含插入、检索、序列化方法javascript// vectorStore.jsclass VectorStore { constructor(dimension 384) { this.dimension dimension; this.vectors []; // 存储向量数组 this.documents []; // 存储原始文档 this.ids []; // 存储文档 ID } // 插入文档及其向量 add(id, text, vector) { if (vector.length ! this.dimension) { throw new Error(向量维度必须为 ${this.dimension}); } this.ids.push(id); this.documents.push(text); this.vectors.push(vector); } // 余弦相似度计算向量已归一化时等价于内积 cosineSimilarity(a, b) { let dot 0, normA 0, normB 0; for (let i 0; i a.length; i) { dot a[i] * b[i]; normA a[i] * a[i]; normB b[i] * b[i]; } return dot / (Math.sqrt(normA) * Math.sqrt(normB)); } // 检索 Top K 相似向量 search(queryVector, k 3) { if (queryVector.length ! this.dimension) { throw new Error(查询向量维度不匹配); } const scores this.vectors.map(vec this.cosineSimilarity(queryVector, vec)); // 获取 Top K 索引降序 const topIndices scores .map((score, idx) ({ score, idx })) .sort((a, b) b.score - a.score) .slice(0, k) .map(item item.idx); return topIndices.map(idx ({ id: this.ids[idx], text: this.documents[idx], score: scores[idx] })); }}module.exports VectorStore;### 四、实现本地嵌入模型服务真实场景中我们需要将文本转化为向量。为了不引入 Python 环境本文使用xenova/transformers纯 JavaScript 实现的 Transformer 库加载轻量级模型all-MiniLM-L6-v2384 维。该模型在 NodeJS 中运行无外部依赖。javascript// embedder.jsconst { pipeline } require(xenova/transformers);class Embedder { constructor() { this.extractor null; } // 初始化嵌入模型延迟加载 async initialize() { if (!this.extractor) { // 使用小型嵌入模型输出 384 维向量 this.extractor await pipeline(feature-extraction, Xenova/all-MiniLM-L6-v2); } } // 将文本转换为向量自动归一化 async embed(text) { if (!this.extractor) { await this.initialize(); } const output await this.extractor(text, { pooling: mean, normalize: true }); // 将 Tensor 转换为普通数组 return Array.from(output.data); }}module.exports Embedder;### 五、构建 RAG 查询服务现在将向量存储与嵌入模型组合搭建一个简易的 HTTP 服务提供/search端点。这里使用 NodeJS 原生http模块避免额外依赖。javascript// server.jsconst http require(http);const VectorStore require(./vectorStore);const Embedder require(./embedder);(async () { const store new VectorStore(384); const embedder new Embedder(); await embedder.initialize(); // 预置示例知识库 const docs [ { id: 1, text: RAG 通过检索增强大模型生成能力 }, { id: 2, text: 向量数据库适合高效存储和查询嵌入向量 }, { id: 3, text: NodeJS 可以构建轻量级 AI 服务 }, { id: 4, text: 余弦相似度衡量两个向量的方向一致性 } ]; // 批量插入文档 for (const doc of docs) { const vector await embedder.embed(doc.text); store.add(doc.id, doc.text, vector); console.log(已索引文档 ${doc.id}); } // 创建 HTTP 服务 const server http.createServer(async (req, res) { if (req.method GET req.url.startsWith(/search)) { const query new URL(req.url, http://localhost:3000).searchParams.get(q); if (!query) { res.writeHead(400, { Content-Type: application/json }); res.end(JSON.stringify({ error: 缺少查询参数 q })); return; } const queryVector await embedder.embed(query); const results store.search(queryVector, 2); res.writeHead(200, { Content-Type: application/json }); res.end(JSON.stringify({ query, results })); } else { res.writeHead(404); res.end(Not Found); } }); server.listen(3000, () { console.log(向量检索服务已启动: http://localhost:3000); });})();### 六、测试与效果演示运行服务后用curl测试查询bash# 启动服务node server.js# 查询与“大模型生成”相关的内容curl http://localhost:3000/search?q大模型如何生成回答预期输出相似度分数可能略有不同json{ query: 大模型如何生成回答, results: [ { id: 1, text: RAG 通过检索增强大模型生成能力, score: 0.82 }, { id: 3, text: NodeJS 可以构建轻量级 AI 服务, score: 0.41 } ]}可以看到检索结果正确召回最相关的文档。若需接入 LLM只需将结果拼接入 Prompt例如javascriptconst prompt 基于以下知识回答\n${results.map(r r.text).join(\n)}\n问题${query};### 七、优化方向与生产实践本文实现的是基础版本生产环境需考虑1.索引优化暴力搜索复杂度为 O(N)当文档量超过百万级应改用 HNSW Hierarchical Navigable Small World图索引实现对数级检索。2.分块策略文档切块大小影响检索精度需结合句边界、段落结构动态切分。3.混合检索结合关键词BM25与向量检索提升术语匹配的准确性。4.持久化使用node:fs定期将向量序列化到磁盘或接入 Redis 等外部存储。### 八、总结本文从 RAG 的技术原理出发剖析了向量检索在其中的核心作用。通过 NodeJS 实现了一个零依赖的内存向量检索服务包含文档嵌入、余弦相似度计算、Top-K 检索及 HTTP API并演示了如何将其集成到 RAG 流水线中。虽然基础版性能有限但完整展示了从文本到向量的转换、存储与检索的闭环流程。读者可在此基础上替换为更高效的索引算法如 HNSW或接入真实 LLM构建完整的知识增强问答系统。—延伸思考如果希望进一步降低延迟可以尝试将向量二进制化Binary Quantization或使用 Product Quantization 压缩向量维度但会牺牲一定精度。RAG 系统的工程化是一个权衡艺术理解底层原理是优化性能的第一步。

相关新闻

为什么你的Copilot总写错逻辑?——注释语义断层检测与修复实战手册(附AST级校验脚本)

为什么你的Copilot总写错逻辑?——注释语义断层检测与修复实战手册(附AST级校验脚本)

更多请点击: https://codechina.net 第一章:为什么你的Copilot总写错逻辑?——注释语义断层检测与修复实战手册(附AST级校验脚本) 当Copilot生成看似合理却运行失败的代码时,问题往往不在于模型“不懂语法…

2026/8/1 15:34:59 阅读更多 →
如何彻底解决Calibre中文路径乱码问题:NoTrans插件终极指南

如何彻底解决Calibre中文路径乱码问题:NoTrans插件终极指南

如何彻底解决Calibre中文路径乱码问题:NoTrans插件终极指南 【免费下载链接】calibre-do-not-translate-my-path Switch my calibre library from ascii path to plain Unicode path. 将我的书库从拼音目录切换至非纯英文(中文)命名 项目地…

2026/8/1 15:34:59 阅读更多 →
Obsidian终极B站视频播放指南:3分钟实现笔记与视频无缝结合

Obsidian终极B站视频播放指南:3分钟实现笔记与视频无缝结合

Obsidian终极B站视频播放指南:3分钟实现笔记与视频无缝结合 【免费下载链接】mx-bili-plugin 项目地址: https://gitcode.com/gh_mirrors/mx/mx-bili-plugin 你是否在Obsidian中整理学习笔记时,总是需要在浏览器和笔记软件之间来回切换&#xff…

2026/8/1 15:34:59 阅读更多 →

最新新闻

订单流分析与关键拍卖反转策略:KAR-18形态实战指南

订单流分析与关键拍卖反转策略:KAR-18形态实战指南

在金融市场交易中,识别关键价格区域的供需变化是制定有效策略的核心。本文将深入解析一种基于拍卖市场理论的实战方法——关键拍卖反转(Key Auction Reversal,KAR),重点聚焦第18类形态与第7号策略的组合应用。无论你是…

2026/8/1 16:14:13 阅读更多 →
TP-LINK IPC48AW 4K全彩智能摄像头评测:800万像素家庭安防新选择

TP-LINK IPC48AW 4K全彩智能摄像头评测:800万像素家庭安防新选择

监控摄像头品类推荐:TP-LINK IPC48AW 800万像素4K全彩智能家居摄像头,值得入手吗?最近在搭建智能家居安防系统时,我对比了市面上多款监控摄像头,发现TP-LINK IPC48AW这款800万像素的4K全彩摄像头在功能和性价比方面表现…

2026/8/1 16:14:13 阅读更多 →
微信公众号文章爬取与Markdown转换实战

微信公众号文章爬取与Markdown转换实战

1. 项目背景与需求分析 微信公众号作为国内最大的内容创作平台之一,积累了海量的优质文章资源。许多运营者和研究者经常需要批量获取公众号文章内容进行数据分析、内容存档或二次创作。传统的手动复制粘贴方式效率低下,而直接爬取HTML内容又会携带大量冗…

2026/8/1 16:14:13 阅读更多 →
基于Jetson Thor与OpenClaw的智能机械臂边缘AI控制实践

基于Jetson Thor与OpenClaw的智能机械臂边缘AI控制实践

1. 项目概述:当边缘AI大脑遇上灵巧机械臂最近在折腾一个挺有意思的项目,核心是把一个叫OpenClaw的智能体框架,部署到英伟达的Jetson Thor这块性能怪兽上,用它来实时控制一个名为SO-Arm的机械臂。这听起来像是一个典型的“AI大脑机…

2026/8/1 16:14:13 阅读更多 →
基于Seeeduino Stalker V3的户外低功耗数据采集系统设计与实现

基于Seeeduino Stalker V3的户外低功耗数据采集系统设计与实现

1. 项目概述:Seeeduino Stalker V3,一个为户外数据而生的一体化方案如果你正在寻找一个能让你彻底摆脱电源线和数据线束缚,在野外、农田、屋顶或者任何你想监测的地方,长时间、稳定地采集环境数据的解决方案,那么Seeed…

2026/8/1 16:13:13 阅读更多 →
ComfyUI IPAdapter Plus图像风格迁移完整指南:从新手到专家的AI艺术创作

ComfyUI IPAdapter Plus图像风格迁移完整指南:从新手到专家的AI艺术创作

ComfyUI IPAdapter Plus图像风格迁移完整指南:从新手到专家的AI艺术创作 【免费下载链接】ComfyUI_IPAdapter_plus 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_IPAdapter_plus 你是否曾幻想过将一张照片的艺术风格完美复制到另一张图像上&#x…

2026/8/1 16:13:13 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/8/1 13:02:46 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/8/1 5:19:34 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/8/1 10:33:33 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →