当前位置: 首页 > article >正文

掌握 RAG 核心技术:揭秘 AI 如何精准调用私有知识库,避免“答非所问”的窘境!

本文深入探讨了 RAG检索增强生成技术的原理与实现阐述了如何通过 Embedding 技术将私有文档转化为 AI 可检索的向量并利用向量数据库进行高效相似度匹配。文章详细介绍了 Embedding 的作用、余弦相似度计算方法以及向量数据库的存储与检索逻辑。同时分享了实际应用中的工程实践技巧如保持 Embedding 模型一致性、优化文本分块粒度、设置相似度阈值等帮助开发者构建更精准、可靠的 AI 应用。搞懂这一块你就明白 RAG 为什么有效以及它在哪里会失败你给 ChatGPT 发了一份 200 页的产品手册然后问它第 87 页说的退款政策是什么它大概率答不准——因为它根本没看到那份手册那是你的私有数据不在它的训练集里。即便你把手册全文塞进 Context超出 Context Window 怎么办费用怎么算Embedding 和向量数据库解决的就是这个问题把你的私有知识变成 AI 可以快速检索的外部记忆让模型在需要的时候取用相关片段而不是试图把所有内容都塞进 Context。这是 RAG检索增强生成的基础也是当前 AI 应用层最重要的工程能力之一。Embedding 是什么Embedding嵌入是把文本转换成一串浮点数向量的过程。举个具体的例子把猫喜欢睡觉这句话送进 embedding 模型出来的是一个 1536 维的向量大概长这样[0.0231, -0.1045, 0.0782, 0.0394, -0.0621, ...] // 共 1536 个数字这 1536 个数字不是随机的。embedding 模型本质上也是一个神经网络被训练成语义相近的文本输出的向量在空间中距离也近。来看几个例子句子对相似度“猫喜欢睡觉” vs “Cats love to sleep”0.93非常相近“今天天气真好” vs “今日天空晴朗”0.91语义几乎相同“今天天气真好” vs “机器学习是 AI 的分支”0.21语义很远数字就是语义距离。这是 embedding 最核心的特性它把是否相关这个模糊的问题变成了可以计算的数学问题。用起来有多简单// embedding.ts 节选async function embed(text: string): Promisenumber[] { const response await client.embeddings.create({ model: text-embedding-3-small, input: text, }) return response.data[0].embedding}一次 API 调用输入字符串输出向量数组。text-embedding-3-small是 OpenAI 当前性价比最高的嵌入模型每 100 万 Token 约 $0.02比 GPT-4o 便宜几十倍。余弦相似度衡量向量距离有了向量之后如何判断两段文本是否相关最常用的是余弦相似度Cosine Similarity计算两个向量夹角的余弦值范围是 [-1, 1]越接近 1 表示越相似。// embedding.ts 节选function cosineSimilarity(a: number[], b: number[]): number { // 点积除以两个向量的模的乘积 const dot a.reduce((sum, ai, i) sum ai * b[i], 0) const normA Math.sqrt(a.reduce((sum, ai) sum ai * ai, 0)) const normB Math.sqrt(b.reduce((sum, bi) sum bi * bi, 0)) return dot / (normA * normB)}实际中文本相似度通常在 [0, 1] 之间。经验上• 0.9 以上几乎相同的意思• 0.7~0.9明显相关• 0.5~0.7有一定关联• 0.5 以下基本不相关运行pnpm embed你会看到不同句子对之间的相似度计算结果包括一个很有意思的测试中文猫喜欢睡觉和英文Cats love to sleep的相似度高达 0.93——embedding 模型天然支持跨语言语义对齐不需要翻译。向量数据库Embedding 的存储和检索引擎单条文本的 embedding 已经很有用了但真正的价值在于把大量文档全部 embed 后存起来然后用向量相似度做快速检索。这就是向量数据库的核心功能。存储结构向量数据库里每条记录通常包含三部分interface VectorRecord { id: string text: string // 原始文本 source: string // 来源元数据方便展示出处 embedding: number[] // 对应的向量}元数据metadata不只是source真实项目中可能还有文档分类、创建时间、权限标签……这些字段可以在检索时做过滤比如只在技术文档里搜。检索逻辑用户提问时检索过程只有两步把问题转成向量和存入时用同一个 embedding 模型计算问题向量与所有存储向量的相似度返回 Top-KTop-K就是相似度最高的前 K 条结果K 是你自己指定的数字。类比搜索引擎你搜东西它不会把所有网页都返回而是只给你最相关的前 10 条这里的前 10 条就是 Top-10K10。向量检索的道理完全一样把所有文档向量和查询向量算一遍相似度按分数从高到低排列取前 K 条返回。K 通常设 3~5。这些检索结果最终要拼进 LLM 的 Context够用就好太多反而稀释上下文质量。代码里search(queryEmbedding, 3)这个3就是 K。// vector-search.ts 节选search(queryEmbedding: number[], topK: number 3): SearchResult[] { const scored this.records.map(record ({ record, score: cosineSimilarity(queryEmbedding, record.embedding), })) // 按相似度降序取前 K 条 return scored.sort((a, b) b.score - a.score).slice(0, topK)}这段代码实现的是暴力全扫描对每条记录都算一次相似度。数据量小的时候完全够用但如果有几百万条记录就需要用到向量数据库的核心能力ANNApproximate Nearest Neighbor近似最近邻索引。ANN 牺牲一点精度换取大幅提升的检索速度百万级数据下毫秒级返回。Qdrant、Pinecone、Weaviate 等产品的核心价值正在这里。代码实战从文档到问答vector-search.ts展示了一个完整的小型 RAG 流程第一步构建索引把 8 篇产品文档全部 embed存入内存向量数据库// vector-search.ts 节选async function buildIndex(db: InMemoryVectorDB): Promisevoid { for (const doc of KNOWLEDGE_DOCS) { const embedding await embed(doc.text) db.insert({ ...doc, embedding }) } console.log(索引构建完成共 ${db.size()} 条记录)}第二步检索 问答用户提问时先检索最相关的 3 条文档再把文档内容拼进 prompt 给 LLM// vector-search.ts 节选async function ragQuery(db: InMemoryVectorDB, question: string): Promisevoid { // 把问题转成向量检索 Top-3 文档 const queryEmbedding await embed(question) const results db.search(queryEmbedding, 3) // 把检索结果拼成上下文 const context results.map(({ record }) [${record.source}]\n${record.text} ).join(\n\n) // 带上下文调用 LLM const response await client.chat.completions.create({ model: MODEL, messages: [ { role: system, content: 你是 SmartBot 的智能助手。请根据以下知识库内容回答问题。\n\n知识库内容\n${context}, }, { role: user, content: question }, ], })}运行pnpm search终端会打出每个问题的检索过程带相似度分数和最终回答用户问题: SmartBot 是怎么保证回答准确的检索结果按相似度排序: [0.8923] [技术文档] SmartBot 使用 RAG检索增强生成架构。用户提问时... [0.7512] [产品介绍] SmartBot 是一款基于大语言模型的智能客服系统... [0.6834] [常见问题] 如果 SmartBot 回答不准确可能是知识库内容过时...助手: SmartBot 通过 RAG 架构保证回答准确性用户提问时系统先从向量数据库中检索相关知识文档再将检索结果和问题一起传给 LLM...主流向量数据库选型做产品用的话内存数组当然不够需要专门的向量数据库。几个常见选项数据库定位特点Qdrant开源可自托管Rust 编写性能好支持私有化部署国内团队常用Pinecone云服务全托管接入简单适合快速验证Weaviate开源可自托管内置多模态支持GraphQL 查询接口pgvectorPostgreSQL 扩展已有 PG 的团队可以直接加不用引入新组件Chroma开源轻量适合本地开发和原型选型建议• 快速验证原型Chroma 本地运行零配置• 生产部署需要数据主权Qdrant 自托管• 已有 PostgreSQL 且数据量不大pgvector• 不想管基础设施Pinecone 托管服务不同向量数据库的 API 写法有差异但核心操作都是三个upsert写入、search检索、delete删除。切换数据库只是换 SDK核心逻辑不变。踩坑与最佳实践1. Embedding 模型要前后一致构建索引用什么 embedding 模型检索时就必须用同一个模型。这是很基础的规则但实际出过很多问题比如最开始用text-embedding-ada-002后来想切换到text-embedding-3-small结果忘记重新 embed 历史数据查出来的结果全是乱的。工程实践把 embedding 模型名称作为索引的元数据存起来每次检索前校验一致性。2. 文本分块的粒度很关键一篇 5000 字的文档直接 embed 成一个向量精度会很差因为向量需要压缩太多信息语义会稀释。更好的做法是把文档切成合理大小的块Chunk每块单独 embed。粒度经验• 太小 100 字单个 chunk 缺乏上下文检索出来模型看不懂• 太大 800 字语义稀释相似度计算不准• 推荐200~500 字左右或者按段落/小节切割分块策略Chunking是 RAG 里的重要议题会在下一篇 RAG 实战里详细展开。3. 相似度分数需要设门槛search()返回的始终是最相似的 K 条但不代表真的相关。如果用户问的问题知识库里根本没有search()还是会返回分数最高的几条——只不过分数很低。工程实践加一个最低分数门槛threshold低于门槛就不喂给 LLM而是直接回答这个问题我没有相关资料const results db.search(queryEmbedding, 3).filter(r r.score 0.6)if (results.length 0) { return 这个问题我暂时没有相关资料建议咨询人工客服。}门槛值需要根据实际场景调试通常在 0.5~0.7 之间。4. 向量检索不等于精确匹配向量检索是语义匹配不是关键词匹配。这有好处同义词能找到也有陷阱• 用户问张三的手机号如果知识库里的文档没有提到张三向量检索会返回最语义相关的文档比如某个员工通讯录的片段但不包含张三的信息。模型可能会基于这个不相关的上下文编造一个答案。• 精确数字、代码、型号等内容向量检索不可靠。这类场景需要配合传统关键词搜索BM25 等也就是混合检索Hybrid Search这个会在 RAG 进阶章节介绍。5. 索引构建不要用无脑并发批量 embed 大量文档时一次性并发几千个请求会触发 API 限流。推荐用批次处理// 每次处理 20 条避免超过 API 速率限制const BATCH_SIZE 20for (let i 0; i docs.length; i BATCH_SIZE) { const batch docs.slice(i, i BATCH_SIZE) await Promise.all(batch.map(async doc { doc.embedding await embed(doc.text) db.insert(doc) }))}小结•Embedding把文本转成向量语义相近的文本向量距离也近余弦相似度是衡量语义相关性的标准方式•向量数据库存储文本和对应向量检索时把查询转成向量找出最相似的 Top-K 条文档生产环境用 ANN 索引解决大规模检索的性能问题•工程重点embedding 模型保持一致、文本分块粒度适中、检索结果加相似度门槛过滤噪声有了 Embedding 和向量检索AI 就有了外部记忆。下一篇直接上手 RAG 全流程如何把文档导入、如何做检索、如何让模型给出可靠的答案以及常见的失效模式和修复方法。假如你从2026年开始学大模型按这个步骤走准能稳步进阶。接下来告诉你一条最快的邪修路线3个月即可成为模型大师薪资直接起飞。阶段1:大模型基础阶段2:RAG应用开发工程阶段3:大模型Agent应用架构阶段4:大模型微调与私有化部署配套文档资源全套AI 大模型 学习资料朋友们如果需要可以微信扫描下方二维码免费领取【保证100%免费】配套文档资源全套AI 大模型 学习资料朋友们如果需要可以微信扫描下方二维码免费领取【保证100%免费】

相关文章:

掌握 RAG 核心技术:揭秘 AI 如何精准调用私有知识库,避免“答非所问”的窘境!

本文深入探讨了 RAG(检索增强生成)技术的原理与实现,阐述了如何通过 Embedding 技术将私有文档转化为 AI 可检索的向量,并利用向量数据库进行高效相似度匹配。文章详细介绍了 Embedding 的作用、余弦相似度计算方法,以…...

SkillHub作为本地镜像站,在事实上分流了原站的用户流量和生态注意力,这是扶持生态还是釜底抽薪?

SkillHub这个本地镜像站的出现,确实是个挺有意思的现象。它表面上看起来是在帮原站做分发,让国内用户访问更快、更稳定,但仔细想想,背后牵扯的东西其实挺复杂的。 很多人第一反应会觉得,这肯定是在扶持生态啊。毕竟访…...

当马化腾亲自发文推动养虾计划,而创始人却在抱怨服务器成本被推高,这反映了开源世界与资本巨头之间怎样的权力不对等?

马化腾在社交媒体上提到养虾计划,这本身不是什么技术新闻,但背后牵扯出的讨论却很有意思。创始人抱怨服务器成本被推高,这种声音在开源圈子里其实一直都有,只是这次被摆到了台面上。 开源世界和资本巨头之间,从来就不是…...

御风未来“空中出租车”亮相东方枢纽,海外客商“零距离”感受中国低空经济发展

3月12日~15日,中国家电及消费电子博览会(Appliance&electronics World Expo,AWE)在上海举行。作为全球三大家电及消费电子展之一,本届AWE在上海新国际博览中心与上海东方枢纽国际商务合作区同步举办。作…...

为什么有些论文看起来普通,但是,一答辩就“安全通过”?

很多读研博的人都会遇到一个看似矛盾的现象。有些论文,看起来并不惊艳: 创新不算突出,结构也比较常规,甚至有些地方还略显普通。但到了答辩那天,结果却很顺利:基本没被难为,顺利通过。反而有些同…...

LSTM与BP算法结合的Matlab多输入单输出组合预测建模程序

LSTM结合BP做多输入单输出的组合预测建模。 程序内注释详细直接替换数据就可以使用。 程序语言为matlab。 程序直接运行可以出拟合预测图,线性拟合预测图,多个预测评价指标。PS:以下效果图为测试数据的效果图,主要目的是为了显示程序运行可以…...

CPT Markets平台内地合规性存疑,跨境金融衍生品交易风险大需警惕

CPT Markets平台内地合规性存疑,跨境金融衍生品交易风险大需警惕CPT Markets作为一家注册于塞舌尔的外汇交易平台,近年来通过线上渠道积极拓展中国市场,但其运营模式存在明显的合规性缺陷。该平台虽宣称受英国FCA、南非FSCA等多国监管&#x…...

智慧养殖鱼类疾病鱼类病害检测数据集VOC+YOLO格式457张7类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):457标注数量(xml文件个数):457标注数量(txt文件个数):457标注类别数&…...

《QGIS快速入门与应用基础》220:工具栏:布局元素添加/编辑

作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…...

2026高职大数据工程技术毕业生就业难度分析

一、行业需求现状企业数字化转型加速推动大数据人才需求增长,尤其在金融、电商、医疗等领域。互联网大厂更倾向招聘具备算法优化和分布式系统经验的毕业生,而中小企业偏好掌握ETL流程和可视化工具的实用型人才。据第三方机构预测,2025年国内大…...

AI巨额融资推动二月风投创新高

根据 Crunchbase 的数据,2026 年 2 月全球风险投资总额达到 1890 亿美元,创下初创公司单月融资的历史新高。然而,高达 83% 的融资额流向了仅三家公司,其中包括 OpenAI,它筹集了 1100 亿美元,这也是有风险投…...

计算机毕业设计springboot社交网络平台“多乐” 基于SpringBoot的在线互动社区平台“乐享圈“ 基于SpringBoot的个性化社交分享系统“友聚“

计算机毕业设计springboot社交网络平台“多乐”eb3c1775 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着移动互联网的蓬勃发展和智能终端的全面普及,社交网络已深…...

计算机毕业设计springboot基于与Vue的货运系统 基于SpringBoot与Vue的物流运输管理平台 基于SpringBoot与Vue的智慧货运服务系统

计算机毕业设计springboot基于与Vue的货运系统6tmt4n38 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。在全球化贸易持续深化与电子商务蓬勃发展的当下,货运物流行业…...

网格隐藏技术在ANSYS仿真分析中的应用研究

网格隐藏 ansys仿真分析在ANSYS仿真分析里折腾过复杂模型的朋友,肯定都有过被满屏网格线晃瞎眼的经历。鼠标滚轮放大缩小两下,零件结构没看清,倒是先被密密麻麻的网格线整得晕头转向。这时候要是会玩"网格隐身术",工作…...

Dify简介

Dify简介 目录 Dify 发展历史Dify 流行原因Dify 核心组件Dify 架构图Dify 工作机制Dify 应用场景 Dify 发展历史 起源背景 Dify 是一款开源的 LLM 应用开发平台,由 LangGenius 团队开发。该项目诞生于 2023 年,正值大语言模型(LLM&#x…...

这次终于选对了!10个降AI率网站测评:本科生降AI率必备指南

在当前高校论文写作中,AI工具的广泛应用带来了效率提升,但也让论文的AIGC率问题变得愈发突出。许多本科生在完成初稿后,常常面临查重率过高、AI痕迹明显的问题,这不仅影响成绩,还可能引发学术不端的质疑。因此&#xf…...

python基于微信小程序的高校图书馆座位管理系统的设计与实现

目录需求分析与功能设计技术选型与开发环境搭建核心功能模块实现测试与优化部署与维护项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作需求分析与功能设计 明确高校图书馆座位管理系统的核心需求&…...

python基于微信小程序的宝宝儿童成长记录系统的设计与实现

目录 需求分析与功能规划技术栈选择数据库设计核心功能实现步骤数据可视化与统计测试与部署注意事项 项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 需求分析与功能规划 明确系统核心功能&#xff1…...

python基于微信小程序的健身俱乐部信息管理系统的 功能多

目录系统架构设计核心功能模块扩展功能实现技术实现要点运维与安全项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作系统架构设计 采用前后端分离架构,前端基于微信小程序框架开发&#xff…...

python基于Android的学校教师工作量业绩考核计分系统 小程序

目录需求分析与功能设计技术栈选择数据库设计后端API开发前端小程序开发计分算法实现测试与部署安全与权限控制项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作需求分析与功能设计 明确教师工作量业绩…...

7个文件,把OpenClaw从聊天机器人变成你的全职AI员工!Wes Sander开源配置全拆解

最近刷GitHub,看到一个真正让人眼前一亮的仓库:Wes Sander直接把他个人用的OpenClaw完整配置全开源了。不是教程,不是卖课,就是他每天真正在跑的那套文件和模板。 我点进去一口气看完,瞬间明白为什么很多人用OpenClaw还…...

一次纠正,全队同步!我的OpenClaw AI Agent 3层记忆系统,彻底告别“失忆”烦恼

最近我在Mac Mini上跑着6个AI Agent,全天候24/7开工:一个负责研究、一个写内容、一个搞工程、还有newsletter、LinkedIn发帖,以及负责团队协调的。它们全靠cron定时唤醒,每次一睁眼,就像刚出厂的新机器,什么…...

航空航天需求:Vue3如何扩展百度WebUploader支持卫星遥感数据的分片校验上传?

大文件上传方案探索:从WebUploader到自定义分片上传的实践 作为一名前端开发工程师,最近遇到了一个颇具挑战性的需求:需要在Vue项目中实现4GB左右大文件的稳定上传,且要兼容Chrome、Firefox、Edge等主流浏览器,后端使…...

汽车制造经验:JS如何基于百度WebUploader插件实现设计图纸的加密分片断传?

(叼着冰棍敲键盘,显示器蓝光映着稀疏的头发) 各位爷瞧好了啊!咱这老码农被甲方爸爸按在地上摩擦了三个月,终于用原生JS搓出个能兼容IE9的文件夹上传怪兽。先说好哈,100块预算连我键盘缝里的烟灰都买不起&a…...

go gorm极简元数据处理

func Test003_GetDbMeta(t *testing.T) {var dbfacade FindBeanDbmetaFacade()ret : dbfacade.GetDbMeta("plat_menu")golog.Info("dbmeta:", ret) }2026-03-15 13:42:01.939 [INFO] dbmeta: {"code": 200,"msg": "成功",&…...

避坑 3:Docker 致命大坑!容器一删,业务数据全没了?3 套解决方案,直接抄,不翻车

文章目录避坑 3:Docker 致命大坑!容器一删,业务数据全没了?3 套解决方案,直接抄,不翻车方案一:根治方案!命名数据卷持久化(生产 / 测试环境通用,官方首选&…...

社会上有以假乱真的假钞,数学中有以假乱真的假R轴迷惑世人几百年

黄小宁R各元x有对应数2x。R轴即x轴沿本身保序不保距地拉伸变换为元为点2x的2x轴不全等于x轴从而更不x轴,然而自有函数和解析几何概念几百年来数学一直误以为x轴2x轴。将两异直线误为同一线自然就会将两异直线段误为同一线段从而使康脱推出错上加错的更重大错误&…...

WordPress网站营销数据跟踪

如今,在数字营销领域,数据分析已成为优化网站的关键。对于WordPress网站而言,跟踪和分析营销数据不仅有助于提升用户体验,还能提高流量和转化率。许多服务器提供商(如 Hostease)支持一键安装WordPress&…...

Ubuntu 22.04 局域网安装GitLab

下面直接给你一份 Ubuntu 22.04 在局域网安装 GitLab 的可执行教程。 场景固定为: 非 Docker 非源码 服务器 IP:192.168.1.42 安装方式:GitLab Linux package(Omnibus) 先按 HTTP 内网访问 部署,最快跑通;GitLab 官方也明确支持把 external_url 直接设成服务器 IP,只是…...

毕设程序java车险理赔管理系统 基于SpringBoot的车辆保险智能定损与理赔平台 汽车保险全流程数字化管理与在线理赔系统

毕设程序java车险理赔管理系统b8xa28me (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着汽车保有量的持续攀升和交通事故频发,车险理赔作为连接车主权益保障与保险…...