摘要 针对”生成模型接入实时系统后,改进应投向何处”这一问题,本文以一个实时即兴钢琴系统为对象,采用版本化迭代与回归门设计,对其 73 轮失效记录与干预结果做回溯分析。该系统遵循”模型只做选择、代码只做渲染”的架构:乐理内核生成有限候选集,模型每小节并行回答八个类型化问题,确定性代码把选择渲染成音符,调度层按音频时钟结算决策时间。结果显示:(1)系统上线后的首次致命失效不是音质问题而是时限问题——单次决策最坏约 17 s,而缓冲深度只有两小节(约 1.7–8 s,随速度而定),两种终局分别为 9.2 s 静音间隙与管线永久楔死;(2)引入决策预算(500–8000 ms,余量 300 ms)后,12 种子回归门四项指标与修复前逐位一致(9.08 / 2.54 / 32.00 / 31.58),测试由 171 增至 177,说明该修复只改变”渠道不健康时走哪条路”;(3)受限的接口契约会摧毁连续量:模型按 API 契约只能回答 0–3 整数强度,直接当绝对值渲染导致相邻小节跳变均值 1.032 档、跳 ≥2 档占 26.9%,改为”相对计划弧线的偏移 + 速率限制”后降至 0.495 与 0%;(4)系统中最反复出现的缺陷类型是”承诺—实现缺口”——接口签名、文档、调用方与既有测试全部齐备,只有实现不在(死参数、未接线机制、与实际路径不符的归因字段),此类缺口对静态检查与单测免疫,只能由对照真实数据分布的测量发现。本文认为,在实时可判定系统中,输出质量的下限由约束层承担,而工程上真正稀缺的不是更强的判断,而是”承诺与实现一致”的对账能力。

关键词 实时生成;决策预算;候选集;承诺—实现缺口;归因;可观测性

代码与工程记录 https://github.com/tripodxu/jev-piano(公开仓库,含 73 轮逐条记忆、4 篇 ADR 与全部量化口径)

1 问题的提出

把一个生成模型接进实时系统,最常见的投入方向是提升生成质量:换更强的模型、调更细的提示词、加更多约束。离线的端到端音乐生成已有成熟范式 [1][2],这些改进方向在批处理里成立;在实时系统里却可能整体失效——因为实时系统的失败模式不是”生成得不好”,而是”没有东西可播放”。

由此产生三个与直觉相反的次序问题:

  • H1:在实时出声系统中,时限是质量的前置条件,而非与之并列的指标——时限缺失时,质量改进不可观测。
  • H2:当模型接口的契约只能表达离散量时,把离散答案当连续量使用会摧毁音乐意图;正确修法是在渲染层重新解释答案,而不是照单全收。
  • H3:系统的主要缺陷类别不是”算错”,而是”说错/没做”——承诺与实现之间的缺口(死参数、未接线机制、假归因),其共同特征是签名与测试齐备,只有实现不在。

H1 关于约束次序,H2 关于接口形状,H3 关于工程缺陷的分类学。三者共同回答一个工程问题:当系统”看起来在正常工作”时,你怎么知道它没有在说谎。本文给出的答案是标题里的第三个词——对账:把每一句承诺,放回真实数据分布上量一遍。

2 系统与方法

2.1 三个部件

判断层:TypeSafe 的 Jev 模型,输入为一段结构化文本 state,输出为一组类型化问题的答案。每小节发出八个问题(和声功能、和弦、左手织体、右手节奏型、音高轮廓、强度、呼吸、发展手法),并行请求,九个和弦候选。单小节约 1860 输入 token、约 $0.000078,一次 32 小节演奏约 $0.0025(轮次 13 真实渠道实测校准的文档口径;其他生产样本在 1,170–2,000 token/小节间浮动)。

约束层:候选集由代码按乐理与风格生成,模型只能在其中选择,非法和声不可表示。候选全集为”风格进行池 ∪ 调式全色板”,并叠加声部进行加权(smoothness = 共音数 − 0.25 × 五度圈环形距离)、功能转移矩阵与两条反重复断路器(根音疲劳、循环锁死)。模型答案若越界(含以标签作答、报出刚被剔除的和弦),一律驳回并回落到最高权重候选。

调度层:lookahead 调度,提前两小节做决策,把 0.4–2 s 的 API 延迟藏进小节时长(60–140 BPM 下为 0.86–4 s)。

三个部件的关系不是”模型决定一切、其余兜底”,而是”模型在一组已经合法的选项里表达偏好”[5]。这个约束先于模型存在,与模型的强弱无关——它是乐理与产品规则的形式化,不是模型能力的产物。

2.2 干预与测量

系统以编号轮次推进,每轮一个可复述的假设,收尾时写一条记忆(做了什么、为什么、坑、验证指标、遗留项)。至 2026-10-31 为第 73 轮,累计 123 次提交、51 篇详细记忆(另有逐轮压缩索引,每轮必有)、4 篇架构决策记录、21 个前端模块(5,574 行)、267 项单测。

测量口径如下:回归门取 12 个种子、每条 32 小节的平均值,四项指标为和弦种类、和声熵、旋律唯一小节数、左手唯一小节数(32 小节中逐种子判定的均值),门槛集中于单一配置对象(8.5 / 2.3 / 28 / 28)并被单测锁死,CI 每次推送执行;单测由 node --test 驱动,覆盖纯逻辑,浏览器行为另做人工冒烟;判定规则在轮次开始时登记:门槛不过即不合并,即便某一项看起来更好;结构约束可执行化:test/limits.test.mjs 让”每个文件 ≤800 行”这条 ADR 条款变成红灯,而不是一句意图。

2.3 一条附加判据

本轮引入并要求全文使用的一条判据:文档、接口与日志所承诺的行为,必须在可执行代码里存在,并与实际路径一致。

它不是一个测试断言,而是产品契约:界面上每个音符都可溯源,溯源信息一旦与真实路径不符,整套可视化就从”解释”退化为”装饰”。3.4 与 3.5 是这条判据的两次应用。

3 结果

3.1 时限缺失的两种终局

上线后的首个致命症状被使用者描述为一句话:“只能弹两小节”。不是报错,是静音。

诊断用虚拟时钟驱动真实的调度器与合成器,测 10 种上游场景。根因不在合成器,在调度:缓冲深度是两小节(60–140 BPM 下约 1.7–8 s);而单次决策时间无界——请求重试 2 次、单次超时 8 s,最坏约 17 s,可达缓冲的数倍。

表 1 时限缺失的失效形态(修复前 / 修复后)

上游场景 修复前 修复后
0.6 s 正常延迟 正常 正常,不误伤
3 s / 6 s(慢于小节) 93/93 音符爆音;6.04 s 静音间隙 正常,节奏不断
429 / 502 / 断网 正常回落 正常回落
挂住 + 浏览器 8 s 超时 10.3 s 静音间隙 正常
前两小节正常后挂住(用户症状) 播 2 小节后 9.2 s 静音 12/12 小节正常
挂住且无超时兜底 0 小节,管线永久楔死 12/12 小节正常

两种终局值得区分。静音间隙是缓冲被抽干;楔死是超时信号不生效时 nextBar 永不返回、调度器的”决策中”标志永远为真——后者不会自愈,因为没有任何路径会把它复位。同一”静音”症状下,一个是资源问题,一个是状态机问题。

还有一处判读陷阱:Web Audio 对排程在过去时刻的乐音是立即发声,因此”排程时刻”本身是谎言。正确的听感判据是 max(排程时刻, 派发时刻)——只看排程会得到”一切正常”的假象,而界面正在假装演播。

3.2 修复只改变路径,不改变音乐

修法是把决策时间交给音频时钟:起播期以 1.2 小节封顶(放行正常延迟、砍掉病态延迟),入队后按”队列音频还能撑多久”收紧,余量 300 ms,下限 500 ms、上限 8000 ms。预算先耗尽则由同构的确定性离线决策器顶替该小节并标记,下一小节仍重试真实渠道;真实答案先到必须用真实的。另有一条:迟到的小节连同时间锚点整体平移到现在,否则整小节会被压成一声。

关键结果不是”播不断了”,而是音乐指标一位没动:

表 2 回归门四项指标(12 种子 × 32 小节,修复前后)

指标 修复前 修复后
和弦种类 9.08 9.08
和声熵 2.54 2.54
旋律唯一小节 32.00 32.00
左手唯一小节 31.58 31.58

测试由 171 增至 177(新增六例:预算内不误伤、超预算顶替并标记、迟到的真实响应被丢弃且序号不错位、挂住不楔死、渠道挂住时八小节全播、迟到小节顺延)。指标逐位一致,恰好证明这是路径级改动而非音乐级改动——它只在渠道不健康时生效。

这为 H1 提供了一个干净的证据形态:时限修复不产生任何质量增益,但没有它,此前及此后的一切质量增益都无法被观测。

3.3 受限接口摧毁连续量,修法是重新解释

强度问题暴露了接口形状的破坏力。模型按 API 契约只能回答 0–3 的整数,而计划弧线是连续曲线(2.4 2.3 2.3 2.2 2.1 …)。代码把这个整数直接当绝对值渲染,于是动态变成噪声:3 2 3 2 0 2 3 3 3 2 2 0 1 0 0 0 …。

动手前先量:12 种子 × 32 小节共 372 次相邻跳变,平均跳变 1.032 档(四档量表上整整一级),跳 ≥2 档占 26.9%(100/372),跳 ≥3 档占 6.2%。听觉后果是力度 0.35↔0.85 的 2.4 倍落差,而左手织体的三个分支阈值会在整数档翻转时同时换音色。

修法两步,都在渲染层,都不夺走模型的决定权(ADR-0001):把整数回答重新解释为相对计划弧线的偏移(模型同意计划就得到计划,偏离则保留一半偏离);再对变化率而非目标值施加限制——这正是音频压缩器的 attack/release 与 MIDI CC 平滑的同一思路。参数不是试出来的,是用录下来的真实序列重放模拟 7 组组合后选的:

表 3 强度平滑方案的重放模拟(372 次跳变)

方案 平均跳变 跳 ≥2 档 最大
现状(整数当绝对值) 1.032 26.9% 3.00
仅偏移(dev=0.5) 0.556 0% 1.78
仅限速(slew=1.5) 0.820 0% 1.50
偏移 0.5 + 限速 1.0(采纳) 0.495 0% 1.00
偏移 0.35 + 限速 1.5 0.414 0% 1.41

最后一行指标更漂亮,但没有采纳:0.414 与 0.495 的听感差别,远小于”模型还剩多少发言权”的差别。平滑不该以架空模型为代价——这是本项目中”判断层与约束层如何分权”的一次定价。

代价是左手唯一小节数降了 1.16:强度平滑后更多相邻小节落进同一个织体分支。但左手指纹护栏把”相邻字面重复”守在 0——上面那层让音乐更顺,下面那层保证不因此重复。两层机制在这里接上了力。

H2 由此得到支持,且支持的方式值得记:整数档不是模型的错,是接口的形状;渲染层该做的是重新解释(整数→偏移),而不是照单全收(整数→绝对值)。

3.4 承诺—实现缺口

H3 是本次重读仓库后新增的命题。它来自四件表面无关、结构相同的事:

表 4 四类「承诺—实现」缺口

轮次 文档/接口承诺 实际执行 发现方式 量级
1 循环锁死断路器把循环成员剔出候选 该参数在签名、调用方、测试里都存在,函数体从未引用 全量阅读时对「接口齐备但行为缺失」的排查 和弦种类长期卡在 6–7
11 「承袭」即重述主题 repeat 与新句走完全相同的渲染路径 12 种子下比对旋律与动机的音程序列 仅 2.9% 完全一致,平均音程差 3.76 半音
16 / 19 决策日志记录发展手法 呼吸取消了素材使用,标签照旧写「模进/倒影/装饰」 只统计「与呼吸同现」的小节 24.2% 的承袭实际没承袭
52 每个文件 ≤800 行(ADR 条款) 两个文件已涨到 842 / 811 行 拆分时对齐文档表 越线当天无构建失败、无测试报红

四者的共同点是全部通过了当时所有的检查:语法正确、单测全绿、CI 全过、真渠道也能跑。静态检查与单测验证的是”已写下的代码是否自洽”,而缺口恰恰位于”没有写下的那部分实现”——那里没有任何东西可以断言。

发现它们的方式也一致:不是读代码读出来的,是对着真实数据分布量出来的。 轮次 11 是拿承袭小节与动机逐音比对(2/70 完全一致),轮次 16 是把 384 小节中的承袭小节单独切出来看其中有多少被呼吸取消(16/66),轮次 52 是把文档表和 wc -l 对一遍,轮次 1 是把 JSDoc 和函数体对一遍。四种手段都叫对账,都不需要更聪明的模型。对账的边界随后还在外扩:部署后的线上核验对 17 个片段逐字节比对——npm test 全绿只证明磁盘对,不证明线上对,连 CDN 注入的 4 字节统计信标都要单独解释。

轮次 52 之后,这类缺口第一次有了机器可执行的对账:test/limits.test.mjs 让行数条款变成红灯,并且用”临时放一个 801 行的文件”验证过它真的会红——一条从没红过的断言,比没有断言更危险。

3.5 归因偏离:单点修复只覆盖被观察到的路径

承诺缺口中最贵的一类在记账上。呼吸本应是时值指令(延后进入),实现里却被写成了门禁(不许使用素材)。后果两层:音乐层,四分之一的”重述”什么也没重述;记账层,日志仍记”承袭”,界面照旧显示括线、动机卡照旧计数一次”回来”。

12 种子 384 小节的广谱诊断给出了偏离量级:发展手法分布中承袭占 17.2%,呼吸小节占 15.9%,而承袭中被呼吸取消者为 16/66,即 24.2%。

首轮修复把承袭挪出这道门,并把兜底路径的归因强制改为”新句”。但同一类缺陷在另外三种手法上原封不动,因为那轮的归因兜底只写了一行 if (dev === 'repeat')。

表 5 呼吸同现小节与素材的平均音程差(10 种子,单位:半音)

发展手法 小节数 修复前 修复后
承袭 repeat 11 1.43 0.97(首轮已修)
模进 sequence 20 3.60 0.70
装饰 ornament 11 3.86 0.70
倒影 inversion 30 3.94 5.16(判据反了,见下)
新句 new 10 3.43 3.47(本就全新,预期)

推广后的抽象是一句话:呼吸是时值指令,不是否决指令——它表示”延后进入”,不表示”不许用素材”。修复方式随之统一:素材照用,整组音按它自己的最小节奏间距整体后移。延后量从音乐自己的节奏里取,不是拍的常数。

倒影一行需要单独交代,因为它暴露了判据本身的不可靠。倒影后音程取反,”与素材的逐音差”必然变大,于是修复”成功”的倒影被判成更差——5.16 不是退化,是指标在说谎。改用镜像关系做定向校验后(平均 |r+p| = 1.01 半音,30 例中 20 例满足 ≥70% 音程符合镜像),结论才与事实一致。

H3 在此得到加强:缺口的修复粒度取决于依据的是”被观察到的案例”还是”共用该条件的逻辑路径”。前者修一次不够,后者的判据是还有哪些路径走同一段逻辑——这条判据后来被写进了项目宪法的高危区说明里。

3.6 时间基准不唯一

同一系统里曾经同时存在两种”现在”:声音以音频上下文时钟为准,而琴键亮灭走挂钟定时器——正是 Web Audio 社区反复警告的”两座时钟”问题 [3][4]。全项目共 4 处挂钟实现,后果逐条可列:事件循环拥塞时误差累积;固定 30 ms 轮询使每个音最多晚一个 tick;亮灭时长按音符时值算而声音实际响到”时值 + 释音”,键永远比声音早灭约 300 ms;排程被推迟时键仍按请求时刻亮;未补偿输出延迟;用户点击琴键时没有任何按下视觉。

改法是把时钟做成必填注入项(不传即抛错,不给”忘了接音频时钟”静默退化的机会),定时到下一个事件本身而非固定轮询,且长卡顿后过期事件不补亮。这与 3.1 是同一问题的两端:“按时”不只要求给决策定一个上界,还要求所有参与者对”现在几点”有同一个答案。

3.7 改进的分布极不均匀

123 次提交分布在 8 个工作日上,其中 4 天连续占了 93 次。

表 6 提交与轮次的时间分布

日期 提交数 主要内容
09-28 30 理论内核、判断层客户端、每小节作曲家、合成器
09-29 20 和声功能层、拼写修正
09-30 32 速度弧线、乐句问答、决策预算(事故当日)
10-01 11 静默缺陷清理、记账修复
10-18 3 静止画布按需重绘、文件拆分
10-25 16 跟弹回声、键盘弹奏、和弦键亮起
10-28 10 界面现代化收口
10-31 1 全功能验收与空格守卫修复

音乐性集中在前四天,稳定性集中在事故当日,可玩性集中在 10-25 与 10-31。中间空了三周。

三周空白不是拖延。它的功能等价于一个需求采样期:使用者(即作者)在这三周里反复弹它,才知道下一个该改的地方在哪里。这一点无法用指标证明,本文只记为观察,不作为结论。

4 讨论

4.1 时限是架构约束,不是性能指标

把”决策太慢”当作性能问题,会自然地去优化平均延迟:换更近的节点、压提示词、减少问题数。这些都对,但都不解决 3.1 的失效——因为失效来自没有上界,而不是来自平均值偏高。平均值 300 ms 的系统,只要尾部长到 17 s,一样会在第三小节静音。

上界一旦存在,慢就从”事故”降级为”降级策略”:这一小节用离线答案,下一小节再试。这是把不可控的外部依赖,转换成一个可控的内部状态。

顺带一个反例:曾试图压缩提示词以节省 token,实测全面压缩后 token 降 5.5%,但真实渠道的和弦种类从 10 掉到 6;把语义挪回后质量只回到 7、token 优势只剩 0.8%。该配置对措辞高度敏感——任何改写都会让真实输出移动 ±2 种和弦。在这个系统里,省成本的正确位置不在提示词,在候选集与调度。

4.2 「尽力而为」必须配「如实记账」

系统里有一条设计惯用法反复出现:硬性不变量违反算失败(测试红),软性约束违反算尽力(记录在案并可见)。二者不可互换——若软层也判失败,系统天天红;若软层不记账,”尽力而为”就成了假承诺。

3.5 与 3.6 都是这条惯用法的应用:兜底分因,是给”降级”记账;归因修正,是给”实际路径”记账;时钟统一,是给”时间”记账。它们的共同点是宁可难看,不可说错。

一条具体证据:兜底曾被拆成两类——渠道故障(429、断网、跨域拒绝、缺密钥)与渠道跟不上(决策超预算)。两者共用同一套离线顶替逻辑,但记账彻底分开,状态栏后缀也不同(·兜底 与 ·跟不上)。这不是文案工作:如果两类失败混在一个计数器里,”今天兜底 40 次”这句话不可解释——你不知道该去查网络,还是该承认模型太慢。

4.3 可解释性是记账属性

第 3、9、12 轮把归因字段做得越来越显眼——功能轨、段落标注、动机卡。等到第 16 轮发现承袭有 24% 根本没发生时,代价已经不只是”少了一次重复”,而是整个界面在为一个未发生的事实作证。

由此得到一条与直觉相反的关系:界面的可见度越高,归因错误的代价越大。 一个只有日志的系统说谎,损失是排障变慢;一个把归因画进界面的系统说谎,损失是使用者对全部可视化的信任。所以可解释性不是前端任务,它的成本中心在后端与调度层——界面只是把已经存在的账目读出来。

4.4 一条被证伪的改动,和它暴露的架构约束

第 14 轮试图让和声也拥有主题:承袭时给同功能和弦加权。基线先量的结果是,承袭小节的和声功能与动机相同者仅 22.7%,低于全局最常见功能(下属 38%)的基线——和声对”主题”毫无概念。

改动被证伪,且证伪得干净:

  • 循环依赖:和弦候选集必须在发请求前构造(要发给模型),而”这一小节是否承袭”来自同一次请求的回答。尝试在解析答案后重算候选,权重根本没进驱动选择的那份数据,对齐率纹丝不动。
  • 窄触发有效但被稀释:改用请求前可判定的信号后,对齐率升到 40%(基线 37%),机制确实生效;但只有约 6% 的小节触发,0.056×100% + 0.944×37% ≈ 41%,实测 40% 与理论完全吻合。机制是完美的,覆盖面太窄。
  • 放宽触发反而更差:用发展手法权重去预测”会不会承袭”来扩面,对齐率从 40% 掉到 34%。
  • 加重权重压不过风格惯性:权重扫描从 0 到 3.0,0.6 在所有配置下都是峰值(40%),更高一律变差。原因是段落首候选里主和弦靠进行池的基础权重领先 0.4 分,加权补不回来——池的基础权重是风格身份的一部分。
  • 最后发现测错了集合:真正有提升的是”承袭延续”这条触发,而不是我以为的”段落首”;而改动还让上一轮验证过的段落首承袭率从 45.8% 回退到 29%。全部回退。

留下一句可复用的架构结论:在”模型选、代码渲染”的架构里,渲染层无法用后验信息修正模型对同一次请求的选择。 这是一条架构约束,不是实现疏忽。第 13、14 两轮连着都是”测量否决了改动”,这不是停滞——把路走死的成本,远低于让一条看似合理的改动沉淀进主干。

4.5 与「廉价判断」的关系

把判断层的开销摊开看:每小节八问、九个候选、约 1860 输入 token、约 $0.000078、延迟 0.4–2 s。这是一个极廉价的判断源。

而本系统中真正决定输出质量的,几乎都不是”模型更强”,而是三件与模型无关的事:候选集保证非法和声不可表示;指纹护栏保证相邻小节不字面重复(六层反重复机制,硬层违反即测试红);决策预算保证它不会因为想得太久而失声。前者是乐理知识的形式化,中者是产品约束的代码化,后者是实时约束的架构化。

这与姊妹篇《廉价判断与确定性知识》的”廉价判断 + 手写知识”设想相容,但它给出的归因与设想不同:判断层提供的是偏好(同一组合法和弦里选哪个、同一动机用哪种手法重述),而质量下限由约束提供。约束写得越准,判断层需要的智力越低。极端例子是强度:当接口只能给整数时,模型的一半发言权必须先被”重新解释”才能变成音乐。

值得注意的是,这套约束并不便宜。它由 73 轮里大部分”没有新功能”的轮次堆出来,而且每一轮都在和 3.4 那类缺口作战。约束的成本不在写,而在对账。

5 局限

其一,单用户,且无听感实验。 73 轮调音服务的是一个使用者,全部”好听”的判断都不可外推。本文能主张的只有工程结构上的结论(时限次序、接口形状、缺口分类),不能主张任何关于音乐听感的普遍结论。若要检验后者,需要至少一组对照听众与可复述的听感量表,本文未做。

其二,deadlineMiss 没有线上打点。 表 1 证明修复在构造场景下有效;线上唯一一次生产实测(第 60 轮端到端,32 小节)为 0 兜底、0 超预算,但该样本不足以回答”渠道跟不上”的发生率,也无法回答”预算实际救回了多少小节”——这是设计缺口,不是结论。

其三,fixture 全绿不等于真实渠道健康。 第 29 轮的真实渠道回归打破了此前从未破过的硬性不变量:相邻字面重复 = 6(离线 12 种子全为 0)。根因是答案分布的形状而非候选集质量——真实模型连续 6 小节回答”承袭 + 呼吸”,且该动机渲染后不含任何强拍,于是锚定完全失效,每小节原样输出同一旋律;离线渠道按权重采样,永远不会生成这种极端序列。修复(首音锚定 + 逐音枚举删除的耗尽契约)后回到 0,旋律唯一小节 26/32→32/32。结论:护栏的测试必须包含对抗性的极端答案序列,而不只是跑自己会产生的路径。

其四,判据与测量工具都会撒谎。 除 3.5 的倒影一例外,还有一次更彻底:为修正和弦拼写而写的取证脚本,按根音集合判定”降号调”,于是把 C 小调判成升号调,报告”0 处错误”,而实际 32 小节里有 14 小节(44%)拼写错误。修好实现后,同一个脚本又反过来报”14 处错误,应为 G#”——因为它的期望值过期了。测量工具的错误比被测对象的错误更难发现,因为它看起来正是你要的答案。 凡涉及此类指标,本文只报量级并交代判据来源。

其五,样本为一个系统、一个模型族、一种交互形态。 结论的外部效度受限:无法区分”实时生成必须如此”与”这一种实时生成如此”。

6 结论

本文的核心发现有三条:在实时生成系统中,时限是质量的前置条件,而非与之并列的指标;接口的形状会决定音乐的形状,离散契约必须被重新解释而非直接采纳;而系统里最持久的缺陷类型不是算错,是承诺与实现之间的缺口——它通过了语法检查、单测、CI 与真渠道冒烟,只能被”对着真实数据分布对账”发现。

对工程实践的含义有三条。若目标是”不断”,应优先建立由上界驱动的降级路径,其收益不可见(指标不动)但不可省;若目标是”像”,应检查接口粒度是否摧毁了你要的连续量,并在渲染层重新解释;若目标是”可信”,应把归因当作契约维护,其修复粒度必须落在共用逻辑的路径上,而不是落在被观察到的那个案例上。

对”廉价判断 + 手写约束能否获得较高智能”这一主张,本文给出的判定是结构性支持、量级上保守:判断层以每小节约 $0.000078 的成本提供了可用的偏好信号,但输出质量的下限由候选集、护栏与预算三条约束承担;判断层变强会抬高上限,而约束写错会立刻击穿下限。这与姊妹篇《廉价判断与确定性知识》在棋类系统中观察到的”知识负责不失、判断负责在知识沉默处不崩”是同一形状的结论。

数据与复现

代码、测试与全部工程记录在 https://github.com/tripodxu/jev-piano。文中数值取自该仓库的 docs/memory/(每轮一条记忆:诊断、根因、验证指标、遗留项)、docs/adr/(四篇架构决策及其被否决方案)、AGENTS.md(代码地图、模块行数表与高危区契约)与 MEMORY.md(压缩索引与任务板)。回归门门槛集中于 GATE_CONFIG 单一配置对象;决策预算常量(MIN_BUDGET_MS / MAX_BUDGET_MS / BUDGET_MARGIN_MS)与迟到小节顺延逻辑集中在调度层;”每文件 ≤800 行”由 test/limits.test.mjs 守成红灯。均随仓库同步更新。

仓库:https://github.com/tripodxu/jev-piano
线上系统:https://jevpiano.logicc.top

参考文献

[1] Agostinelli A, Denk T I, Borsos Z, et al. MusicLM: Generating music from text. arXiv:2301.11325, 2023.

[2] Copet L, Kreuk F, Gat I, et al. Simple and controllable music generation. Advances in Neural Information Processing Systems (NeurIPS), 2023.

[3] Wilson C. A tale of two clocks. HTML5 Rocks, 2013. https://www.html5rocks.com/en/tutorials/audio/scheduling/.

[4] W3C. Web Audio API. W3C Recommendation. https://www.w3.org/TR/webaudio/.

[5] Kambhampati S, Valmeekam K, Guan L, et al. LLM-Modulo: A More Realistic Framework for Evaluating and Enhancing LLMs’ Planning Capabilities. arXiv:2402.01817, 2024.