Clipping 微信公众号

VibeCoding深水区--管理未知的艺术

by 泥巴猪 原文 ↗
Created: 2026-07-07

公众号名称:低卧扑食

作者名称:泥巴猪

发布时间:2026-07-07 08:10

“我唯一所知的,就是我一无所知。” ——苏格拉底

从被grill-me折磨的那一刻开始

最近在进行vibe coding新项目的时候,基于SDD原则进行一些头脑风暴,聊完之后生成完一版spec方案文档丢给大模型后,做着做着,生成的东西又开始偏离我的预期了。

我开始认为主要问题出在模型能力,直接切到 opus4.8 和 gpt5.5 进行修正,但是发现每当研发流程越深化,他和我对齐的方案总是会越局限在一些细节中。令人绝望的是,这样繁复细节的讨论和纠偏显而易见地会持续整个开发流程,让我感觉变成了一个**“嵌入式”工程师**,有一种被绑架的感觉。

更可怕的是,对于他提出的一些问题,我从来没有听说过,**几十轮拷问下来,耐心耗尽不说,我也不知道自己的选择是否合理,是否是符合需求的选择。**X上也有开发者分享过被/grill-me 等访谈skill拷问了几十轮的崩溃分享。

所以我开始思考,为什么在这个类似黑盒的上下文空间中,人与 AI 的设计行为开始类似盲人摸象

我摸到一条腿,以为自己要的是一根柱子;AI 摸到一只耳朵,以为你要的是一把扇子。两边都没错,但两边都没有看到完整的大象。

AI 不是故意做错。

更准确地说,AI 像一个很聪明的实习生。它学习能力强,执行速度快,还特别愿意干活。问题是,**在需求没有被澄清之前,再聪明的实习生也只能根据自己见过的案例补全上下文。**但是,怎么样才算完成澄清呢?

所以,vibe coding 的失败不总是模型能力失败。更多时候,是我们把一个还没想清楚的问题交给 AI,然后希望 AI 直接给出正确实现。

这对 AI 也不公平。

因为我们没有把大象讲清楚,却要求它画出完整的大象。

后来我逐渐意识到,vibe coding 的核心不是“我怎么把需求说给 AI 听”,而是“我怎么让 AI 帮我发现我还没想清楚的东西”。

也就是:管理未知

Claude的一种新工程方法论

Claude 产品经理 Thariq 最近写了一篇文章:A Field Guide to Fable: Finding Your Unknowns:https://x.com/trq212/status/2073100352921215386?s=20

这篇文章对我最大的启发,不是某个具体技巧,而是一个更底层的判断

人和 AI 协作时,失败往往不是因为 AI 没有执行能力,而是因为任务里存在太多没有被显性化的未知。

这些未知有的在用户脑子里,有的在代码库里,有的在实现过程中才会暴露,有的只有看到结果后才知道“不对”。

如果这些未知没有被识别,AI 不会停下来等人想清楚。AI 会继续补全,并用默认经验替用户做决定。

地图不是领土

我们给 AI 的 prompt、上下文、文档和 skill,是地图

但真正的领土,是代码库里的历史包袱、业务里的真实约束、用户心里的判断标准、团队过去形成的潜规则。

AI 不是在你的脑子里工作。

AI 只是在一张不完整的地图上,尽量猜测领土长什么样。

当地图上缺了一块,AI 不会停在那里。AI 会继续走。AI 会用通用最佳实践、训练语料里的常见模式、框架默认写法,替你补上那块空白。

这就是很多 AI 编程结果**“不算错,但就是不对”**的原因。

四类未知

把 Thariq 文章里的 unknowns 思路放到 vibe coding 语境里,可以拆成四类:

未知类型在 vibe coding 中的表现典型风险
已知已知我明确告诉 AI 的需求、约束、技术栈、代码位置AI 基本可以执行
已知未知我知道自己没想清楚,比如选型、架构、交互方式需要分析、对比、访谈
未知已知我心里有标准,但没有写出来;看到结果才知道不对AI 做出来“差一点味道”
未知未知我根本不知道自己缺哪些知识、风险、边界AI 会基于默认经验一路做下去

普通用户只会把**“已知已知”**告诉 AI。

更成熟的用户,会让 AI 帮自己挖**“未知已知”“未知未知”**。

未知不是开工前一次性解决的

很多人以为,只要开工前把需求讲清楚,后面就可以一路实现。但真实情况不是这样。

实现前,你会遇到盲点:不知道自己该问什么。

实现中,你会遇到偏差:代码库和计划不一致。

实现后,你会遇到验收困难:AI 改了很多东西,但你不知道自己是否真的理解了它。

所以 vibe coding 不是“想法 → prompt → 代码”的直线

它更像**“想法 → 发现未知 → 收敛方案 → 授权实现 → 记录偏差 → 验收理解”的循环**。

它不是自然语言编程。

它是人与 AI 共同管理未知的过程。

整个理清未知的过程,更像是无法穷尽的微积分过程。

Vibe Coding 的 7 类未知场景

针对 Thariq 这篇文章的理解,我整理了我个人遇到的 Vibe Coding 的 8 类未知场景。

这些场景不是严格学术分类,而是我在真实使用 Claude Code、Codex、Opencode 这类工具时反复踩到的坑。

场景一:定义未知——我说的是需求,还是产品冲动?

这是最早出现的一类未知。

你有一个想法,但还没有定义清楚它到底是什么。

比如“每天早上自动告诉我今天重点事项的小工具”。它可能是待办摘要,也可能是优先级判断器,还可能是一个主动推送的项目跟进工作流。

这里还有一个更隐蔽的问题:你说出来的 feature request,可能不是需求本身,而是过早解法

比如“AI 周报工具”听起来是需求,但真实问题可能是“项目风险发现太晚”。如果真实问题是后者,直接生成周报功能就会跑偏

常见错误:直接对 AI 说“帮我实现一下”。

AI 会立刻把模糊想法翻译成功能清单,但不会自动判断这个想法是否成立。

正确角色:盲点扫描器、产品访谈官、framing challenger。

推荐工具:可以借鉴 Thariq 文章里的 Blind Spot Pass,以及 gstack /office-hours 的思路:先挑战 framing,再谈实现。

可复制提示词:

请扮演「产品访谈官 + 盲点扫描器」。

当前主 Unknown:定义未知 阶段目标:判断我说的是需求、症状、产品冲动,还是过早解法。 当前想法:{你的想法}

请输出:

  1. 这个想法可能对应的 2-3 种不同定义;
  2. 当前 framing 可能错在哪里;
  3. 背后的真实痛点可能是什么;
  4. 哪些问题会改变后续实现方向;
  5. 第一阶段最应该验证什么。

场景二:路径未知——方向有了,但不知道第一步怎么走

有些时候,问题不是方向错了,而是不知道从哪里切。

先做 demo 还是 PRD?

第一阶段要砍掉什么?

MVP 到底验证什么?

这类问题的本质是路径未知。你不是缺目标,而是缺一个能降低风险的第一步

常见错误:让 AI 给“大而全方案”。

这种方案通常很好看:模块齐全、架构完整、阶段清晰。但第二天打开编辑器,还是不知道从哪里开始。

正确角色:MVP 裁剪者、方案拆解者、设计伙伴。

推荐工具:可以借鉴 obra/superpowers /brainstorming:先探索上下文、提出多个方案、写 spec,再进入 implementation plan。

可复制提示词:

请扮演「MVP 裁剪者」。

当前主 Unknown:路径未知 阶段目标:从多个可能路径中选出第一阶段切口。 当前想法:{你的想法}

请输出:

  1. 2-3 个第一阶段切口;
  2. 每个切口要验证的假设;
  3. 每个切口明确不做什么;
  4. 成本、风险和学习价值;
  5. 你的推荐路径和理由。

场景三:标准未知——我知道不对,但说不清什么叫好

这是 vibe coding 里最容易折磨人的一类未知。

你知道大致要做什么,但不知道什么样叫好。

你会说:

“要高级,但不能浮夸。”“要专业,但不要模板化。”

或者你看到 AI 结果之后,只能说:

“不是这个感觉。”“有点接近,但还差点味道。”

这不是你没有判断。

这是你还没有把判断翻译成可执行约束

常见错误:继续用抽象形容词反复让 AI 改。

“高级一点”“简洁一点”“更有质感”,这些词本身没有错,但它们不足以指导下一次生成。AI 会在语义空间里随机游走,一会儿改颜色,一会儿改排版,一会儿改语气。

正确角色:方向对比设计师、偏好翻译官、taste memory。

推荐工具:可以借鉴 obra/superpowers /brainstorming 的 visual companion 思路,也可以借鉴 gstack /learn 把偏好沉淀为可复用约束。

可复制提示词:

请扮演「偏好翻译官 + 方向对比设计师」。

当前主 Unknown:标准未知 阶段目标:把“我觉得不对”翻译成可执行质量约束。 当前任务或反馈:{你的任务 / 你的反馈}

请输出:

  1. 我的反馈可能指向哪些具体问题;
  2. 3-4 个差异明显的方向;
  3. 每个方向追求什么、不追求什么;
  4. 我应该如何判断哪个方向更接近;
  5. 下一轮可复用的质量约束和修改提示词。

场景四:决策未知——哪些问题真的会改变架构?

当方向和路径大致确定之后,最容易出现的是决策未知。

要不要多用户?

数据是否需要历史版本?

状态是单状态还是状态机?

这些问题一旦答错,后面会导致架构返工

但反过来,不是所有问题都值得问人。

字段名、文案、空状态、日志格式、普通异常、UI 细节,如果每一个都让人确认,用户会被拖进 AI 的审批流。

常见错误:让 AI 问所有问题。

这看起来严谨,实际很低效。人的注意力应该用来回答承重问题,而不是替 AI 做每一个微决策。

正确角色:架构访谈官、决策树整理者、assumption manager。

推荐工具:可以借鉴 gstack /plan-eng-review:锁定架构、数据流、边界情况和测试,并暴露隐藏假设。

可复制提示词:

请扮演「架构访谈官」。

当前主 Unknown:决策未知 阶段目标:只识别会改变架构、数据模型、用户流程或返工成本的承重问题。 当前方案:{你的方案}

请输出:

  1. 需要我回答的 load-bearing questions;
  2. 每个问题为什么值得问;
  3. 不值得问我的低风险细节;
  4. 你会如何做保守假设;
  5. decision log 草案。

场景五:风险未知——方案看起来合理,但没人唱反调

有时候,你已经有了计划,但不知道它哪里会失败。

有没有隐藏假设?

哪些地方后面会炸?

哪些验收标准不充分?

这个阶段最怕问 AI:

帮我看看这个方案是否合理。

AI 很可能会给你一堆温和肯定。

“整体方向合理。”“建议注意边界情况。”

“后续可以持续优化。”

这些话不能说错,但没有价值。

你需要的不是鼓励,而是反方

常见错误:让 AI 做礼貌评审。

礼貌评审无法提前暴露失败路径。

正确角色:严厉评审、pre-mortem 主持人、质询者。

推荐工具:可以借鉴 mattpocock/skills /grill-me / /grilling:围绕计划持续追问,一次只问一个问题;如果能通过代码库探索回答,就不要问用户。

可复制提示词:

请扮演「严厉评审」。

当前主 Unknown:计划风险 阶段目标:在实现前压测计划,暴露隐藏假设。 当前计划:{你的计划}

请输出:

  1. 最可能导致失败的 5 个假设;
  2. 每个假设的失败后果;
  3. 最值得先追问我的一个问题;
  4. 哪些问题可以通过代码库探索回答;
  5. 计划通过评审的关闭条件。

场景六:现状未知——想改代码,但不认识代码库地形

很多 AI 编程翻车,不是因为需求错了,而是因为现状不清楚。

你想改一个功能,但不知道当前模块边界是什么。

调用链在哪里?哪些是历史包袱?

哪些文件不能轻易动?哪些地方耦合严重?

这类问题不是需求未知,而是代码库地形未知

常见错误:让 AI 直接改局部文件。

AI 可能基于局部上下文做出局部正确、全局错误的修改。

正确角色:代码库导游、架构摩擦扫描器、系统地图绘制者。

推荐工具:可以借鉴 mattpocock/skills improve-codebase-architecture:分析代码库架构摩擦,寻找更清晰的接口边界和可测试 seam。

可复制提示词:

请扮演「代码库导游」。

当前主 Unknown:现状未知 阶段目标:先理解系统地形,不要直接改代码。 目标区域:{模块 / 目录 / 需求}

请输出:

  1. 核心模块和调用链;
  2. 当前接口边界是否清晰;
  3. 哪些地方耦合严重;
  4. 最小、安全的修改路径。

场景七:验收未知——AI 说完成了,但我不知道能不能信

AI 说完成了,不代表任务完成。

CI 通过了,也不代表任务完成。

你仍然需要知道:

是否真的解决目标?

有没有隐藏 bug?

哪些路径没覆盖?

哪些行为变化你没意识到?

常见错误:只看 diff 或只跑 CI。

CI 检查的是一部分事实,不检查你是否理解了这次变更

正确角色:QA、代码变更讲解员、考官、验收官。

推荐工具:可以借鉴 gstack /review / /qa/review 关注 CI 通过但生产可能出问题的 bug,/qa 关注测试、发现问题、修复并重新验证。

可复制提示词:

请扮演「验收官」。

当前主 Unknown:验收未知 阶段目标:不要只总结 diff,帮我判断这次变更是否真的可验收。 当前变更:{diff / PR / 变更说明}

请输出:

  1. 这次变更声称解决什么问题;
  2. 实际覆盖了哪些路径;
  3. 哪些路径没有覆盖;
  4. 哪些风险 CI 查不出来;
  5. 10 条验收用例;
  6. 用 quiz 确认我是否理解这次变更。

七类未知总结表

分类典型状态应该让 AI 做什么推荐措施/工具
定义未知有想法,但需求和问题没定义清楚挑战框架,挖真实痛点Blind Spot Pass / /office-hours
路径未知方向成立,但不知道第一步拆切口,定 MVP/brainstorming
标准未知知道不对,但说不清什么叫好用方向对比显化偏好visual companion / /learn
决策未知不知道哪些问题会改架构只问承重问题/plan-eng-review
风险未知有方案,但没人唱反调压测假设,做事前验尸/grill-me
现状未知想改代码,但不认识代码库地形先扫系统地图improve-codebase-architecture
验收未知AI 说完成,但人无法判断生成验收报告和测试用例/review / /qa

我们到底该不该给 AI 这么多约束?

到这里,一个自然的问题会出现:

如果我们给 AI 这么多流程、约束、问题和门禁,会不会反而限制它的创造力?

我的判断是:会,但这不是问题本身。

问题不在于约束多不多,而在于约束有没有用在承重点上

约束太少,AI 会用默认世界观替你做决定

AI 会用通用默认值补全你的空白:

  • 通用最佳实践;

  • 框架默认写法;

  • 常见产品模板;

  • 训练语料里的平均答案;

  • 它对“正常需求”的想象。

约束的价值,是防止 AI 把你的问题平均化。

约束太多,AI 会被降级成自然语言编译器

如果你把所有细节都规定死,AI 原本能提供的价值会消失:

  • 它不能挑战你的 framing;

  • 不能发现更小切口;

  • 不能指出你在做伪需求;

  • 不能提供跨领域类比;

  • 不能告诉你“这个方向不值得做”。

AI 最大的价值,不是替你更快执行你已经知道的答案,而是把你不知道自己不知道的东西提前暴露出来。

讨论太多,会陷入“确认所有分支”的幻觉

当人学会“让 AI 多问问题”之后,也可能陷入另一种低效:

  • 每个字段都问;

  • 每个异常都问;

  • 每个交互都问;

  • 每个技术细节都要确认。

你请 AI 来帮忙,不是为了把自己变成 AI 的审批流。

真正的边界是只解决承重未知

不是所有未知都应该问人,真正需要投入主要精力解决的应该是承重类未知。

值得问人的,是那些会改变方向、架构、数据模型、用户体验、风险边界和验收标准的问题。

值得问人的问题通常满足至少一条:

  1. 答案会改变产品定位;

  2. 答案会改变架构;

  3. 答案会改变数据模型;

  4. 答案会改变权限 / 安全边界;

  5. 答案会改变用户主路径;

  6. 答案会改变验收标准;

  7. 答案涉及人的 taste;

  8. 答案错误会导致大返工。

不值得频繁问人的问题也很明确:

  1. 命名细节;

  2. 常规错误处理;

  3. 普通日志;

  4. 可以从代码库模式推断的问题;

  5. 可以通过测试验证的问题;

  6. 不影响架构的 UI 微调。

凡是能用代码库探索、原型验证、测试反馈解决的问题,就不要用人类耐心来解决。

把未知管理沉淀成skill

写到这里,问题就变成了:这些判断能不能沉淀成一个可复用的工作流?

一个 skill应运而生,叫 ni-unknown-first:https://github.com/ttttstc/ni-skill/tree/main/skills/ni-unknown-first。

它要解决的不是“怎么写一个更强的包含所有场景的挖掘/访谈类skill”。因为很多人手里已经有很多 访谈类skill,但是收集的skill 越多,反而越不清楚当前阶段应该用哪个。真正困难的不是**“有没有工具”,而是“我现在该用哪个工具”**。

它要解决的是另一个关键问题:

当下,此刻,AI 对我的需求了解到了什么程度,我最需要解决的承重未知是什么?

它解决的问题:先分诊,再行动

ni-unknown-first 它不会替代下游工作。只是在触发时刻开始一次冷静的审视,把**“直接开工下一步”改成“先分诊”**。

这很像医院分诊台。

分诊台不负责治疗,但分诊台决定你别一上来就找错科室。

它不保证 AI 一次做对。

但它能让 AI 更少在错误的阶段,扮演错误的角色

它生效的逻辑:把“下一步”从默认实现改成角色路由

普通 AI 协作里,用户说完需求,AI 的默认动作通常是实现。

ni-unknown-first 改掉了这个默认动作。

它会先问三个问题:

当前未知属于哪一类? 哪一个 unknown 最阻塞下一步? 应该让 AI 扮演什么角色来关闭这个 unknown?

这三个问题,会把 AI 从**“默认程序员”切换成更合适的角色**。

有时是产品访谈官。

有时是架构访谈官。

有时是严厉评审。

有时是代码库导游。

有时是验收官。

这就是它的核心价值:不是让 AI 更会写代码,而是让 AI 在正确阶段做正确的事。

它带来的收益:减少返工,减少无效确认,减少平均答案

我认为 ni-unknown-first 至少能带来四个收益。

第一,减少方向性返工。

伪需求没有识别出来之前,不急着写方案。代码库地形不清楚之前,不急着改文件。验收标准不明确之前,不急着说完成。

第二,减少无效确认。

它强调关键承重问题。承重问题问人,非承重问题让 AI 基于代码库、惯例、测试和保守假设处理。

第三,减少 AI 的平均答案。

很多 AI 输出“不算错,但很普通”,原因是人的隐性标准没有显性化。ni-unknown-first 会把质量未知、表达未知路由到偏好显化,而不是让 AI 继续猜。

第四,让协作过程可复盘。

每一次诊断都会留下:当前主 unknown、推荐角色、停止条件、保留 unknown。对个人来说,这是工作流;对团队来说,这是协作协议。

结语:工程师的新能力不是写代码,而是管理未知

AI 时代,工程师不会因为 AI 会写代码而失去价值。但工程师的价值会迁移。

过去我们靠写代码证明自己理解问题。现在,我们要先利用强大的探索未知的能力,想清楚自己究竟要什么

毕竟,在铺天盖地的SDD工程化落地大潮中,最关键的十字路口不是做了多少决策,而是结果迫使我承认:很多时候,我并没有自己想象得那么清楚。在充满未知的决策旅程中,最缺少一个在关键时刻能反问自己的人


内容效果不满意?点此反馈

输入关键词开始搜索