AI Coding 越强,越要警惕“交付可控”的幻觉
我一直是 AI Coding 的乐观主义者。 这不是今天才有的态度。ChatGPT 刚出来的时候,我就拿它写过 Chrome 插件。后来一路用过 GitHub Copilot、Cursor、OpenCode、Claude Code、Codex,也用它们做过一些并不在我原有技术栈内的 iOS App 和小程序,主流产品基本都订阅过,也深度阅读过几个开源的代码设计,一直在跟着它们的能力边界往前...
我一直是 AI Coding 的乐观主义者。 这不是今天才有的态度。ChatGPT 刚出来的时候,我就拿它写过 Chrome 插件。后来一路用过 GitHub Copilot、Cursor、OpenCode、Claude Code、Codex,也用它们做过一些并不在我原有技术栈内的 iOS App 和小程序,主流产品基本都订阅过,也深度阅读过几个开源的代码设计,一直在跟着它们的能力边界往前...
Introduction(引言) 你是一个开发者。你在用 Claude 和 Codex CLI,每天都在想:自己是不是把 Claude 或 Codex 的能力榨干了。偶尔你会看到它做出一些蠢到离谱的事,你无法理解:为什么有一群人看起来在造“虚拟火箭”,而你却连两块石头都堆不稳。 你以为是你的 harness、插件、终端环境之类的问题。你用 beads、opencode、zep,你的 CL...
背景动机 Gemini CLI 曾出现一个典型故障:WebSearchTool 遇到带未转义引号的 query,触发 JSON 解析异常,直接导致 CLI 崩掉。根因很简单:缺少输入校验与清洗。 在 Agent 系统里,这类问题会被放大。LLM 生成的 tool args 本质上就是外部输入。不经校验就进入 Shell、支付,结果就不只是报错,而是故障、甚至资损。 原理分析 系统稳不...
周六带小朋友去上了两堂武术体验课。老师评价很专业也很“扎心”:柔韧性不错(芭蕾底子在那儿),但力量不够。我想只要孩子持续参与应能改善。 晚上吃过饭,她像往常一样凑过来:“爸爸,我们玩 AI 吧!” 她说的“玩 AI”,其实是我们家最近的小传统:她负责出创意,我负责把创意落到代码里(通常用 Cursor),然后我们一起试玩,一边玩一边提需求、一边迭代。 那时我抽不开身,正和老婆研究两款奶...
背景动机 很多团队说“Agent 没记忆”,其实是把两类完全不同的问题搅在一起了:一类是“我现在正在做什么”(工作记忆),另一类是“我长期知道什么/偏好什么”(长期记忆)。你不把它们拆开,工程上就会出现三种典型事故:要么上下文越滚越长、成本和延迟失控;要么为了省 token 乱压缩、结果关键细节丢了;要么任务跑到第 30 次 tool call 开始漂移,忘了最初目标。Manus 的复盘把...
背景动机 很多团队把 Agent 的性能问题,归因到“模型慢 / 工具慢 / 网络慢”。但在生产里,最常见的真实元凶其实更朴素:你在重复喂同一段上下文,却每次都让模型从零开始做 Prefill。 Manus 的复盘把这事说得很直白:如果只能选一个指标,他们会选 KV-cache hit rate,因为它同时决定延迟与成本。Agent 的工作方式决定了它比聊天更“吃前缀”:每一步 tool...
背景动机 在互联网架构里,“重试”从来不是一句 retry(3) 能解决的事。你敢对支付接口无脑重试,资损就会来;你敢对网络抖动无脑重试,体验就会烂。重试的前提不是“失败了”,而是“失败属于哪一类”。 把这个问题搬到 AI Agent 上,会更糟:Agent 不只是“发一次请求”,它会在 ReAct 循环里连续调用模型、读写文件、跑命令、改代码、跑测试——一次失败可能发生在任何层,还可能...
背景动机 在软件工程中,不可预测的接口是架构的灾难。开发者习惯于在 REST API 或 RPC 中定义严格的契约,但在构建 Agent 时,却常陷入“面向字符串编程(String-oriented Programming)”的陷阱。 过度依赖自然语言输出会导致严重的工程隐患:你无法通过编译器发现错误,只能在运行时面对 JSONDecodeError 或模型偶发的“无序”内容。放弃对字符...
背景动机 最危险的并不是模型会胡说,而是它会一直胡说下去。很多早期 Agent Demo 都把 ReAct 写成一个包着 LLM 的 while True:看起来像”自主智能”,本质是把控制权交给了不可预测的循环——难调试、难止损、还会把 Token 和算力吞成黑洞。 这不是模型”笨”,而是你把一个控制系统当成了”聊天功能”在写。互联网架构里,我们早就用有限状态机(FSM)驯服复杂流程:...
背景动机 Agent 系统最折磨工程师的地方,不是它会不会“答”,而是它怎么走到这个答案。线上事故往往不是最终回复“看起来不对”,而是某一步工具调用抖了一下、某次检索命中了脏数据、某个路由策略突然选错了分支,最后你只看见一个结果,却找不到责任步骤。 这跟当下互联网的软件架构实践是反着来的:我们做微服务默认有 trace、有日志、有回放;出了故障能复盘,修了之后能回归验证。Agent 其实...