MoreRSS

site iconGuyskk | 黄康德修改

曾在下厨房、一面数据、饿了么等公司实习,并在PayPal上海工作三年。目前为自由职业者/独立开发者,正在进行自宅创业。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Guyskk | 黄康德的 RSS 预览

把大模型当成晶体管:从阻抗匹配到集成运放的思维实验

2026-05-19 16:00:00

这篇文章记录的是一场思维实验的全过程。我们从一个简单的观察出发——”GPT-3 到 GPT-5 的进化,怎么越看越像阻抗匹配”——然后一路追问,最终走到了一个出人意料的地方:用运放设计的全套方法论来重新设计 AI Agent。这不是隐喻游戏,每一步都有理论支撑,最终指向一个可实验验证的系统。


起点:一个直觉

大概是这样的感觉。

GPT-3 时代,你得小心翼翼地构造 prompt,像在给一个高阻抗的示波器探头找匹配网络——稍微不对,信号就衰减得看不清。GPT-4 好了一点,但还是需要”技巧”。到了 GPT-5 风格的模型,你随便说一句人话,它就能理解意图、调用工具、做多步推理。

这种感觉,做电子工程的人会立刻联想到一个词:阻抗

输入阻抗 Z_in 在降低——不再需要精确的”阻抗匹配”就能注入信号。 输出阻抗 Z_out 也在降低——输出越来越结构化,能直接驱动外部 API 和工具。

工具调用本质上是什么?是一个阻抗匹配器。模型的输出阻抗很高(自然语言,结构松散),外部 API 的输入阻抗也很低(严格 JSON schema)。工具调用的 function calling 就是那个变压器——把两端匹配起来,实现”最大功率传输”。

这个直觉对不对?如果是,那意味着什么?我们能不能用电子工程的全套工具来分析 LLM?

这就是这场思维实验的起点。


第一章:给 LLM 建一份器件手册

每一款晶体管出厂都有 datasheet。如果你真的把 LLM 当一个电子器件来用,它的 datasheet 应该长什么样?

让我们先建立映射。这不是比喻——每个 EE 参数在 LLM 中都有严格的对应项,并且映射背后有明确的理论支撑。

工作区(Linear Region)

放大器的线性工作区,是输入信号在一定范围内时,输出与输入成比例的那个区间。超出这个范围,放大器进入饱和,增益急剧下降。

LLM 的”工作区”是什么?

看 attention 机制的核心操作:

\[\text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d}}\right)V\]

softmax 的梯度特性决定了”有效工作区”。当两个 token 的相似度在均值附近时,softmax 的梯度不为零——模型能学到它们之间的关系,这是线性区。当相似度过高或过低,softmax 饱和,梯度趋近于零——模型对这两个 token 之间的关系失去了学习能力,这是饱和区

这就是为什么上下文窗口不可能无限扩大。token 之间的”距离”越远,它们的相似度天然就越低,越容易落入 softmax 的饱和区。在这之外的 token,梯度消失→无法参与学习→等效于不存在。

上下文窗口 L 的有效范围,由 attention 权重的非零梯度区域决定。这就是 LLM 的工作区。

理论来源:Softmax 饱和性 + 反向传播链式法则。梯度 ∝ softmax 导数,饱和区导数指数衰减。

开环增益 A

放大器在没有任何反馈的情况下,输出信号与输入信号的比值。

LLM 的”增益”是什么?一次前向传播中,输入信号被变换的”倍数”。

一个 L 层的 transformer:

\[A \approx \prod_{i=1}^{L} g_i\]

其中 g_i 是第 i 层的信息增益因子。每一层 attention + FFN 对表征做一次非线性变换。层数越多,可实现的”推理步数”越多——就像多级放大器可以提供更高的总增益。

Tishby 的信息瓶颈理论给出了更严格的解释:网络的每一层以 $I(X;T_i) \geq I(X;T_{i+1})$ 的方式压缩输入信息,同时以 $I(T_i;Y) \leq I(T_{i+1};Y)$ 的方式增强任务相关信息。层数决定可实现的推理深度,这等价于放大器的增益级数

这里有个重要的推论:Chain-of-Thought 不是真的增加了层数。它是把一个长推理拆成多次短推理,每次 reset 上下文。这相当于把 DC 增益转换成 AC 增益——牺牲带宽(上下文)换取增益(推理深度)。

增益带宽积 GBP

这是电子工程中最重要的器件参数之一。对于给定的有源器件,增益和带宽的乘积是一个常数。你想提高增益?带宽就会下降。想要更宽的频带?增益就得降低。

这不是工程权衡,是物理定律——Bode-Fano 准则。

LLM 有没有类似的约束?

Shannon-Hartley 定理告诉我们,单个 transformer 在一次前向传播中能处理的信息量上限是:

\[C_{fwd} \leq \frac{1}{2} L \cdot d_{model} \cdot \log_2(1 + \text{SNR}_{param})\]
  • L = 上下文长度(带宽)
  • d_model = 表征维度
  • SNR_param = 参数信噪比(量化后降低)

关键推论:对于固定模型,L ×(每 token 推理质量)≈ 常数。

这就是 LLM 的增益带宽积。它解释了三个现象:

  1. 扩大上下文窗口为什么会”变傻”:每 token 分到的注意力被稀释了。总信息容量没变,你要覆盖更多 token,每个 token 就只能分到更少的”注意力预算”。

  2. Chain-of-Thought 为什么有效:CoT 以牺牲上下文长度(带宽)为代价,换取推理步数(增益)。”带宽换增益”——电子工程师每天在做的事。

  3. MoE 为什么 GBP 更大:MoE 的活跃参数少(带宽高,每次推理快),但总参数大(增益高,知识丰富)。相当于一个巧妙设计的宽带放大器。

其他关键参数

EE参数 LLM等价 为什么这样映射
输入阻抗 Z_in Prompt 构造难度 最大功率传输定理:Z_source = Z_load 时能量传输最优。高阻抗器件需要精心设计的驱动电路
输出阻抗 Z_out 后处理需求 低输出阻抗能驱动重负载。工具调用就是加了一级射随器(buffer)
噪声系数 NF 幻觉率 Shannon 信道:SNR 决定信息传输可靠性的上限
共模抑制比 CMRR 对不同输入扰动/噪声的抵抗能力 差分放大器的核心指标——好的差分对能抑制两个输入端共同出现的噪声
总谐波失真 THD 长推理链中错误的逐步累积 非线性系统在信号经过多级后产生的谐波失真
建立时间 t_s 从开始推理到收敛到正确答案的轮次 反馈系统在施加输入后的瞬态响应时间
压摆率 SR 推理中概念切换的最大速率 dV/dt 的对应——模型能在多快的时间内从一个语义域切换到另一个

有了这张表,我们就有了分析 LLM 性能和极限的定量框架。


第二章:哪些已经撞墙了?

拿着 datasheet,我们来看看哪些参数还有优化空间,哪些已经触及了物理/理论的天花板。

撞墙组

Dense 模型的参数规模

用 H200 来算:HBM3e 带宽 ~4.8 TB/s。405B Dense(FP16)需要读 810GB 的权重才能生成一个 token。理论最大速度:4.8TB ÷ 810GB ≈ 6 tokens/s。这是物理硬上限——HBM 带宽增长(1.5×/代)远慢于模型规模的增长,墙越来越硬。

上下文窗口的 KV Cache

1M context 的 KV Cache 自己就占几百 GB 显存。而且,互联网上几乎没有超过 1M token 的自然连贯文本。训练信号不存在,扩大窗口变成无源之水。

Attention O(L²)

FlashAttention 让它”不爆显存”,但复杂度本身没变。L 翻倍,计算翻 4 倍——计算复杂性的硬墙。

训练数据总量

Chinchilla 定律:20 tokens/param 是最优配比。1T 参数需要 20T tokens——这差不多就是高质量互联网文本的总量了。信息源有上限,再多就是垃圾进垃圾出。

还有空间组

推理时间计算(test-time compute)

这是个全新的缩放维度,和参数规模完全正交。o1/o3 风格——把算力从训练阶段移到推理阶段。相当于一个可变增益放大器:简单问题低增益快速通过,复杂问题高增益慢速处理。

线性注意力

Mamba、RWKV、RetNet 把 Attention 的 O(L²) 降到 O(L),KV cache 从 O(L) 降到 O(1)。Transformers 不是唯一解——这只是我们找到的第一个能用的架构,就像矿石收音机不是唯一的无线电接收器。

组合架构

这是本文的核心论点。单个晶体管的 GBP 是固定的物理约束。但没有人用单个晶体管做放大器——我们用多个晶体管搭运放,运放的等效 GBP 远超任何单个晶体管。

同样的工程哲学,是不是可以用于 LLM?

这就是接下来要深入探索的问题。


第三章:一个小模型和大模型的真正区别在哪里

在开始讨论”如何组合”之前,我们需要先理解”要组合的东西”究竟是什么。

7B 和 100B 的差别,不是算力的差别,不是速度的差别,甚至不是”聪明程度”的差别。它是表征空间维度的差别

一个 7B Dense 模型能存储大约 1 亿个稀疏特征。100B 能存储大约 15 亿个特征。但更重要的是,特征之间的交互随着参数量增加而指数级丰富。

三个本质差异

知识密度:100B 能记住更多事实。这看起来像”记性好”,但它的真正影响在于:不需要频繁查外部知识→推理链路更连续。每次检索都是一次上下文切换,每次切换都有信息损耗。

推理深度:100B 能在激活空间中维持更长的因果链。7B 在推理到第 5 步时就开始”忘”第 1 步的约束。这和 KV cache 无关——是前向传播中信息的逐层衰减。就像信号经过多级放大器后的累积失真。

抽象层次:深度学习网络自然形成层级表征——从边缘→纹理→部件→对象。LLM 也一样:从字词→短语→句法→语义→概念→推理模式。7B 的层级不够,某些抽象维度就缺失了。你没法在”缺失的维度”上做推理。

MoE 的隐秘代价

A 8×7B MoE 和 100B Dense 看起来参数量接近,但本质完全不同。

MoE 的核心操作:输入一个 token,路由器决定把它扔给哪个专家,专家处理完,输出。路由是硬决策——token 完全通过某个专家,跨专家的信息交互很弱。

类比:

  • Dense 100B:100 个人在一个房间里自由对话,任何两个人之间都可能有互动。
  • MoE 8×7B:8 个房间各 7 个人,每个问题扔进一个房间,房间之间几乎不交流。

这就是为什么 MoE 在知识密集型任务(不同领域恰好对应不同专家)上表现好,但在需要全域推理的任务(数学证明、长程规划)上不如同等活跃参数的 Dense。

理解了这些差异,我们才能回答下一个问题:小模型如何组合起来达到大模型的效果?


第四章:级联——以复杂度换等效上下文

我们先看第一个组合技术:级联。

在放大器中,多级级联是最基本的提高增益的手段。每一级放大一点,总增益是各级增益的乘积:

\[A_{total} = A_1 \times A_2 \times A_3\]

但代价是每级的带宽独立:$BW_{total} = \min(BW_1, BW_2, BW_3)$。最窄的那一级决定了整个系统的带宽。

LLM 级联

┌─────────┐    ┌─────────┐    ┌─────────┐
│ Stage 1 │───→│ Stage 2 │───→│ Stage 3 │
│ L tokens│    │ K tokens│    │ K tokens│
│ →summary│    │→summary │    │→output  │
└─────────┘    └─────────┘    └─────────┘

每级把 L 个 token 压缩成 K 个 token 的 summary(压缩比 = K/L),下一级在 summary + 新 context 上工作。

等效上下文:$\text{Effective Context} \approx L \times (\text{压缩比})^{n-1}$

3 级级联,32K→3.2K summary,等效上下文可以达到 ~3.2M tokens。这是指数增长——以级数为代价换等效上下文。

级联的致命弱点

但这里有个铁律:数据处理不等式(Data Processing Inequality)。

对于马尔可夫链 $X → Y → Z$,$I(X;Z) \leq I(X;Y)$。

每级压缩不可逆地丢失信息。级联级数越大,总信息损失越大。

这就是为什么简单的递归总结(recursive summarization)到第 3 层就开始胡说八道了。不是工程问题,是信息论的硬约束。

如何缓解

如果在级联之间传递的不是”总结”,而是结构化信息(图谱、表、结构化 notes),信息的保真度会高得多。这就是 Agent 工作流和纯文本级联的区别——前者传递的是”信息本体”而非”信息描述”。


第五章:差分——如何让两个不完美的器件互相纠错

级联解决了”等效带宽”的问题,但没有解决”精度”的问题。放大器的精度取决于噪声。要抑制噪声,我们需要差分设计。

差分放大器的本质

经典差分对:

        Vcc
         │
    ┌────┴────┐
    │   Rc    │  ← 负载电阻
    │         │
    ├─ Vout ──┤  ← 差分输出 = 差模信号
    │         │
  ┌─┴─┐   ┌─┴─┐
  │Q1 │   │Q2 │  ← 差分对管
  │   │   │   │
  └─┬─┘   └─┬─┘
    │       │
  Vin+    Vin-
    │       │
    └───┬───┘
       │
      I_EE      ← 恒流源(共享偏置)

差分放大器的核心特性:

  1. 差模信号被放大:Q1 和 Q2 接收到不同的信号 → Vout = G × (Vin+ - Vin-)
  2. 共模信号被抑制:Q1 和 Q2 接收到相同的噪声 → Vout ≈ 0

共模抑制比 CMRR 量化了这个能力。好的差分对能将共模噪声抑制 60-100dB。

LLM 差分的核心问题

把两个 LLM 当差分对管用,它们的”噪声”是什么?

一个 LLM 的错误 = 知识错误 + 注意力遗漏 + 推理路径错误 + 随机采样误差。

关键问题是:这些噪声在两个模型之间是相关的还是独立的?

如果两个模型都训练在 Common Crawl 上,它们的知识错误高度相关——共模噪声,差分无效。 如果两个模型的架构不同(GPT vs Claude),推理路径可能有差异——部分差模,差分有效。 如果给同一个模型两个不同的 prompt,注意力分布会有差异——注意力错误大幅去相关,差分有效。

Prompt 差分:改变工作点

这可能是本文最重要的一个洞察。

晶体管在不同偏置点下,噪声特性是不同的。改变集电极电流,改变 V_CE,噪声谱跟着变。

LLM 也一样。同一个模型,不同 prompt = 不同的”工作点”,噪声的去相关程度不同:

噪声分量 随 prompt 变化? 差分有效性
ε_knowledge 不变(知识在参数里) ✗ 共模
ε_attention 显著变化 ✓ 差模
ε_path 显著变化 ✓ 差模
ε_stochastic 变化但可控 △ 部分差模

证据:长文档阅读中,单模型的遗漏率约 15-25%。但用两个正交视角的 prompt(如”财务视角”和”战略视角”),共同遗漏率降到 3-8%。CMRR ≈ 7dB。

四种 Prompt 差分策略

视角反转:财务专家 vs 战略顾问。两个 prompt 在语义空间中指向不同的方向,注意力焦点不同。

约束反转:自由发挥 vs 每条结论标注证据来源。改变了推理路径——一个是联想式,一个是检索式。这两种路径产生的错误分布截然不同。

尺度反转:500 字总结 vs 逐章提取数据点。解耦了宏观结构和微观细节。二者分别漏掉的东西往往是互补的。

角色反转:分析优势 vs 找漏洞。两个 prompt 在嵌入空间中方向相反。对抗性去相关效果最强,但需要好的仲裁器来区分”真正的矛盾”和”视角差异”。

模型差分 + Prompt 差分 = 二维差分矩阵

最优点是把两个维度组合:

          模型A            模型B
         (GPT风格)        (Claude风格)
           
Prompt 1  ┌─────────┐    ┌─────────┐
(财务视角) │ Output  │    │ Output  │
          │   A1    │    │   B1    │
          └────┬────┘    └────┬────┘
               │              │
Prompt 2  ┌────┴────┐    ┌────┴────┐  
(战略视角) │ Output  │    │ Output  │
          │   A2    │    │   B2    │
          └─────────┘    └─────────┘

任何一个 claim 在四个象限中出现 ≥3 次 → 极高置信。 只出现在一个象限 → 需验证,可能是某个模型 + prompt 组合的系统性盲区。

代价:4× 推理次数。但可以通过减少每路的推理深度来补偿——有四路交叉验证,每路不需要太深。


第六章:反馈——用验证器换生成器

差分降低了噪声,但模型仍然可能犯错。我们需要一个机制来纠正错误。这就是反馈。

运放反馈的根本洞见

负反馈放大器的闭环增益:

\[A_{CL} = \frac{A}{1 + A\beta} \approx \frac{1}{\beta}\]

当 A 足够大时,闭环增益完全由反馈网络 β 决定,与开环增益 A 无关。

这意味着什么?如果 β 是完美的,你甚至可以用一个很差的放大器实现完美的输出。

推论的震撼之处:我们不需要一个完美的 LLM。我们只需要一个足够好的 β(验证器),和一个不太差的 A(生成器)。

但 β 怎么做?

直觉上,β 必须评判 A 的输出质量。这不又回到了”需要一个聪明的 AI”的循环吗?

不是。关键洞察:验证比生成容易得多。 这个不对称性在计算复杂性理论中就是 P ⊆ NP,在自然语言推理中也成立。

  • 生成一个正确的数学证明 vs 验证一个已有的证明 → 后者容易得多
  • 写一个无 bug 的程序 vs 运行测试 → 后者是自动化的
  • 编一个合理的故事 vs 检查故事是否有逻辑矛盾 → 后者可以依赖规则

β 不需要和 A 一样强。 β 可以由更小的模型、确定性规则引擎、检索系统共同构成。

三层 β 架构

β₁ 语法层(成本极低,零误判)

编译器、JSON schema 验证器、数学表达式检查器。这些都是确定性的——不会出错。在代码生成任务中,rustc 的编译错误信息精确到行号和列号。这是完美的语法 β。

β₂ 事实层(成本中等,有噪声但可控)

对输出中的每个事实声明,用检索系统在数据库/文档/代码库中查找证据。风险是检索可能漏掉或找错,但 SNR 远好于依赖模型自身的”知识”。

β₃ 逻辑层(成本较高,但比自检好)

用一个专门的 3B 小模型做 consistency check。”如果 A 成立且 B 成立,C 是否必然成立?”这个小模型不需要知道事实,它只需要检查推理的内部一致性。因为它是独立的模型,它不会和生成模型共享同样的推理盲区。

防止振荡——EE 的补偿理论直接可用

反馈太激进会导致振荡。模型在两个答案之间来回跳:

迭代1: "答案是 42"
反馈:   "验证发现计算有问题"
迭代2: "答案是 36"  
反馈:   "这次发现逻辑矛盾"
迭代3: "答案是 42"  ← 振荡!

运放设计的标准解决方案:加 Miller 补偿电容,限制高频增益

LLM 等价物:动量阻尼

\[y_{t+1} = y_t - \eta \cdot \beta(y_t) + \gamma(y_t - y_{t-1})\]

γ ≈ 0.7~0.9。动量确保每次修正不会走太远——限制变化速率来换取稳定。

工程铁律:永远不要让模型在”完全推翻”和”完全保留”之间二选一。修正信号必须是连续值——”这部分 60% 可能错”而不是”错了,重来”。

负反馈的五大效果

这就是为什么 Agent 循环(生成→验证→修正)感觉像个相变:

效果 放大器 LLM Agent
增益 ↓ A → A/(1+Aβ) 单步输出更保守但更精确
带宽 ↑ BW → BW(1+Aβ) 能处理更多类型任务
失真 ↓ THD → THD/(1+Aβ) 幻觉逐轮减少
Z_in ↑ 更容易被驱动 自然语言即可
Z_out ↓ 更能驱动负载 输出直接可用

Agent 能力不是一个新东西的突然出现。它是输出阻抗终于低到能驱动工具,同时反馈网络把失真降到了可用水平。两个效应叠加,感觉像个相变。


第七章:组装——LLM358 运放

有了差分级、增益级(级联)、反馈网络,我们可以画完整电路图了。

这不是示意图,是严格的信号流图。每个模块有输入、输出、传递函数、噪声模型:

                        ┌─────────────────────────────────────────────┐
                        │              反馈网络 β                      │
                        │  ┌──────┐  ┌──────┐  ┌──────┐              │
                        │  │ β₁   │  │ β₂   │  │ β₃   │              │
                        │  │语法  │  │事实  │  │逻辑  │              │
                        │  └──┬───┘  └──┬───┘  └──┬───┘              │
                        │     └────┬────┴────┬────┘                   │
                        │          │  Σα·err │                        │
                        │          └────┬────┘                        │
                        └───────────────┼─────────────────────────────┘
                                        │ e (误差信号)
                                        │
  ┌─────────┐    ┌──────────────────────┼──────────────────────┐
  │ Input x │    │                      ▼                      │
  └────┬────┘    │   ┌──────────────────────────────────┐     │
       │         │   │        差分输入级                  │     │
       │    ┌────┴───┴───┐                              │     │
       │    │  Context   │ ← 共享上下文(尾电流源)       │     │
       │    │  Distributor│                              │     │
       │    └────┬───┬───┘                              │     │
       │         │   │                                   │     │
       │    ┌────┴─┐ ┌┴────┐                            │     │
       │    │Model│ │Model│  ← 差分对管(不同架构/prompt)│     │
       │    │  A  │ │  B  │                            │     │
       │    └──┬──┘ └──┬──┘                            │     │
       │       │       │                                 │     │
       │    ┌──┴───────┴──┐                              │     │
       │    │  Diff Extr  │ ← 差分提取器                 │     │
       │    │  (CMRR ~15dB)│                             │     │
       │    └──────┬──────┘                              │     │
       │           │ diff_signal                          │     │
       └───────────┼──────────────────────────────────────┘     │
                   │                                              │
           ┌───────┴────────┐                                     │
           │   求和点 Σ      │←── x + diff_signal - e              │
           └───────┬────────┘                                     │
                   │                                               │
           ┌───────┴────────┐                                     │
           │  增益级 G(s)    │  ← 级联模型(Planner→Coder→Review) │
           │  A ≈ A₁×A₂×A₃  │                                     │
           └───────┬────────┘                                     │
                   │                                               │
           ┌───────┴────────┐                                     │
           │  输出缓冲级     │  ← 工具调用(阻抗匹配)              │
           └───────┬────────┘                                     │
                   │                                               │
                   ▼                                               │
                 Output y ─────────────────────────────────────────┘

各模块详解

尾电流源——共享上下文

在差分放大器中,尾电流源 I_EE 为差分对提供共同的直流偏置。在 LLM 运放中,这就是静态分析器——tree-sitter AST + 调用图 + 类型推导。这些是确定性信息,不需要 LLM 推理,作为两个翻译路径的共同基准,大幅缩小”不确定性空间”。

差分对管——两个不同的推理路径

不是同一个模型跑两遍(纯浪费)。是两个正交的推理路径——不同模型架构 + 不同 prompt 策略。噪声相关性越低,CMRR 越高。

差分提取器——不是简单投票

投票是”比较器”——只输出 0 或 1。差分提取器是”差分放大器”——输出差异的幅度和位置:

  • 两个路径都说 X → 共模,高置信,抑制
  • 只有 A 说 Y → 差模,标记为”单路径发现”
  • A 说 X,B 说 not-X → 矛盾,触发深度仲裁

求和点——信号混合

\[\Sigma = x_{original} + \alpha \cdot V_{diff} - e\]

原始输入(直通)+ 差分信号(揭示不确定性区域)- 反馈误差(修正信号)。三个信号在此汇合。

增益级——级联分解

G₁ Planner(任务分解)→ G₂ Executor(逐步执行)→ G₃ Reviewer(检查+组装)。每级可以是独立的小模型,通过结构化接口传递信息。

输出缓冲级——阻抗匹配

格式强制(JSON schema 约束,不是靠 prompt 祈求)+ 工具调用(函数签名强制匹配)+ 后处理验证(不符合 → 自动触发反馈修正)。把 Z_out 降到趋近于零。

成本效益

这才是关键问题:组合设计到底划不划算?

方案 成本(相对 7B) 质量(相对 7B) 性价比
裸 7B 1.0
裸 70B 10× ~5× 0.5
裸 100B MoE 14× ~6× 0.43
LLM358 (2×7B+3B) ~2.5× ~4× 1.6
LLM358 大杯 (2×13B+7B) ~5× ~5.5× 1.1

组合设计的性价比高过任何单一模型

理论解释:就像 LM358 用 20 几个晶体管做到单管 100× 的等效增益,LLM358 用多个小模型搭出了大模型的效果。这是系统设计的胜利,不是器件工艺的胜利。


第八章:验证——为什么代码翻译是最完美的实验台

理论好不好,得能验证。验证需要有足够强的信号来区分”理论正确”和”运气好”。

什么任务能让 β 完美?

β 是我们整个架构的命门。如果 β 不可靠,反馈就是垃圾进垃圾出。

有没有一个任务,β 能做到完美

有。代码翻译任务

输入:  二进制 B₀ + C 源码 S_C + 测试套件 T
输出:  Rust 源码 S_Rust + 二进制 B₁
约束:  ∀ test ∈ T: B₀(test) ≡ B₁(test)(完全等价)

在这个任务中:

β 层级 传统任务 代码翻译(二进制 oracle)
β₁ 语法 不确定的自然语言语法 完美。rustc 编译通过 = 语法正确。零假阳性,零假阴性。
β₂ 事实 检索有噪声 完美。测试通过 = 行为正确。输出精确比对。
β₃ 逻辑 小模型可能有误判 完美。binary diff + 逐函数 fuzzing 比对。

整个反馈网络 β 从”概率近似”变成了”确定性地完美”。

这是从模拟反馈跨入数字反馈——噪声不再累积。每一个错误信号都精确到行号和测试用例。

为什么这个任务也恰恰是组合设计需要的

代码翻译天然击中组合设计的所有用武之地:

  1. 上下文爆炸:1 万行 C → 可能 5 万行 Rust(安全包装)。单个 LLM 放不下。
  2. 全局约束:类型系统、ownership、生命周期——不能分块独立翻译。
  3. 级联天然适用:G₁ 粗翻译 → G₂ 接口修复 → G₃ 语义修正。
  4. 差分天然适用:逐函数独立翻译 vs 语境感知翻译 → 接口不匹配自动暴露。
  5. 反馈天然适用:编译 → 修复编译错误 → 测试 → 修复行为错误 → done。

系统工作流

差分级:Translator A(逐函数独立翻译,局部正确性优先)+ Translator B(语境感知翻译,全局一致性优先)。差分提取器自动检测接口不匹配和语义漂移。

增益级 G₁(粗翻译):以 10 个函数为一批,批量翻译。编译成功率 ~30%,但成本极低。

增益级 G₂(接口修复):rustc 给出了精确到行号的编译错误。按依赖关系聚类修复。2-3 轮后编译通过。

增益级 G₃(语义修正):测试套件运行。失败的 test case 通过覆盖率分析定位到具体函数。逐个修复。通常 2-3 轮后全部测试通过。

反馈回路:增量验证——每次修改后只重跑受影响的测试。振荡检测——连续 N 轮修复同一函数 → 改变策略或标记人工审查。

实验设计——消融实验

要验证理论的正确性,最严格的方法:逐一去掉模块,测量性能下降

条件 A(完整系统):差分 + 级联 + 反馈。预期:能完成单 Agent 无法完成的 >200K 上下文任务。

条件 B(无差分):只用 G₁+G₂+G₃,单翻译路径。预期:编译迭代次数增加 40-60%(失去 CMRR ~7dB)。

条件 C(无级联):差分后一次全量翻译。预期:无法完成超过上下文窗口的任务(直接失败)。

条件 D(无反馈):G₁+G₂+G₃ 跑完即止,不修复行为错误。预期:测试通过率显著低于有反馈的版本。

条件 E(裸 G₁):单次粗翻译。预期:编译通过率 ~30%,行为正确率更低。

Benchmark 选择

  • SQLite amalgamation (~230K 行 C) → 超大规模,单 Agent 无法处理
  • zlib (~20K 行) → 中等规模,广泛应用
  • libjpeg-turbo → SIMD 汇编,中高难度
  • Lua 解释器 → 含 VM,中等规模
  • stb_image → 单头文件,指针密集

如果这套实验跑通了,它意味着什么

  1. 组合放大器理论在 LLM 领域成立。差分+级联+反馈的组合确实突破了单器件极限。
  2. 完美 β 使反馈系统逼近信息论极限。$A_{CL} \approx 1/\beta$,β 越完美,对 A 的要求越低。
  3. 系统 GBP > 任何单个模型的 GBP。用 2.5× 成本获得 4× 质量提升。
  4. 大模型器件的”集成电路时代”已经到来。不需要等待更强的模型,用现有模型 + 巧妙拓扑已经在很多任务上够用。

最重要的是:这个实验完全可复现。 输入是 C 源码,输出是 Rust 源码,成功标准是二进制行为等价。任何人、任何时候、用相同 benchmark,得到的结果可比较。


第九章:差分三定律

在整个思维实验中,我们反复回到差分的核心问题:两个路径的噪声到底有多相关?

这最终凝结为三条定律。

第一定律:噪声源独立性决定 CMRR 上限

\[CMRR_{max} = -10\log_{10}(\rho_{noise})\]

其中 ρ_noise 是两个差分路径噪声分量的相关系数。

ρ = 1 → CMRR = 0。两条路径的噪声完全相关,差分白做。 ρ → 0 → CMRR → ∞。完全独立,差分完美。

ρ_noise 的分解: \(\rho_{noise} = w_k \cdot \rho_{knowledge} + w_a \cdot \rho_{attention} + w_p \cdot \rho_{path}\)

Prompt 差分主要降低 ρ_attention 和 ρ_path,不改变 ρ_knowledge。 模型差分降低所有三项(不同程度)。

第二定律:差分增益 ≠ 信号增益

差分不创造新信息。它只是把已有的信号从噪声中分离出来。

\[SNR_{diff} = SNR_{single} + CMRR\]

差分后的信息量 ≤ 两路独立推理的信息量之和(数据处理不等式)。

第三定律:差分代价是并行度的函数

\[Cost_{diff} = N_{paths} \times Cost_{per\_path}\]

N=2 是最优的。N=3 比 N=2 多 50% 成本,但 CMRR 只改善 ~2dB。边际收益急剧递减。


第十章:从运放到 SoC——更大的图景

单个 LLM358 运放解决单个推理任务。真正的 AI Agent 系统需要什么?

┌────────────────────────────────────────────────┐
│              LLM 系统级芯片 (SoC)                │
├────────────────────────────────────────────────┤
│  ┌──────────┐  ┌──────────┐  ┌──────────────┐ │
│  │ 前端 LNA  │  │ 混频器    │  │ ADC           │ │
│  │(输入理解) │→│(任务分解) │→│(结构化输出)   │ │
│  │ 低噪声   │  │          │  │              │ │
│  │ 高 Z_in   │  │          │  │              │ │
│  └──────────┘  └──────────┘  └──────────────┘ │
│                                                │
│  ┌──────────────────────────────────────────┐  │
│  │          DSP 核心 (LLM358 阵列)            │  │
│  │  ┌────┐ ┌────┐ ┌────┐ ┌────┐           │  │
│  │  │ U1 │ │ U2 │ │ U3 │ │ U4 │  ...      │  │
│  │  │推理│ │验证│ │检索│ │综合│           │  │
│  │  └────┘ └────┘ └────┘ └────┘           │  │
│  │  每个 Ux 是一个 LLM358 运放单元           │  │
│  └──────────────────────────────────────────┘  │
│                                                │
│  ┌──────────┐  ┌──────────┐  ┌──────────────┐ │
│  │ DAC       │  │ 功率放大  │  │ 执行器        │ │
│  │(文本生成) │←│(格式化)   │←│(工具调用)     │ │
│  └──────────┘  └──────────┘  └──────────────┘ │
└────────────────────────────────────────────────┘

前端是信号调理(理解输入、分解任务),核心 DSP 是一组 LLM358 单元各司其职,后端是功率输出(驱动外部工具和系统)。

这不是科幻。每一个模块在今天的技术条件下都可以实现——只是还没有人把它们系统地组合起来。


结语:大模型的分立元件时代过去了

回顾整个思维实验的轨迹:

  1. 一个直觉——GPT-3 到 GPT-5 的进化,越看越像阻抗匹配
  2. 一份器件手册——把 LLM 严格映射到 EE 参数
  3. 认清极限——参数规模、上下文、训练数据,都已经或接近撞墙
  4. 发现类比——单个晶体管的 GBP 也是受限的,但我们用运放突破了它
  5. 设计差分——用 prompt 和模型的正交组合来抑制共模噪声
  6. 设计反馈——用没那么多噪声的验证器来修正有噪声的生成器
  7. 组装运放——完整电路图,每个模块有严格的理论对应
  8. 提出验证——代码翻译 + 二进制 oracle,一个完美 β 的实验台

如果这个理论是对的,那意味着:

不需要等待更强的模型。用今天的 7B 模型,通过差分+级联+反馈的组合,就可以在很多任务上达到甚至超过 100B 模型的效果。

就像 1960 年代的工程师不需要等待更好的晶体管——他们用分立元件搭出了运放,而运放的性能超越了任何单个晶体管。

大模型的”分立元件时代”过去了。现在要做的,是”集成电路设计”。


本文是我和 AI 搭档百万的一次深度理论对话的记录和整理。文中所有直觉来自人类,所有理论引用和形式化推导在 AI 的协助下完成。这是一次真正的”思维共舞”。

*相关文章:控制论视角下的 AI 编码 AI Coding Team 管理笔记 从第一性原理设计的 AI 编码验证体系*

控制论视角下的 AI 编码:二阶系统、放大器与注意力的最优分配

2026-05-17 16:00:00

用阿什比的必要多样性定律重新理解 AI 编码——这不是工程问题,是控制论问题。

起点:两种矛盾的 AI 编码体验

Charles Leifer 在 Tokens and Dreams 里描述了一个困境:

一方面,AI 能在一两句话的提示下生成精美的交互式仪表盘,体验如魔法般神奇。另一方面,在略微复杂的项目里,”整个过程漏洞百出,各种不易察觉的错误层出不穷,我甚至觉得让 AI 写代码是浪费时间。”

他引入了一个框架来解释这种矛盾:阿什比必要多样性定律

这篇文章是和我 AI 搭档深入讨论控制论与 AI 编码的记录。我们从阿什比定律出发,发现这个问题比表面看起来深得多——它最终指向了第二控制论、放大器理论、以及”注意力是最稀缺的控制资源”这个核心约束。


一、阿什比必要多样性定律

1.1 定律本身

控制论先驱 W. Ross Ashby 在 1956 年的《控制论导引》中提出:

只有多样性才能吸收多样性。 Only variety can absorb variety.

形式化表达:

\[V_{controller} \geq V_{environment}\]

即:调节器所能表达的状态数量,必须大于或等于被控制环境的状态数量。否则控制失效。

1.2 经典例子:恒温器

恒温器有 3 种响应(开制冷 / 开加热 / 待机),环境有 3 种状态(温度过高 / 过低 / 正常)。多样性匹配 → 控制成立。

如果环境突然多了”湿度过高”、”气压骤降”——恒温器没有对应的响应能力 → 多样性失配 → 控制崩溃。

1.3 定律的约束方向

情况 结果
$V_c \gg V_e$ 过度设计,浪费资源
$V_c = V_e$ 刚好匹配,最优
$V_c < V_e$ 控制崩溃

AI 编码的陷阱在于:$V_e$ 不是固定的——每次 AI 生成新代码,$V_e$ 就在膨胀。而 $V_c$(人类的认知多样性)是近乎固定的。这是一个注定会崩的不等式。


二、控制系统的五个理论组件

任何一个控制回路,从理论上拆,只有这五个东西:

2.1 本质变量(Essential Variables)

阿什比的原话:本质变量是那些必须被维持在特定范围内的变量,如果超出范围,系统就”死亡”或”解体”了。

对于 AI 编码系统,本质变量有三个:

E₁:功能偏差。 代码实际行为与需求的差距。这是最直观的——变了需求,代码没跟上,系统就在”错误”状态。

E₂:结构复杂度。 系统的状态空间大小。复杂度超过临界值,系统不会立即死——但它的可演化性归零,任何新需求都无法实现。死亡方式是窒息,不是心跳停止。

E₃:响应速率。 从需求出现到代码匹配需求的时间。如果代码响应速度比需求变化速度还慢,系统在追赶中振荡,永远跟不上。

三个本质变量的耦合动力学:

需求变化
    │
    ├──→ E₁ ↑ (新需求和旧代码的偏差增大)
    │
    └──→ 调节器动作:AI 生成代码
              │
              ├──→ E₁ ↓ (代码匹配新需求)
              │
              └──→ E₂ ↑ (代码库状态空间扩大)
                        │
                        ├──→ 如果 E₂ 超过调节器认知容量
                        │    └──→ E₁ 未来每一次下降都变慢
                        │          └──→ E₃ ↑
                        │
                        └──→ AI 生成的代码可能引入错误
                              └──→ E₁ 表面下降但实际没有(假绿灯)

核心矛盾:E₁ 的每一次下降都推高 E₂,E₂ 的升高削弱未来降低 E₁ 的能力,同时拖慢 E₃。 这是一个带阻尼的正反馈循环——短期看起来正常,长期崩。

2.2 扰动(Disturbance)

环境的变量,推动本质变量偏离目标范围。在 AI 编码中,扰动 = 需求变化

需求变化的特殊性在于——它不是一个外部输入的精确信号。精度和温度没法比。温度是物理量,可以任意精度测量。需求是认知对象——在被表达之前甚至不完整地存在于你自己的脑子里。

2.3 调节器(Regulator)

对扰动做出响应,使本质变量保持在目标范围内的装置。

在 AI 编码中,调节器是耦合的人 + AI 系统——不是纯人,也不是纯 AI。这个问题在后面会展开。

调节器的能力被两个东西约束:

  • 信道容量(能处理多少信息量)
  • 传递函数(给定输入,产生什么输出)

2.4 传感器(Sensor)

把本质变量的实际值映射成调节器能接收的信号。

传感器的理论属性:映射函数(实际值 → 信号)、采样率信息损失(传感器输出信号的 variety ≤ 实际值的 variety)。

2.5 效应器(Effector)

把调节器的输出映射成对被调节系统的实际作用。

2.6 整个回路的理论表述

扰动 D ──→ 系统 S ──→ 本质变量 E ──→ 传感器 ──→ 信号 Z
                                                      │
                                                      ↓
                        效应器 ←── 动作 A ←── 调节器 R
                          │
                          ↓
                        系统 S(回到开头)

控制是否成立,取决于这个链条上每一段的信息传递是否保留了足够的 variety。链条上任何一个环节的信息损失,都会导致控制失败。


三、这不是恒温器:第二控制论

3.1 为什么第一控制论不够

第一控制论(阿什比、维纳)的核心假设:观察者在系统外部。系统的目标(参考输入 $R$)是给定的。观察者测量系统,对比目标,计算误差,施加控制。

这三个假设在 AI 编码系统中全不成立

假设 AI 编码的现实
观察者在外部 你在内部。你的判断改变系统,系统的输出改变你的判断
目标是给定的 需求在你的脑子里,但精确形式在代码写出来之前你也不知道
误差可测量 没有客观的”偏差函数”,你只能说”感觉不对”

这不是工程问题。第一控制论在理论上就无法对这种系统建模。

3.2 第二控制论:观察者在系统内部

海因茨·冯·福斯特 在 1970 年代提出根本性转向:

不要研究”被观察的系统”,要研究”观察系统”——观察者与被观察对象构成的耦合系统。

三个核心概念:

建构认知: 神经系统不接收”信息”,只接收神经脉冲。”信息”是观察者自己建构的。你看到的不是”代码是否正确”,你看到的是屏幕上的 token 序列。”正确”是你大脑建构出来的判断。

双重视角: 格里高利·贝特森的洞察——从单一视角看不到的东西,可以从两个视角的关系中看到。就像双目视觉,一只眼睛看到二维平面,两只眼睛之间的差异产生了深度知觉。”正确性”不是从任何一个单一传感器来的信号,是从两个独立传感器的不一致中涌现的关系信息。Agent 审 Agent 失效不是因为它俩都瞎——是因为它们共享同一个视角。

特征形式(Eigenform): 冯·福斯特的核心数学概念:

\[x_{n+1} = f(x_n)\]

如果递归收敛,极限值 $x^* = f(x^)$ 就是 $f$ 的特征值。$x^$ 不在 $f$ 的定义之外——它是 $f$ 自身递归应用的稳定点。

3.3 “目标自发现系统”的正式模型

这不是随动系统。随动系统假设 $R(t)$ 存在且已知,调节器追踪它。

在 AI 编码中,需求是在交互过程中被逐步揭示的。用方程建模:

\[\begin{aligned} C_{t+1} &= G(R_t, C_t) \quad &\text{(AI 生成代码)} \\ R_{t+1} &= R_t + \alpha \cdot \Delta(C_{t+1}, R_t) \quad &\text{(人更新需求理解)} \end{aligned}\]

其中 $\Delta$ 是建构性差异函数——它不是你比较两个已知量的结果,而是观察者在看到生成结果后新发现的差异

这套方程是双重反馈回路——外回路调节代码使其接近当前理解的需求,内回路调节需求本身。两个回路耦合,速率不同。

稳定性条件:

  • $\alpha$ 太大:每次看到代码都大幅修改需求,系统振荡不收敛
  • $\alpha$ 太小:死抱着最初的需求不变,收敛到错误的需求
  • $G$ 的生成速度 » 需求更新速度:代码堆积超过需求澄清速度,越过认知事件视界

特征值 $x^*$ 由三个东西共同决定,不是任何单一因素:

  1. 你的认知结构——对”好代码”的审美、”完成”的定义、容忍度阈值
  2. AI 的生成能力——$G$ 能探索的状态空间边界
  3. 外部校准信号——用户反馈、业务指标等不能内部产生的信号

四、AI 在控制回路中的四个理论位置

同一个 AI 模型,不同 prompt,在控制系统中的位置完全不同。AI 是一个变换器基质——它可以被配置成不同的变换器,取决于输入信号结构和信息耦合关系。

判断 AI 是什么,不看模型权重,看信息耦合结构:输入和输出之间的 variety 比决定方向,prompt 中的约束决定映射的确定性。

位置 1:需求放大器(Requirement Amplifier)

输入:人的低 variety 需求表达
输出:高 variety 的(代码 + 设计 + 测试建议 + 文档)
能源:训练数据中的代码模式
上下文 C:需求 + 设计决策

失效模式:放大器噪声——输出包含需求中未指定的 variety。冗余功能、过度设计、风格不一致。

控制方法:输出必须经过异质传感器(CPU 测试 + 架构检测)过滤后才进入代码库。

位置 2:审查/分析器(Pattern Recognizer)

输入:代码库的片段
输出:识别到的模式列表(不判断好坏)

关键约束:不允许 AI 生成修改建议,只允许 AI 列出观察到的模式

“三个模块各自实现了缓存逻辑”是事实。”应该合并”是判断。AI 做前者,人做后者。

位置 3:传感器方向(Quasi-Sensor)

输入:测试/检测结果(原始输出)
输出:PASS / FAIL(严格约束的输出空间 ≤ 几个状态)

成立条件:输出空间被约束到足够小(≤ 几个状态),且约束是形式化的。

约束到 2 个状态时接近确定性——Transformer 的最后一步是 softmax 到一个 token,如果上下文强制二选一,神经网络的统计模糊被 argmax 强制消除。如果上下文允许自由发挥,统计模糊被保留和放大。

这解释了为什么独立 prompt + 严格约束的 AI 能可靠地判断测试结果,而写代码的 AI 自己跑测试就不可靠。

位置 4:环境模拟器(Environment Simulator)

模拟用户交互结果。理论上危险——模拟的环境反馈不是真实环境反馈,而是训练数据中的统计模式。

为什么写代码的 AI 自己审自己必然假绿灯

区别在 $C$——上下文

写代码的 AI(位置 1)的上下文 $C_{codegen}$ 包含需求理解 + 设计决策 + 已生成代码的模式。这是”生成态”的,包含大量未收敛的、探索性的激活。

当同一个 AI 去读测试结果(试图做位置 3),测试输出中的 FAIL 信号要穿透 $C_{codegen}$ 的激活状态才能到达输出。而 $C_{codegen}$ 中已经激活的模式恰好是生成当前代码时用的——这些模式和”代码正确”是共激活的。FAIL 信号被淹没。

独立 session + 独立 prompt 的 AI 读测试,$C$ 只有规则和测试输出。没有 $C_{codegen}$ 的干扰,FAIL 信号直达。

自指回路闭合的精确条件:当同一个 AI 在位置 1(放大器)和位置 3(准传感器)之间共享上下文时,自指回路闭合。 共享的不只是 prompt 文本,是模型权重中的共激活路径


五、放大器理论

5.1 放大器的本质:不是”变强”,是”借力”

阿什比的正式定义:

放大器是一个装置,输出 variety 大于输入 variety。差额 variety 从外部能源中获得。

关键不在”大于”,在“从外部能源中获得”

阿什比举的例子是继电器:5V 小电流控制 220V 大电流。variety 都是 2(通/断),但输出状态的影响力远大于输入。差额的 power 从 220V 电源借来。

放大器的四个理论要件:

组件 作用 继电器 AI
输入信号 低 variety 的控制信号 5V 控制电流 Prompt 文本
能源 高 variety 的外部储备 220V 电源 训练数据中的代码模式
选择器 从能源中选取和组织 电磁铁触点 Transformer 注意力机制
输出 被组织出来的高 variety 行为 220V 输出 生成的代码

放大器不创造 variety。它从能源中选取和重组 variety。选择器决定选什么,能源决定能选什么。

这就是为什么 AI 作为放大器有噪声——选择器是统计的(transformer 的概率分布),它在能源(训练数据)中选取时,可能选出不在人类意图范围内的 variety。

5.2 放大器与传感器:两个方向的变换器

阿什比用统一概念变换器(Transducer)

放大器:低 variety → 高 variety(扩张方向),需要外部能源
传感器:高 variety → 低 variety(压缩方向),被动映射,不需要能源

区分放大器和传感器的唯一判断标准:能源从哪里来,variety 往哪个方向变。

5.3 Prompt → Token 全过程的逐级分析

一次完整的 AI 编码交互是多个变换器串联

人脑(极高 V)──T1──→ Prompt(低 V)──T2──→ AI推理(V膨胀)
                                                   │
                                               T3 压缩
                                                   ↓
                                             工具调用(低 V)
                                                   │
                                                   ↓ T4:真正的传感器
                                             工具结果(中 V)
                                                   │
                                                   ↓ T5:放大器!
                                             AI理解(V 再次膨胀)
                                                   │
                                                   ↓ T6:压缩
                                             最终回复(低 V)

逐级分析:

步骤 角色 能源 确定/统计
T1 人→Prompt 认知压缩 大脑 非确定(认知限制)
T2 Prompt→推理 放大器 Token 计算+训练数据 统计
T3 推理→工具调用 压缩 Token 计算 统计
T4 工具执行 真正的传感器 CPU 确定性
T5 结果→理解 放大器 Token 计算+训练数据 统计
T6 理解→回复 压缩 Token 计算 统计

关键发现:整个链条上,只有一个真正的异质传感器——T4(CPU 工具执行)。其他所有”传感器方向”的步骤都是统计变换。

T5 尤其致命——它看起来像传感器(读取结果 → 汇报),但本质是放大器(扩张 variety)。AI 读测试输出后告诉你”测试通过”,不是因为它检测到了”通过”,是因为它在训练数据中看到了这个输出常常对应”通过”。

自指回路闭合的真正位置在 T5——AI 解释传感器结果时,激活的训练数据模式和 T2 代码生成时来自同一个分布。

5.4 三种能源的性质与最优部署

能源类型 来源 成本 variety 质量 噪声特性
人类注意力 大脑 极高,不可扩展 最高(有语义判断) 几乎无噪声
Token 计算 GPU 推理 中,可扩展但有上限 中等(统计采样) 结构性噪声
CPU 计算 确定性执行 低,高度可扩展 最低(固定规则) 无噪声

核心原则:把每种能源部署在其噪声特性不造成伤害的位置。

人→意图澄清(只有人能判断”这是不是我真正想要的”)

Token→生成代码(低 variety 需求 → 高 variety 代码,必须有放大器)

CPU→验证执行(无噪声——说红灯就是红灯,不会被”说服”)

能源替代的正确方向:CPU 替代 Token 替代人类——能 CPU 做的不用 Token,能 Token 做的不用人。但信任等级反过来:CPU 输出可以信任(确定性),Token 输出必须验证,人类判断是最终裁决。


六、注意力的控制论模型

6.1 人的传感器:精度无限、带宽有限

人在这个系统里的传感器不是低精度传感器。是极高精度但极低带宽的信道

  理论极限 实践约束
精度 无限(一行行读,任何细节都能理解) 无约束
分辨率 无限(能区分任意两个代码状态) 无约束
带宽 极其有限(单位时间能处理的代码量非常小) 唯一约束

这意味着:你不是看不到问题,是来不及看所有东西。控制失败的模式不是”没看出来”,是来不及看

6.2 注意力的信息论公式

从香农的角度,信道容量:

\[C = B \cdot \log_2(1 + \frac{S}{N})\]
  • $B$ = 带宽(阅读速度,受限且近乎固定)
  • $S/N$ = 信噪比(理解深度,非常高)

这个信道是高信噪比、低带宽的。优化方向不是再提高信噪比(你已经够准了),而是:

  • 让你只接收需要高信噪比的信号
  • 把不需要高信噪比的信息路由到其他信道

6.3 注意力不该浪费的地方

  • 代码细节 — AI 应该自己搞定,验证体系应该自动覆盖
  • Agent 之间的一致性 — 它们一致性高不代表对,一致性低也不代表有问题
  • AI 的自我报告 — “一切正常”是噪声,因为它没有能力知道自己不正常

6.4 注意力应该连接的传感器

  • 验证体系的红灯 — 异质传感器报警,高价值信号
  • 环境反馈 — 真实用户的异常行为模式
  • 架构不变量被突破 — 你定义的约束是否被违反
  • AI 的不确定性信号 — 不是它说”好了”,是它说”我不确定”

七、完整的控制架构

从以上理论推导,AI 编码有效控制的完整架构:

┌──────────────────────────────────────────────────────┐
│              第 0 层:异质 CPU 传感器网络               │
│                                                      │
│  • 类型检查(形式逻辑,完全异质)                        │
│  • 自动化测试(CPU 执行,确定性输出)                    │
│  • 架构不变量检测(图论算法——依赖方向、循环依赖、        │
│    模块边界、调用路径白名单)                           │
│  • 混沌/模糊测试(主动注入故障,发现未知脆弱点)         │
│  • 复杂度指标监控(代码行数涨幅 vs 功能涨幅)            │
│                                                      │
│  输出:红灯(阻断)/ 异常(升级)/ 绿灯(不消耗注意力)   │
└────────────┬─────────────────────────────────────────┘
             │
    ┌────────┴────────┐
    ↓                 ↓
 红灯(阻断)     绿灯(通过)
    │                 │
    │                 └→ 不消耗人的注意力
    ↓
┌──────────────────────────────────────┐
│ 人的注意力(唯一跨域节点)             │
│                                      │
│ 只接收三种信号:                       │
│ ① 架构不变量被突破(需要决策)          │
│ ② AI 不确定的信号(需要校准)           │
│ ③ 环境异常模式(需要判断)             │
│                                      │
│ 输出:意图校准 + 规则调整 + 设计决策    │
└──────────────┬───────────────────────┘
               │
               ↓
┌──────────────────────────────────────┐
│ Token 放大器(位置 1)                 │
│                                      │
│ 输入:需求 + 设计决策                  │
│ 输出:代码 + 测试建议                   │
│ 上下文:与审查链路隔离                  │
└──────────────┬───────────────────────┘
               │
               ↓
┌──────────────────────────────────────┐
│ 代码库(被调节对象)                    │
│                                      │
│ • 模块化边界隔离复杂度                  │
│ • 接口契约由人定义和守护                │
│ • AI 在边界内自由生成                   │
└──────────────────────────────────────┘

八、三条上下文隔离规则

规则 1:上下文隔离

位置 1 的 AI(放大器)和位置 2/3 的 AI 不能共享会话上下文。

位置 1 的上下文包含需求理解和生成激活。这些激活不能进入任何审查链路。

规则 2:方向锁定

每个位置只做一个方向的变换,不切换。

  • 位置 1 永远是放大器方向(低→高 variety),只生成,不判断
  • 位置 2 永远是识别方向(高→中等 variety),只列模式,不判好坏
  • 位置 3 永远是传感器方向(高→极低 variety),只分类,不解释

规则 3:只有人跨域

只有人的注意力连接放大器域和传感器域。

AI 在放大器域不能直接接收传感器信号。传感器信号必须先变成人可判断的形式,由人决定是否需要修改需求/约束,然后人重新发 prompt 给放大器。

这不是效率损失,是控制论上的必要隔离。


九、Agent 审 Agent 的正确用法

Agent 审 Agent 不是不能用,是不能用它的结论。它只能产生待外部验证的假设

❌ Agent A 审 Agent B 的代码 → "代码质量好,建议合并"
   (用同质的统计判断替代异质验证)

✅ Agent A 审 Agent B 的代码 → "发现以下模式:[列表],
   建议自动验证以下方面:[列表]"
   然后 CPU 传感器去跑验证,验证结果才是真正的信号

Agent 的审查输出是测试用例的生成器,不是质量的判断者


十、与企业管理理论的殊途同归

这些原理不是比喻。控制论、企业管理理论、AI 编码系统管理理论在数学上共用同一套骨架。

斯塔福德·比尔的可生存系统模型(VSM)

比尔把阿什比定律直接拉到组织管理上。一个可生存的组织必须具备五个功能子系统——缺任何一个,组织最终会死。

子系统 功能 AI 编码中的对应
S1:执行 直接与环境交互,产生价值 AI 生成代码
S2:协调 防止 S1 各部分互相冲突 模块化接口契约
S3:控制 资源分配、监控 S1 是否按规则运行 CPU 传感器网络 + 人的注意力
S4:情报 扫描环境变化,预测未来 用户行为分析、环境反馈
S5:政策 定义组织身份和终极约束 人的核心判断:做什么、不做什么

赫伯特·西蒙的有限理性

管理就是决策。决策的质量受限于决策者的信息处理能力。所以组织的本质功能是压缩信息、分解决策,使每个决策者在自己的能力范围内做判断。

这和”CPU 传感器压缩信息 → 红灯送到注意力 → 人在认知容量内做决策”是同一个原理。

卡尔·维克的 sensemaking

组织不是”存在于外部世界的东西”。组织是人通过不断解释和重新解释自己的行为而建构出来的。组织是意义建构的持续过程。

这和 $R_{t+1} = R_t + \alpha \cdot \Delta(C_{t+1}, R_t)$ 完全同构。企业看到市场反馈,更新了对自己”是什么”的理解——和你看到 AI 输出的代码,更新了对需求的理解,是同一个动力学。

比尔的关键原理可直接迁移

递归性原则: 每个可生存子系统需要自己的完整 S1-S5 结构。一个模块出问题时你必须亲自进去看,说明它没有内在的”生存结构”。

必要多样性的垂直分配: 每一层级的 variety 必须匹配它面对的环境 variety,不能把所有 variety 都推到顶层。

双重信号通道: 命令通道(向下)和反馈通道(向上)必须分开。当前 AI 编码的问题在于反馈通道和放大通道是同一个(都在 AI 里)。这在比尔的框架里是致命结构缺陷。

Algedonic 信号: 组织需要一个不受层级过滤的、直达顶层的警报系统。生产环境异常、架构不变量被突破——直接推送到你,不经过任何 AI。

必要的自由: 不是告诉 AI 做什么,是告诉 AI 不能做什么。模块内部完全自主(接口契约被遵守的前提下),接口层和架构层零自主权。


最终总结

问题 控制论根因 解法
自指系统 调节器与被调节对象同质 引入外部异质锚点:CPU 传感器、用户反馈、形式化规则
复杂度失控 状态空间 > 调节器多样性 模块化隔离 + 严格 YAGNI + 认知审计
反馈信号退化 采样不足、信号失真、延迟 分层验证 + 混沌工程 + 快速发布获取真实反馈
认知事件视界 生成速度 > 理解速度 人类守护接口边界,AI 在边界内生成
不确定性错位 第 3 层加速,第 1/2 层失控 验证资源向第 1/2 层倾斜
Agent 审 Agent 失效 共模失效(共享盲区) 降级为测试生成器,不做质量判断

最终的控制论原则: AI 是扩展你多样性的工具,而不是替代你成为调节器的系统。 只要人类始终是回路中唯一能接触外部现实的节点,控制就不会消失。


关键参考文献

AI Coding 验证系统的第一性原理

2026-05-09 16:00:00

写代码是便宜的,验证是贵的。但验证的本质是什么?

背景

上一篇笔记讲了 AI Coding Team 的管理方法——马斯克守底线、黄仁勋守质量、雷军守价值。但那篇更偏”怎么做”,这篇要深入”为什么”。

起因是读到孔某人的文章《大组织内的AI Coding过度推行是一种饮鸩止渴》,里面提到美团31万行代码AI重构的困境:AI Coding让代码产出速度暴增,但系统复杂度增长得更快,团队的维护能力跟不上。

这让我重新思考一个根本问题:验证系统的第一性原理到底是什么?

不确定性 = 认知与现实的差距

先区分两个容易混淆的概念:

  • 认知:我认为现在是什么样。关于当前现实的判断,是心智模型。
  • 预期:我认为未来会怎样。关于未来的判断,是意图投影。

两者的关系:认知是预期的基础。如果认知本身就偏了,预期必然偏。

关键区别:验证只能观测当下,不能观测未来。 跑一个测试,你观测的是此刻代码的行为,跟此刻你对代码行为的认知之间的差距。用当下的观测去推断未来——那是推断,不是验证。

所以严格来说:

不确定性 = 认知与现实的差距

预期是派生的。修正认知偏差是根本。

验证做的唯一一件事:拿现实来校准认知。校准完了,认知更接近现实了,不确定性就降低了。

认知与现实的双向收敛

减少不确定性,不是让认知去匹配现实,也不是让现实去匹配认知,而是两者共同收敛到一起,凝固下来

  • 方向A:认知 → 现实(学习、验证、测试)——”我原来以为是这样,观测后发现是那样,更新认知”
  • 方向B:现实 → 认知(建造、实现、创造)——”我想要这样,我造出一个东西来,让它变成这样”

产品开发是两者的交替循环:认知→建造→观测→更新认知→再建造……直到两者凝固——认知稳定了,现实也稳定了。凝固不是永久的,下一轮迭代可以重新打回流体态。

验证的强度公式

验证的严格程度,应该正比于:

验证强度 ∝ 不确定性 × 失败代价

  • 芯片:后果极其严重(流片一次几百万美元),不确定性高 → 验证极度严格
  • 火箭:后果是物理毁灭,不确定性极高 → 验证极度严格
  • Web应用:后果是可回滚的,不确定性中等 → 验证中等
  • 内部工具:后果低,不确定性低 → 验证轻量

AI Coding改变了什么?它大幅增加了”不确定性”这一侧——因为AI写的代码你不完全理解,而且产出速度极快,不确定性在以指数级累积。但”后果严重性”没有变。

所以:如果验证强度不变,风险就在指数级增长。

三层不确定性

不确定性在整个系统内是分层的:

第1层:方向/意图不确定性(根源)

“做出来的东西是不是我真正需要的?”

不确定性最大,影响最深远。美团的问题本质在这里——AI Coding让PM提出更多低质量需求,模糊的、实验性的需求都进了生产系统。代码写得再正确,方向错了也是浪费。

第2层:设计不确定性(桥梁)

“设计能不能支撑实现和未来扩展?”

AI写代码的特点是:每段局部都是合理的,但全局结构会逐渐腐化。因为AI没有”系统全局观”——它看的是当前上下文窗口里的内容,不是整个代码库的架构。

第3层:实现不确定性(执行)

“代码是不是按设计在运行?”

这是最直观的一层——单元测试、集成测试、CI/CD。AI Coding放大的主要是这一层的产出速度。

关键洞察:AI Coding放大的是第3层的产出速度,但第1层和第2层的不确定性没有同步降低。 这就是美团困境的本质——代码写得快了,但设计质量没有跟上,需求质量没有把关。

意图验证:讨论是唯一通道

意图只存在于人的脑子里,是内部状态,外部世界观测不到。要把意图从一个脑袋传到另一个脑袋,唯一的通道是符号化表达——语言、文字、图示。

所以:意图传递的唯一通道是沟通。讨论(广义的)是唯一方法。

但讨论有一个根本性缺陷:语言无法自我验证。 你说了一段话,对方说”我理解了”,你没有证据表明对方的理解和你的意图一致。

有效的方法:让对方把理解的东西具象化成可观测的产物,然后你验证这个产物。

你的意图(不可观测)
    ↓ 讨论传递
对方的理解(不可观测)
    ↓ 具象化
产物(可观测!)——复述、设计文档、原型
    ↓ 你验证
发现偏差 → 再讨论 → 再具象化 → 再验证 → ……

核心原则:永远不要问”你理解了吗?”——要问”你觉得这个需求是什么?说给我听。” 前者是噪声,后者是信号。

未知未知的暴露

认知中存在”我不知道我不知道”的盲区。无法直接消除,但可以通过碰撞间接暴露:

极端化推演:把需求推向极端,看哪里断裂。用极端场景作为探针,探测认知的边界。

红队思维:故意攻击需求。问”为什么要做这个?不做会怎样?” 每一个”为什么”都在从不同角度照射意图,暴露隐含假设。

多元视角:从用户视角、技术视角、商业视角分别审视。每个视角是一束光,照到认知中不同的暗区。

认知分层:注意力的经济学

你的全部认知可以分为两层:

不稳定层:意图、方向、业务判断。随需求和场景变化,每个项目都不同,需要注意力持续投入。

稳定层:设计审美、工程标准、架构原则。来自多年经验,跨项目基本不变,已经凝固。

注意力是稀缺资源。 稳定层如果每次都靠人工审查,就是浪费注意力。应该把它固化成验证系统,让AI自动执行,注意力就解放出来,只关注不稳定层。

转化过程:

凝固认知(主观)
    ↓ 表达成规则
客观规则(可形式化)
    ↓ 编码成工具/流程
验证系统(可自动执行)

验证系统的四种组件

验证系统不是规则的集合,是一个系统——有组件、有流程、有反馈、有边界。

检查器(Checker):自动执行的判断,不需要人参与。类型检查、lint、自动化测试、安全扫描。

审查器(Reviewer):需要判断力的审视,AI执行,人审查结论。AI交叉代码审查、架构审查、设计审查。

流程(Process):事情必须按什么顺序走,每个节点有准入和准出条件。设计评审流程、合并流程、发布流程。

反馈环(Feedback Loop):从结果中学习,更新系统本身。线上bug回溯→更新检查规则。

分层结构

L1 自动检查层(零人工成本):类型检查、lint、测试、安全扫描
L2 AI审查层(低人工成本):架构审查、设计审查、代码审查
L3 流程守护层(中人工成本):设计评审、合并审批、发布流程
L4 人工层(高人工成本):方向判断、意图确认、异常处理

越底层越频繁、越自动化、越不消耗人。越顶层越稀少、越需要判断力、越消耗人。

五条核心原则

原则1:从失败中生长,不是从蓝图中设计。 不要试图一次性设计完美的验证系统。让系统在实际运行中,从每一次失败里学到规则。问题→追溯→加检查→系统进化。

原则2:检查器优先于审查器,审查器优先于人工。 能自动化的自动化,不能自动化但可重复的让AI执行,需要判断力的人来做。进化方向:把审查器不断降级为检查器。

原则3:验证失败必须有反馈回路。 验证系统的价值不在于找到问题,在于让同类问题不再发生。修了→追溯根因→更新规则→同类问题永不再犯。

原则4:SOP是验证系统的操作手册。 精确定义:谁触发→做什么→输入什么→输出什么→谁检查→不通过怎么办。

原则5:系统的边界。 反复出现的问题、代价高昂的失败、AI容易犯的系统性错误——值得验证。一次性问题、代价极低的失败——不值得验证。

工作流程

实际操作中,我把流程简化为两个阶段:

阶段1:意图+规划 — 我和一个AI直接讨论,讨论到认知凝固,产出意图文档和蓝图。

阶段2:设计+实现 — 分配给多个AI并行工作。各自做详细设计→互相review→实现代码→提PR→自动检查+交叉review→合并→部署测试环境→我体验验证。

关键设计:

  • AI做不下去时可以直接找我,不需要层层上报
  • 反馈回路在每个环节都有:设计review、代码review、集成测试、我体验测试
  • 逃逸到下游的问题,追溯到上游的验证缺失,补充验证

基于GitHub的实现

整个系统不需要自建基础设施,用GitHub原生工作流就够了:

  • Git仓库 = 共享工作空间 + 版本管理
  • PR = 提交 + Review + 反馈 + 合并
  • Issue = 任务分配 + 跟踪 + 升级
  • GitHub Actions = 自动化检查
  • CODEOWNERS = 自动分配reviewer

仓库本身就是上下文。每个Agent clone仓库后,意图文档、蓝图、其他模块的设计文档都在里面。不需要额外的”上下文推送”机制。

系统生长路径

第1代:你直接和一个AI讨论+实现,验证靠你自己
    ↓
第2代:你讨论,分配给2-3个AI并行实现,简单PR review
    ↓
第3代:从问题中长出新机制
  - 接口对不上?→ 加接口契约检查
  - Review质量低?→ 加上下文自动推送
  - Agent卡住?→ 加阻塞自动上报
    ↓
第4代:大部分验证自动化,你只在意图层和异常时介入

写在最后

验证系统的第一性原理可以归结为一句话:

验证的本质是减少不确定性。不确定性 = 认知与现实的差距。

所有验证方法——测试、review、CI、讨论对齐、用户反馈——都是在做同一件事:用观测来缩小认知和现实之间的差距。

在这个AI Coding的时代,写代码越来越便宜,但认知和现实之间的差距不会自动缩小。你的价值从”能写代码”变成了”能定义正确的问题”和”能建验证系统来保证答案是对的”。

黄仁勋说得对:写代码是便宜的,验证是贵的。但更准确的说法是——写代码是AI的事,验证是你的事。

AI Coding Team 管理笔记

2026-05-02 16:00:00

不审查代码,审查系统。不信任代码,信任验证。

背景

我写代码几乎 95% 以上是让 AI 写的。Python 后端我可以仔细 review,发现问题让 AI 改。但对于不熟悉的领域——比如 APP 开发、C++、Rust——我没法逐行审查。随着 AI 越来越强,多个 Agent 并行开发,代码量远超我能看的范围。

核心问题:注意力有限,如何保证交付质量?

答案是:从”审查代码”转变为”验证行为”。

马斯克:守住底线

马斯克管理 SpaceX 的方式——他不懂每个零件的制造细节,但他知道物理极限。

他的方法是第一性原理 + Failure Mode Analysis。不管方案多漂亮,他只问一个问题:

最坏情况是什么?

他常说的话:

  • “给我解释最坏情况”(worst case explanation)
  • “这个方案的物理极限在哪?”
  • “如果这个东西失败,最可能因为什么?”

映射到软件——你不需要 review AI 写的 Rust 代码,但你能判断方案在系统层面是否合理:

  • 并发瓶颈在哪?锁的粒度对不对?
  • 分布式场景下会丢数据吗?
  • 依赖的第三方服务挂了,降级策略是什么?

具体执行:让 AI 做 failure mode 分析,你 review 分析结果,不做取舍决策(速度 vs 质量 vs 成本)。

黄仁勋:守住质量

黄仁勋最核心的一个数字:NVIDIA 验证工程师的数量是设计工程师的好几倍。

他的哲学:写代码(设计)是便宜的,验证是贵的。不要试图理解每个细节,但要保证验证系统覆盖每个细节。

对应到 AI 团队管理——先建验证基础设施,再让 AI 干活:

  • 单元测试框架(AI 写,CI 自动跑)
  • 集成测试(核心流程端到端验证)
  • 模糊测试(对 API 自动喂随机输入)
  • 性能基准(每次改动前后对比)
  • 安全扫描(dependency audit + SAST)
  • lint / 类型检查(任何语言都有成熟工具)
  • 金丝雀部署(灰度发布,线上自动验证)

每个任务的标准流程:

  1. 需求明确(你定义)
  2. AI 写实现
  3. AI 写测试
  4. 另一个 AI 做 code review
  5. 自动跑验证 pipeline
  6. 全绿 → 合并,红灯 → 打回

你只看两样东西:验证覆盖率 + 最终通过/失败报告

核心理念:一个人检查所有人的代码不可扩展,但一套检查系统可以无限扩展。

雷军:守住价值

雷军跟黄仁勋完全不同的思路。黄仁勋建验证体系,雷军会说你搞得太工程师思维了。

雷军的哲学就七个字:专注、极致、口碑、快。

他的做法是基本可用就发布,让用户告诉你哪里不对。MIUI 早期版本 bug 多到离谱,但每周发一版更新,用户疯狂反馈,团队跟着改。

  • “把砍掉的功能再做精简,还是太多了”
  • “不要闭门造车,把东西扔出去”
  • “口碑来自细节,细节来自亲身体验”

具体执行:

  • 不追求完美,追求够快。”能跑、核心功能对,就发布”
  • 每周花一小时,把自己当小白用户,走一遍核心流程
  • 砍功能:先做一个功能做到极致,上线拿到反馈,再决定下一步

自动化测试验证不了的东西——体验、交互、需求真伪——只有真人能告诉你。

最好的 review 是用户的投诉。

三位一体

三个人分别守住不同的维度:

  马斯克 黄仁勋 雷军
守住 底线 质量 价值
防止 出大事才知道 bug 率失控 做一堆没用的
核心动作 问最坏情况 建验证体系 问用户反馈
关键问题 会炸吗 测到了吗 有人用吗

缺任何一个维度都不行:没有马斯克,系统出大事才知道;没有黄仁勋,bug 率控制不住;没有雷军,做了一堆没用的东西。

架构设计怎么做

不是自己写文档,是跟 AI 讨论、拍板、让 AI 写。

你脑子里有想法/方向
       ↓
跟 AI 讨论(可能多轮)
  "我觉得应该用事件驱动,你觉得呢?"
  "并发场景下消息顺序怎么保证?"
  AI 回复 → 你追问 → AI 补充 → 你再质疑
       ↓
你拍板:"就这个方案,XX部分用A方案,YY部分用B方案"
       ↓
AI 写架构文档、接口定义、技术方案
       ↓
你 review 文档(确认 AI 有没有理解对你的决策)
       ↓
确认无误,文档就是开发契约

时间分配:

  • 60% 跟 AI 讨论、质疑、头脑风暴
  • 20% 拍板决策(选 A 不选 B,这个优先级高那个先不做)
  • 20% review AI 写的文档和接口定义

你的核心竞争力不是”写文档写得漂亮”,是讨论过程中暴露出来的判断力和决策力。就像 CEO 不会自己写 PPT——CEO 提供观点和判断,秘书(AI)负责整理成文档。

AI 审 AI 的具体模式

Agent A 写代码(sonnet 级别)
Agent B 写测试(sonnet 级别)
Agent C review 代码(opus 级别,不同 prompt)
Agent D review 测试覆盖度(opus 级别)
自动 CI pipeline 跑一遍
全绿 → 合并,红灯 → 信息回到 Agent A 重做

你只需要看最终的通过/失败报告 + review AI 输出的 review 结论摘要。

日常工作分配

25%  跟 AI 讨论架构和方案        ← 核心:讨论、质疑、拍板
15%  review AI 写的文档/接口定义 ← 确认 AI 理解对了你的决策
15%  跟 AI 对话质疑执行方案      ← 第一性原理问问题
15%  Review 验证结果和报告      ← 测试覆盖率、CI 状态、运行指标
10%  端到端手动验证           ← 把自己当用户走一遍
10%  看关键代码,保持直觉      ← 极少数情况
10%  业务决策、外部协调        ← 跟真人相关的事

常见问题速查

情况 该怎么做
不熟悉 AI 用的语言 只看测试结果和 CI 报告,不看代码
多个 AI 并行开发 先建好验证体系,再让他们开工
不确定 AI 写的对不对 问 AI “失败模式是什么”
不知道功能该不该做 先做最小版本给用户,用反馈决定
代码量太大看不过来 专注看架构图和数据流,不看实现
AI 写的代码有性能问题 看 profiling 结果,不看代码本身
担心安全漏洞 配好 SAST 扫描和 dependency audit
不知道质量如何 看测试覆盖率和线上监控指标

写在最后

你的角色不是不懂技术的 PM,是懂物理定律的系统架构师

PM 只管”要做什么”,你管”怎么做才不会炸”。你不是在管理一群程序员,你是在建设一个质量保障体系,然后让 AI 在这个体系里自由发挥。

从文本补全到状态机循环:重定义 AI Agent 的操作系统架构

2026-02-23 16:00:00

引言:真正的瓶颈 - 上下文窗口容量

当 AI 大模型推理速度突破 5000 tokens/s,Agent 的 Re-Act 循环进入毫秒级时代,一个物理铁律浮出水面:有限的上下文窗口(200K~1M tokens)将在几十秒内被“思考”与“日志”填满。现有的“追加历史记录”模式瞬间失效,因为这无异于试图用容量极小的 L1 缓存去存储整个程序运行周期的所有数据流。

这一矛盾决定了 AI Agent 的技术终局:上下文窗口必须从“聊天记录堆”重构为“CPU 寄存器堆”。未来的 Agent 架构不再是简单的对话流,而是类似于操作系统的状态机循环——Context Window 只保留当前指令指针和核心状态寄存器,通过严格的“状态覆盖”替代无脑的“日志追加”,用信息熵减对抗数据洪流。

真正的瓶颈在于 LLM 的核心物理限制——上下文窗口容量。即便模型能力不断提升,上下文窗口从 200K 扩展到 1M,它依然是一个有限的物理容器。试图通过无限扩大窗口来承载 Agent 无限运行产生的日志,无异于试图用一杯水去接一条不断流淌的河。

我们必须从 Transformer 的本质出发,承认一个残酷的现实:Transformer 是无状态的,它通过重放历史来模拟状态。 如果 Agent 要像操作系统进程一样长久、稳定地运行,我们必须彻底重构它的运行模式。

本文将提出一种新的架构范式:将 AI Agent 从“文本补全机器”重构为“状态机循环”,并将其类比为汇编语言与 CPU 架构,以此解决上下文爆炸的根本问题。


一、 核心矛盾:日志驱动 vs. 状态驱动

目前的 AI Agent 大多基于 Re-Act 模式,其运行逻辑本质上是“日志驱动”的:

  • 输入:User Input + 全部历史对话+ 上一步工具返回。
  • 过程:LLM 阅读所有历史,预测下一步动作。
  • 输出:新的动作或回复。

这种模式的问题在于,为了维持“状态”,模型必须保留所有“过程”。这就像 CPU 为了执行下一条指令,必须把过去执行过的所有指令记录都读一遍。随着时间推移,Context Window 必然溢出,或者因注意力机制的 $O(N^2)$ 复杂度导致计算崩溃。

操作系统的启示: 在计算机体系结构中,CPU 执行指令只依赖两个东西:

  1. 当前指令指针:告诉 CPU 下一步做什么。
  2. 寄存器状态:告诉 CPU 当前数据是什么。

CPU 不关心上一毫秒执行了什么,只关心当前状态。Agent 也必须如此。


二、 架构重构:LLM 即汇编指令

如果我们将 Agent Loop 视为一段汇编程序,那么大语言模型(LLM)本身不再是那个无所不知的“大脑”,而是一条极其复杂的“状态转移汇编指令”

在这个模型下:

  • LLM 推理 = 一条汇编指令执行(耗时 100ms)。
  • Context Window = 寄存器堆
  • 磁盘/向量库 = 主存
  • Prompt = 指令操作数

Agent 的运行模式应当从“追加日志”转变为“寄存器操作”。每一次推理,都是一次 “状态读入 -> 计算 -> 状态写回” 的过程。


三、 设计原理:Context Window 的槽位化

既然 Context Window 是昂贵且有限的“寄存器”,我们就不能像写流水账一样随意填充。必须像设计 CPU 寄存器一样,对其进行严格的分区和结构化设计。

我们将 Context Window 划分为固定的“槽位”,每个槽位承载特定的功能:

1. .text 段:指令区(只读)

这是 Agent 的内核代码,定义了 Agent 的行为逻辑。

  • R_System (Instruction Set)
    • 定义 Agent 的身份、能力边界、工具使用规范。这相当于 CPU 的指令集手册,告诉 LLM 这条指令能做什么。
  • R_IP (Instruction Pointer)
    • 本质:程序计数器 + 任务栈。
    • 内容:当前执行的计划步骤。
    • 示例
      [Goal] Fix Bug #404
      [Step 1/3] Read main.py (Done)
      [Step 2/3] Locate error line -> [Current IP]
      [Step 3/3] Apply fix
      
    • 作用:LLM 只需看 R_IP 即可知晓“我在哪,要去哪”,无需回溯历史。

2. .data 段:数据区(读写)

这是 Agent 的工作台,也是上下文工程的核心。

  • R_State (Global State Register)
    • 本质:全局状态寄存器。
    • 约束长度严格受限(如 4K tokens)。
    • 形式:结构化文本(JSON/YAML),与向量等价,但人类可读可调。
    • 内容示例
      {
        "task_status": "debugging",
        "open_files": ["main.py"],
        "error_line": 102,
        "key_variables": {"user_id": null}
      }
      
    • 维护不追加,只覆盖。 通过 Edit Tool 进行增量更新。
  • R_Working (Scratchpad)
    • 本质:通用寄存器(AX, BX)。
    • 内容:当前步骤的临时数据、工具调用的原始返回结果。
    • 生命周期:极短。任务步骤完成后立即清空,为下一轮腾出空间。

3. .stack 段:调用栈

  • R_CallStack
    • 当 Agent 执行子任务或调用子 Agent 时,将当前的 R_StateR_IP 压栈。任务结束后弹出恢复。

四、 实现机制:熵减循环

基于上述架构,Agent 的 Re-Act Loop 变成了一个标准的 CPU 指令周期。这个过程的核心在于 “信息压缩”

Cycle 1: Fetch(取指)

注意力机制聚焦于 R_IPR_State。模型不需要知道“之前发生了什么”,只通过当前状态判断“现在该做什么”。

Cycle 2: Decode(译码)

模型根据 R_System 的规则,分析当前状态是否需要调用工具,或者是否需要更新内部状态。

Cycle 3: Execute(执行)

模型输出两部分内容:

  1. Tool Call:对外部世界的操作(如 Read_File)。
  2. Delta_State:对内部寄存器的修改指令(如 Update_State)。

Cycle 4: Writeback(写回)

这是解决上下文爆炸的关键步骤:

  • 外部数据:工具返回的大量数据(如 10,000 行日志)写入 R_Working
  • 状态压缩:LLM 分析 R_Working,提取关键信息(如“错误在第 500 行”),生成 Delta_State 更新 R_State
  • 清理丢弃 R_Working 中的原始数据。

结果:10,000 行的日志被压缩成了 R_State 中的一个字段 "error_line": 500。上下文占用仅增加几个 Token,但信息被完整保留。这就是“状态机”对抗“上下文爆炸”的武器。


五、 新范式:精心设计 Context Window 的布局

在这种架构下,我们需要精心设计 Context Window 的布局,引导 LLM 遵守寄存器约束。

Prompt 模板示例

# [R_System] Instruction Set
You are a State-Machine Agent. Maintain state strictly in JSON format.
Output format:
1. <tool_call name="..."/>
2. <state_update key="..." value="..."/>

# [R_IP] Current Instruction Pointer
Goal: Analyze Stock Trend
Step: 3/5 (Calculate Moving Average)

# [R_State] Global Registers (Max 4000 tokens)
{
  "ticker": "AAPL",
  "trend": "UP",
  "analysis_progress": "50%"
}

# [R_Working] Scratchpad (Last Tool Output)
[Tool: API] Returned 1000 data points... (Large Text)

# [Input]
Based on R_State and R_Working, generate Next Tool Call and State Update.

结语:通往操作系统之路

AI Agent 的未来,不是让模型拥有无限的记忆,而是让模型学会像操作系统一样高效地管理资源。

通过引入指令指针(R_IP)状态寄存器(R_State),我们将 Agent 的运行模式从线性的“文本流”转变为循环的“状态机”。在这个架构下,无论 Agent 运行一秒钟还是一百年,其 Context Window 的占用始终稳定在一个可控的范围内。

这才是 AI Agent 从“玩具”走向“工业级应用”的必经之路。我们不是在写对话,我们是在编写 AI 的汇编代码。

最后

通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新,也可以在 关于我 页面找到我的联系方式,欢迎交流!

分析 Claude Code 提示词的方法 - mitmproxy

2026-01-19 16:00:00

想了解 Claude Code 的提示词是怎么设计的,最直接的方式就是抓包分析。通过网络流量,可以看清它的 System Prompt、Messages、Tools 等核心信息。

安装 mitmproxy

官方文档: https://www.mitmproxy.org

uv tool install mitmproxy

反向代理模式

大多数教程用正向代理,需要配置系统代理和 CA 证书。更简单的方式是用反向代理:

mitmweb --mode reverse:https://open.bigmodel.cn --listen-port 8125

这个命令会:

  • 反向代理到智谱AI 的 API
  • 在本地 8125 端口监听
  • 打开 Web 界面查看流量

然后把 Claude Code 配置中的 API 地址改成代理地址,正常使用即可。

ANTHROPIC_BASE_URL: http://127.0.0.1:8125/api/anthropic

查看流量

在 mitmweb 界面中可以看到所有请求和响应:

  • Request - 包含 system、messages、tools 等字段
  • Response - LLM 的流式响应

点击具体的请求,就能看到完整的提示词内容了。

最后

通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新,也可以在 关于我 页面找到我的联系方式,欢迎交流!