在上一篇文章当大模型替我们写完整个系统,开发者还剩下什么?中提到了"分形"实验。
在深入实验设计前,有必要回溯一个关键范式转移:强类型系统曾是大型IT系统的可靠性基石。上世纪末至本世纪初,C、Java等语言凭借编译时类型检查,支撑了金融、电信等对稳定性要求极高的系统;而近十年,Python、JavaScript等动态语言的流行,则是以弱化类型约束为代价,显著降低了人类开发者的心智负担,提升了迭代速度------这是一种在"人力成本"与"系统风险"之间的权衡。
但当编码主体从人变为AI,这一权衡被彻底重构。AI不会因泛型或接口定义而"困惑",却极易在类型模糊的上下文中生成不一致的逻辑。此时,TypeScript的强类型系统不再是开发者的障碍,反而成为约束AI行为、保障模块间契约稳固的最佳基础设施。正因如此,我们将强类型作为"分形生成实验"的核心支柱。
核心设计
-
公共约束层(
shared/)types/:定义全局实体(如User)、模块基类(如BaseModuleState<T>)、事件载荷(如OrderCreatedEvent);dataflow/:声明模块间数据流拓扑(如 "用户模块 → 订单模块:传递userId: string");- 所有内容由人工编写,禁止AI修改,作为系统"基因"。
-
分形单元生成规则
- 每个单元(如
feature/user/)仅接收:- 本单元需求片段;
- 公共约束引用路径(如
../../shared/types)。
- AI必须:
- 继承公共类型(如
UserModuleState extends BaseModuleState<{ profile: UserProfile }>); - 遵守数据流规范(如调用
emit('user-updated', { userId })时,userId类型必须匹配shared/types中定义); - 通过
tsc --noEmit校验后方可提交。
- 继承公共类型(如
- 每个单元(如
-
组装与验证
- 自动化脚本按
shared/dataflow/中的拓扑图拼装单元; - 端到端测试验证跨模块数据流是否符合类型契约。
- 自动化脚本按
为何强类型不可或缺?
- 编译即验证:类型断裂在生成后立即暴露,避免运行时"黑盒错误";
- 关系显式化:模块依赖通过类型引用而非文档注释表达,确保AI生成逻辑与架构意图一致;
- 上下文解耦:每个单元只需理解自身需求+公共类型,无需知晓其他单元实现细节。
此实验的本质,是在承认大模型"局部视野"局限的前提下,用强类型契约将"有限上下文生成"转化为"全局一致构建"。
欢迎私信,展开更多智能体开发方面的合作与讨论
📩 联系方式 :请通过 CSDN 私信或项目原仓库(cli_assistant)留言,我会尽快与你联系。