跳转至

第32章:实验区:哪些功能还在试验

生活类比:车展上的概念车

车展上有些车下个月就量产,有些只是展示未来方向。源码里的实验功能也一样:存在,不代表已经是成熟产品。

这一章先回答一个问题

当你在 Claude Code 源码里看到 contextCollapsesnipKAIROS、隐藏命令、feature gate 时,怎么判断它们是正式功能、灰度功能,还是仅仅为将来留的位置?

真正的答案不是“看目录里有没有”,而是看三件事:是否被 feature gate 包裹、是否接进主调用链、是否有完整治理路径。


32.1 第一个判断标准:有没有被 feature() 包起来

在 Claude Code 里,很多实验代码不会直接静态常驻,而是通过 feature('FLAG') 有条件加载。最典型的例子就在 QueryEngine.ts

  • HISTORY_SNIP
  • COORDINATOR_MODE
  • KAIROS
flowchart TD
    A["源码中出现某功能"] --> B{"feature() 包裹?"}
    B -->|否| C["更可能是常规能力"]
    B -->|是| D["继续看是否进入主链"]
    D --> E{"主链调用?"}
    E -->|否| F["可能是占位或灰度实验"]
    E -->|是| G["更接近可运行实验功能"]

这也是为什么“看到了代码”不等于“用户一定能用到”。很多路径会在构建时被 DCE 直接裁掉。


32.2 第二个判断标准:是否真的接进主执行链

一个实验功能如果只是孤零零躺在目录里,价值不大。真正值得关注的,是它有没有进入:

  • QueryEngine
  • REPL
  • tools.ts
  • commands.ts
  • settings / config

例如 contextCollapsesnipCompactIfNeeded()getCoordinatorUserContext() 这些,都已经在主链上占到了位置。

flowchart LR
    A["实验模块"] --> B["QueryEngine / REPL / tools.ts"]
    B --> C["真实用户路径"]
    C --> D["可观察行为"]

    style B fill:#e3f2fd,stroke:#1e88e5,color:#000

如果一段代码既有 gate,又有主链接入,那它通常不是“随手放着玩的”。


32.3 第三个判断标准:有没有完整的配套治理

很多真正要上线的实验功能,不会只有一段核心逻辑,还会伴随:

  • 配套设置项
  • 提示词或系统上下文
  • 权限规则
  • UI 入口
  • 日志与指标

例如 KAIROS 不只出现在一个目录里,还能在 tools.tsmain.tsxREPL.tsx、analytics metadata、BriefTool 等多个位置看到痕迹。

mindmap
  root((成熟实验功能的特征))
    核心逻辑
    主链接入
    UI痕迹
    配置项
    指标埋点
    安全治理

如果只看到一段核心逻辑,没有配套治理,那它更像概念验证。


32.4 contextCollapsesnip 为什么最值得放进“实验区”讲

这两类能力特别适合作为“如何识别实验层”的教材,因为它们恰好卡在正式能力和探索能力之间:

  • 已经和主循环挂上了
  • 但仍受门控控制
  • 功能目标明确
  • 语义稳定性仍在打磨
quadrantChart
    title 功能成熟度判断
    x-axis 低主链接入 --> 高主链接入
    y-axis 低治理完备 --> 高治理完备
    quadrant-1 接近正式
    quadrant-2 理想灰度区
    quadrant-3 纯概念
    quadrant-4 危险半成品
    "snip/contextCollapse": [0.68, 0.62]
    "完整权限系统": [0.95, 0.93]
    "单独留着的 stub": [0.18, 0.12]

这也说明读源码时不能只问“有没有”,还要问“成熟到什么程度”。


32.5 GrowthBook 和 feature gate 一起,形成了实验层的双门控

Claude Code 的实验能力,不完全只靠编译时 gate。还有一部分会进入 GrowthBook 这类远程配置体系。

所以实验功能的真实状态,可能要同时看:

  • 构建时是否被编进来
  • 运行时是否被组织、账号、环境、实验分组打开
flowchart TD
    A["某个实验功能"] --> B["编译时 feature()"]
    A --> C["运行时 GrowthBook / config"]
    B --> D{"代码是否存在"}
    C --> E{"当前用户是否启用"}
    D --> F["最终是否可见 / 可用"]
    E --> F

这也是为什么“我在仓库里看到了,但机器上没出现”经常是正常现象。


32.6 设计取舍:实验层不是脏东西,而是产品演化现场

很多人读源码会下意识嫌弃实验代码,觉得“这不纯”。其实对大型产品来说,实验层恰好是最有信息密度的地方,因为它暴露了:

  • 团队正在试什么
  • 哪些方向还没定型
  • 哪些功能被谨慎推进
  • 哪些只适合特定用户群
flowchart LR
    A["实验层"] --> B["未来方向线索"]
    A --> C["产品风险控制"]
    A --> D["架构可扩展性"]

对这本书来说,实验区不是边角料,反而是理解 Claude Code 演化方向的重要窗口。

🔭 深水区(架构师选读)

判断实验层最实用的方法可以记成一句话:看 gate,看主链,看治理。三者都在,说明它是认真推进中的实验;只有一两个角落提到,多半还只是方向探索;如果再叠加 shim/stub,就要格外小心,不要把补全层误当成正式设计。

本章小结

feature()、主链接入程度、治理配套程度,是判断一段代码成熟度的三把尺子。实验功能不是杂质,而是产品未来方向最直接的证据。

关键源码索引

  • QueryEngine 条件导入 snip / coordinator:QueryEngine.ts
  • QueryEngine 条件导入 memory/snip:QueryEngine.ts
  • Query 主循环中的 snip / collapse:query.ts
  • 工具池中的 feature gate 痕迹:tools.ts
  • GrowthBook 功能读取:growthbook.ts
  • cached + refresh 路径:growthbook.ts

逆向提醒

实验功能是最容易被误读的区域。因为你同时会在还原层、OpenClaudeCode 补全层、feature gate、GrowthBook、隐藏入口里看到它的碎片。结论一定要基于多处证据交叉,而不是只看一个目录或一个函数名。