省token和提质不是取舍关系。而是同一件事。+防人和AI偷懒

#TRAE 技巧便利店


省token和提质不是取舍关系,而是同一件事。

+友情附文:spec一定要是spec


1.因为有用信息分到的注意力被压缩了。

斯坦福的实验数据:4000 token的无关内容就能把模型准确率从70%拉到55%。这是双重亏损。不是给模型的信息越多、上下文越丰富,产出应该越好。

但softmax归一化让所有token的注意力权重加起来恒等于1。噪声token不是白占位置,它们在跟信号token零和竞争注意力份额。你每多花一分钱把无关内容塞进去,不只浪费了那一分钱的token费用,

还同时把你花在有用信息上的那些钱贬值了——因为有用信息分到的注意力被压缩了。省token和提质在这个机制下是同一个操作,不存在取舍关系。

2.然后是一个我觉得极少有人意识到的问题,我暂时把它叫做跨session质量衰减。

2.1 脏代码的持续危害

你在一个上下文已经脏了的session里让模型写代码。上下文脏意味着注意力被稀释,产出必然是一个将就能跑但架构妥协、命名随意、模式不统一的版本。这段代码合进了你的仓库。第二天你开新session,模型读取你的仓库文件作为上下文。它看到的不是你预期中的高标准代码,而是昨天那个劣质版本。

2.2 transformer是模仿旧模式

transformer没有"标准"的概念,它对齐的是上下文里实际出现的模式。它会把昨天的妥协当成这个项目的风格基准,然后生成更多同水平甚至更差的代码。下一个session又读取这些代码。这是一个复合退化。比如:出现了47种不同的日期格式化写法。没有人在任何一个session里主动决定要写47种日期格式化。这是退化一轮一轮传导的结果。

第三个层面,调试的时候尤其危险。Syncause跟踪了3908条coding agent执行轨迹,发现每一轮debug尝试的成功概率比上一轮更低。这不是巧合。transformer是无状态的,它不能从上下文里的失败案例中"吸取教训"。它做的事情是在一个越来越被失败信息主导的上下文里重新分配注意力。

2.3 注意力被反复稀释

那些报错堆栈、失败的代码片段占据了越来越多的注意力份额,把正确方向挤到注意力的边缘。在研究里这是"注意力偏向失败案例"。比如:你在同一个session里debug第八轮的时候,模型看到的上下文里有七次失败的完整记录和只占一小部分权重的原始需求描述。它对失败路径的注意力远大于对正确路径的注意力。多轮交互相比单轮平均性能下降,两轮后就开始退化。

所以如果你关心的是在有限上下文里真正产出高质量项目,要管理的东西不是这一个session的token用量,而是跨session的上下文质量传导链。你的代码库是每一个未来session的上下文原材料。脏上下文里出来的代码,下个次chat就是污染源。这笔钱出现在token账单上,也出现在重构的人力中。

结论:

1.你的仓库里有三种错误处理风格,它不会帮你统一成一种,它会发明第四种。

2.花的不是模型费,是注意力费

3.窗口越大只是意味着装垃圾的空间越大。赢的不会是窗口最大的模型,是需要最少上下文就能干最多活的那个。

4.程序员不是prompt写得最好的那个人,是代码库干净的(那么标准是是什么呢?)工程基座坚固的坚固

针对第四点扩文:

如何构建一个好的工程底座:

如果你同意:Spec分两种。一种是文档型spec——用自然语言写"请遵循单一职责原则",放在CLAUDE.md里。这种spec是许愿。可以继续阅读。

另一种是构建的标准:可执行spec——写成架构测试、lint规则、类型约束、契约测试。spec是法律,过不了就不能过。

这种spec的验证标准:

  • 证伪:能指着一行具体的代码说"这违反了规则X",不存在模糊地带

  • 可验证:机器能自动判定,不依赖人类主观判断

第一层:类型系统层(编译期拦截)

规则 可证伪标准 执行机制
所有异步操作必须返回 Result<T, AppError>,禁止裸throw 任何函数签名返回 Promise 而非 Promise<Result> 即违规 TypeScript strict + 自定义type-check
禁止 any 类型 出现 any 即违规 tsconfig: noImplicitAny + eslint no-explicit-any
所有外部输入必须经过schema验证 controller层函数参数如果不是经过zod/joi parse的类型即违规 自定义lint规则

第二层:架构边界层(静态分析拦截)

规则 可证伪标准 执行机制
依赖方向:controller → service → repository,禁止反向 repository文件import了controller或service层的模块即违规 dependency-cruiser / ArchUnit
每个模块只能通过 index.ts 对外暴露 跨模块import了非index.ts的文件即违规 eslint no-restricted-imports + 自定义规则
禁止循环依赖 任何模块间存在 A→B→A 的import链即违规 madge --circular / dependency-cruiser

第三层:契约层(运行时/测试期拦截)

规则 可证伪标准 执行机制
API响应必须匹配OpenAPI schema 实际响应与spec diff非空即违规 contract test (dredd / prism)
数据库迁移必须可逆 migration文件缺少down方法即违规 自定义CI检查
所有公开接口必须有对应集成测试 路由注册表中的path在测试文件中无匹配即违规 覆盖率门禁 + 自定义脚本

第四层:风格一致性层(格式与命名)

规则 可证伪标准 执行机制
文件命名:kebab-case.ts 文件名包含大写字母或下划线即违规 eslint-plugin-filenames
组件命名:PascalCase export的React组件非PascalCase即违规 eslint naming-convention
禁止魔法数字 非0/1/-1的数字字面量出现在逻辑代码中即违规 eslint no-magic-numbers

关键设计原则:

同时防人和AI偷懒

人类偷懒的方式:跳过code review、写TODO不回来填、“先跑通再说”。AI偷懒的方式:用最短路径实现功能、忽略已有模式另起炉灶、吞掉错误不处理。

3 个赞

我去社区读着好舒服!

2 个赞

省 token 与提质存在强相关性,但绝非同一回事,二者是 “必要非充分” 的逻辑关系
将复杂的质量影响因素单一归因于 token 和上下文注意力,忽视了 prompt 设计、模型能力、工程规范落地等核心变量。

  1. 省 token 的前提是 “省噪声 token”,而非所有 token,盲目省 token 反而会导致提质失败
    噪声 token 稀释注意力,这一点符合 transformer 的注意力机制,但却刻意忽略了一个关键前提:有效 token 是提质的基础,而非负担。如果为了省 token,刻意删减核心需求、业务边界、关键约束等有效信息,哪怕上下文里没有任何噪声,模型也会因信息缺失产生幻觉、偏离需求,最终导致质量暴跌。
    换言之,“省 token” 的本质是 “过滤噪声,保留有效信息的精简”,而非单纯的 “减少 token 数量”—— 如果把有效信息当成 “噪声” 省掉,再极致的 token 精简也只会带来质量下降。此时省 token 与提质是**对立关系 **,而非同一关系,这本身就证明了二者存在取舍。

  2. 注意力机制并非只有 “权重和为 1” 的零和博弈,模型的编码能力决定了有效信息的利用效率 原文将 softmax 归一化的 “权重和为 1” 简化为 “零和竞争”,但实际 transformer 的注意力机制是多维度、多层级的联合编码:优秀的大模型(如 GPT-4、Claude 3 Opus)具备 “注意力聚焦能力”,能通过多层注意力头的协同,对有效信息做加权强化,对噪声信息做权重压制,甚至能忽略低价值噪声。同样的 4000 字噪声,在基础模型里会让准确率从 70% 跌到 55%,但在高阶模型里,准确率可能仅跌到 65% 以上 —— 这说明模型本身的注意力筛选能力,比 token 数量的影响更关键。如果仅靠省 token 来提质,而忽略模型能力的差异,本质是舍本逐末。

  3. 提质的核心是 “有效信息的精准传递 + 模型的正确理解”
    省 token 只是其中一个优化手段
    演讲的质量由prompt 的清晰度、需求的完整性、模型的适配性、输出的校验机制等多个因素共同决定,省 token 只是 “减少噪声干扰” 的手段之一。例如:一个 prompt 包含完整的需求、清晰的规范、无任何噪声,但因 prompt 结构混乱、指令模糊,模型依然会产出低质量结果;反之,一个稍长但结构清晰、指令明确、噪声极少的 prompt,产出质量远高于一个极度精简但指令模糊的 prompt。可见,省 token 能为提质创造条件,但无法直接决定质量,二者绝非 “同一件事”—— 提质需要 “省噪声 token + 精准传递有效 token + 优化 prompt 设计” 的组合操作,而非单一的 token 精简。

  4. “token 费用贬值” 的结论,混淆了 “成本消耗” 与 “价值产出” 的关系
    “塞无关内容不仅浪费 token 费,还让有用信息的费用贬值”,但实际工程中,部分 “非核心但辅助性的信息”,虽会增加少量 token,却能大幅提升有效信息的理解效率,最终实现 “成本微增,质量大幅提升”。例如:在让模型写业务代码时,加入 500token 的 “业务流程简图文字描述”,虽增加了 token 成本,但能让模型精准理解业务逻辑,避免因逻辑偏差导致的代码重构 —— 此时多花的 500token,反而让原本的有效信息 “价值增值”,而非贬值。这种情况下,token 消耗与质量提升形成正相关,不存在 “零和取舍”,更谈不上 “同一操作”。

跨 session 质量衰减的现象描述(代码风格退化、debug 成功率下降)符合部分工程实践,但将其单一归因于 “上下文脏→注意力稀释→模型模仿劣质模式”,忽视了人的主观干预、工程规范的落地、模型的迭代能力等核心变量,结论存在绝对化偏差:

  1. 跨 session 的代码质量,核心由 “人的工程把控” 决定,模型只是 “模仿者”,而非 “退化主导者” 原文认为 “transformer 无标准概念,会把劣质版本当成风格基准”,但这一结论的前提是 “人类未对模型输出做校验、未对代码库做维护”。在实际工程中,模型的输出只是 “初稿”,而非最终交付物 —— 优质的工程实践中,模型生成的代码会经过**人工 code review、自动化测试、lint 检查 ** 后,才会合入代码库。如果合入仓库的是经过校验的高质量代码,而非模型的 “将就版本”,那么下一个 session 中,模型读取的是高标准代码,自然会以其为基准生成优质输出,所谓的 “复合退化” 根本不会发生。换言之,跨 session 的质量衰减,本质是 “人类放弃了工程把控”,而非模型的注意力机制问题

  2. debug 时的 “注意力偏向失败案例”,并非不可解,且其核心矛盾不是 token,而是 “上下文的组织方式” 原文指出 “多轮 debug 中,失败信息占据注意力,挤走正确需求”,这一现象确实存在,但解决方式并非单纯的 “省 token”,而是 “优化上下文的组织方式”—— 例如:将历史失败案例做精简总结(保留核心问题,删除冗余堆栈)、将原始需求固定在 prompt 首段并做指令强化、使用工具将失败信息抽离出上下文,仅在模型需要时调用。同样的多轮 debug 场景,一个混乱的上下文(失败信息堆砌 + 需求模糊)会导致质量衰减,而一个精简且结构化的上下文(核心需求前置 + 失败案例精简 + 指令明确),能让模型始终聚焦正确方向,debug 成功率并不会持续下降。这说明,注意力偏向的问题,本质是上下文管理的问题,而非 token 数量的问题,更不能将其归因为 “省 token = 提质”。

  3. transformer 并非 “无状态的模仿者”,高阶模型具备 “规则学习和纠错能力”,且可通过 prompt 引导规避劣质模仿 原文将 transformer 简化为 “无标准、只模仿上下文模式”,但实际高阶大模型具备少量的规则归纳和纠错能力,且可通过明确的 prompt 指令,让模型忽略劣质模式,遵循既定标准。例如:在代码库中存在少量不规范代码时,若在 prompt 中明确指令 “严格遵循 PEP8 规范,忽略代码库中不符合规范的写法,变量命名使用小驼峰,日期格式化统一使用 datetime.strftime (‘% Y-% m-% d’)”,高阶模型会优先遵循指令,而非模仿劣质代码。这说明,模型的输出模式,由 “上下文模式 + prompt 指令” 共同决定,而非单一的上下文模式 —— 只要 prompt 指令足够明确,脏上下文的影响可被大幅削弱,跨 session 衰减并非必然。

对 “可执行 spec” 的重视符合工程规范,但将文档型 spec 与可执行 spec 对立,认为文档型 spec 是 “许愿”,且对工程基座的理解局限于 “spec 的可执行性”,忽视了文档型 spec 的 “顶层设计价值” 和工程基座的 “完整性”,存在片面化解读:

  1. 文档型 spec 并非 “许愿”,而是可执行 spec 的 “顶层设计基础”,二者是互补关系,而非对立关系 将自然语言的文档型 spec(如 “遵循单一职责原则”)定义为 “许愿”,认为只有可执行 spec(架构测试、lint 规则)才是 “法律”,但忽略了一个核心事实:可执行 spec 是文档型 spec 的 “具象化落地”,没有文档型 spec 的顶层设计,可执行 spec 会变成 “无魂的规则”。例如:“遵循单一职责原则” 是文档型 spec,它为开发划定了顶层设计的核心思想;而 “一个函数的代码行数不超过 50 行、一个类只负责一个业务模块” 的架构测试规则,是这一思想的可执行具象化 —— 如果没有顶层的文档型 spec,可执行 spec 的制定会缺乏统一的逻辑,最终出现 “规则之间相互矛盾、无法落地” 的问题。反之,文档型 spec 若没有可执行 spec 做落地校验,确实可能变成 “许愿”,但优秀的工程基座,必然是 “文档型 spec(顶层设计)+ 可执行 spec(落地校验)” 的结合,二者缺一不可,而非非此即彼。

  2. 工程基座的 “坚固性”,远不止于 spec 的可执行性,而是多维度的体系化构建 认为 “程序员的核心是代码库干净、工程基座坚固”,这一结论正确,但将工程基座的坚固性仅归因于 “可执行 spec”,却忽略了工程基座的完整构成:除了可执行 spec,还包括统一的技术栈、标准化的项目结构、可复用的基础组件、自动化的研发流程、完善的文档体系等。例如:一个项目有完善的 lint 规则和架构测试(可执行 spec),但技术栈混乱(同时使用 Python、Java、Go 开发无关联的业务模块)、项目结构无标准(不同模块的目录结构完全不同)、基础组件不可复用(每个模块都重新实现日期格式化、请求封装),其工程基座依然是脆弱的 —— 哪怕模型生成的代码符合可执行 spec,也会因技术栈和结构混乱导致维护成本极高。可见,可执行 spec 只是工程基座的 “校验层”,而非全部,原文对工程基座的理解过于狭隘。

  3. “可执行 spec 的验证标准(证伪、可验证)” 并非绝对,部分工程规则无法完全实现机器自动判定,仍需文档型 spec 做补充 原文提出可执行 spec 需满足 “能指着一行代码说违反规则 X、机器自动判定”,这一标准在编码规范、语法规则、简单架构约束上可实现,但在复杂的业务架构、代码可读性、可维护性等维度,无法完全实现机器自动判定。例如:“代码的可读性符合项目要求”“业务模块的拆分符合高内聚低耦合原则”,这些规则无法通过机器完全判定,必须依靠自然语言的文档型 spec 做明确界定,再结合人工 code review 做校验 —— 如果一味追求 “可执行 spec”,忽略这些无法机器判定的核心规则,工程基座依然会出现漏洞。

1. “你的仓库里有三种错误处理风格,它不会帮你统一成一种,它会发明第四种”

模型是否会统一风格,核心取决于prompt 指令是否明确,而非仓库的代码风格。若在 prompt 中明确指令 “统一使用 try-except-finally 的错误处理风格,忽略仓库中其他错误处理写法,异常信息统一封装为自定义异常类”,高阶模型会严格遵循指令生成统一风格的代码,而非发明第四种。仓库的多种风格只是 “参考”,而非 “基准”,模型的输出由指令主导。

2. “花的不是模型费,是注意力费”

“注意力费” 是模型费的衍生成本,而非独立成本 —— 注意力的有效利用,最终还是要通过优化 token 的质量(精简噪声 + 强化有效信息)、优化 prompt 设计来实现,而这一切都建立在 token 消耗的基础上。脱离 token 的有效传递,谈 “注意力费” 毫无意义;且模型费不仅包括 “注意力分配的成本”,还包括模型的编码、推理、生成成本,将其单一归因于 “注意力费”,是对模型成本的片面化解读。

3. “窗口越大只是意味着装垃圾的空间越大。赢的不会是窗口最大的模型,是需要最少上下文就能干最多活的那个”

模型的上下文窗口大小,核心价值是 “容纳更多有效信息”,而非 “装垃圾”—— 窗口大的优势,在于能直接容纳完整的项目文档、业务逻辑、代码库结构,无需人工精简,大幅降低上下文管理的成本。而 “需要最少上下文就能干最多活的模型”,本质是**模型的理解能力和推理能力更强 **,与窗口大小并非对立关系。实际情况是,优秀的大模型必然是 “大窗口 + 强理解能力” 的结合:大窗口提供容纳有效信息的基础,强理解能力实现对有效信息的高效利用,而非 “窗口小才是优势”。原文将窗口大等同于 “装垃圾”,是对窗口价值的片面化解读,忽视了大窗口在工程实践中对效率的提升作用。

4. “程序员不是 prompt 写得最好的那个人,是代码库干净的、工程基座坚固的”

这一结论存在非此即彼的逻辑错误—— 优秀的程序员,必然是 “prompt 写得好 + 代码库干净 + 工程基座坚固” 的结合体 。在大模型时代,prompt 是程序员与模型沟通的 “桥梁”,prompt 写得差,哪怕代码库再干净、工程基座再坚固,也无法让模型精准理解需求,最终产出低质量结果;反之,prompt 写得好,但代码库混乱、工程基座脆弱,模型生成的优质代码也无法合入仓库,最终沦为 “空中楼阁”。二者并非对立关系,而是相辅相成的核心能力,原文刻意割裂二者的关系,得出的结论过于绝对。

最终共识与补充:价值与局限

并非全盘否定原文的观点,其核心价值在于 点出了大模型应用中 “噪声 token 稀释注意力”“跨 session 上下文管理不当导致质量衰减”“工程规范落地的重要性” 等被忽视的问题,为大模型的工程化应用提供了重要的思考方向。

但原文的局限在于将复杂问题单一化、将相关关系绝对化为同一关系:将提质的多因素归因于单一的 token 精简,将跨 session 质量衰减的多原因归因于单一的注意力稀释,将工程基座的多维度构成归因于单一的可执行 spec,最终得出了 “省 token 和提质是同一件事” 的绝对化结论。

正确的逻辑关系应该是

  1. 省噪声 token 是提质的必要非充分条件:省噪声 token 能释放注意力,为提质创造条件,但提质还需要精准传递有效信息、优化 prompt 设计、匹配合适的模型能力;
  2. 跨 session 质量衰减的核心是 “上下文管理 + 人的工程把控”:脏上下文只是诱因,若做好上下文结构化、人工校验和代码库维护,衰减完全可规避;
  3. 工程基座的坚固性是 “顶层设计(文档型 spec)+ 落地校验(可执行 spec)+ 体系化构建” 的结果:二者互补,缺一不可;
  4. 大模型时代的程序员,需要 “prompt 设计能力 + 工程把控能力” 的双重提升:二者相辅相成,共同决定大模型的应用效率和产出质量。

简言之,省 token 是提质的重要手段,但绝非唯一手段,更非与提质等同;大模型的高效应用,从来不是单一维度的优化,而是 “prompt+token + 模型 + 工程规范” 的多维度协同。

4 个赞

感觉你们在做论文论点

4 个赞

今年目标,就是多输出内容

4 个赞

还是k叔的质量更高 ,化简为繁又化繁为简。这就是大道归真的境界吧 :winking_face_with_tongue: :saluting_face:

3 个赞

我有个老师叫豆包

4 个赞

基于2026年6月的视角,对这篇文章的判断如下:

:rocket: 被验证的超前认知

文章中的以下核心观点,在3月到6月间已被多项研究证实,或至今仍是行业讨论焦点。

  • “省Token和提质是同一件事”:文章将节省Token与提升质量视为一体,而非取舍,这一洞察非常精准。3月的研究显示,在长上下文中,输出质量会随Token增加而持续下降(Context Rot)。Chroma测试了18个前沿模型,发现无一幸免。这表明,不加选择地塞入Token,同时消耗了成本和模型性能。

  • “注意力稀释”与“零和竞争”:文章将模型性能下降归因于注意力被噪声稀释,这一观点也得到了印证。3月的研究提出了“上下文轮替”(Context Rot)和“中间丢失”(Lost-in-the-Middle)等概念。一项研究指出,普通对话中模型准确率会降至57%,而混入矛盾信息后更是崩塌至21%。另一项2026年的评估也显示,从单轮对话到多轮对话,模型性能平均下降39%

  • “跨Session质量衰减”:文章提出的“跨Session质量衰减”概念极具前瞻性。3月底的论文明确指出,多轮对话中的“语义漂移”和“记忆不稳定”是核心挑战。MIT的研究则揭示了其关键机制——“上下文污染”(Context Pollution),即模型会被自己过往的错误回复“污染”,导致幻觉累积。这表明问题根源在于模型“饮用自己的毒水”,而非单纯的能力下降。

  • “可执行Spec”优于“文档型Spec”:文章强调将规范转化为可验证的代码(架构测试、Lint规则等)是超前且正确的。2026年的AI开发趋势正是 “Spec-to-Application” ,即从自然语言规范直接生成应用。微软在6月开源的ASSERT框架,正是能将自然语言需求自动转化为测试用例和评估标准。这标志着“可执行Spec”正从理念走向工程实践。

:warning: 落伍或错误的认知

文章中部分观点在今天看来已不完全准确,甚至存在根本性错误。

  • “注意力零和博弈”的归因:文章将“注意力稀释”归结为简单的“零和博弈”在数学上不严谨。3月以来的研究揭示了更复杂的机制,例如矛盾信息的累积才是导致“上下文轮替”的主因。此外,现代模型(如采用DeepSeek稀疏注意力的模型、L2A等)已能动态决定关注哪些Token,注意力不再是固定额度的“零和游戏”。

  • 对“Transformer会模仿旧模式”的过度担忧:文章担心模型会无限模仿劣质代码,导致“复合退化”。但现代大模型经过RLHF等训练,已具备强大的代码审美和纠错能力。一项4月的研究表明,在保持连续性的跨会话实验中,模型能完美保持准确率。这意味着只要上下文清晰,模型有能力“出淤泥而不染”。

  • “禁止魔法数字”的教条主义:文章将“禁止魔法数字”作为硬性规则过于僵化。在复杂业务中,MAX_RETRY = 3这类常量是必要的领域知识。现代AI编程的共识是追求“可读性”而非“零字面量”,强制要求将字面量定义为常量,反而可能催生const ONE = 1这类愚蠢代码。

  • 过度依赖“三层架构”作为通用“法律”:文章将Controller → Service → Repository的架构作为普适规则,在2026年已显狭隘。现代软件工程更推崇领域驱动设计(DDD)六边形架构等,强调依赖倒置原则,即高层模块不应依赖低层模块。将这种具体分层架构作为不可动摇的“法律”已不合时宜。

:gem_stone: 总结

这篇文章的洞察力在3月时极具前瞻性,其核心框架(注意力稀释、跨Session污染、可执行Spec)经受住了时间的考验。但在具体的技术细节和归因上,部分内容已被2026年上半年的研究发展所修正或超越。其“道”(核心理念)依然领先,但部分“术”(具体规则和归因)需要与时俱进。

1 个赞

蒸蒸日上太强了 怎么在挖上古老贴 这不会是你参赛项目吧!

参赛只是游戏,星探才是天职

这么好的文章,埋藏在噪音之中,不可惜嘛

不挖出来,以后就看不到了

2 个赞