那张「AI 这十年」的成长图画反了:2026 栏的 22 个词,19 个不在模型里

一张三代身高对比图把十年画成「模型长大了」。我数了一遍 2026 栏的 22 个词,只有 3 个动模型权重。再用自己这个 337 篇的博客仓库算一笔账:把全部内容塞进上下文,连最宽松的估法都装不下 1M 窗口——那 19 个词是这道算术题的产物,不是模型的成长纹。

我刷到一张对比图,标题叫「AI 这十年」。画面是三个逐渐长高的人形剪影:2016 是个婴儿,身上写着 AlphaGo、ImageNet、CNN、RNN、Yolo、GAN、ResNet、Transformer、Bert;2022 是个背书包的小学生,身上写着 ChatGPT、Claude、Prompts;2026 是个高出一头的成年人,身上密密麻麻列了 22 个词,从 Orchestration 一路排到 Cost Optimization,最后跟一行 And More。

图想说的是「AI 长大了」。但我数完那 22 个词之后的感觉正相反:长高的不是那个人,是他身上挂的装备。

名词速查

图上那 22 个词跨了好几个子领域,先把本文会用到的摊平。这一节的作用是让你不用中途去搜。

术语一句话解释
上下文窗口(context window)一次调用最多能塞进去多少 token,超了就报错或被截断
token模型的计费和计算单位,一段文字被切成的碎片数;不是一个汉字一个 token(见BPE 那篇
无状态(stateless)一次推理结束后,模型权重不保留这次对话的任何痕迹,下次从零开始
RAG / 检索提问前先从外部库里捞几段相关内容拼进 prompt,而不是把整个库都塞进去
MCP一套让模型调用外部工具/数据源的协议约定(史上最大改版那篇
Fine-tuning / 蒸馏 / 合成数据三种真的会改动模型权重的做法:继续训练、用大模型教小模型、造训练数据
Guardrails在模型外面加的输入输出检查,拦掉不该过的内容
AI Gateway挡在应用和模型之间的代理层,管路由、限流、密钥、计费

我数了一遍:22 个词,19 个在模型外面

分类判据只有一条,好让你能自己复核:要落地这一项,主要工作是不是改动模型权重? 是,算「模型里」;不是,算「模型外」。

那一栏的词在模型里?主要由哪个约束生出
Fine-tuning✅ 是
Distillation✅ 是
Synthetic Data✅ 是
Stateless Systems❌ 外约束本身
Memory Architecture❌ 外无状态
MCP & Protocols❌ 外无状态
Loop Automation❌ 外无状态
Agentic AI❌ 外无状态
Function Calling❌ 外无状态
Advanced Tooling❌ 外无状态
Orchestration❌ 外无状态 + 窗口有限
RAG 2.0❌ 外窗口有限
Vector Databases❌ 外窗口有限
Knowledge Graphs❌ 外窗口有限
Context Understanding❌ 外窗口有限
Multi-Agent Collaboration❌ 外窗口有限
Prompt Optimization❌ 外窗口有限 + 按量计费
Cost Optimization❌ 外按量计费
AI Gateways❌ 外按量计费
Evaluation Frameworks❌ 外输出不确定
Guardrails❌ 外输出不确定
Observability❌ 外输出不确定

3 项在模型里,19 项在模型外。

这个分类里最该被质疑的是 Function Calling——「会发出结构化工具调用」这个能力确实训在权重里。我把它归到模型外,判据是图上这一项在工程上要你做的事:定义 schema、执行、把结果回填进下一轮。那部分一行权重都不碰。这是我的判断,不是客观事实,你完全可以把它挪到左边,结论变成 18 比 4,不影响量级。

一句话根本约束

那 19 个词之所以长成这样,是因为四个约束同时成立

  1. 无状态:一次推理结束,权重不带走任何东西。
  2. 窗口有限:一次调用能塞进去的 token 有硬上限。
  3. 按量计费:每个 token 都要付钱、付延迟。
  4. 输出不确定:同样的输入不保证同样的输出,因为它是采样出来的。

这句话是可反驳的——反驳方式就是取消其中一条,看设计会不会塌:

  • 取消「无状态」(模型自己记得上次聊了什么)→ Memory Architecture、MCP、Loop Automation、Stateless Systems 这一串失去存在理由。
  • 取消「窗口有限」(无限上下文,且注意力不衰减)→ RAG 2.0、Vector Databases、Knowledge Graphs、Multi-Agent 的主要动机消失。注意得同时取消衰减,否则位置带来的干预力差异还在。
  • 取消「按量计费」→ AI Gateways、Cost Optimization、半个 Prompt Optimization 直接归零。
  • 取消「输出不确定」→ Evaluation Frameworks、Guardrails、Observability 缩水成普通单元测试。

四条全取消,2026 那一栏剩下 3 个词:Fine-tuning、Distillation、Synthetic Data。这一栏不是能力清单,是约束清单的镜像。

崩点:用我自己的博客仓库算一笔账

「窗口有限」听起来像个远方的技术参数。我拿手边最小的一个语料实测了一下,它崩得比我预期早得多。

最朴素的做法是这样的:不要检索、不要向量库、不要记忆架构,每次提问就把全部资料塞进 prompt——模型足够聪明,让它自己找。这个仓库存着我写的全部博客,就试它。

# 在仓库根目录
cat src/content/blog/*.md | wc -c        # 6286900
ls src/content/blog/*.md | wc -l         # 337

337 篇、6,286,900 字节,6.29 MB。一个 U 盘塞得下几百份。再按字符类型拆一下:

python3 -c "
import glob, re
t = ''.join(open(f, encoding='utf-8').read() for f in glob.glob('src/content/blog/*.md'))
cjk = len(re.findall(r'[\u4e00-\u9fff]', t))
print('total chars', len(t)); print('cjk', cjk); print('non-cjk', len(t) - cjk)"
# total chars 3425442
# cjk 1261786
# non-cjk 2163656

上面三个数是我在写这篇时跑出来的真实输出。下面的 token 数是估算,不是实测——这台机器上没有 tokenizer 库,也没有可用的 API 凭证,跑不了 count_tokens。所以我给三档,让你看到区间而不是一个假装精确的数字:

估法中文非中文得到 token
最宽松(下界)2 字 / token4 字符 / token1.17M
常见经验值1 字 / token4 字符 / token1.80M
偏保守1 字 / 1.5 token3.5 字符 / token2.51M

关键在下界那一行。2 个汉字挤成 1 个 token 是没有哪个主流 tokenizer 真能做到的乐观值,可它算出来仍是 1.17M——已经装不进 1M 的上下文窗口。 也就是说,无论我怎么调估算系数,结论都不变:一个个人博客的全部存量,塞不进当前最大的窗口。崩点就在第一个数量级上,不需要等到公司知识库那种规模。

再算钱。按 Claude Opus 5 的输入价 $5.00 / MTok(模型价目见文末来源):

做法每次输入 token每次成本100 次 / 天
全塞(常见估法 1.80M)1.80M$9.01$901
全塞(下界 1.17M)1.17M$5.86$586
先检索 5 篇~26.7K$0.13$13

单篇平均 10,165 字符,约 5.3K token;捞 5 篇约 26.7K token。同一个问题,全塞比检索贵 67 倍,而且前者根本跑不起来。

于是「RAG 2.0」「Vector Databases」这两个词的性质就变了:它们不是 2026 年流行的技术选型,是这道除法算出来的结果。你可以不喜欢向量库,可以换成 grep(Claude Code 和 Codex 就是这么干的),但你不能不做检索——除数摆在那里。

想自己复核这笔账

三条命令,五分钟,换成你自己的仓库:上面两条 wc 拿到字节和文件数,第三条 Python 拿到中文/非中文字符数,然后套表里的系数乘一遍。要记录的数字就一个:下界估法算出来的 token 数,是不是已经超过你在用的那个窗口。 我这里是 1.17 倍。如果你手上是一个中型代码库,大概率是几十倍。

一个诚实的补台:上面的中文正则 [\u4e00-\u9fff] 只覆盖基本汉字区,标点、假名、扩展区都被算进了「非中文」那一栏。这会让中文占比略微低估,因此三档估算整体偏低——不改变「超窗口」的结论,但你复核时会发现自己的数比我这个算法给的更大一点。真要精确,走 tokenizer;BPE 那篇里我用 Qwen 的分词器实测过,一个汉字往往不止一个 token。

图上最矛盾的一对词,其实是一件事

2026 那栏里 Stateless Systems 和 Memory Architecture 并排列着。当成两项能力读,这是自相矛盾的:一个说系统不存状态,一个说要设计记忆。

它们不是并列的两项,是同一个约束的因和果。因为一次推理结束状态就消失,所以记忆必须搬到模型外面,变成文件、数据库、索引。图把因和果都画进了「能力清单」,于是读起来像是这个人同时长出了两种本领——实际上他是长出了一条假腿,和一根拐杖。

这条线不是 2026 年才有的。MCP 那次最大改版做的就是这件事:状态不会消失,只会搬家。往前追,它是 REST、是 fate-sharing、是「功能应该放在两端而不是通信系统里」。

我在这条约束上翻的车:记忆架构的真实失败模式

写这篇之前,我先跑了一条检查:

# 比对仓库内的规范目录与用户配置目录下的同名副本
diff -r <repo-skill-dir> <user-config-skill-dir> && echo "in sync"

输出 in sync。这条检查存在的唯一原因,是这两个目录曾经静默分叉过——同一份写作规范在这个仓库里存了一份(有 git 历史,是真相源),在用户配置目录下存了一份(是真正被加载执行的那份)。它们不是符号链接,是磁盘上两个独立文件。

后果很具体:被加载的那份落后了 130 行,缺了两条新增的反模式规则。于是照着它写出来的稿子,原样复现了新规则专门要防的那个毛病。这条教训后来被写进规范并入库:

5811e11 skills: add three publish gates and merge the forked writing guide

commit 标题里那个 merge the forked writing guide,就是账。

我从这件事上学到的,和图上「Memory Architecture」给人的印象完全不同。记忆架构的难点从来不是「存哪里」,是「谁是单一真相源」。 加一个向量库很容易,加第二份副本更容易;难的是保证读的那一份就是新的那一份。分布式系统里这叫一致性,多 Agent 的内存问题其实就是这个老问题换了张脸

图上那个词只有两个单词的宽度,装不下这件事。

「Guardrails」落地长什么样:一条只拦两个前缀的正则

顺着这条线看另一个词。Guardrails 在图上是一个盾牌图标,听着像一套体系。在这个仓库里,它的实现是 scripts/validate-blog-content.mjs:22 的一条正则:

{
  kind: 'unix-home-path',
  pattern: /(?<![\w:/.-])\/(?:Users|home)\/[A-Za-z0-9._-]+(?:\/[^\s'"<>)]+)*/g,
}

作用是拦住文章里泄漏的本地机器路径。我读完这行的第一反应是:它只认 /Users/home 两个前缀。/tmp/xxx.py/var/log/.../private/... 一律放行——而临时实验脚本恰好最常落在 /tmp

这不是这条正则写得差,是护栏的普遍形态:护栏是有名字的规则的集合,它只挡住你已经想到的那些形状。 所以规范里现在多了一条人工自查(「正文里所有绝对路径都问一次:这个路径在别人机器上存在吗」)——护栏漏掉的部分,成本转移到了流程上。

图上那 22 个词,每一个展开都是这个质感:一个漂亮的名词,底下是一条不完整的正则、一个凑合的索引、一张手动维护的表。

这张图哪里是对的

到这里该接住一个反问:你是不是在挑一张科普图的刺?

它的时间点和分层都对。2016 那一栏确实全是模型和架构的名字——CNN、ResNet、Transformer,那是模型自己在长。2022 那一栏是两个产品加一种交互方式,也准确:那一年的变化是能力被包装成了产品。图真正准确的地方是它无意间画出了重心迁移:从架构,到产品,到脚手架。

我不同意的只有一件事:把第三栏那 22 个词读成「他长高了」。那 19 个挂件不是身高,是负重。它们全都在补同一件事——模型本身一次推理就失忆,连自己刚才叫什么都记不住。

顺着这个角度重看,那张图甚至更值得看:2026 那个人形之所以画得比前两个高出一头,不是因为脑子大了,是因为身上挂满了东西,轮廓被撑开了。

常见误读 → 实际情况

这篇要修的就是看图之后最容易带走的那几个印象:

看图容易读成实际情况
2026 栏那么多词 = 模型能力大爆发22 个里 19 个不改模型权重,是模型外的脚手架
这些是「新技术趋势」,会被下一波趋势替换它们是四个约束的产物;约束不变,换掉一个只会长出功能等价的另一个
Stateless Systems 和 Memory Architecture 是两种能力是一个约束的因和果:状态一定消失,所以记忆必须外挂
RAG / 向量库是一种技术选型偏好是一道除法的结果。我这个 337 篇的博客最宽松也要 1.17M token,装不进 1M 窗口
Guardrails / Evaluation 是成熟度标志是「输出不确定」逼出来的补丁,落地常常就是一条只认两个前缀的正则
越往右越先进,2016 那些过时了2016 栏是模型本体,2026 栏是外挂;后者依赖前者,不是取代前者

通俗总结

把它想成给一个每天早上醒来就忘光一切、但脑子极好、按分钟收费、而且一次只看得进一页纸的天才助手打配套设施。

他忘光了,你就给他建档案柜(记忆架构、知识图谱);他一次只看得进一页,你就得先替他挑出该看的那几页(检索、向量库);他按分钟收费,你就得算账、限流、走代理(成本优化、网关);他偶尔胡说,你就得抽检、加复核、装监控(评测、护栏、可观测)。

那张图上 2026 那个人身上密密麻麻的 22 个词,19 个就是这些配套设施。能一句话讲给同事的版本是:那不是他长高了,是你给他背上了包。 而这也解释了图上唯一真正的成长方向——如果哪一天他睡醒还记得昨天的事、一次能读完整本书,你搭的那 19 样东西里大部分会当场失业。

所以下次刷到这类「AI 进化史」的对比图,那种一边点赞一边觉得哪里不对的感觉是有来由的:图在讲模型的成长,而你每天在做的,是给一个记不住昨天的东西补记忆、补检索、补账本。

参考来源

工程实践

图片来源

  • 一张标题为「AI 这十年」的对比图文,我在短视频平台刷到,原作者与原始链接未记录。图上文字内容以本文导语所述为准(我按截图逐字抄录),三栏词条即分类表的输入。