大模型与知识库:奇妙的相遇 / Foundation Models Meet Knowledge Bases
第 1 章:大模型与知识库:奇妙的相遇 / Foundation Models Meet Knowledge Bases
你有没有这样的经历:问一个 AI 助手"我们学校昨天的运动会几点开始",它要么一脸茫然,要么干脆编造一个看起来很像真的答案?可是当你说"给我写一首关于月亮的诗",它又能脱口而出、字字珠玑。为什么同一个 AI,有时聪明得像教授,有时却错得像一个不认真听课的学生?这一章,我们就从这个问题出发,去认识当今最强大的"会说话的大脑"——大语言模型(Large Language Model, LLM),以及它的一位得力搭档——外部知识库(Knowledge Base)。我们还会看到,当这两者相遇时,一种叫做 RAG(Retrieval-Augmented Generation,检索增强生成)的技术,是如何让 AI 变得更加可靠的。
1.1 大语言模型的本质:一台"文字接龙"机器 / The Essence of LLMs: A Word-Chain Machine
要理解为什么 AI 有时会"胡说八道",我们首先要弄清楚 AI 究竟是什么。
1.1.1 什么是大语言模型
大语言模型是一种用海量文字训练出来的概率预测系统(a probability prediction system trained on massive text corpora)。它的核心任务听起来简单得令人惊讶:根据已经出现的文字,预测下一个最有可能出现的字。中文里我们有时候把它形象地叫做"文字接龙"——AI 一直在做的事情,就是把句子往后"接"下去。
这个过程可以用一个数学公式来表达。假设我们已经看到了前 $t-1$ 个词 $w_1, w_2, \ldots, w_{t-1}$,模型要做的,就是计算出下一个词 $w_t$ 的概率分布:
$$P(w_t \mid w_1, w_2, \ldots, w_{t-1})$$
模型会扫描整个词表(vocabulary,可能有几十万甚至更多候选词),给每个候选打分,最后选出概率最高的那一个输出。这个"打分—挑选"的过程在每一步都会重复,每选出一个新词,下一步的输入就更新一次。如此反复,一段回答就像滚雪球一样被"接"了出来。
为了让这个抽象的过程变得直观,我们来做一个思想实验。假设你面前有一块巨大的白板,上面写满了从互联网上收集来的句子:小说、新闻、百科、课本、聊天记录、论文……加起来可能有几万亿个汉字。我们让一台计算机把这几万亿个字全部读完,并且记下所有的"模式"——比如"天"后面常常跟"上","今天"后面常常跟"天气"或"日期","因此"后面常常跟一个结论。当有人向它提问时,它会从第一个字开始,根据这些学习到的"模式",一个接一个地把回答"接"出来。
这就是大语言模型的本质:它不是真正"知道"事情,而是擅长"模仿"它见过的文字模式。它并不是一个会思考的大脑,而是一个极度精密的统计机器。
1.1.2 模型的"学习"过程:预训练与微调
模型之所以能掌握如此丰富的语言模式,是因为它经历了一个叫做预训练(pre-training)的过程。在这个过程中,研究者会把来自互联网、书籍、新闻、百科全书等渠道的文本整理成一个巨大的训练集,然后让模型去"预测下一个字"。一开始,模型的预测完全是在乱猜;经过数十亿次、甚至数万亿次参数调整之后,它慢慢学会了语法、学会了常识、学会了不同文体的写作风格。
以 GPT 系列模型为例,它的训练数据量达到了数千亿个 token(token 是文本切分后的最小单位,可能是一个汉字、一个英文单词或一个标点符号)。模型内部的参数数量(parameter count)也从早期的几亿、几十亿,增长到了如今的上千亿、上万亿——GPT-3 拥有约 1750 亿个参数,而更新的模型已经突破万亿规模。
预训练完成之后,模型通常还会经历一个叫做微调(fine-tuning)的阶段。研究人员会用人工编写的高质量问答数据来进一步训练模型,让它学会"如何回答问题"而不是仅仅"如何续写文字"。这一步通常会让模型表现得更加有用、礼貌和安全。
1.1.3 "涌现"现象:小模型做不到,大模型突然能做到
一个有趣的现象叫做涌现能力(emergent ability)。当模型规模较小时,它的表现平平;但当规模突破某个临界点之后,很多任务的能力会突然"涌现"出来——比如复杂推理、多步骤计算、翻译不同语言、写代码、做数学题等。就好像水加热到 99 度时还是液体,到了 100 度就突然变成气体一样,这种从量变到质变的过程,至今仍是 AI 研究中最迷人的现象之一。
不过,无论模型多么庞大,它的本质依然是"基于过去见过的东西,预测下一个最可能的词"。这一点,是理解模型为什么会"出错"的关键。
1.2 模型的三大先天局限:为什么它会"胡说八道" / Three Inherent Limitations
虽然现代大语言模型看起来神通广大,但它有三个先天局限,像三道隐形的墙,挡在"无所不知"与"现实可用"之间。
1.2.1 局限一:知识截止于训练日期(Knowledge Cutoff)
模型在学习阶段读取的所有文本,都有一个截止日期(cutoff date)。例如某个模型的训练数据截止到 2023 年 6 月,那么在 2023 年 7 月之后发生的事情,它就完全不知道了。
这就像一位被关在图书馆里、只能阅读截至某一年出版的书籍的学者。你可以问他 2010 年世界杯的冠军是谁,他能答得头头是道;但你问他"昨天的欧冠决赛谁赢了",他会一脸茫然。因为那些最新的信息,从未被写进他读过的书里。
更要紧的是,模型对截止日期之后的世界并非简单地"说不知道"。相反,由于它的本质是"接龙",它依然会自信地"接"出一个答案——一个它编造出来的答案。这就是它"胡说八道"的根源之一:它不知道自己不知道。
1.2.2 局限二:无法访问私有或实时信息(No Access to Private or Real-Time Data)
模型在训练时所看到的,是公开的、可以大规模抓取的文本。但现实中有大量信息是私有的:
- 一个公司内部的规章制度;
- 一所学校本学期的课程表;
- 一个家庭上周的家庭会议纪要;
- 一位医生某个病人的最新检查报告。
这些信息不仅没有被公开,甚至不可能被收录进任何公开的训练集。即使有人愿意把这些信息交给模型,重新训练一遍的成本也极其高昂——GPT-3 级别模型的训练一次可能耗费数百万美元和数月时间。因此,对私有信息一无所知,是模型与生俱来的第二个局限。
更麻烦的是,模型也常常无法访问实时变化的数据,比如:
- 当前的股票价格;
- 今天的天气预报;
- 此刻某地的交通状况;
- 刚刚发布的新闻。
这些信息每秒都在变化,不可能被"训练"进一个固定的模型里。
1.2.3 局限三:可能产生"幻觉"(Hallucination)
模型的第三个局限,也是最令人头疼的一个,叫做幻觉(hallucination)。所谓幻觉,是指模型生成了听起来流畅自信,但实际上与事实不符甚至完全捏造的内容。
幻觉的产生有多重原因。最根本的原因是:模型的优化目标是"让生成的文字在统计上合理",而不是"让生成的文字在事实上正确"。模型学到的是"这样说听起来像那么回事",但并不等同于"这样说在事实上是对的"。
举几个真实场景里常见的幻觉例子:
- **虚构引用**:模型可能会编造一篇论文的标题、作者、发表年份,看起来格式完美,但论文根本不存在。
- **张冠李戴**:模型可能把爱因斯坦的名言安到牛顿头上,或者把《三国演义》的情节说成《水浒传》的情节。
- **细节错乱**:当被问到"《哈利·波特》的第七部中赫敏的猫叫什么名字"时,模型可能给出一个非常有模有样的名字,但这个名字纯属杜撰。
- **数字幻觉**:模型在涉及具体数字、年份、日期、人名等"高密度信息"时尤其容易出错,因为它对这些细节并没有真正的"理解",只是模仿了常见的数字出现模式。
研究统计显示,即便是最先进的大模型,在某些类型的问答中,幻觉率也可能高达 15% 到 30%——也就是说,每回答三四次,就可能有一次包含事实错误。对于需要严谨事实的应用(如医疗、法律、教育),这是一个巨大的隐患。
1.2.4 三个局限的共同根源
如果我们要用一句话总结这三个局限的共同根源,那就是:模型把"训练时见到的知识"压缩成了内部参数里的"模式",这种压缩是有损的、静态的、且无法更新的。 模型并没有一个可以随时翻阅的笔记本,也没有一个可以联网搜索的浏览器。它只能在自己"脑子里"那些已经模糊不清的印象里做预测。
这就是为什么我们需要"外部知识库"——我们需要给 AI 一本可查阅、可更新、可控的外部资料。
1.3 外部知识库:为 AI 建造一座私人图书馆 / External Knowledge Bases: A Personal Library for AI
如果说大语言模型是一位记忆力惊人但偶尔会忘事的学者,那么知识库就是为他专门建造的一座私人图书馆。
1.3.1 知识库的定义
知识库(Knowledge Base)是一个有组织、可检索、可更新的信息集合。在 RAG 的语境下,它通常包含两类内容:
1. 文档集合:一组结构化或半结构化的文本资料,比如 PDF 报告、网页文章、产品说明书、内部 wiki、客服 FAQ 等。 2. 检索索引:一种数据结构(最常见的是向量索引,vector index),用来在用户提问时快速找到与问题最相关的几段文档。
为了更直观地理解,我们可以把知识库想象成一座图书馆。图书馆里有成千上万本书(文档),每本书都有书名、目录和索引(元数据)。当你走进图书馆想找一本关于"恐龙化石"的书时,你不会从第一本书开始一本一本地翻,你会先去查目录或者电子索引(检索),找到最相关的几本书,然后翻到对应章节。
RAG 中的知识库,正是把"图书馆"这套逻辑搬到了 AI 系统里。
1.3.2 知识库 vs. 模型记忆:一张对比表
为了更清晰地看出知识库与模型记忆的区别,我们用一个表格来对比:
| 维度 | 模型记忆(参数里的"模式") | 外部知识库 | |------|------------------------|----------| | 更新方式 | 必须重新训练 | 直接替换或增删文档 | | 信息来源 | 公开抓取的互联网文本 | 可以是任何文档 | | 私有性 | 不支持 | 完全可控 | | 实时性 | 截止到训练日期 | 可以是当下最新的 | | 准确性 | 可能产生幻觉 | 可以提供原文出处 | | 容量 | 受限于参数量 | 几乎无限 | | 可解释性 | 黑盒 | 容易追溯 |
从上表可以看出,外部知识库几乎在每一个维度上都弥补了模型记忆的不足。这并不意味着知识库能完全替代模型记忆——模型记忆带来的流畅语言能力,是知识库无法提供的——但两者结合,可以做到 1 + 1 > 2 的效果。
1.3.3 知识库的形式:结构化与非结构化
知识库中的信息可以有不同的形态:
- **非结构化文档**:最常见的形式,比如 Word、PDF、网页、Markdown 文件等。这些文档保留了丰富的语义,但机器难以直接处理。
- **半结构化文档**:如表格、列表、FAQ、JSON 数据。比非结构化文档更容易被解析和检索。
- **结构化数据库**:如关系型数据库(MySQL、PostgreSQL)、图数据库(Neo4j)、知识图谱(Knowledge Graph)等。这种形式最适合存储具有明确关系的事实性信息。
不同的应用场景会选用不同的知识库形式。比如:
- 公司客服系统:通常用 FAQ + PDF 手册;
- 学术检索系统:常用学术论文摘要 + 引用图谱;
- 法律咨询系统:常用法律条文数据库 + 判例库;
- 个人助理系统:常用日历、邮件、笔记混合存储。
1.3.4 知识库的两个关键特性:可检索与可更新
知识库之所以能成为模型的"好搭档",靠的是两个关键特性:
特性一:可检索(Retrievable)。知识库不能只是"把文档堆在一起",它必须支持高效检索。当用户问了一个问题,系统要能在毫秒级的时间内,从成千上万份文档中找出最相关的几段。这一步通常由向量检索(vector retrieval)技术来实现:把文档和问题都转化为高维空间中的向量(vector),通过计算它们之间的距离(比如余弦相似度,cosine similarity)来找到语义最接近的段落。
特性二:可更新(Updatable)。知识库必须方便地增删改查。当有新文档出现时,我们要把它们加入索引并生成对应的向量;当旧文档过时或错误时,我们要把它们从索引中删除。更新后的知识库可以立即被模型使用,无需重新训练。
这两个特性,决定了知识库可以作为一种"活的"信息源,永远反映最新的事实。
1.4 RAG 登场:先查阅,再回答 / RAG Enters the Stage: Look Up, Then Answer
当我们把"大语言模型"和"外部知识库"这两位主角放在一起时,一种新的工作方式就诞生了。这种方式叫做 RAG——检索增强生成(Retrieval-Augmented Generation)。
1.4.1 RAG 的核心思想
RAG 的核心思想可以用八个字概括:先检索,再生成(retrieve, then generate)。
它的流程是这样的:
1. 用户提出问题; 2. 系统从外部知识库中检索与问题相关的几段文档; 3. 把这些文档连同用户的问题一起,作为"参考材料"交给大语言模型; 4. 大语言模型根据这些参考材料,生成最终的回答。
换句话说,模型不再被要求"凭记忆回答",而是被允许"翻书回答"。这一改变看似简单,效果却是革命性的——它一举解决了我们在 1.2 节中讨论的三大局限:
- **知识截止问题**:只要更新知识库,模型就能知道最新的信息。
- **私有信息问题**:把公司内部文档放进知识库,模型就能回答相关的私有问题。
- **幻觉问题**:因为模型有了可以引用的参考材料,幻觉率显著降低。
更重要的是,模型在生成回答时,可以明确地标注信息来源(比如"根据 XX 文档"),用户可以追溯答案的依据。这是单纯依靠模型记忆所无法做到的。
1.4.2 RAG 的工作流程图
下面这张流程图清楚地展示了传统 LLM 回答流程与 LLM + 知识库(即 RAG)回答流程的对比:
```mermaid flowchart LR subgraph Traditional["传统 LLM 流程"] Q1[用户问题] --> LLM1[大语言模型] LLM1 --> A1[直接生成回答] end
subgraph RAGFlow["RAG 流程"] Q2[用户问题] --> Encoder[问题编码器] Encoder --> Search[向量检索] KB[(外部知识库)] --> Search Search --> Docs[相关文档片段] Docs --> LLM2[大语言模型] Q2 --> LLM2 LLM2 --> A2[基于证据的回答] end ```
从图中可以看出,传统的 LLM 流程是"问题 → 模型 → 回答"一条直线;而 RAG 流程则在中间增加了一个"知识库检索"的环节,让模型在回答之前能够先"查阅资料"。
1.4.3 RAG 的工作细节:三步拆解
为了把 RAG 的工作原理讲得更清楚,我们把它拆成三个步骤来详细说明。
步骤一:索引构建(Indexing)
在系统上线之前,我们需要先把知识库准备好。这个过程叫做索引构建:
1. 把原始文档加载进来(可能来自文件、网页、数据库); 2. 把长文档切成适当大小的片段(chunk),比如每段 500 字左右; 3. 用一个嵌入模型(embedding model)把每个片段转化成向量(一串数字,代表这个片段在语义空间中的位置); 4. 把这些向量和对应的原文片段存储进向量数据库(vector database),比如 FAISS、Milvus、Pinecone 等。
这一步相当于给图书馆的所有书做好"语义指纹",方便日后快速比对。
步骤二:检索(Retrieval)
当用户提出问题时:
1. 用同样的嵌入模型,把问题也转化成向量; 2. 在向量数据库中搜索与问题向量最相似的 top-K 个文档片段(K 通常是 3~10); 3. 把这些片段连同它们对应的原文一起取出,作为"候选证据"。
这一步相当于图书馆员根据你的提问,从浩如烟海的书中挑出最相关的几本。
步骤三:生成(Generation)
最后一步是让大语言模型结合"问题 + 候选证据"生成最终回答:
1. 把候选证据按照一定格式(通常是"参考以下资料:\n 资料1:...\n 资料2:...")拼接到问题的前面或后面; 2. 把这个组合后的输入交给大语言模型; 3. 模型在生成回答时,会参考这些资料,输出一个基于证据的、有据可查的回答。
这一步相当于学者根据图书馆员找到的几本书,结合自己的写作能力,写出一篇有理有据的文章。
1.4.4 RAG 的公式化表达
我们可以把 RAG 的过程用一个简化公式来表达:
$$\text{Answer} = \text{LLM}(Q \oplus \text{Retrieve}(Q, \mathcal{KB}))$$
其中:
- $Q$ 表示用户问题(query);
- $\mathcal{KB}$ 表示外部知识库(knowledge base);
- $\text{Retrieve}(Q, \mathcal{KB})$ 表示从知识库中检索出的相关证据;
- $\oplus$ 表示"拼接"(concatenation),把问题和证据组合成模型的输入;
- $\text{LLM}(\cdot)$ 表示大语言模型的生成过程;
- $\text{Answer}$ 是最终生成的回答。
这个公式虽然简单,却清晰地把 RAG 的两个核心组件——检索器(retriever)和生成器(generator)——绑定在了一起。
1.4.5 RAG 的优势总结
为什么 RAG 如此受欢迎?我们用一张清单来总结它的核心优势:
- **✅ 准确性更高**