Claude Fable 实战指南:发现你的未知

原文:A field guide to Claude Fable 5: Finding your unknowns 作者:Thariq Shihipar(Anthropic 技术团队成员)

地图与领土

在使用 Claude Code 时,我常常想起地图与领土之间的区别。

地图,即待完成工作的表征,是我的提示词技能上下文——是我提供给 Claude 的东西。领土,则是工作需要实际发生的地方:代码库现实世界真实的约束条件

地图与领土之间的差距,就是我所说的未知(unknowns)。当 Claude 遇到一个未知时,它需要根据对我意图的最佳猜测来做出决策。工作量越大,Claude 可能遇到的未知就越多。

Claude Fable 是我遇到的第一个模型,其工作质量的瓶颈在于我澄清未知的能力

重要的是,仅仅提前规划并不总是足够的。你可能会在深入实现时发现未知,或者你的未知可能指向一个事实:你其实应该用完全不同的方式来解决问题。

我发现,使用 Fable 工作是一个迭代过程——在实现之前、之中和之后,不断发现自己的未知。

认识你的未知

你的未知是什么?当我带着问题来找 Claude 时,我倾向于将其分解为四种类型:

  • 已知的已知(Known Knowns):这本质上就是我的提示词中的内容。我告诉智能体我想要什么?
  • 已知的未知(Known Unknowns):我还有什么没搞清楚的,但我已经意识到我还没搞清楚?
  • 未知的已知(Unknown Knowns):有哪些事情如此显而易见,以至于我永远不会写下来,但看到时却能认出来?
  • 未知的未知(Unknown Unknowns):我完全没有考虑过什么?有哪些知识是我不知道自己不知道的?我知道某件事可以做得多好?

四类未知矩阵

象限解释
已知的已知你提示里的内容 — 你告诉 Agent 你想要什么。
已知的未知你知道该问的问题 — 你还没弄清楚、但你知道自己不知道。
未知的已知“一见便知” — 太显而易见,不用写下来;但看到时你会认得。
未知的未知你从未考虑过的事 — 那条路上你不知道会存在的坑。

四类未知矩阵

最优秀的智能体编程者拥有的未知相对较少。观察像 Boris 或 Jarred 这样的人写提示词时,我明显感觉到他们非常清楚自己想要什么。他们与代码库和模型行为都保持着深度同步。

但他们也预设了未知的存在。在很多方面,减少和规划你的未知,正是智能体编程的核心技能。幸运的是,这是一项你可以通过与 Claude 合作来提升的技能。

帮助 Claude 更好地为你提供帮助

发现未知前后的冰山

指导 Claude 是一种微妙的平衡。如果你过于具体,Claude 即使应该转向时也会遵循你的指示。如果你过于模糊,Claude 往往会基于行业最佳实践做出选择和假设,而这些可能并不适合你的任务。

当你没有考虑到你的未知时,你两边都会失败。你不知道什么时候道路上充满了障碍,也不知道什么时候道路明明畅通无阻,你却仍然想让 Claude 偏离方向。

Claude 可以帮助你更快地发现自己的未知。它可以极其快速地搜索你的代码库和互联网,而且它对大多数话题的了解比你更多。它还能更快地从失败中迭代。

这个过程中最重要的部分,是给 Claude 关于你起点的上下文。例如,告诉它你目前处于思维过程的哪个阶段;坦诚你对问题和代码库的经验;让它像思想伙伴一样与你协作。

在本文中,我将详细介绍一些我用来发现这些未知的模式,包括:

实现前:

  • 盲区扫描
  • 头脑风暴与原型
  • 访谈
  • 参考
  • 实现计划

实现中:

  • 实现笔记

实现后:

  • 提案与说明文档
  • 测验

实现前

盲区扫描(Blind Spot Pass)

开始工作时,你能做的最有用的事情之一就是了解自己的盲区。例如,如果你正在代码库的一个新区域编写功能,或者使用 Claude 帮助你处理不熟悉的工作(如迭代设计),你很可能会遇到大量未知的未知

你可能不知道该问什么问题,不知道”好”的标准是什么,不知道历史上做过哪些工作,或者不知道应该避开哪些坑。

在这些情况下,你可以请 Claude 帮助你找出未知的未知,并向你解释它们。我喜欢使用”盲区扫描”和”未知的未知”这样的字面表述。让 Claude 了解你是谁、你知道什么,通常对它理解与你协作的最佳方式很重要。

示例提示词:

  • “我正在添加一个新的认证提供商,但我对这个代码库中的认证模块一无所知。你能做一个盲区扫描,帮我找出相关的未知的未知,并让我更好地向你提问。”

  • “我不知道什么是调色(color grading),但我需要给这个视频调色。你能教我理解我关于调色的未知的未知,以便我能更好地写提示词吗?“

头脑风暴与原型

当我在一个有很多未知的已知的领域工作时——涉及的标准只有当我看到时才能定义——我喜欢请 Claude 和我一起头脑风暴并制作原型。

在原型阶段尽早识别并表达未知的已知是极其有价值的,因为在实现阶段发现它们可能会(相对地)代价高昂。功能或规格中的微小变化可能导致代码实现方式的天壤之别,而且让你的智能体回退之前的更改可能会更加困难。

例如,你可能只是想看看一个按钮添加到框架中是什么样子,而不必连接后端路由或维护前端中的额外状态。

另一个例子是视觉设计——对我来说,这是难以用语言描述的东西,但我看到时就知道自己想要什么。在这些情况下,我会要求 Claude 为一个产物提供几种不同的设计方向。

我还几乎在每次编码会话开始时都会进行探索或头脑风暴阶段。这帮助我有意识地定义项目的范围。Claude 经常能找到我会错过的高价值方案,有时也会只见树木不见森林。头脑风暴防止我将范围设定得过窄或过宽。

示例提示词:

  • “我想要一个这个数据的可视化看板,但我没有任何视觉品味,也不知道可以做成什么样。给我做一个 HTML 页面,包含 4 种完全不同的设计方向,让我来评价。”

  • “在连接任何东西之前,先用一个单独的 HTML 文件模拟新的编辑器工具栏,使用假数据。我想在触碰真实应用之前先对布局做出反应。”

  • “这是我的粗略问题:用户在新手引导后流失。搜索代码库并头脑风暴 10 个我们可以介入的地方,从成本最低到最雄心勃勃。我会告诉你哪些 resonates。“

访谈

一旦我完成了充分的头脑风暴,我可能仍然有未知。

在这种情况下,我会请 Claude 就任何未知或模糊之处采访我。当你让 Claude 采访你时,试着给它关于你问题的上下文,以引导它的问题。

示例提示词:

  • “一次问我一个问题,关于任何模糊之处,优先提问那些我的回答会改变架构的问题。“

参考

有时你无法详细描述你想要什么。例如,你可能没有相应的术语,或者它太复杂了,需要花很长时间才能描述清楚。

在这种情况下,最佳方法是使用参考。虽然你可以包含图表、文档或图片,但绝对最好的参考是源代码

如果你有一个以某种方式实现功能的库,或者一个你非常喜欢的的设计组件,只需让 Fable 指向该文件夹并告诉它要找什么,即使那是用不同语言写的。相比截图,这能为 Claude 提供关于标记和结构的丰富得多的细节。

示例提示词:

  • “vendor/rate-limiter 中的这个 Rust crate 实现了我想要的精确退避行为。阅读它并在我们的 TypeScript API 客户端中重新实现相同的语义。“

实现计划

当我认为准备好实现时,我倾向于请 Claude 为我整理一份实现计划供我审阅。计划重点关注最可能发生变化的部分,如数据模型、类型接口或 UX 流程。这让 Claude 能够呈现我实际上可能需要调整的东西。

示例提示词:

  • “用 HTML 写一份实现计划,但把我很可能调整的决策放在前面:数据模型变更、新的类型接口,以及任何面向用户的东西。把机械性的重构放在底部,那部分我相信你。“

实现中

实现笔记

一旦我对计划满意,我会创建一个新会话,并将所有产物传递给提示词。这给了 Claude 一个全新的上下文窗口,但包含了它从你的规划中编译的所有信息。例如,我可能会传入一个规格文件和一个原型,然后让智能体实现它。

但事实是,无论你做了多少规划,总会有未知的未知潜伏着。智能体在工作过程中可能会发现,由于代码中的某个边界情况,它需要采取不同的策略。

我让 Claude Code 维护一个临时的 implementation-notes.md(或 .html)文件,记录它做出的决策,以便我们下次可以学习。

示例提示词:

  • “维护一个 implementation-notes.md 文件。如果你遇到一个边界情况,迫使你偏离计划,选择保守的选项,在’偏差’(Deviations)下记录它,然后继续。“

实现后

提案与说明文档

交付工作中最重要的一部分是获得支持和批准。在最终文档中构建提案和说明性产物有助于:

  • 当审查者和你开始时有着相同的未知时,加速理解
  • 当专家想看到你已经考虑到了他们会预料到的未知和常见失败点时,加速批准

示例提示词:

  • “把原型、规格和实现笔记打包成一份我可以直接发到 Slack 获取支持的文档。把演示 GIF 放在最前面。“

测验

经过长时间的工作会话后,Claude 可能完成的比我意识到的要多得多。阅读代码差异只能让我对发生的事情有一个浅显的理解,因为很多行为将取决于现有的代码路径。

在给了我一堆上下文之后,让 Claude 就变更测验我,帮助我理解发生了什么。只有我完美地通过了测验,我才会合并代码。

示例提示词:

  • “我想确保我理解这次变更中发生的所有事情。给我一份关于这些变更的 HTML 报告,包含上下文、直觉、做了什么等等,然后在底部做一个关于这些变更的测验,我必须通过。“

这一切如何结合:发布 Fable

Fable 的发布视频完全是用 Claude Code 剪辑的。这对我来说是一个全新的领域,我绝不是专家。

所以我从我已知的东西开始。我知道 Claude 可以用代码编辑视频并转录它们,但我不确定它是否足够准确。然后我请 Claude 向我解释像 Whisper 这样的转录是如何工作的,以及我是否能用 ffmpeg 准确地剪掉诸如”嗯”或大段停顿之类的东西。

我想让 Claude 创建一个与我说的词语同步的 UI,但不确定是否可行,所以我请 Claude 使用 Remotion 和转录创建一个原型视频,看看是否可行。

最后,视频本身看起来有点暗淡,我知道这是调色的结果,但我其实不知道什么是调色。我的第一次尝试是让 Claude 做几个变体供我选择,但我意识到我不知道调色方面”好”是什么样子。所以相反,我请 Claude 教我关于调色的知识,以发现我的未知。


匹配地图与领土

模型越好,你用正确的方法就能实现越多。当一个长周期任务返回错误的结果时,很可能你需要花更多时间来定义你的未知,或者创建一个允许你和 Claude 在过程中适应未知的实现计划。

每一次解释、头脑风暴、访谈、原型和参考,都是一种低成本的方式来发现你在为时已晚之前不知道的东西。

所以,从你的下一个项目开始,请 Claude 帮助你发现你的未知。


本文由 Anthropic 技术团队成员 Thariq Shihipar 撰写。