ai的基础概念

目前来说,很多人用ai都是拿它当“一个更有价值的搜索引擎”用,但是在这里还是有一个观点要说明。这里所有的知识都是基于deepseek 3.2。

AI的核心精华

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def ai_architecture_components():
"""
AI系统的三大核心组件
"""

return {
"1. Transformer架构(真正灵魂)": {
"作用": "注意力机制,让AI理解上下文关系",
"类比": "人类大脑的神经网络结构",
"包含": "Embedding层、注意力头、前馈网络等",
"产出": "BERT、GPT、T5等所有现代LLM"
},

"2. Embedding向量化(核心能力)": {
"作用": "将文本映射到高维语义空间",
"位置": "Transformer架构的一部分",
"功能": "编码语义,计算相似度",
"应用": "RAG检索、语义搜索、聚类等"
},

"3. Chunk处理(RAG专用)": {
"作用": "知识库的存储和检索单元",
"位置": "RAG系统的一部分,不是所有AI都有",
"功能": "管理外部知识,增强LLM",
"关系": "依赖Embedding进行向量化"
},

"4. LLM(应用层)": {
"作用": "基于理解生成自然语言",
"位置": "建立在Transformer之上",
"功能": "对话、创作、推理、分析",
"关系": "可以使用RAG增强,但不是必须"
}
}

这里Transformer架构就是传说中的“神经网络架构”。

为什么要向量化?

这个问题可以说是ai的核心,也可以说这个是ai的灵魂。

它最早用于“人脸识别”,就是它通过录入你的面部特征,当你下一次验证的时候,它判断“几乎相似”就认为OK。跟指纹不同,人类的指纹是唯一的,所以要100%相同。

回到ai,用ai和人类对比。人类理解: “苹果”和”水果”是相关的。但是计算机理解: “苹果” = 两个汉字,”水果” = 两个汉字,计算机看不到语义关联。但是就需要有向量化:

1
2
"苹果" → [0.85, 0.23, -0.42, 0.91, ...] #实际是1536个这样的数字。
"水果" → [0.82, 0.25, -0.38, 0.89, ...]

这两个向量很接近,所以计算机知道它们相关。

话说,果然技术是一点一点进步的,“人脸识别”肯定是要在ai之前出现的。

AI是如何搜索的?

AI 其实用的最多的就是RAG功能,它能精确的搜索出来客户想要问的问题。

比如用户问了一个问题:”令狐冲是谁?”,AI会进行如下操作:

  1. 将问题转换为向量
  2. 在向量数据库中搜索相似chunk
  3. 返回top-3相关chunk:
    • chunk1: “微服务设计原则…”
    • chunk2: “服务拆分策略…”
    • chunk3: “分布式事务处理…”

chunk:”将大段文本、数据或任务分割成更小、可管理的单元”,因为LLM有上下文长度限制(如GPT-4的128K tokens),chunk也要做重叠,这是为了保持语义连贯性。但是这里面也有说法:

1
2
3
4
5
6
7
8
9
1. 小型chunk:256-512 tokens
- 优点:检索精准,处理快
- 缺点:可能丢失上下文,失去必要背景
2. 中型chunk:512-1024 tokens
- 平衡选择:兼顾精度和上下文
- 适合大多数RAG应用
3. 大型chunk:1024-2048 tokens
- 优点:保持完整上下文
- 缺点:检索可能不精准,成本高,比如你问"如何配置Redis集群的哨兵模式?",它洋洋洒洒说了一堆redis其他的东西,废话一堆。

所以要做好chunk的平衡,而且为了输出的语义达到用户习惯,还可以是先用搜索去确定关键文档片段,再用chunk去进一步搜索。

RAG的原理

rag 的原理,就是ai会把你要让它学的文档(比如公司内部的文档),通过“空格 回车”等等方式先进行分割,变成chunk。即“公司内部文档 → 分割(chunking) → 得到chunks”。

然后对这些chunk进行embedding,然后这些自然语言变成一个一个向量语言,存入向量数据库。

然后用户问的问题也会被ai转化成向量语言,最后ai通过“用户问的问题的向量”去找公司的内部贴近向量的所有文档,通过相似度搜索,找到相关chunks,取Top-K(如top 3或top 5)最相关的chunks,最后再通过llm来整合输出答案。

举个例子,比如我说“令狐冲”,那么ai会对”令狐冲 整个文本的语义对应一个向量”,比如:[0.02324, 0.032131, 0.02323124, 0.04567, 0.01234, …] (1536个数字),这个1536维向量代表了”令狐冲”这个名字的完整语义。然后大模型就会进一步推断:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 假设我们使用OpenAI的text-embedding-ada-002模型

texts = [
"令狐冲", # 武侠人物
"独孤九剑", # 武功招式
"华山派", # 门派
"苹果", # 水果
"令狐冲是《笑傲江湖》的主角" # 完整描述
]

# 每个文本都会得到一个1536维的向量
vectors = {
"令狐冲": [0.023, 0.032, 0.023, 0.045, 0.012, ...], # 1536个数字
"独孤九剑": [0.034, 0.025, 0.031, 0.052, 0.018, ...],
"华山派": [0.028, 0.029, 0.027, 0.048, 0.015, ...],
"苹果": [0.015, 0.042, 0.019, 0.038, 0.025, ...],
"令狐冲是《笑傲江湖》的主角": [0.026, 0.035, 0.025, 0.050, 0.014, ...]
}

# 关键观察:
# 1. "令狐冲"和"独孤九剑"的向量会比较接近(都是武侠相关)
# 2. "令狐冲"和"苹果"的向量会比较远(语义不相关)
# 3. "令狐冲"和"令狐冲是《笑傲江湖》的主角"的向量会很接近

为啥是1536维?因为语义信息非常丰富:人名、虚拟人物、主角、性别、职业、爱好、国籍、肤色、面部特征等等等等,就像人一样,人也不是简单用一个3维来概括的。

但是上面说了,”ai会对 令狐冲 整个文本的语义对应一个向量”,那么就是“XXX的令狐冲”这里会随着XXX的不同,产生不同的向量。比如:

1
2
3
武打中的"令狐冲" → [0.025, 0.030, 0.021, ...] (根据上下文变化) # "向量特点": "强调门派、武功名称、战绩如何"
爱情中的"令狐冲" → [0.022, 0.035, 0.024, ...] (可能不同) # "向量特点":任盈盈
影视改编中的"令狐冲" → [0.027, 0.028, 0.026, ...] (可能不同) # "向量特点": "强调影视、演员、改编"

虽然都是”令狐冲”,但上下文不同,语义重点不同,因此向量也会有细微差异。

最后结论:每一个场景下,令狐冲对应的 1536个数字都是不一样的,但是是很相似的。而且这1536个数字不会枯竭,这个组合老大了。

假如我现在写了一篇“令狐冲与迈克尔乔丹”的文章

令狐冲与迈尔克乔丹,这八杆子打不着的两个人,假设有了这么一个文章或者影视作品把他俩关联起来(比如他俩在上海武康路飙车)。那么,当ai查询到了这篇文章的后果是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1. 这篇文章中的"令狐冲"向量会变化
2. 这篇文章中的"迈克尔乔丹"向量会变化
3. 但不会影响其他文章中的"令狐冲"向量
4. 也不会影响其他文章中的"迈克尔乔丹"向量
5. 模型会考虑:当"令狐冲"和"迈克尔乔丹"出现在同一个句子中,"令狐冲"的向量会稍微向"人物"、"名人"方向偏移,"迈克尔乔丹"的向量会稍微向"虚构人物"方向偏移。但只是在这个特定句子中!

用户查询1:"令狐冲的武功"
- 问题向量:[0.025, 0.030, 0.021, ...] (强调武功)
- 找到:chunk1(令狐冲是《笑傲江湖》的主角...)
- 此时“令狐冲与迈克尔乔丹”的chunk可能不会被找到(相关性低)

用户查询2:"令狐冲和迈克尔乔丹"
- 问题向量:[0.023, 0.032, 0.024, ...] (强调跨界关联)
- 找到:令狐冲和迈克尔乔丹的跨界故事的chunk就会查到
- chunk1和chunk2可能不会被找到(相关性低)

可以看出其实ai每次查询,”令狐冲”的向量表示都不同。我们主要就是确认embedding之后,得到结果的相似度是不是满足预期的。

ai不会自己对某个事物产生直接情感和感触,它的反馈都是基于材料,然后学习得出的

举个例子,你问ai”鹿鼎记里武功最厉害的人是谁?”,你以为ai是马上去把《鹿鼎记》都通读一遍然后给你答案吗?肯定不是的,它其实是去搜索“鹿鼎记武功排名”这类的文章,然后把这些文章进行分析和学习,然后得出它自己的结论。

但是如果你问他《鹿鼎记》的细节,比如“冯锡范跟归辛树有没有交手的经历,如果有的话请找到原文”,他还是会给你直接返回原文的。

那ai写歌,是不是就是从网络上现有的音乐东扒一下,西扒一下,抄出来的?

肯定不是,上面说的,ai是有学习功能的,它是“基于学习到的通用模式创造新内容”,因为它能从海量数据中学习音乐模式,也是基于学习后的创作,不是直接抄袭。所以ai的”创新”是已有模式的重新组合,无法像人类那样”有感而发”。

所以这就看出来ai的局限性,它可以帮你干具体的活,帮你梳理,或者给你一些“你没想到但是其他人已经想到并写在网络上的建议”。但是你让它从0-1 挖掘出一个new point,是做不到的。所以说,ai总体来说还是一个提效的工具,所以如果你是一个有想法的人,ai在你手里就是一个很高效的武器。

那我有了ai是不是可以让它来帮我打《艾尔登法环》,我在旁边看着?

理论上是可以的,但是会很花钱。

首先AI可以通过脚本启动Steam和游戏,也会模拟键盘鼠标输入(WASD移动、鼠标点击),同时也能做到通过截图分析游戏画面(这一步很花钱)和识别血条、敌人位置、物品等(这一步也很花钱)。但是对于动作类游戏,需要毫秒级反应。ai做不到,需要明确的规则和大量训练数据。所以你会看到它操作你的主人公一遍一遍的死,死亡后回到检查点,AI还需要重新规划。但是ai肯定会通关,就是时间问题和token消耗的问题。

所以ai目前可以给看你的录像给你一些建议,还不能亲自上手去打怪。

再说了,游戏的魅力在于挑战和成长,如果让AI代劳,就失去了游戏的意义。

感谢你请我喝咖啡~

Welcome to my other publishing channels