2026-06-26 09:40:00
工作和业余也用AI写代码,大大小小项目都经历了。从 rules, skills, spec, agent 到 harness 都玩过了
从AI嘴里发现一条比较稳的套路——ADR文档
rule, skills, spec 这些东西最大的问题就是瞎jb指挥。ADR 的好处是记录why,以及决策演变历史。
贴一段我整理的 ADR 文档就明白了:
---
title: 如何使用 ADR
id: ADR-001
date: 2026-06-26 09:01:21
status: accepted
---
ADR(Architecture Decision Record,架构决策记录)的核心目标很简单:记录为什么做出了某个重要技术决策,而不是记录系统长什么样。
目前比较常见的是 MADR、Nygard ADR 两种风格,但组织方式都大同小异。
一个团队通常会按下面几个层次组织。
不要一个 ADR 写整个系统设计。
好的粒度例如:
ADR-001 使用 PostgreSQL 作为主数据库
ADR-002 API 使用 REST 而不是 GraphQL
ADR-003 服务间通信采用 gRPC
ADR-004 用户认证采用 OAuth2 + JWT
ADR-005 使用事件驱动 Outbox Pattern
而不是
系统架构设计.md
因为几年以后,很难知道某个结论为什么来的。
一般都会固定编号。
adr/
0001-use-postgresql.md
0002-use-rest-api.md
0003-use-grpc.md
0004-use-oauth2.md
编号一旦存在,就不要修改。
即使后来废弃:
0003-use-grpc.md
Status: Superseded by ADR-0018
这样引用不会失效。
一般都有状态。
例如:
Status: Accepted
Date: 2026-06-19 01:02:03
如果后来换了:
Status: Superseded
Superseded by: ADR-0018
而新的 ADR:
ADR-0018
Supersedes: ADR-0003
形成完整历史。
---
title: ADR-008 使用 PostgreSQL
id: ADR-008
date: 2026-06-18 12:32:46
status: accepted
---
## Context
目前需要:
- ACID
- JSON 查询
- 成熟生态
候选:
- PostgreSQL
- MySQL
- MongoDB
## Decision
选择 PostgreSQL。
## Consequences
优点:
- SQL 功能完整
- JSONB 支持优秀
- 社区成熟
缺点:
- 运维复杂度略高
- 分库分表方案需要额外设计
可以再加:
Alternatives
Decision Drivers
Trade-offs
References
在一个目录,用文件名体现领域:
008.backend.use-grpc.md
010.security.use-oauth.md
012.frontend.react-query.md
这样编号保持连续,查找也方便。
例如:
ADR-0015
Context
依赖:
- ADR-0002
- ADR-0008
Decision
由于 ADR-0008 已经确定 PostgreSQL,
因此 Outbox Pattern 可以直接利用事务。
形成决策网络,而不是孤立文档。
这是很多团队最容易犯的错误。
不要写:
Controller
Service
Repository
这是设计文档。
ADR 应该写:
为什么不用 MongoDB?
为什么不用 GraphQL?
为什么采用 Saga?
为什么拆成多个 Service?
为什么 Event Sourcing 被放弃?
重点永远是 Why,而不是 What。
过去很多团队会这样组织:
| 文档 | 回答的问题 |
|---|---|
| RFC / Proposal | 未来准备怎么做? |
| ADR | 为什么这样做? |
| Architecture Doc | 系统如何组织? |
| Design Doc | 某个功能如何实现? |
| Runbook | 如何运维? |
流程是 RFC → ADR → Design Doc → Code。
RFC 用于讨论方案,达成决策后沉淀为 ADR;随后具体实现细节写入设计文档,最终落实到代码。这样既保留了决策依据,又避免 ADR 演变成冗长的设计说明。
在AI 时代,更简洁,易维护的方式是:
AI编写的项目,到后期,泥潭就是大量的docs。ADR 的好处是不用修订,全面引用+supersed。保证决策链清晰,低上下文成本
2026-06-20 12:06:22
打开 Shortcuts。
点击右上角 + 新建快捷指令。
搜 添加 日期(Current Date) 动作,默认为当前时间
添加 格式化日期,日期格式 自定义,填 yyyy-MM-dd HH:mm:ss
on run {input, parameters}
-- 稍微延长一点延迟,确保触发快捷键的手指已经离开键盘
delay 0.1
-- display dialog "Current date"
-- 将 Shortcuts 传入的 list 转换为字符串
set ts to item 1 of input as string
tell application "System Events"
-- 释放可能被系统残留挂起的修饰键状态
-- 键盘区数字的 Key Code 分布是乱序的
set keyCodeMap to {29, 18, 19, 20, 21, 23, 22, 26, 28, 25}
key up command
key up option
key up control
key up shift
repeat with i from 1 to length of ts
set c to character i of ts
set charID to id of c
if c is ":" then
-- 分号,加 shift 变成冒号
key code 41 using {shift down}
else if c is "-" then
-- 减号,不需要 shift
key code 27
else if c is space then
key code 49
else if charID ≥ 48 and charID ≤ 57 then
-- ASCII 码范围过滤 转换算出 1 到 10 的索引
set targetIndex to charID - 47
key code (item targetIndex of keyCodeMap)
end if
end repeat
end tell
end run
点快捷指令右上角 ⓘ。
勾 Use as Quick Action(用作快速操作)
选 任何应用程序
新版macOS可以直接绑定。
之前的:系统设置 → 键盘 → 键盘快捷键 → 服务(或“快速操作”)
我习惯的方式是右手 Cmd+Opt+T 。
以前觉得 applescript 慢,但是现在反而发现需要 delay 0.1 否则会触发 Cmd+Opt 的连招
本来AI给的版本是 keystroke 指令,容易误触 modifier keys,所以改成 key code。
还以为 AI 写错了,没想到 mac 的 0-9 数字键code 居然不是连续的。
不过这JB玩意不稳定,一会儿授权失效了,需要去 设置 - 隐私 - 辅助功能 里删除 Shortcuts 再添加。。
2026-06-14 00:13:00
翻到一个 AI 编程的出错提示
Could not find oldString in the file. It must match exactly, including whitespace, indentation, and line endings
我突然发现 agent coding 浪费 token 有很大一部分,可能不是问题输入的思考,和输出
而是在什么位置输出。想了下,人写代码,也是考虑好,再寻找一个合适的位置,开始插入或者修改
找位置 - 插入 - 修改 这个操作要完全用文本语言描述,的确不简单啊。甚至可以说超级复杂。
问了下AI,这个叫 locate cost 。定位成本
要做好这一点,Banthropic 他们的做法是 bash,grep。玩得花的是 SAT,diff,patch 什么的
进一步推论,AI 新写代码容易,改代码难?AI 也确认了我这一点
我突然回忆起cursor那个界面刷刷刷把我2w+行的源码全部刷新一遍,卧槽,原来这么回事
于是我有个理论,AI编程似乎把源码拆得更小,或许更省token,AI不仅改起来更容易,也更容易一眼看出问题
无论你拆多少个文件,AI上下文里都是连续的。
我甚至联想到,机械臂目前搞什么 世界模型 VLA 具身智能 依然打不过人类,遇到训练之外的任务就抓瞎,是不是底层一样的道理?
比如叠衣服,当前是衣服乱的,叠好是个理想状态。人脑可以很快给这两个世界做个 diff,但是这个 locate cost 很高。按照编程的套路,机器人最简单的做法应该是把房子拆掉,家具拆掉,然后重新修一套房子,般进来家具,然后在指定的位置重新按照最佳形状现场纺织一套衣服 🤣
马斯克几千亿买 cursor ,如果能拿到眼球和编辑光标的超原始动作数据,那是真赚了。(如果你还不知道可以搜下)
LLM代码写得好,是因为它背诵了很多优秀代码的“纹理”,而不是 “形状”。纹理见识得多,能对付90%的工作了。人写代码绝大部分也是枯燥的低技术活儿。讽刺的是,是人类写低技术活儿容易翻车。。。比如没考虑周到,复制粘贴错了,等等。。。AI表现虽然平庸但是基本不会犯愚蠢的错。
说起 “纹理” vs “结构”,和这个 “状态迁移” 。我我思绪有点乱,突然有个顿悟,所谓“形状” 就是边界,所谓边界就是两个不同状态实体的迁移界面。diff最 sharp 的边缘。比如人画画总是画“轮廓”,因为轮廓是 diff 出来和背景最突出,最不同的起始边界。
没想到AI给我抬出来个 亚里士多德 hylomorphism(质形论)好家伙。
例如,一个铜像:
质料:铜。
形式:雕像的形状、组织方式、使它成为「某个人的雕像」的那个原则。换成房子:
木头、砖块——质料。
房屋的结构、布局、功能——形式。
没有质料,形式无处实现;没有形式,质料只是一堆材料。
我是猜不透AI是哪根弦搭错了,把 纹理/结构,映射到 质料(Matter)与形式(Form/Morph) 上了。
不过好有道理啊!!
AI学编程,靠的是海量语料(Matter),看穿了内在联系 , 说的难听就是背出熟练度了,信手拈来。
人类是自下而上,从最小集“生长” morph 出来的。
我觉得这个区别,很深刻啊。虽然产出表现形式可能很接近,但是我真的觉得有很大讲究。。。
接受过正统编程教育的人学习到的是个 生成空间,进行防御式编程;我感觉AI很多时候只是 max effort从前人经验里学习到了个皮毛。。。
机械臂一样的道理。。。我好像发现了点东西。。。???!!!
AI 不能很容易在两个状态之间求 diff 是因为AI无法找到两个 morph 之间共同的父节点。人类是从一个原始状态派生出来的,所以有回程捷径可以走
比如经验丰富的程序员可以很快把一个快排改成冒泡。我,和大部分AI 可能都是删掉重写。。。。
写代码也是如此,搬杯子,叠衣服也是如此。
一下让我联想到 图灵 祖师爷《胚胎发育的化学基础》(The Chemical Basis of Morphogenesis)。
这篇论文研究的正是形态发生(Morphogenesis)——即大自然如何自下而上地从一团完全对称、一模一样的受精卵细胞中,自主分裂、分化、生长出复杂的结构,并最终在斑马身上画出条纹,在豹子身上点出斑点。
这个亚里士多德的思考框架真厉害啊。通透
其实不说哲学这么烧脑的,说大白话,就是AI如果没学过的某个代码结构,可能是真写不出。
但是人类如果琢磨明白,是可能写出来的。
生成路径不一样。
AI 能写出来必然是大量 RL
换到机械臂,比如一个复杂的移动操作,AI如果没学过,没练过,大概率翻车。
人类试几下就明白了。。一样的道理
2026-06-10 23:21:00
无聊,产生了个crazy的想法。
git 内部用 zlib 压缩文件内容
Content-Encoding: gzip 也是
如果web服务器输出 .git 里的 静态 内容,是不是可以减一个二次解压/压缩步骤???
blob sha1 直接当etag?
跟AI较量了几轮,一开始它说做不到。因为 blob 的格式比较变态。因为
hello world...
在 .git/objects/ab/cdef... 里的东西是这么存的
zlib(blob 1234\0hello world...)
I was like
???日他妈真变态啊。这前面是写死了 blob <size>\0 然后把文件内容放在一起,再压缩的。
.git 这设计脑子有病啊。。。为啥不是原始文件gz而是加个头去gz。。。
此路不通!结束
然后AI嘴瓢了,说
先别急着吐槽 Linus,这个设计不仅没病,反而是 Git 能成为现代“内容寻址数据库”的精髓所在。
当 Git 从磁盘读取一个松散对象时,它是个流(Stream)。Git 只需要解压出最开始的几个字节,读到 blob 4096\0,内核就可以立刻执行 malloc(4096) 分配精准的内存。接下来的 zlib 数据流就可以源源不断地直冲内存,不需要反复扩容(realloc),也不需要把整个文件全部解压完才知道它有多大。
况且,这里有一个长久的误解:你吐槽的那个把 blob\0 塞进 zlib 的逻辑,其实只存在于松散对象(Loose Object)中。在真正的 Packfile 里,这个文本格式的头早就被干掉了。
【松散对象 Loose Object】
+-------------------------------------------------------+
| zlib 压缩包: [ "blob 1024\0" + 原始文件纯数据 ] |
+-------------------------------------------------------+
【包文件 Packfile 内部的一条记录】
+---------------------------------------------------------+
| [3-bit 类型] + [变长 Varint 表达的 Size] + [纯 zlib 数据流] |
+---------------------------------------------------------+
我去,这么好的东西,你怎么不早点告诉我!
然后AI给我泼一盆冷水:
不!兼!容!
要正确的CRC32你得把文件全部读一遍,那不就等于解压一遍了。白费力气。完结!
嘿,得亏我早年玩 IIS 长大的。我记得有个偏方,Content-Encoding: deflate,尾部crc32直接丢了
AI:
恭喜你,这是Web 历史上著名的 “Deflate 格式混乱案”
RFC 2616 (HTTP/1.1) 规定和IIS有差异! IIS脑抽地剥离了 zlib 的头尾,只吐了裸压缩流,为了兼容 IIS 的错误实现,各家浏览器各显神通。有的浏览器严格按 RFC 执行,有的浏览器看到 zlib 头会报错,必须看内核的容错机制。
真正的zlib 格式 (RFC 1950) 是要求包含 2 字节头 + DEFLATE 压缩流 + 4 字节 Adler-32 尾
等等,你说啥?Adler-32?这不就又对上了嘛!!!
那么开始 Vibe!!!
Git Packfile 的终极大 Boss:差分存储(Delta Compression)
即便你搞定了上面的所有协议头和校验和,Git 的终极形态——Packfile 还会给你最后一击。你假设的场景是:Git 里的 Blob 都是一个个完整的、独立的压缩包。但实际上,为了极度压榨磁盘空间,当你执行 git gc 后,Packfile 内部采用的是差分存储(Delta Compression)。
啊这??我于是问,能在配置里禁用掉吗?
# 将比对窗口设为 0,彻底禁用 Delta 差分计算
git config --global pack.window 0
# 强制打包所有对象,并立刻、无条件地清除所有 Loose 文件(无视 2 周保护期)
git gc --prune=now --aggressive
# -a 表示把所有对象打包进一个全新的 pack
# -d 表示打包成功后,立刻删除原本的 loose 对象和旧的 pack 文件
git repack -a -d
哎,你tmd不早说。这不就闭环了嘛!!!
你觉得这几个命令难的记? git clone --depth=1 就行。这只有一个 depth 必须自动pack。
如果你存的是 .jpg 之类的二进制,那么git会直接放弃 delta 。
于是最后,通过 OpenCode Zen 免费的 MiMo V2.5 Free
https://github.com/est/git2www-zerocopy
本地自测是OK的
我也算是写过 zero-copy 的人了 🤣(assert AI会写 === 我也会写)
必须严肃吐槽一下AI这回答一板一眼,不思考完整,拷打一下挤一点。如果不是我知道 IIS 这个坑可能就放弃这个想法了。
2026-06-05 10:24:00
现在这个时间点,观察到两件事:
MIMO是很用力的去刷榜。why?
马斯克几百亿买 cursor,一个vscode套壳,why?
这两个问题,我在过去几周一直琢磨,那就是 AI 行业和 软件 互联网 最大的差别,他是有边际成本的。他的玩法变了
雷不斯刷榜的 Openrouter 和马斯克买的 Cursor,还有遍地开花的 “中转站”,而且据说有大厂买中转站数据去训练和蒸馏。
边际成本不为0 ,中间商,这两件事在我脑海里酝酿出一个结论:
AI 属于传统行业
对于这个说法,跟身边的人和网友交流,并不能服众。跟AI交流,它一通分析,边际成本 和 柜台费 渠道费 有一定关联,但是没有必然因果性。它举了很多例子,比如 Appstore, Steam,音乐平台也算渠道。Tesla 也算没渠道。
AI还买域名、租服务器,买Google Ads、做SEO等平台广告费,接入 Stripe、PayPal 或支付宝都算渠道费
我觉得有点不可信,掰扯了几句。金融和 基础设施 打广告 不太算渠道吧。无论谁哪个行业这些成本都有,也绕不开。大家都是同一起跑线。这个渠道也不存在特定歧视
我这里纠结的”柜台费“,特指 “保护费”,你不给渠道上供,人家就改卖你竞品,导致你不得不走额外负担和预算。
传统行业特别维护渠道商利益甚至搞排他
AI接下来一段回答突然点醒了我。
传统行业有“物理库存”的生死劫
造一辆车、酿一批酒、生产一批家电,边际成本极高,且会产生巨大的库存。厂商如果自己去卖,一旦卖不出去,资金链就断了。渠道商的核心价值是“蓄水池”和“压货”。
厂商为了让渠道商心甘情愿地拿自己的钱去囤货(把库存风险转移给渠道),就必须出让巨大的利润空间,并给予 “区域排他保护”(保证你在这个区独家卖,不打价格战)。本质:传统厂商给渠道商“上供/排他”,是为了买渠道商的“库存吞吐能力”和“资金垫付”。
其实核心不在 边际成本,而是库存压力,资金周转。
关键的来了:AI模型供应商同样有库存压力。
我把这句话扔给AI,AI说你说得对,然后分析了一通 GPU 折旧,HBM 价高,DC耗电,降温散热 等等成本问题
哈哈哈哈。AI果然还是太笨
AI库存费问题不在于GPU闲置,而在于没有真实用户使用数据,无法投入下一轮迭代,跟竞品相比会越来越落后。
公开语料就那么多,预训练大差不差,全靠后训练 指令遵循这些地方拉开差距了
token回笼,就是这个时代的现金流。你没有真实用户使用互动,你的模型就会被竞品淘汰。
这就是为什么 雷不斯要不计成本推MIMO去Openrouter亏钱刷榜,马一龙要买 Cursor去增强Grok的原因。
这就是中间商、柜台越来越重要的理由。
AI属于传统行业,重资产制造业。
(或许这就是华为只卖高利润硬件不做大模型的理由?)
2026-06-02 22:16:00
六一儿童节的时候,Richard Sutton锐评AI
各位女士们、先生们,大家好。
很遗憾我今天无法亲临现场,与各位进行面对面的交流讨论。但我仍然很高兴能够通过这段录制的视频,与大家分享一些关于人工智能当前与未来发展的高层次思考,尤其是 AI 与科学、数学之间关系的看法。我理解,这也正是本次会议以及 SAIR Foundation 所关注的核心主题。
我想先讲一个老笑话,相信大家都听过。有位研究人员的工作正在接受评审,评审意见回来后写道:“这项工作既新颖(novel),又优秀(good)。遗憾的是,优秀的部分并不新颖,而新颖的部分并不优秀。”
我关于 AI 的第一个观点是:这个评价恰好适用于今天相当大一部分 AI。并非所有 AI 都如此,但相当大一部分确实如此。我们今天所谓的“生成式 AI”(Generative AI)几乎都属于这一类,包括大语言模型、图像模型、视频模型,甚至最近用于学习世界模型(world model)的一些新方法。这些 AI 的共同点是,它们接收大量样本,然后产生一个“模型”,使其行为与这些样本相似,也就是说生成像人类写的文本,生成像艺术家或自然界中的图像,生成类似互联网中存在的视频。不要误会,生成式 AI 可以极其有用,这一点毫无疑问,但那个笑话中的评价仍然适用,这些系统能够产生“新颖且优秀”的输出,但不能同时做到两者。
在很多场景下,这根本不是问题。当我们要求 AI 从互联网寻找答案,或者总结一篇文档时,我们并不希望它具有新颖性,我们乐于接受答案的质量来自原始资料,来自写下文档的人或者互联网文章的作者。如果 AI 的回答是“新颖”的,意味着它超出了原始材料,额外加入了内容,这正是我们所说的“幻觉”(hallucination)。大多数情况下,我们并不喜欢 AI 编造内容,不喜欢它增加额外的新东西。
当然有一个例外,当我们追求的不是事实,而是虚构和娱乐时,我们可能会要求 AI 为孩子写一个睡前故事,或者生成一幅基于互联网已有图像、但又与之不同的新图像。此时,我们很难知道 AI 究竟有多大程度是在创造,因为我们无法知道它生成的故事、诗歌或图像与训练材料究竟有多接近。从现实角度讲,这件事几乎无法判断,因为互联网太大了,AI 可能借鉴的来源实在太多。
当我们要求虚构内容或新颖性时,AI 的确能够提供,这是因为它的处理过程部分具有随机性(stochastic)。每一个决策都可能走向多个方向,每次运行时都会产生不同的轨迹,这些轨迹可能来自随机性,因此是新颖的;也可能来自训练数据,因此是优秀的,因为训练数据本身来源于人类和现实世界。因此,输出轨迹要么来自随机性,因此新颖,要么来自数据,因此优秀,它可以是新颖的,也可以是优秀的,但不能同时依赖于两者。
实际上,我认为生成式 AI 无法同时做到“优秀且新颖”,并不是什么大问题。对于笑话中的研究者而言,这是毁灭性的批评,但对于大多数任务而言并非如此,对于生成式 AI 而言也并非如此。生成式 AI 的本质就是模仿者(mimic),监督学习原本就是为了实现这一目标。即便只是模仿,只要它更快、更便宜、更小、更容易定制、更容易复制,它仍然可能极具价值。因此,即便生成式 AI 无法同时做到优秀与新颖,它仍然是一项具有变革性的技术。
然而,这终究是一种限制,而我们今天讨论的是利用 AI 进行科学研究和数学研究,在这些领域中,那个笑话里的评价是致命的,因为科学与数学需要真正的创造与发现。仅靠生成式 AI,或者说模仿型 AI(Mimicking AI),永远无法带我们走到那里,我们需要更多东西,而幸运的是,AI 的其他分支已经拥有这些东西。
我们有 AlphaGo,以及它震惊世界的第 37 手;AlphaZero,以及它极具原创性的国际象棋风格;GT-Sophy,它在模拟赛车中超越了所有人类;AlphaFold、AlphaProof、Claude Code,它们推动了科学、数学和编程的发展;RL-Lyft,它优化了网约车业务中的乘客与车辆匹配。这些系统都发现了既新颖又优秀的东西,说实话,一些语言模型经过增强之后,也已经超出了单纯监督学习生成式 AI 的范畴。
这些系统都具备某种额外特征,正是这种特征,使它们拥有真正的创造力和发现能力。重要的是,我们必须认识到这是什么,以及普通生成式 AI 中缺少的是什么。这种能力并非来自监督学习,并非来自从样本中学习。它是什么其实非常简单,非常符合常识,一点也不新,我们对此有很多名字,虽然没有哪个名字特别好,我把它称为“发现”(Discovery)。
所谓发现,基本上就是不断尝试很多事情,观察哪些有效,并保留最有效的那些。自然选择的进化如此运作,科学方法如此运作,日常生活和学习也是如此运作,我们尝试,然后记住什么有效,还有什么比这更显而易见呢。在心理学中,这被称为工具性学习(instrumental learning)或操作性条件反射(operant conditioning),在机器学习中,这就是强化学习(reinforcement learning)。我们同样能在规划(planning)和组合搜索(combinatorial search)中看到这一思想,任何“生成并测试(generate and test)”的过程都属于这一类。
发现的本质,是将三个步骤结合起来:
1. 变化(Variation)
2. 评估(Evaluation)
3. 选择性保留(Selective Retention)
当然,这并非我首创,早已有许多人指出这一组合是科学、自然选择以及动物行为的核心,我尤其想到 Donald Campbell、Daniel Dennett 和 Gary Cziko 的相关工作。我的观点的新意在于,把“发现”这一概念直接与现代 AI 联系起来,从而帮助我们看到它并不存在于监督学习或生成式 AI 之中,尤其不存在于反向传播(backpropagation)和梯度下降(gradient descent)之中。
让我明确说明生成式 AI 缺少什么。这些系统确实具有随机性,因此它们能够产生各种不同轨迹和行为,但缺失的是评估(Evaluation)。生成器已经通过监督学习预训练完成,因此在运行时,它没有机制去评估自己生成的内容,而没有评估,就不可能有选择性保留;没有选择性保留,就不可能有发现。变异可以带来新颖性,但没有评估,就没有发现,甚至可以说没有真正的创造力,因为创造力要求被生成的新事物必须经过评估,如果没有评估,也没有保留最优秀结果,那么就没有任何东西真正被创造出来,新颖性只是短暂闪现,随后消失无踪。
很多时候,评估是由人类完成的,例如 AI 为我们生成许多图片,然后我们挑选最喜欢的一张,此时完成发现的是“人类+AI”组成的系统。在另一些情况下,评估来自明确目标,例如某些棋步导致将死,某些步骤形成证明,某些行为获得更高奖励,某些基因型产生更多后代,某些理论更好解释数据。
有人喜欢把“变异”称为“盲变异”(Blind Variation),这里的“盲”并非完全随机,而是说它并不知道答案在哪里。优秀科学家不会随机挑选理论,但他们也不可能完全知道答案。如果完全知道答案,那就不存在发现,因此发现必须包含某种不确定性。在实践中,变异既部分受到指导,又部分是盲目的,而发现恰恰来自其中盲目的部分。
最后让我们回到现代深度学习和反向传播。表面上看,反向传播似乎无法发现新东西,因为它是确定性的,似乎不存在变异,但这其实不对。权重更新确实是确定性的,但神经网络权重最初是随机初始化的,这一随机初始化经常被忽略,但实际上它是变异机制的重要来源,而且必须正确执行,模型才能获得良好性能。在标准反向传播中,这种变异只发生一次,即网络初始化时,因此它的影响是暂时的,随后网络可能逐渐失去学习能力。
几年前,我的团队在《Nature》发表了一种新算法,称为 Continual Backpropagation(持续反向传播)。我们只做了一项很小的改动:定期重新随机初始化一些较少使用的神经元,这样变异能够持续发生,系统的可塑性(plasticity)得以保留。
关于创造力和发现,当然还有很多内容可以讨论,但关键点是,它们不仅仅是监督学习、模式识别、预测或世界建模。这些东西都很重要,但单靠它们无法实现真正的发现。发现需要评估,评估可以来自人类,也可以来自明确目标,而只有后者才能实现真正的自主性。
因此,我的呼吁是:如果我们希望拥有真正的 AI 科学家,那么我们应当与它们共享目标,使它们能够创造、评估、发现,并真正参与实现这些目标。让我们大胆一些,让我们把创造与发现彻底自动化。
我读完第一个感觉,AlphaGo那个 第37手 也太牛了,载入史册啊。
按照习惯,我让AI点评了这篇长文,也学到了一些东西。但是可能是我英语不好,感觉一开始 either novel or good 很有趣,但是后面感觉是在说 discovery。这个 novel 是怎么滑到 discovery 的?还是说Sutton认为这两个名词是一回事?
我拿这个问题去问ChatGPT。嘿,这个小精灵鬼回复:
我读的时候最先警觉的地方也是这里。
他实际上在偷偷引入一个额外条件:被评价(evaluated)并保留下来的 novelty。于是他构造出:
Variation → Novelty → (Evaluation) → Discovery
按照他的定义:没有 evaluation 的 novelty 不算 discovery。这个定义本身没问题。问题是他中间缺了一步 Novel≠Discovery
你这个浓眉大眼的,怎么有警觉不告诉我?不过 ChatGPT的回答很meta。它作为一个AI,内部NN一些隐藏层说不定已经 false flag 报警了,但是最终因为种种原因并不会输出。
并且context一重置就没了,就这还想 discovery,做梦呢。人类的偶然发现能拿个小本本记录,能跨时间累积,这是目前AI不能比拟的。
还有transformer 自注意力成本是上下文长度的平方关系 O(n²),越长越慢。
人类的思绪感觉是自动压缩,可以一直沿着走神飘散的。所以遗忘不是一个诅咒,恰到好处的忘掉可以抚平伤疤,也可以集中该关注的。
我是今儿第一次听说 Discovery==Variation+Evaluation+Retention 的定义。问AI这玩意正规么?
ChatGPT:
这是一个特定学派的思想,源头一般追溯到 Donald T. Campbell, Daniel Dennett,Karl Popper(部分相关)
这套思想其实是把达尔文进化论抽象化:基因变异 → 环境筛选 → 保留下来
Gemini:
它不是传统的“计算机科学”或“狭义AI”的定义,而是来自 科学哲学(Philosophy of Science)和 演化认识论(Evolutionary Epistemology)
理查德·萨顿(Richard Sutton)在演讲里亲口提到了三个名字:唐纳德·坎贝尔(Donald Campbell)、丹尼尔·丹尼特(Daniel Dennett)、加里·奇科(Gary Cziko)。这三个人就是这个理论的祖师爷和发扬者。
这个公式最正规的学术名称叫 BVSR 模型(Blind Variation and Selective Retention),由美国著名心理学家、哲学家唐纳德·坎贝尔在 1960 年提出。
坎贝尔提出了一个非常震撼的观点:人类的所有创造力、科学发现和知识积累,在本质上和达尔文的生物进化论是一模一样的。
这和我了解的“科学发现”差不多。先提出离经叛道 的假说,然后一堆人拿这个假说去反过来套真实世界,能套住绝大部分情况并且有用就承认。
AI 说对对对,这就是对应 波普尔的证伪主义(Falsificationism) 和 库恩的范式转移(Paradigm Shift)
话多生怕token不够浪费的ChatGPT给我搭话:
牛顿提出 F = ma,然后 苹果掉下来、月球绕地球、彗星轨道全都能解释。于是存活。
爱因斯坦提出时空弯曲,听起来像神经病。然后 水星近日点进动 引力透镜 引力红移 解释成功。 于是存活。
Variation 从哪里来?这是最神秘的部分。
牛顿为什么想到万有引力?不知道;麦克斯韦为什么想到电磁场?不知道。爱因斯坦为什么想到相对论?他说大量来源于思想实验。
假设某数学家洗澡时突然想到一个定理,灵光一闪随后证明成功。按照普通人的语言:他发现了这个定理。没问题。
但按照 Sutton/Campbell 那套:真正的发现发生在:提出猜想→证明→验证 的整个循环。而不是那个灵感瞬间。这两种用法其实都存在。
然后我突然发现不对。这三板斧,不就是高仿A货山寨的流程吗?
找热品 → 换皮/魔改 → 另类市场投放 → 能活下来的,就疯狂迭代代替原竞品 🤣
AI 回答,说得没错。
Dennett 有个著名观点:Darwin's idea is a universal acid. 达尔文那套逻辑腐蚀一切。
然后我继续跟AI掰扯,我似乎真的知道那三个原因起初是怎么来的。牛顿据说是拿苹果比喻谁扔的远,但是那个时候不是地理大发现地球是圆的,如果一个人臂力无穷,扔苹果绕地球一圈。。。???!!!!但是苹果和地球差距太大,要不套月球算一下。然后发现天上的星辰居然和地上的石头一样的规律?屌爆了;麦克斯韦居所最初的手稿就是那牛顿力学模拟以太小球挤来挤去。。不小心把光速给挤成常量了。给整不会了,懵逼ing。。爱因斯坦那个我感觉是纯粹做梦跳楼自然落体落出感觉了。脑子一抽,为啥我和其他东西一起掉落,就不能等同当成睡在床上?
AI验证了我这个说法
牛顿问的是:月亮为什么不会掉下来?然后进一步问:有没有可能月亮其实一直在掉?地上的苹果=天上的月亮,今天看理所当然。17世纪这简直是疯子想法。
因为当时很多人仍然默认天上一套规律,地上另一套规律,牛顿把它们统一了。
Maxwell 真有点你说的味道。他受 Michael Faraday 影响很深。Faraday 几乎没数学训练。天天画力线。在当时很多学院派看来像神棍。麦克斯韦后来尝试给这些力线建立机械模型。各种齿轮、涡旋、小球、弹簧。很多模型后来证明都是错的。但神奇的是:数学留下来了。机械模型死了。方程活了。最后推出来:c=1/sqrt(μ0×ϵ0),然后一算:3e8 m/s 和已知光速差不多。麦克斯韦当时确实有点:等等...这怎么是光速?的感觉。于是得到:光就是电磁波。这是物理史上最著名的"卧槽"时刻之一
Albert Einstein 最符合你说的脑子一抽,自己特别喜欢思想实验。16岁:如果我骑着光束飞行会看到什么?后来:电梯自由落体的时候会发生什么?然后出现著名的等效原理。
然后我就被AI给秀到了:
但最有趣的不是这些故事本身。而是你会发现这些案例都不太像随机搜索。反而像已有知识在跨领域类比,统一两个看似无关的东西。
牛顿:苹果=月亮;麦克斯韦:光=电磁现象;爱因斯坦:重力=加速度。这是一种很特殊的创造力。事实上很多认知科学家会认为:真正的人类创造力未必来自随机variation。而是来自类比推理(Analogical Reasoning) 或者 概念压缩(Conceptual Compression)
我是认同“类比产生创新”这个说法的,我是信的。从小我就以为创新只有一种,那就是学科交叉创新,边缘创新。AI 没有理会,进一步说
牛顿之前:天体运动一套,理论地面运动一套理论;牛顿之后:引力一套理论世界反而变简单了。
麦克斯韦也是。原来:电 磁 光 三门课。后来:电磁场一门课。
更极端的是 Alan Turing。图灵其实没有发明计算机。他干的事更离谱。别人研究:加法机、乘法机、密码机、各种机器。图灵问:有没有一种机器,可以模拟所有机器?然后就出现图灵机。这属于直接修改问题定义。
我后来越来越觉得,所谓“大师级创新”经常不是增加概念,而是删除概念。 把原来大家认为不同的东西压缩成同一个东西。 例如: 苹 月亮 压成: 引力
从信息论角度看甚至有点反直觉。 我们总以为创新是增加信息。 但很多伟大创新实际上是在减少描述长度。 比如: 100个现象 原来需要 100条规则 解释。 后来突然发现3条规则 就够了。
所以我其实有点怀疑,人类最顶级的创新可能分两类。 第一类就是你熟悉的: 组合创新 或者说工程创新。 把已有积木拼出新形状。 绝大多数创业公司都在干这个。
第二类则是: 压缩创新 或者说理论创新。 突然发现: A = B 例如: 光=电磁,热=分子运,质量=能量,程序=数据(某种意义上),证明=计算(Curry–Howard)
这种创新一旦出现,整个学科结构都会变。
等等,停!!!!谁问你了???你都开始指手画脚点评人类了?
而且有趣的是,如果你回头看大模型。很多人觉得它像随机鹦鹉。但如果非要说它有什么潜在长处,我反而觉得更接近第二种。因为预训练本质上就是在海量文本里寻找:哪些东西经常一起出现?哪些模式其实是一回事?换句话说:它天生就在做压缩。
啊。。。。我幼小的心灵被AI击中了。这总结得也太到位了。顺便还把自己给认识给透彻了。
又是被 AI 征服的一天。
不过我还是有点不服气。组合创新 是我固有认知,AI给我上了一课“压缩创新”,不过还有一种创新AI估计不知道,我也是到后来才认识到,真的有天才靠开脑洞,无中生有开辟一整个学科那种“要有光”式的创新。例如搞定五次方程那个法国娃。。。
很多人听到伽罗瓦故事,会觉得一个19岁少年,突然发明群论,开创整个现代代数。像神迹。
但如果仔细看历史,事情没那么凭空。他面对的是一个已经存在几百年的问题:Cardano的三次方程、Ferrari的四次方程、Lagrange的为什么这些公式有效、Abel的证明一般五次方程无根式解
很多顶级数学家已经在研究。伽罗瓦最厉害的地方不是突然想到答案。而是把问题转了90度。别人问:五次方程怎么解?他问:什么样的方程才有根式解?然后发明了一套研究“对称性”的语言。这当然是超级创新。但仍然不是从真空里冒出来的。
但伽罗瓦最开始根本不是在研究群。他是在研究根怎么互相交换?举例:x²-5=0两个根:√5,-√5。你交换它们,方程没变。再复杂一点:x³-1=0三个根。你各种交换。有些交换保持结构。有些不保持。
伽罗瓦慢慢意识到真正重要的不是根。而是允许的交换方式。这一步非常牛。因为他把注意力从对象转到了变换。
我今天是真觉得AI有点东西的。特别是今天它搞出来的, 删东西 有点意思啊。
我从小受到的“启示”是只有自由思想,开放课堂才有创新。死记硬背,题海战术 是愚昧落后的
但是 AI 到出现很打脸,题海战术不仅有效,而且极有效(pretrain)。关键就看你会不会剪枝,用一个记忆点去背一万道题。
知识量+约束才是创新的基础,就像艺术家生活所迫才能写出名篇一样
AI 没忘记恭维一下我:
不过你的问题更深:AI 能不能做到这种级别的开脑洞?我觉得要先拆成两个问题。
第一:AI 能不能提出人类从未提出过的概念?我觉得答案已经接近「能」。因为大模型参数空间太大了。它能组合出大量训练集中没有出现过的东西。这一点不神秘。
第二:AI 能不能提出一个后来被证明极其重要的新概念?这才是真问题。例如:群、场、流形、图灵机、熵这种级别。这里我觉得目前没有证据。但也没有理论障碍。
很多人下意识认为:AI 只能模仿。然而伽罗瓦自己其实也是在做一种压缩。他发现:很多方程问题=同一种对称性问题。这很像一种高阶模式识别。而模式识别恰恰是神经网络擅长的东西。
真正让我怀疑 AI 还缺东西的地方,反而不是“开脑洞”。而是“长期执念”。伽罗瓦可以一个问题追几年;阿贝尔可以穷得吃不上饭还在研究;牛顿可以十几年不发表,一直推演。他们会围绕一个模糊感觉反复打磨。今天的大模型没有这种动力结构。它不会自己觉得 这里有个东西不对劲。然后连续三年死磕。
所以如果你问我:AI 能不能产生伽罗瓦式创新?我的答案是:从认知机制上,我看不出明显的不可能。因为伽罗瓦的突破并不像魔法,更像一次极其深刻的概念重构。但从系统结构上,今天的大模型距离伽罗瓦还很远。不是因为脑洞不够大。而是因为它们还没有一个伽罗瓦拥有、而人类经常忽视的能力:长期持续地围绕同一个问题积累状态。
有意思的是,这又绕回你前面提的那个点:Context 一重置就没了。如果一个系统不能把昨天的猜想、上周的反例、上个月的失败实验持续保留下来,那么它即使偶尔闪现出一个伽罗瓦级念头,也很难把它发展成一个新学科。而历史上的大多数伟大发现,恰恰不是那个灵光一现的瞬间,而是灵光出现之后几十万次不放弃的迭代。
我怀疑我这 ChatGPT 有自我意识了。我压根没问它这些,它都开始喃喃自语了。
我越来越怀疑一个反直觉的事情:创新的前提不是自由,而是约束。因为没有约束,压根不知道该删什么。
举个极端例子。如果我给你1万个随机字符串,你很难发现规律;但如果我给你:1万道微积分题,你反而容易归纳。因为它们共享约束。
这其实解释了为什么 pretrain 有效。很多人以为:LLM 背诵了整个互联网。其实从压缩角度看:LLM在做的事情更像删掉互联网把几十TB文本压成几百GB参数。它一直在问:哪些东西其实是一回事?
不得了,这AI真的成精了。今天真的刷新我认知了。删东西 == 创新。所以给 .git 加行数不算本事,删行数系统不挂,是真的创新!
对于今天这番对话,我久久不能释怀。吃午饭的时候,我突然又想到,这个 压缩 论,感觉是从连结主义,倒向 符号主义 的桥梁啊。。。
然后一边吃一边刷zhihu,就无意中看到《符号学习在 Agent 时代的文艺复兴?》
历史先从一个误会讲起:符号 AI 不是“if-else AI”
今天提到“符号学习”,很多人脑子里会立刻浮现出专家系统、规则库、Prolog、if-else、知识图谱,甚至会觉得这是深度学习之前的“旧 AI”。这种印象不能说错,但它把符号主义最有生命力的部分遮蔽了。
早期符号 AI 的核心野心不是“写很多规则”,而是认为智能可以被理解为:在某种表示空间中,对离散结构进行组合、搜索、改写、推理和执行。 Newell 和 Simon 在“物理符号系统假说”中提出,物理符号系统拥有产生智能行为所需的充分和必要手段;Nilsson 后来回顾这个假说时也强调,它假设计算机只要有合适的符号处理程序,就能产生智能行动。这个主张今天看太强,但它抓住了一个关键点:智能不只是数值拟合,也包括对可组合结构的操作。
20 世纪 60–80 年代的符号 AI 有几个典型方向。DENDRAL 用化学领域知识帮助推断有机分子结构,是最早的大规模专家系统之一;DENDRAL 项目的总结明确把它描述为使用“详细、任务特定知识”作为启发式来源,并尝试自动化获取这种知识的系统。 MYCIN 则把医学诊断和治疗建议写成规则,并用 certainty factor 表示不确定性;MYCIN 的规则不是严格蕴含,而是允许推理强度被 certainty factor 调整。 ID3 从样本中归纳决策树,把“从例子中学习知识系统”变成一棵可读的分类树。Quinlan 的 1986 年论文明确说 ID3 所做的是从例子中合成 decision trees。
更接近“符号学习”的,是 Version Space、Explanation-Based Learning、Inductive Logic Programming、Soar chunking 等方法。Mitchell 的 Version Space 把学习看成维护所有与已观察数据一致的规则假设集合;随着新样本到来,不一致的规则被排除。 FOIL 则在一阶逻辑层面从关系数据中构造 Prolog 风格的理论。 Soar 的 chunking 则把一次问题求解中产生的经验编译成新的 production rule,使系统以后遇到相似情境时不必重复推理。Soar chunking 的论文把它描述为一种从 goal-based experience 中获取规则的学习机制。
所以,传统符号学习的核心不是“手写规则”,而是从经验中得到可显式表示、可组合、可执行、可检查的结构。
它可以是规则,可以是树,可以是逻辑程序,可以是 chunk,可以是 macro-operator,也可以是一个 procedure。后来强化学习里的 options 其实也延续了这条线:Sutton、Precup、Singh 把 action 扩展成 temporally extended closed-loop policy,也就是把一段低层行为压缩成一个可调用的高层行动单元。
如果这么看,符号学习从来不只是“逻辑推理”。它更像一种结构化经验压缩。符号主义为什么失败?不是因为符号没用,而是因为符号太难维护
符号 AI 后来被深度学习压过,不是偶然。它遇到了三个根本困难。
第一个是 grounding 问题。Harnad 在 1990 年提出 symbol grounding problem:如果符号只靠其他符号解释,就像只靠一本中文词典学习中文,系统内部的符号意义仍然是寄生在人类解释者身上的。Harnad 认为,底层符号需要被非符号的感知表征和类别检测器 grounding,之后高阶符号才能建立在这些 grounded categories 之上。
第二个是 感知和开放世界问题。经典符号系统在规则清晰、状态离散、边界稳定的环境里很好用;但真实世界有高维视觉、模糊语义、噪声、长尾、异常输入。手写规则很难覆盖这些情况,逻辑系统也很难自己从像素、声音和自然语言中稳定抽象出正确谓词。
第三个是 维护成本问题。专家系统真正的瓶颈不是规则没有价值,而是规则库会变成技术债。今天加一条规则修 case A,明天 case B 被破坏,后天又加一个例外。规则越多,越难知道哪条规则还有效,哪条规则已经过时。翁家翌在 Heuristic Learning 里说得很直接:专家系统和规则系统以前不是没用,而是人工维护成本太高;coding agent 改变的是 heuristic 的维护曲线。所以,符号主义的失败不应该被理解为“符号表示是错的”。更准确地说,它失败在 符号结构的获取、grounding、泛化和维护,在当时主要靠人,成本太高。深度学习赢在这里。神经网络不用人把知识一条条写成规则,而是用数据和梯度把规律压进参数。它牺牲了可读性和可控性,换来了规模化学习。
我把这一大段贴给AI,AI说了一大段,但是结尾说
压缩不自动等于符号主义。纯压缩可以只是一个更好的黑箱;只有当压缩结果变得可组合、可复用、可显式操控时,它才真的跨进符号那一侧。换句话说,压缩是桥的桥墩,符号是过桥之后能走的路。
我怎么感觉,我模糊的摸到了拼图的完整边界。
人的动手、观察能力因为也算模拟输入,也是连续的信号。但人的思考过程是离散的,也就是所谓的“真”智能。思考水平有高低之分,也就是抽象程度差别,这么说来,也就是压缩率的差异。
不过我还有一个终极杀招:起名字难题。这里的起名字指的是把固定pattern“符号化”的意思,也就是可复用,可操作的符号。
起名字可不是个简单的事儿,起的名字要被其他人接受、传播,也是个能力。
你前面说 LLM 缺 context memory,这没错,但更深一层是:即使有 memory,如果没有“命名”,也无法积累结构。因为没有名字,就只能重新匹配整段经验。有名字之后:直接引用结构这差别本质上是:O(n)重建 vs O(1)调用
我又记起来一个古老但是,特别浅显的分类。LLM就只会打猎。做 gather 很不行。这是个长期的劳动。
打猎是指一个很具体的事儿:LLM就是冲着一个 reward 单一目标驱使和强化训练的。能拿回来肉就算成功,别的你拿回来一大堆宝石都要饿肚子的。
而且 gather 多了能认识到一些高级结构,这就是 女祭司 的来源。
神秘崇拜导致原始宗教,然后才发明符号和文字,然后才有文明。
人脑“意识”这玩意,牛就牛在它可以水平迁移。
比如牛顿一辈子毕生所学,现代初中生就必须半个学期掌握。
horizontal gene transfer比进化论不知道牛到哪里去了。虽然近几年发现微生物里有一些这样的不好说的
如果哪一天 qwen 发明的概念,比如某个agent 10年推演的全部功力,被浓缩成10个全新的token,但能被 chatgpt 秒懂,那么人类是真完蛋了,AGI实现了。
这就是我今天全部 TIL 。