黑马程序员RAG实战教程:RAG及向量简介

📅 2026/6/17 14:15:01
黑马程序员RAG实战教程:RAG及向量简介
黑马程序员RAG实战教程RAG及向量简介传统的LLM存在一些问题大语言模型LLM很强大但它并不是万能的。在实际应用中我们经常会遇到以下几个棘手的问题知识不是实时的。模型一旦训练完成它的知识就被冻结了。它不知道昨天发生了什么新闻不知道你公司上周刚发布的产品也不知道最新的政策变化。它能回答的只有训练数据截止日期之前的那些内容。领域知识是缺乏的。通用模型在大多数领域都能聊上几句但在医疗、法律、金融这些专业领域或者你们公司内部的业务文档面前它的知识储备就显得捉襟见肘了。它不可能覆盖所有特定领域或高度专业化的内部知识。会产生幻觉。这是LLM最让人头疼的问题之一。当模型不知道答案时它不会老老实实说我不知道而是会一本正经地编造一个看起来很合理但完全是错误的答案。这种幻觉在严肃的业务场景中是非常危险的。RAG简介RAG全称是 Retrieval Augmented Generation翻译过来就是检索增强生成。用一句话概括RAG 检索技术 LLM提示。模型本身不知道未来的知识也无法回答它没学过的东西。但如果我们能在提问之前先帮模型去查资料把查到的相关知识和用户的问题一起交给模型那模型就知道该怎么回答了。RAG最核心的应用场景就是解决LLM在专有领域知识不足的问题。你不需要花巨大的成本去重新训练一个模型只需要把你的领域知识准备好通过RAG喂给模型就行了。从另一个角度看RAG也可以理解为一种高级的提示词优化技巧。它相当于在用户的提示词到达LLM之前加了一层代理自动为提示词补充与问题相关的背景知识从而让模型生成更准确、更有依据的回答。RAG的核心工作可以分为两条线理解RAG的工作机制关键要抓住两条线离线准备线知识库预处理。这条线发生在用户提问之前。你需要把各种知识源文档、网页、数据库等进行处理转换成向量格式然后存入向量数据库。这个过程只需要做一次后续可以持续更新。在线服务线用户提问。这条线发生在用户提问的那一刻。系统把用户的问题也转换成向量然后在向量库中进行相似度匹配找到最相关的知识片段最后把这些知识片段和用户的问题一起交给LLM来生成回答。两条线各司其职一个负责备货一个负责出货。RAG的核心价值RAG之所以被广泛采用是因为它切实解决了LLM落地应用中的几个关键痛点解决知识时效性问题。不需要重新训练模型只需要更新知识库就能让模型掌握最新的信息。新出了一个产品把文档扔进知识库就行。降低模型幻觉。当模型有了可靠的参考资料它就不再需要凭空编造了。生成的回答有了事实依据幻觉问题自然得到缓解。无需重新训练模型。训练一个大模型的成本是巨大的而RAG只需要维护一个知识库成本低、见效快、迭代方便。RAG流程中向量库是一个重要的节点在整个RAG的流程中向量数据库扮演着核心角色。它是连接离线准备和在线服务两条线的桥梁。那么向量和向量库是什么呢简单来说整个流程是这样的离线流程知识和信息 -- 向量化 -- 存入向量库在线流程用户的提问 -- 向量化 -- 在向量库中匹配 -- 返回最相关的内容向量库就像是一个语义搜索引擎。传统的搜索引擎靠关键词匹配而向量库靠的是语义相似度。你说怎么退款它能找到包含退货流程、申请退款这些语义相近的内容即使关键词完全不同。向量的基础概念聊到向量库就不得不先理解什么是向量。向量是文本的数字身份证。它把一段文字的语义信息转换成一串固定长度的数字列表让计算机能看懂文字的含义并做相似度计算。人类看到猫是一种可爱的动物和小猫咪很萌能立刻理解这两句话意思很接近。但计算机只认识数字它需要先把文字变成数字才能进行比较。向量做的就是这件事。简单来说向量就是让计算机更方便地理解不同的文本内容是否表述的是一个意思。向量嵌入的过程我们一般选用合适的文本嵌入模型来实现比如 OpenAI 的 text-embedding 模型等。这些模型专门负责把文本翻译成向量。在向量匹配的过程中如何识别两段文本是否表述相似的含义主要可以通过余弦相似度等算法来完成。如何更为精准地完成语义匹配生成向量的维度是一个很重要的指标。生成向量的维度越多就能更好地记录文本的语义特征做语义匹配就会更精准。打个比方用10个数字来描述一段文字和用1536个数字来描述显然后者能捕捉到更丰富的语义细节。但更多的维度也会在计算、存储和匹配过程中带来更多压力。维度越高计算量越大存储成本也越高。选择合适的向量维度需要在精确度和性能之间做平衡。一般而言1536维算是比较好的选择——既能保证足够的语义精度又不会给系统带来过大的负担。那么刚才提到的余弦相似度是什么呢既然向量是用来比较文本相似度的那具体怎么比较呢这就需要引入余弦相似度这个概念。一个向量的数字序列共同决定了它在高维空间中的方向和长度。而余弦相似度做的事情是撇除长度的影响只看方向的夹角。夹角越小两个向量越相似。换句话说余弦相似度匹配的就是同向——两个向量指向的方向是否一致长度是多少无所谓。它的计算公式是余弦相似度 两个向量的点积 ÷ 两个向量模长的乘积计算结果的范围是 -1 到 1越接近 1说明两个向量方向几乎一致文本语义越相似越接近 0说明两个向量正交文本语义没什么关系越接近 -1说明两个向量方向相反文本语义完全相反举个例子苹果手机的价格和iPhone多少钱这两句话虽然用词完全不同但经过向量化之后它们的余弦相似度会非常接近 1因为它们表达的是同一个意思。这就是RAG能够实现语义级别检索的核心原理。