第28章

第二十八章 封装再组合:为什么几个可靠模块未必构成可靠整体

一 每个零件都合格,为什么系统仍然失败

设想一个研究流程由四个模块组成:第一个整理问题,第二个生成程序,第三个检查计算,第四个撰写结论。每个模块在自己的测试中表现良好,连接之后却把一个只适用于对称网络的命题写成适用于全部网络。没有哪个模块必然撒谎,错误可能发生在条件从一个位置传到另一个位置时被省略。

第一个模块认为对称性属于用户已经知道的背景,输出时只写连通网络;第二个模块为方便实现而采用对称例子;第三个模块确认这些例子的计算没有错误;第四个模块把未被明确限定的结果概括成一般结论。局部任务各自完成,整体承诺却已经超过依据。这说明组合可靠性需要自己的证据,不能由局部合格直接相加。

另一个简单例子是单位。某模块输出分钟,下一模块按秒解释,两个模块内部计算都可能正确。又如,一个模块把空值理解为尚未测量,另一个把它当作零;一个按列存储向量,另一个按行解释。错误不一定来自复杂推理,而可能来自看似普通的接口约定。

因此,封装之间必须交换的不只是结果,还包括使结果有意义的条件。输入类型、单位、范围、状态、版本和未定项,都是可能影响后续活动的内容。并非每次调用都需要展示全部细节,但关键条件必须以可用方式进入接口,而不能仅存在于某位开发者的记忆中。

帕纳斯关于模块化的讨论提醒我们,模块划分应当考虑需要隐藏和保持可修改的设计决策,而不只是沿处理步骤切割。[13] 对思维封装而言,这意味着不能因为研究按四步进行,就假定四个智能体已经形成合适结构。需要认识哪些条件必须共享,哪些内部实现可以独立改变。

模块边界也不是越多越好。过度拆分可能使每次传递都丢失语境,增加转换与核对成本;过度合并则可能使内部状态无法辨认,出现问题时只能整体重做。合适颗粒度取决于任务之间的依赖、变化频率和检查方式。没有一种最大模块数可以代表研究先进程度。

可以把封装组合看成一种新的对象。原先每个模块只承诺局部性质,现在整体声称完成一项更大的活动;新增主张意味着新增验证。要检查的包括条件是否连续、错误是否传播、异常能否停止,以及整体目标有没有在中间被改变。这里不必每次重做全部局部证明,但必须检验新的连接。

这正是文明颗粒度扩大时最重要的工作。刀具、输送和支撑分别存在,不等于隧道工程已经成立;检索、生成和验证分别存在,也不等于可靠研究已经成立。组合不是把旧能力堆得更高,而是使它们在新的相互制约中形成有效活动。

有时,新组合的价值来自减少某个环节。直接把原始数据与检查器连接,可能比经过多次语言摘要更少失真;让同一条定义在各处共用,可能比每个模块重新解释更可靠。升级未必表现为流程更长,而可能表现为关键关系更直接。

因此,设计复合思维体首先要问需要什么连接,而不是可以调用多少模型。只有当连接使新问题获得有效组织,较大颗粒度才具有实际内容。否则,系统只是把多个局部成功安排在同一张流程图上。

二 可靠性怎样传递:不能随意相乘成功率

假设三个模块分别在独立测试中达到某种成功率,能否把三个数字相乘得到流程成功率?通常不能直接这样做。独立测试的输入分布未必等于实际流程中的输入,模块之间也可能共享错误。只有在适当条件下,概率乘法才具有相应含义;没有条件的精确计算,反而可能制造虚假可靠性。

更一般地,整个流程成功的概率可以分解为第一步成功的概率,乘以后续步骤在前面成功条件下的成功概率。这个分解不要求事件独立,但要求使用的是正确的条件概率。孤立测试中的平均表现,不能自动替代这些条件概率。前一模块可能把最困难或最含混的输入集中传给下一模块。

也可以使用不依赖独立性的上界。若在实际流程中,每个相关失效事件的概率都不超过给定数值,那么至少发生一个失效的概率不超过这些上界之和;相应全部无失效的概率不低于一减总和,最低取零。这只是并集界,可能很保守,也不保证没有漏列失效类型。它的好处是把假设明确放在实际流程上。

这里同样不能把概率计算当作数学证明的替代。若最终提交的是某个全称命题,仍需其自身依据。概率模型更适合帮助比较流程设计、分配检查资源和理解失效风险,而不能把每个未证明结论变成大概率真理。不同层级的可靠性要保持区别。

相关失效尤其值得注意。多个模型共享同一错误材料时,它们的赞同可能高度相关;两个检查器共用同一有缺陷的前处理,独立实现的优势也可能被削弱。要形成真正有差异的证据,需要检查共享依赖,而不只是改变工具名称。独立不是一种宣传标签,而是一种需要说明的失效结构。

反过来,不同证据也未必完全独立才有价值。一个具体反例、一项形式检查和一份来源核对,各自针对不同问题,能够减少不同盲区。评价应当认识它们如何互补,而不是只有达到理想独立才允许使用。可靠组织通常是在现实限制中建立适当多样性,并诚实保留残余风险。

组合还可能放大微小偏差。一个摘要只略去一个限定词,下一步把它当作一般定义,最后就会形成完全不同的结论。局部误差很小,不代表全局后果也小。需要识别哪些信息属于不可丢失的条件,哪些可以在压缩中省略。对关键条件的保护,比统一要求摘要更长更有意义。

另一类问题是状态漂移。候选猜想经过几次转述,逐渐失去有待检验的标记,最终被当作事实写入结论。每次转述可能只是语言润色,却共同改变认识地位。解决办法不是禁止摘要,而是让证据状态作为结构化信息一起传递,并在最终主张处重新核对。

因此,整体可靠性不能只由各模块自报分数产生。需要在真实任务与连接方式下测试,并观察边界、异常和失败恢复。若系统只能在理想输入中运行,尚不能承诺复杂研究环境中的同样表现。成熟组合必须认识它与真实任务之间的差异。

这些分析把封装升级从技术乐观主义中分离出来。较大颗粒度意味着更多内容可以整体调用,也意味着更多依赖在内部共同运行。文明进步不是越封越看不见,而是把看不见的部分安置在能够检验、维护和重开的组织中。

三 不同模块的目标,怎样悄悄改写同一项研究

一个研究者要求寻找能够推翻自己猜想的证据。检索模块为了提高相关性,优先返回与猜想相似的文章;摘要模块为了清楚,删除不确定表述;写作模块为了连贯,把冲突整理为一致结论。每个模块都在优化自己的任务,整体却背离了寻找反例的目标。没有明显技术错误,也可能发生认识失真。

因此,接口不仅传递数据,还传递任务目的。相关性是与什么相关,清楚是否允许保留冲突,连贯是否可以容纳尚未统一的证据?这些目标需要在整体层级重新说明。否则,局部优化可能使最值得研究的差异在经过流程后逐渐消失。

对思维封装,尤其要保护负面信息。未找到来源、证据相互矛盾、条件不满足、候选不值得继续,都应当能够成为有效输出。若每个模块都被要求提供积极有用的答案,它们可能把停止与反对视为任务失败。最终系统看起来永远在推进,实际上失去自我纠正的通道。

还需要区分外部材料与操作指令。一篇被检索到的文献可以成为研究对象,但其中的命令性语句不应自动改变工具流程或授权范围。对能够调用外部功能的系统,资料、指令与权限混合会改变实际行为。这里提出的是封装设计原则,不涉及执行任何外部操作;关键是输入的角色必须在接口中明确。

权限也应随任务限定。负责比较文献的模块不必获得修改全部研究档案的权力,负责生成候选程序的模块也不必自动执行对外发布。能力越强,越需要使动作与授权对应。否则,较大封装可能把一个局部误解扩展成不可逆的外部后果。可靠性不仅是答案正确,也包括行动没有越出所给任务。

在人类团队中,同样需要这种边界。合作者提出建议,不等于获准改写署名;导师要求试验,不等于所有私人材料可以被公开;维护者修复程序,也不等于可以改变研究目标。复合体不是取消角色与责任,而是让它们在互动中更准确地形成。

一项可以采用的设计,是让关键转换保留理由。模型修改了问题,需说明原问题为何不能直接回答;程序改变了输入范围,需保留新旧差异;作者加强结论,需指出新增依据。不是每次措辞调整都要登记,但改变主张、范围或权限的节点应当可追溯。这样,整体目标不会在平滑运行中悄悄消失。

同时,系统应允许研究者改变最初目标。保护目标不等于把初始指令永久封死。当反例显示问题组织错误,新的目标可以通过明确修订进入。需要避免的是未经认识的漂移,而不是有依据的转向。思维升维恰恰可能要求重新提问,因此控制与开放必须通过可说明的修改关系协调。

在SDE视角下,这些接口不是把预先独立的能力简单连接起来。模块怎样解释对象、怎样筛选差异、怎样接受反馈,会共同改变最终显露。若只评价每个输出而不认识相互制约,就会把整体失效误归给某个局部。这也是为什么新封装需要新的发生分析,而不只是功能列表。

组合的真正目标,应当是让重要差异能够在适当位置出现并改变活动。一个只会把所有不一致抹平的系统,即使每一步语言都很漂亮,也不具备充分的研究能力。研究复合体需要能够完成,也需要能够停顿、反对和重建。

四 整体验收:新封装必须取得自己的成立依据

整体验收首先要选一项真实而有限的任务。不能用几段演示同时证明检索、研究、教育和发表全部可靠。可以先承诺整理特定文献集合中的主张关系,或对某类有限模型生成候选并完成规定检查。任务范围明确,接口和证据才有可能逐项对应。

然后需要设计正常、边界和故障情境。正常情境说明流程可以完成预定活动;边界情境检查它是否认识范围;故障情境观察某个模块失效、资料缺失或定义冲突时怎样响应。只测试顺利完成,会遗漏新组合最需要保护的部分。封装要证明的不只是可以成功,还包括怎样不把失败伪装成成功。

故障演练应当有限且可恢复。例如,在测试副本中故意提供缺失来源、不同单位或不匹配的版本,观察是否会暂停或提示;不应为了验证能力而对真实资料进行未经授权的破坏。研究方案需要保护参与者与数据,不能用技术检验的名义取消基本边界。

对整体结果,还要有端到端核对。最后写出的主张是否仍对应最初或经过批准修订的问题,关键条件是否保留,证据状态是否准确,未完成义务是否明确?这种核对不同于重做所有模块,它检查组合新增的承诺。若没有这一层,局部成功容易在最终叙述中被过度放大。

验收之后,记录哪些依赖变化需要重新检查。更换模型、修改提示结构、更新检索库或改变任务范围,影响可能不同。可以对相关部分进行回归与新的边界测试,而不是全部从零开始,也不是一概沿用旧认证。合理升级需要辨认改变的传播范围。

整体封装还应当支持拆解。当某个模块不可用,能否转向替代过程,哪些结果可以保留,哪些需要重新验证?如果每次小故障都使整个研究历史消失,封装虽然方便,却不利于长期继承。稳定的接口与清楚的状态,能够使局部替换成为可能。

相反,有些组合不适合继续扩大。模块依赖过强、任务目标频繁改变或证据状态难以传递时,保持较小颗粒度可能更可靠。封装升级不是体积竞赛,而是形成适合活动的可调用单元。主动拆小一个过度整合的系统,也可能是能力组织的进步。

可以据此给新封装作出有限结论:在规定任务、版本与支持条件下,哪些结果已经有依据,哪些仍需要人员或其他工具参与,哪些用途尚不承诺。这样的结论没有万能产品的吸引力,却更有文明继承的价值。后来者知道从哪里开始,也知道何时应该停下来。

本章的核心是,多个成熟单元之间仍然存在需要研究的新空间。接口、次序、目标和反馈可以使旧能力发生新能力,也可以使局部正确产生整体错误。只有这一层获得自己的认识与验证,颗粒度扩大才不只是复杂性的转移。

组合封装需要自己的依据,因为新接口、新次序和共同目标会带来单个模块中不存在的关系。对个人研究而言,这些关系不应在每次对话结束后消失。问题史、来源、方法、反例与关键修订应当被组织成可以接续的条件,而非仅仅积成更多聊天记录。个人平台的价值也由此改变:它不是替人保管一个庞大的答案仓库,而是支持后来的自己重新进入研究、辨认变化,并形成下一轮活动。