AI Coding 让“写出第一版代码”变得越来越便宜,但也让系统结构失控、抽象失真、维护成本陡增的问题更早暴露出来。真正决定软件质量的,已经不是代码生成速度,而是开发者能否识别变化点、划清职责边界、控制依赖扩散,并在功能不断迭代时保持系统可替换、可测试、可演化。设计模式之所以在今天反而更重要,不是因为它们是经典知识清单,而是因为它们提供了一套稳定的结构语言,帮助人类在 AI 高速产出代码的环境里持续做出正确的架构判断。理解设计模式,本质上不是为了背诵名词,而是为了在速度与复杂度同时上升的时代,重新掌握软件工程最核心的秩序感。
最近看了一遍 InkOS 源码,重点看了 packages/core。这个项目表面上是一个“让 AI 自动写小说”的 CLI / Studio 工具 (类似 Claude Code, 可以认为是专业写小说的 Claude Code 工具),但真正有意思的地方不在“调用 LLM 写一章”这件事上,而在它怎么把长篇小说写作拆成一套可检查、可修订、可回滚的流程。很多 AI 写作工具的问题是:前几章还行,越往后越容易忘设定、丢伏笔、乱改角色关系,甚至把已经失去的物品又写回来。InkOS 的思路比较工程化:不要把全部希望压在模型的上下文窗口里,而是把小说拆成状态、规则、计划、正文、审计和修订几个环节。
FIM 是 Fill-In-the-Middle 的缩写,也常被叫作 infilling。和普通的 left-to-right 续写不同,它不是只看左侧上下文继续往后生成,而是同时利用“前缀 + 后缀”去补中间缺失的片段。对代码生成来说,这比单纯的续写更接近真实开发流程,因为真实编程往往不是从文件第一行一路写到最后一行,而是在已有文件中插入、修改、重构和补洞。如果把普通补全理解为“接着写”,那 FIM 更像“把中间空出来的部分补上”。这也是为什么 IDE 内联补全、自动修复 TODO、补全函数体、插入参数校验、补写测试用例等场景,天然更适合 FIM。
读完 ml-agent 这个项目,最关键的感受是:它不是一个“把大模型接到几个 Hugging Face API 上”的简单聊天机器人,而是一个专门为机器学习工程任务设计的 agent runtime。它把用户输入、模型工具调用、人工审批、Hugging Face Jobs、Hub 仓库、文档检索、Paper 检索、MCP 工具、CLI 与 Web UI 都放进同一套异步状态机里。如果用一句话概括:ML Agent 是一个以 LiteLLM function calling 为核心、以 Hugging Face 生态为执行平面的机器学习工程代理。
Holtzman 等人在 The Curious Case of Neural Text Degeneration 中系统讨论了 Neural Text Degeneration(神经文本退化)问题,并将其描述为语言模型解码时生成 bland、incoherent 或陷入 repetitive loops 的退化现象。本文聚焦其中最容易工程化检测的一类:LLM 生成到尾部时进入失控重复,同一句话、同一段标点、同一个 JSON 片段、同一个提示模板或者同一小段乱码被连续复制很多次。它看起来像“模型还在正常输出”,实际上已经从任务空间滑进了重复循环。工程上最危险的地方是,这种错误不一定会触发 HTTP 失败,也不一定会破坏纯文本类型约束;如果调用方只检查“非空字符串”或“请求成功”,退化内容就会继续流入摘要、翻译、入库、消息发送和后续 agent 工具调用。解决它的关键不是相信模型自觉停止,而是在推理结果进入业务逻辑前做一层可解释、低成本的重复模式检测。