从零开始的赛博老婆!6 - RAG 基础(上)
终于终于,我们要聊一聊一点比较有意思的内容了。这一次,我们将会简单地介绍 RAG 及相关技术和概念。并分享一下我对 RAG 技术与“机器记忆”之间关系的理解。根据我们讨论的内容,我们将会简单地实践一下由 AI 控制的标签 RAG,用于永久记忆的简单辅助检索。 前言 在本系列文章中,LLM 是我们经常提到的概念,它在最近发展地很迅猛,比如最近的 deepseek R1 系列,凭借较低的推理成本和较好的质量且开源,在 LLM 的历史上留下了不凡的一笔。反观某 CloseAI,高下立判,OpenAI 啊,你可长点心吧……但是,话又说回来,即便现代 LLM 如此强大,其仍然有一个我认为比较致命的缺点:模型是固定的,很难实时更新数据和参数。这意味着模型本身是静态的。我们当然可以通过诸如 “Finetune”, “LORA”, “RLHF” 等方法来改变 LLM 的输出倾向,但这仍然不是从根本上更新知识的方法。除非……几乎完整地预训练(效果最好),或者“持续学习”,“部分预训练”(效果一般)等技术。更别提复杂的数据清洗和分选、提炼的步骤。可以说,就目前而言,想要快速迭代一款相对可用的大型 LLM ,无论是对于个人还是一般企业,这都是一件不太现实的事情。归根到底,这是 LLM 这类模型本质上设计之初就不是为了实时迭代信息考虑的。当然我猜测可能是因为引入时间序列会导致预测函数变成一坨极为复杂的非线性函数罢。~~(绝对不是我偷听 Richard S. Sutton 老爷子的观点)~~总之,就目前而言,低成本的在线学习 LLM 技术可能还不是很成熟,如果我们想要相对简单地让 LLM 拥有实时知识,就我粗浅的认识里大概就是:Prompt 里引入一个分区,通过外挂数据库或者实时获取信息并插入 Prompt 的某个分区来实现相对准确的知识更新罢。 这个想法听起来很简单粗暴,但实际工程上实施起来还有很多挑战。比如如何从性能、成本、实时性三者中取得平衡达到一个相对最优的方案?如何根据不同的场景动态调整检索/写入策略?对于记忆特化方面,我们还能做出什么优化?等等问题。而我们今天就将浅谈这些问题。 一些概念 词嵌入 在自然语言处理中,词嵌入是对一个词的表示。该嵌入用于文本分析。通常,这种表示是一个实值向量,它以某种方式编码词的含义,使得在向量空间中更接近的词在意义上也被期望是相似的。词嵌入可以通过语言建模和特征学习技术获得,其中词汇表中的词或短语被映射到向量的实数。 很难理解对不对?因为上面的摘录自维基百科😅,我用通俗的语言解释一下: 词嵌入是让计算机“理解”词语含义的技术。它的核心思想是将每个词转换为一个高高高高维度的数字向量(比如 [0.3, -1.2, 4.5]),这个向量可以看作词语在“语义空间”中的坐标。例如,“苹果”和“橘子”的向量距离较近(因为它们都是水果),而“苹果”和“汽车”的向量距离较远。这种表示方式让计算机能通过向量计算捕捉词语之间的语义关系。 词嵌入有什么用呢 传统 AI 处理文本时,只能看到孤立的字符或词频(例如:数数这篇文章里有几个“记忆”一词?),但无法理解词与词之间的关联。词嵌入通过以下两点解决了这一问题: 语义相似性:将语义相近的词映射到向量空间中相邻的位置。例如“医院”和“诊所”的向量接近。 语义关系建模:支持类比推理,比如“国王 - 男 + 女 ≈ 王后”。这种能力对复杂任务(如记忆系统)至关重要。 “原神 - 福利 + 剧情不能跳过 + 出货下毒 ≈ 依托答辩” **语义关系分类:**我们可以根据几个个词语(在高维空间中就是几个坐标点)进行以此词组进行分类或者筛选,比如二维向量里,两个坐标连成一条线,线上面的部分和下面的部分里的坐标点就可以分成两类,这是基于我们选定的词语的概念进行分类的。这在提高检索速度和精确度/语义理解方面很有帮助。(严格地说不是这种分类方法,但为了便于理解) 在RAG里的行为 问题向量化:当用户提问“如何缓解感冒症状?”时, RAG 会先将问题转换为简单的问题词组,进而将词组转为嵌入向量。 语义检索:在文档库中搜索与问题向量最接近的文本片段(例如“感冒的家庭护理建议:多休息、补充水分……”),而非依赖简单的关键词匹配。 增强生成:生成模型(如GPT)基于检索到的内容输出回答,确保信息准确且相关。 一些其他的补充…… 最开始的嵌入模型如Word2Vec、GloVe是静态的(每个词只有一个向量),而现代模型能生成上下文相关的动态向量(例如“苹果”在“吃苹果”和“苹果手机”中的向量就不同);现在RAG系统通常直接使用句子或段落嵌入(比如OpenAI的text-embedding-3-small),但底层原理与词嵌入一脉相承。 嵌入实际上是一种量化与编码技术,不仅仅局限于文字,我们当然也可以提取图片,视频,音频的特征并进行嵌入,这就是混合 RAG 相关的内容了。还有,我们可以把不同信息之间的关系也嵌入,就想套娃一样,层层关系层层精炼,这又是 Graph RAG 相关的内容了。总之,玩法很多,但有一点,机器处理信息是有极限的,无论任何系统,在没有自纠错措施的前提下,其错误率只能无限接近于人类提供的训练集的错误率,这个会影响记忆系统的设计理念。...