黑马程序员RAG实战教程:RAG及向量简介
2026/6/17 14:14:51 网站建设 项目流程

黑马程序员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能够实现"语义级别"检索的核心原理。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询