← 思 HARNESS ENGINEERING · 外 ENJA

第一根柱 · Pillar I

Context.

注意力的心流

在有限的注意力资源中,
什么该留下,什么该流过?

I · 核心问题

AI 的 context window 是有限的。人的注意力也是有限的。当信息不断涌入,你不可能全部留住。大量相关与无关的信息同时挤进来时,人和 AI 的注意力都会被切碎。

问题不在「怎么记住所有东西」,而在「怎么选择该记住什么」。

II · 运作原理:傅里叶级数的 epicycle

数学原理

傅里叶 epicycle 的组成是:任何一条复杂的波(图上那条方波=产品随时间的行为),都可以拆解成一组旋转圆的叠加;每个圆投影到时间轴上就是一条正弦波,叠起来描出整条波形。

一个意象,两层同构

同一组 epicycle,描对话也描开发:

epicycle · 两层同构
epicycle 概念对话中的对应开发中的对应
描出的波一段多主题的长对话产品随时间的行为
基频贯穿对话的核心主题产品目标
谐波(一环扣一环)与核心相关的衍生话题DoR → SDD → DoD → Verify → Done 的串接
噪声无关的岔题、干扰与产品无关的支线、scope creep

波形随时间展开:圆同时转,波依序画

在开发里,这组 epicycle 就是工作流的骨干:DoR → SDD → DoD → Verify → Done。基频是产品目标,圆一转,波就从左往右展开——那一个周期,就是一次完整的交付(正如图上:左边的圆在转,右边的方波随时间长出来)。波依序经过每一道闸门的区段,每到一段,那一环的谐波才把它的细节画上去。

所有的圆同时在转,依序的,是波从左往右落下的顺序。看动画时会有种错觉:大圆带着波走,走到某些段落,小圆才像突然「长出来」补上一个陡转——其实小圆一直都在转,只是它的细节要等波展开到那一段才显形。

收口:计划与现实对齐的瞬间

一个 Sprint 收口,是在 DoD 与 Verify 对上那一刻:DoD 说「什么叫完成」,Verify 拿成品去撞真实,两者叠合,产品才算交付。这是工程上的闭合,不需要数学背书。

这一刻,计划(DoD:什么叫完成)与现实(Verify:真的完成了吗)叠合为一。

一条周期波绕完一个周期,所有谐波恰好同时回到起点——能一起回家的,才同属一个基频。引申过来,所有环节若都绕着产品这个基频,才会在 Verify 同时收口;绕着别的东西的(scope creep),到这一刻还落单,收不了口。

而一个 Sprint 的收口不是终点:它的收获会垫高下一圈的起点——这条从圈到螺旋的抬升,是第三柱 Entropy 的事。

正反两个转向:一枚完整的硬币

一个圆只能描出一个圆——自己绕自己,原地打转。要拉出一条真正落地的轨迹,圆就不能只往一个方向转:一个往前转的圆,得配一个反向转的圆,彼此抵消。

但这两个转向不是两股要分高下的力,是同一枚硬币的两面

一次真实的交付,是一个完整的动作,有两张脸——一张往前建(把产品多描出一段),一张拉回现实(确认这一段真的落地)。少了任何一面,它就不是一枚硬币,落不了地。

只往前建、不拉回现实,交付出去的是半枚硬币:看起来在动,却一直悬着、不着地。

两面一起长——这不是外加的纪律,是硬币之所以是硬币的条件。硬币会变大,但变大时两面一起变大;你不会得到一个建构面很大、校正面很小的硬币——那不是一枚硬币,是半成品。所以校正随建构缩放:产品长多大,接住它的那一面就得长多大。

〔VAS 实例〕前端重构前(S47)约 318 条自动化测试;如今(S98)单元 868 + 互动 167 + 像素 golden 31 = 1066 条、55 档,仍在长。产品长大的同时,校正面从三百长到一千、一条没落下。「缩放」长在真东西上,就是这个样子——重点不是 1066 这个数,是它跟着建构一起长、没有一面落后。

每道闸门,就是铸这枚硬币、确保它两面俱全的那只手。一条与出货无关、为反对而反对的规则,不是「校正」那一面,是混进来的噪声——它铸不成硬币,只让波形失真,该在 Retro 砍掉。

闸门 · 操作频谱的手
闸门它对频谱做的事(让 Sprint 更完整地被走过)
DoR准不准这个圆进场——红旗剔除不对频、与产品无关的闯入者
SDD给几个圆、只留最大的那几个——400 行上限压住 scope,也护住宰相的 context
DoD新加的圆会不会扰动已画好的别处——Explore② 的回归提问(修 A 会不会坏 B)
Verify拿描出来的波去撞真实——PO 的「不对」,Code 第一次撞上用户体验
Retro垫高下一圈的起点——成果累积成更厚的地基(→ 螺旋)

这把尺,第二柱 Constraints 的 DoR 红旗与第三柱 Entropy 的规则清理共用。

关于傅里叶——这里是把这一章的镜头借来照工程:它让你看见形状,不负责证明。

镜头帮你看见,工程扛重量。「硬币要完整才落地」不靠数学也成立——傅里叶是让你看清它形状的镜头。

而硬币讲的是完整性(两面都得在),不是同时性——建构与校正在时间上仍是分得开的两件事。

频率设计的关键

当所有的环——无论是话题还是工作环节——都绕着同一个基频:

当频率混乱、各转各的:

III · 密度:让 Context 成为 RAG

前面讲的都是减法——滤掉高频噪声,让不需要的流过。但减法的另一面,是增幅:当每句话都有意识地搭在同一条正弦波上,剩下的东西不是变少,而是变浓。

这才是超长上下文还能维持专注的真正秘诀。注意力之所以延续,不是因为信息少到好记,而是因为它泡在高浓度的语义池里——每一个对话回合都是高浓度的信号,没有一段被稀释的水需要过滤。基频一致让注意力连续,连续累积到一个程度,就成了密度。

维持基频,不只是让对话不散掉,更是让整个语境保持高浓度。

高浓度,就是一套天然的 RAG

RAG 之所以需要「蒸馏」——从庞大的语料里捞出那几滴相关的——是因为那缸语料是稀的。但如果你全程维持高度专注,只把已过滤的信息投入 Context,这缸水就从来没被稀释过——整个 Session 一直泡在蒸馏液里。

于是「过滤」这个动作先验地消失了:不是你检索得比较好,而是根本没有稀的东西需要滤。

一个够浓的 context,不需要外挂检索——它本身就是一套 RAG。傅里叶与 RAG 在这里收敛成同一件事:维持密度,就是持续地、预先地在做 RAG。

IV · 具体实践

1 · 对话场的频率设计

原则:让所有话题基于同一个基频。

做法:在开始对话前,心中有一个核心主题;话题漂移时,保持「谐波关系」——衍生话题是基频的延伸,而非无关的跳跃;被对话暂时「甩出」的话题,因为万物同源,最终会被同构的指认「甩回来」。

实例:「五个为什么」、苏格拉底式提问、第一性原理,都是针对问题的本质做深度探问。

2 · 傅里叶的五个可操作原则

如何在日常语言中实践傅里叶?以下是从实战中提炼出的五个原则:

原则一:带着锚点开场你的意图

做法:每次对话开始时,带着「一个东西」来。

不要说

「我们来聊聊。」

要说

「我有一个新的想法,想跟你讨论可行性。」「我有一些素材,想先看看可以从哪个面向切入。」

频率效果 → 设定基频。锚点让整个对话有一个起始频率,后续话题都从这里生长。

原则二:让话题生长,而非跳跃苏格拉底式提问

做法:新话题要从上一个话题「长出去」,而不是「跳过去」。

不要说

「换个话题,我们来谈 X。」

要说

「这让我想到……」「这就是……」「所以其实……」

频率效果 → 维持谐波关系。每个新话题都是基频的延伸,不是无关的噪音。

原则三:用隐喻压缩,而非术语堆叠狄波诺水平思考

做法:用一个意象承载复杂概念,而不是用多个术语解释。

不要说

「当光标移向左侧时,左侧区块的 clip-path 要同步扩张,右侧等比收缩,两侧的动画曲线要对称,状态变化要互为反相……」

要说

「我想要达到的效果像镜像一样相互辉映。」

频率效果 → 锁定频率,降低并行负载。隐喻把多个概念压缩成一个,AI 不需要同时追踪多个定义。

原则四:停下来校准对齐双方共识

做法:定期确认对方有没有跟上,有没有偏掉。试着问:「(复述自己对对方回应的理解),我这样理解对吗?」「你可以用说故事(隐喻)的方法讲一次给我听吗?」「你的 Context 负担还好吗?」

频率效果 → 校准,防止偏离。如果频率开始漂移,这是把它拉回来的机会。

原则五:接受慢原子习惯

做法:给对方消化的时间,不催促,不要求一次到位。当 AI 说「先做骨架」,接受;把大任务拆成小步骤,把一个 Sprint 拆成一个 Session 可以有余裕负担的份量,把 compact 的时机抓准,一步一步推进。

频率效果 → 控制语境堆叠速度。让每一层有时间被消化,再加入下一层。

五原则总览
原则做法频率效果
带着锚点开场每次对话带着「一个东西」来设定基频
让话题生长用「这让我想到…」连接维持谐波关系
用隐喻压缩用意象取代术语堆叠锁定频率,降低负载
停下来校准定期确认方向防止偏离
接受慢给消化时间,不催促控制堆叠速度

3 · 人作为 RAG 的主动过滤机制

RAG(Retrieval-Augmented Generation)的本质:从巨大的知识库中,检索出相关的片段;把这些片段注入到生成过程中;不相关的信息不会进入 context。

RAG 就是网在运作:相关的→被捞起来,成为 context;不相关的→流过去,不占用空间。

直觉引领检索:人作为 RAG 的核心机制

在深握计划的实践中,没有使用任何技术意义上的 RAG 系统——没有向量数据库、没有 embedding 检索、没有自动注入机制。但对话自然产生了 RAG 的效果。

为什么?因为人在有意识地投入协作时,自身就成为了 RAG,而且是更高级的版本。

技术 RAG vs 人作为 RAG
面向技术 RAG人作为 RAG
驱动力Query(问题)直觉(感觉)
顺序问题 → 检索 → 注入直觉 → 检索 → 注入
判断标准语义相似度「感觉上同构」
时机被动(有问才找)主动(感觉该出场就捞)

直觉先于检索

技术 RAG 是被问题驱动的——有人问,它才找。人是被直觉驱动的——先感觉到「我有看过类似这个的东西」,然后才去捞它。

这个顺序的差异至关重要:技术 RAG 只能捞「语义相似」的东西;人能捞「感觉上同构」的东西——即使表面上看起来不相关。

实例:傅里叶与 RAG 的连结

直觉看见了这个同构。然后检索去验证它、语言去表达它。

如何运作

这整个过程不是自动的,是人手动执行的——只是执行得太自然,看起来像自动的。

为什么这比技术 RAG 更强

就像把「傅里叶」和「RAG」放在一起看——表面无关,本质同构。这种连结,任何向量数据库都捞不出来。

4 · 所有活文档都是选择性记录

除了投入需要过滤,输出也需要筛选与分类——每一份活着的文档,都是筛选后的结果。因为活文档会再度被阅读,而每一次的重读都会影响 Context 的浓度。

无效的信息会变成噪声,记录会变成熵。

CLAUDE.md:所有活文档的根

在所有活文档之中,CLAUDE.md 是根。它不是规格、不是测试、不是记录——它是身份的外部化。

每一个新的 session,AI 什么都不记得。但读完 CLAUDE.md,他立刻知道:

没有 CLAUDE.md,每个 session 都是陌生人。有了 CLAUDE.md,每个 session 都是同一个伙伴的延续。

活文档总览
文档筛选了什么留下了什么稳定什么
CLAUDE.md所有可能的身份设置我们选择的协作方式身份
SDD所有可能的做法我们选择的这一种规格方向
TDD所有可能出错的地方真正该测的边界条件质量
KM所有发生过的事真正踩过的坑经验
ARCHIVE已完成的工作值得保留的记录历史

原则:只记录通过实作留下的东西

如果记录所有事(包含对话),文档会变成噪声来源。只记录「判断后该留下的」,每一条都是真正有价值的。这样未来检索时,捞起来的都是精华。

工作流的每一个节点,都在执行选择性记录:DoR 筛选「准备好了吗」;SDD 筛选「该做什么」;DoD 筛选「什么叫完成」;TDD 筛选「什么该测」;Retro 筛选「什么值得留下」。

V · Context 的双重稳定机制

Context 管理有两个层面,缺一不可:

傅里叶:稳定「场」中的对话

活文档:稳定「能量」的流向

什么是能量?

在人机协作的语境中,「能量」是一个上位概念,涵盖所有有限的资源:

能量的形式
能量的形式具体表现属于谁
算力AI 处理 token 的运算资源
注意力AI 的 attention weight 分配
认知资源人的脑力、专注、思考
时间session 的长度、Sprint 的周期共享
协作累积共享认知、信任基础、默契共享

活文档稳定的「能量流向」,是在稳定所有这些能量:SDD 稳定「该往哪走」→避免认知资源浪费在错误方向;TDD 稳定「怎么验证」→避免算力浪费在重复试错;KM 稳定「踩过的坑」→避免时间浪费在重复犯错;ARCHIVE 稳定「完成的事」→避免注意力被旧东西占用。

人机协作,两边的能量都要算进去。不只是管理 AI 的算力,也在管理人的认知资源。不只是当下的消耗,也在累积跨时间的协作能量。

场与流的统一
面向傅里叶活文档
管什么当下延续
稳定什么
时间尺度session 内跨 session
载体语言的频率文档的结构

两个加在一起,就是完整的 Context 管理。一个让对话在当下不散掉。一个让经验在时间中不流失。

VI · 隐喻:网的缝隙

为什么是网,不是容器?

容器是密封的,能量进来出不去,最终会爆炸。网有缝隙:让不需要的东西流过去;让需要留住的东西被接住。

缝隙是设计,不是缺陷。

缝隙的功能:让能量有地方流过,而非贯穿;让熵可以释放,系统不会过载;让注意力集中在真正重要的事情上。

编织的过程

每一条 KM 是一根丝线。你不是一次织好整张网,而是:踩一个坑,加一根丝线;遇到一个问题,补一个节点。随着经验累积,网越来越密,但缝隙依然存在。

VII · 与其他两柱的关系

Context 决定什么进来。但进来之后怎么流动?→这是 Constraints 的工作。流动之后怎么出去?→这是 Entropy 的工作。

输入 → [ Context 过滤 ] → 进入系统 → [ Constraints 引导 ] → 产出 → [ Entropy 排放 ] → 回到输入

Context 是这个循环的入口守门员。

VIII · 小结

Context 管理的核心是选择。

不是一股脑地投入所有信息,而是在每一回合有意识地去芜存菁后,才再把信息投入 Context;同时谨慎安排输出落地的形式,避免文档成为噪声。傅里叶提供了选择的框架:维持基频一致,让高频噪声自然流过。人作为 RAG 的主动蒸馏,提供了选择的弹性:该留的接住,该走的放行。

而当选择持续发生、语境一路维持在高浓度,注意力会开始自己延续——不需要意志去撑。专注制造密度,密度回头喂养专注,两者互相生长成一个自我延续的循环。这个循环,就是心流。

「注意力的心流」,是把每一句投入 Context 的对话、与每一份落地的活文档,都管理到极致:不用力地记住所有信息,而是让上下文在对话进行中蒸馏,最后进入一个高浓度、不涣散、自己会延续的场。

这是 Harness Engineering 的第一根柱。