AI是怎么知道1+1 = 2的?是靠搜索数据库还是预测?
ChatGPT 是一个大型语言模型(LLM) ,训练方式如下:
输入海量语料:包含书籍、网页、维基百科、GitHub代码、新闻、问答网站(如 StackOverflow)……
训练目标:给定一句话的前缀,让模型预测下一个词
比如输入:
“1+1 等于”
训练时,模型看到海量场景里“1+1 等于 2”出现最多,它就学会了输出“2”。
所以它知道“1+1=2”是记住的统计数量,不是查数据库
从统计规律中“预测”出下一个最有可能的词或答案。
接下来的问题是,他怎么预测出来的?谁给他的知识体系去预测呢?
还有如果有些问题是公司内部的内容,他怎么预测呢?
先给答案:
当用户给LLM大模型(GPT)输入问题的时候,会之间根据之前预训练的知识加上你的提示词(propmt)数据结果,整个过程是预测的过程,不是查数据库,比如1+1等于多少这个问题,他不是去查1+1等于几,而是去搜这个词条下,最常出现的下一个词是什么?结果是2,这就是他的结果。
核心原理永远是:预测下一个最可能输出的 token。
但是当你问他一些你们公司内部的问题的时候,他就会不太自信,比如你开始深度思考看见他回答的过程中包含“我不确定”、“可能是”,这样的词条的时候,或者概率置信度很低(如 OpenAI API 的 logprobs 评分很弱),甚至直接输出“我无法回答”的情况,就会触发RAG向量检索
RAG经典使用场景
问题类型 | 是否需要 RAG | 原因 |
---|---|---|
通用常识 | 不需要 | 模型知道 |
技术概念解释 | 不需要 | 模型知道 |
某公司内部政策 | 需要 | 模型没学过 |
某企业产品使用手册内容 | 需要 | 模型没看过 |
某个冷门 PDF 文件内容 | 需要 | 模型完全不懂 |
一般情况都不会去启用RAG(向量数据库),因为毕竟使用了数据库,肯定会拖慢一些速度点,只有在关键时候才会启用
回顾一下正常情况不启用RAG(向量数据库)的时候:
用户提问 → 直接送入 LLM → 模型回答(基于预训练知识 + prompt)
如果回答不了或者不确定就会启用向量数据库:
用户提问
↓
将问题 embedding 成向量 使用 OpenAI embedding 模型等)
↓
向量数据库中查找“最相似的语义文档段落”
↓
将「问题 + 找到的文档」拼成 prompt
↓
送入 GPT-4 等模型生成回答
但是如果没有向量数据库,它怎么回答你不知道的问题的时候会怎么样呢?
它可能无法回答,或者胡乱编(hallucination):
模型只能基于自己“训练时见过的数据”来预测回答
如果它没见过,你又不给它“外部资料”,它就容易瞎说(hallucination)
所以 RAG 的本质就是:给它补充“它不知道的资料”
所以为了让他知道你公司内部的一些知识体系,就需要启用向量数据库
我理解的整个流程就是把你公司的一些文档或者整个项目给到embedding模型,这种模型会把你整个文档给向量化,变成一个一个向量,然后把所有向量存入向量数据库,当LLM大模型(类似chatGPT)遇到了不太确定的问题的时候,就会启用RAG,把你的问题切割成一个一个向量,通过向量去查找最相关的文档,然后把问题和文档变成Prompt(提示词)给LLM生成回答,这样就是RAG的完整过程。
总体来说向量数据库就是查“语义最相近的文档”,生成提示词给LLM模型,然后LLM预测出结果。
结构图:
RAG到底是什么?他里面的向量索引有什么作用呢?
RAG是LLM模型回答问题的一种方式,当LLM回答一些他不知道的问题的时候会通过RAG去通过喂给他的知识库来搜索回答问题,有点像查数据库,但不准确,因为他是通过向量去搜索的,后续会解释为什么?先来弄清楚向量索引和向量数据库是什么?
一句话理解向量索引
向量索引 = 用来快速查找语义上相似内容的工具,支持在百万级数据中“秒级”找出最相关的几条记录。
简单来说就是把文本变成一个向量(坐标),可以加上索引之后可以快速的找到跟这个向量相关的向量
背后逻辑:文本变向量、查相似向量
1、文本 → 向量:
首先我们用 embedding 模型(如 OpenAI 的 text-embedding-ada-002、BGE)把一段文本变成一个向量(比如维度是 1536 的 float 数组)。**后续会解释什么是embedding模型**向量的特点是:语义相似的文本会变成空间中靠得近的向量。
2、存储向量 → 构建向量索引:
把这些向量存进一个向量数据库(如 FAISS、Milvus、Weaviate、Qdrant)。用向量索引(如 HNSW、IVF、Annoy 等)加速搜索:不然每次都全量比对,太慢。
3、用户提问 → 提问向量 → 相似文档向量 → 检索:
用户提问后也会被转成向量,然后用这个向量去查找数据库中“最相似”的几个向量,找到相关文档后,喂给 LLM 去生成有知识的回答。
举个例子
比如有一段文档:
“小明于2023年在北京签署了房屋租赁合同,有效期两年。”
这段话会被转成向量 [0.21, 0.03, ..., -0.17]。
用户提问:
“小明在哪年签的租房合同?”
也会变成向量 [0.19, 0.04, ..., -0.18]。
然后用向量索引从数据库中找到“最接近”的几个段落,供 LLM 回答问题。
总结一句话就是:向量索引就像是“语义搜索引擎”的大脑,让机器不再只看关键词,而是理解你说了什么、想找什么,然后快速找出最相关的内容。
什么是embedding模型?
刚刚上面提到了embedding模型,这个模型主要就是用来把用户提的问题转化成向量。
举个例子
输入句子:
“我想去北京旅游。”
Embedding 模型会输出一个维度很高的向量(比如 1536 维):
[0.12, -0.34, 0.89, ..., -0.07]
这个向量表示了这句话的语义信息。同样语义的句子,会变成“接近”的向量。
那你可能会有疑问:为什么可以把一段话变成向量?这个向量是怎么得来的?
本质解释:向量是“语义位置”的一种数学表示
每段话都可以表达一种语义含义。
我们希望用数学的方式捕捉语义:让“意思相近”的句子,在高维空间中的向量“靠得近”,意思不同的向量“离得远”。
怎么做到的?靠的是「预训练语言模型」!
以 GPT 为例,它们是这样训练的: 用海量语料(如 Wikipedia、GitHub、论坛、新闻等)训练模型,让它学会在不同上下文中预测词或生成句子。
举个例子:
训练目标:遮掉一句话中的词,让模型猜出来。
原句:
今天我去超市买了一个🍎。
遮挡后:
今天我去[MASK]买了一个🍎。
模型学会了:「‘超市’」出现在这个上下文里更合理。
这种预测任务重复训练几十亿句,模型逐渐学会:哪些词语出现在一起?哪些句子表达的意思相近?
最终效果: 把“每个词、每个句子”表示成一个高维向量(比如 768、1024、1536维)。
类比理解: 你可以把“句子”想成“城市”,“embedding”就是给每个城市定位坐标。
比如:
“我爱北京” → 坐标 [100, 50]
“我喜欢北京” → [101, 51]
“Python 是一种语言” → [10, 90]
这样你就能用坐标之间的距离,来判断句子的语义相似度了。
常见的 Embedding 模型有哪些?
模型名称 | 提供方 | 特点 |
---|---|---|
text-embedding-ada-002 | OpenAI | 高精度、易用、广泛支持 |
bge-large-en/v2 、bge-base-zh | BAAI 北京智源 | 中文效果优秀,开源 |
E5-small/base/large | MTEB benchmark | 多语言、兼容性好 |
Instructor , MiniLM , MPNet | HuggingFace | 开源、轻量模型丰富 |
常见的向量数据库和索引技术
技术 / 库 | 简介 |
---|---|
FAISS | Facebook 开源,支持 IVF、HNSW 索引,适合本地嵌入式向量搜索 |
Milvus | Zilliz 推出的云原生向量数据库,支持大规模生产部署 |
Qdrant | Rust 写的高性能向量库,支持嵌入过滤等 |
Weaviate | 支持混合搜索(关键词+向量)和 GraphQL 接口 |
HNSW(索引结构) | 小世界图结构,支持高效近似最近邻搜索(ANN) |