发现未知问题:与Claude高效协作的编程指南

trq212 发布于 2026-07-04 阅读 65

本文探讨如何通过与Claude协作发现并处理编程中的未知问题(unknowns)。作者将未知分为四类:已知已知、已知未知、未知已知、未知未知,并指出高效编码者能减少未知。文章提供了一系列实用技巧:实施前使用盲点扫描、头脑风暴原型、面试式提问、参考代码、制定实施计划;实施中记录决策日志;实施后创建演示文档和测验。通过逐步发现未知,能提升AI辅助编程的质量,使最终成果更贴近实际需求。

image.png 使用 Claude Fable 5 的过程中,我不断重温一个古老的教训:地图并非疆域。

地图,是对待完成工作的呈现,也就是我的提示词、技能和上下文,是我给 Claude 的东西。疆域,则是工作实际发生的地方——代码库、现实世界以及它所拥有的各种约束。

image.png

地图与疆域之间的差异,我称之为“未知项”。当 Claude 遇到未知项时,它需要根据对我意图的最佳猜测来做决定。工作越多,Claude 可能遇到的未知项也就越多。

Fable 是第一个让我感受到工作质量受限于我澄清未知项能力的模型。

重要的是,仅仅提前规划往往并不足够。你可能会在实现过程中深入发现未知项,或者这些未知项会告诉你,实际上应该用完全不同的方式来解决这个问题。

我发现,与 Fable 协作是一个在实现之前、之中和之后不断发现未知项的迭代过程。

我为此制作了一些用于寻找未知项的示例制品,但请务必回来,建立何时使用它们的直觉。

了解你的未知项

你的未知项是什么?当我向 Claude 提出问题时,我倾向于将其分解为四类:

已知的已知:这基本就是我的提示词里的内容。我告诉 agent 我想要什么。

已知的未知:我还没有弄清楚,但我知道自己还没弄清楚的事情是什么?

未知的已知:那些显而易见到我从不会写下来,但一旦看到就能识别出来的事情是什么?

未知的未知:我完全没有考虑过的事情是什么?我不知道哪些知识?我知道事情可以好到什么程度吗?

image.png

最优秀的 agent 编码者通常能保持相对较少的未知项。观看像 BorisJarred 这类人的提示词,对我来说很明显,他们对自己想要什么了如指掌。他们与代码库和模型行为都深度同步。

但他们也假设存在未知项。从很多方面来说,减少未知项并为之规划就是 agent 编码的技能。但幸运的是,通过与 Claude 协作,你可以提高这项技能。

帮助 Claude 帮助你

image.png

指导 Claude 是一种微妙的平衡。如果你过于具体,Claude 会遵循你的指令,即使改变方向可能更合适。如果你过于模糊,Claude 通常会根据行业最佳实践做出选择和假设,但这些可能并不适合你的任务。

当你不考虑你的未知项时,你会同时犯这两种错误。你不知道路径何时会充满障碍,也不知道路径何时会畅通无阻,但你仍然希望 Claude 能够灵活转向。

Claude 可以帮助你更快地发现未知项。它可以极快地搜索你的代码库和互联网,并且对平均话题的了解比你更多。它也能更快地从失败中迭代。

这个过程最重要的部分是为 Claude 提供关于你起点的上下文。例如,告诉它你的思考过程进展到哪一步;说明你对问题和代码库的经验;让它像思想伙伴一样与你协作。

我之前写过关于将 HTML 与 Claude 结合使用,在几乎所有情况下,HTML 制品都是可视化并呈现它的最佳方式。

在这篇文章中,我详细介绍了用于揭示这些未知项的一些模式。并非每次都会使用所有技巧,但拥有这样一套有用的技巧集合是很好的。

image.png

实现之前

盲点扫描

在开始工作时,最有用的做法之一就是了解自己的盲点。例如,如果你在代码库的新部分编写功能,或者使用 Claude 帮助处理你不熟悉的工作(如迭代设计),你很可能会有很多“未知的未知”。

你可能不知道该问什么问题、好的标准是什么、有哪些历史工作已经完成、或者有哪些坑需要避开。

为此,你可以请 Claude 帮助你发现你的“未知的未知”,并向你解释。我喜欢直接使用“盲点扫描”和“未知的未知”这两个词。通常,向它提供关于你是谁以及你知道什么的上下文很重要。

示例提示词:

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

“我不知道什么是色彩分级,但我需要给这个视频调色。你能教我了解自己在色彩分级方面的未知的未知项,以便我能更好地提问吗?”

头脑风暴与原型

当我在涉及大量“未知的已知”的领域工作时——这些标准我只有在看到时才定义得出来——我喜欢请 Claude 和我一起进行头脑风暴和原型设计。

在原型设计早期识别并表达出“未知的已知”非常有价值,因为如果在实现过程中才发现它们,代价(相对)高昂。功能或规范上的微小变化可能导致代码实现截然不同,而且让 agent 撤销之前的更改会更加困难。

例如,你可能只想看看在框架上添加一个按钮会是什么样子,而无需连接后端路由或在前端维护额外状态。

视觉设计对我来说很难用语言表达,但我一看到就知道自己想要什么。在这些情况下,我会要求一个制品的多种设计方案。

我几乎每个编码环节都会从探索或头脑风暴阶段开始。这有助于我带着明确意图来定义项目范围。Claude 常常能找到我可能会忽略的高价值方法,但有时也会只见树木不见森林。头脑风暴能防止我设定过窄或过宽的范围。

示例提示词:

“我想要一个仪表盘来展示这些数据,但我没有视觉品味,也不知道能做到什么程度。给我做一个 HTML 页面,提供 4 个迥然不同的设计方向,这样我就能做出反应。”

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

“我粗略的问题是:用户在上手引导后流失了。搜索代码库,头脑风暴出 10 个我们可以介入的点,从成本最低到最具野心的排序。我会告诉你哪些点让我有共鸣。”

访谈

一旦我进行了充分的头脑风暴,我可能仍然存在未知项。

在这种情况下,我请 Claude 就任何未知项或模糊之处对我进行访谈。当要求 Claude 访谈你时,尽量给它提供关于你问题的上下文,以引导它的提问。以下是一些例子。

示例提示词:

“一次一个问题地对我进行访谈,询问所有模棱两可的地方,优先处理我的回答会改变架构的问题。”

参考

有时你无法详细描述你想要什么。例如,你可能缺乏相关语言,或者事情太过复杂以至于需要花很长时间来描述。

在这种情况下,最好的答案是参考。虽然你可以包含图表、文档或图片,但最好的参考是源代码。

如果你有一个库以某种方式实现了某功能,或者有一个你非常喜欢的设计组件,只需将 Fable 指向该文件夹并告诉它找什么,即使它使用的是不同语言。

这也是 Claude Design 的工作方式。你不必给它一个文件(虽然你也可以这样做)。你可以将其指向你喜欢网站上的一个模块,它会读取底层代码,而不仅仅是截图。这提供了关于标记、结构以及组件实际构建方式的更丰富细节。

示例提示词:

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

实现计划

当我认为准备实现时,我倾向于让 Claude 整理一个实现计划供我审查,重点关注可能最容易发生变化的部分,例如审查数据模型、类型接口或用户体验流程。这让 Claude 能够浮现出我可能实际上需要修改的东西。

示例提示词:

“用 HTML 编写一个实现计划,但优先列出我最可能调整的决策:数据模型更改、新类型接口以及任何面向用户的内容。把机械重构部分放在底部,这部分我信任你。”

实现过程中

实现笔记

一旦我对计划感到满意,我会开始一个新的会话,并将任何制品传递给提示词。例如,我可能会传入一个规范文件和原型,并请 agent 实现它。

但事实是,无论你做多少规划,总会有隐藏的“未知的未知”存在。agent 在工作中可能会发现,由于在代码中遇到的边缘情况,它需要采取不同的策略。

我要求 Claude Code 保留一个临时的 implementation-notes.md(或 .html)文件,用它来记录所做的决策,以便我们可以从下一次尝试中学习。

示例提示词:

“保留一个 implementation-notes.md 文件。如果你遇到迫使你偏离计划的边缘情况,选择保守的选项,将其记录在‘偏差’部分下,然后继续。”

实现之后

推介与解释

image.png

发布一个功能最重要的部分之一是获得认可和批准。在最终文档中构建推介和解释制品有助于:

  • 当评审者从你在同样未知项开始时,加速理解
  • 当专家想看到你已经考虑了他们可能预见到的未知项和常见失败点时,加速批准

示例提示词:

“把原型、规范和实现笔记打包成一个文档,这样我就可以丢到 Slack 里争取认可。以演示 GIF 开头。”

测验

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

在提供大量上下文后,请 Claude 就变更对我进行测验,有助于我理解发生了什么。只有在我完美通过测验后,我才会合并。

示例提示词:

“我想确保我完全理解这次变更中发生的一切。给我一份关于变更的 HTML 报告,让我在上下文中阅读并理解,包括直觉、做了什么等,并在底部附上关于变更的测验,我必须通过。”

这一切如何结合:发布 Fable

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

所以我从我知道的开始。我知道 Claude 可以使用代码编辑视频和转录,但我不确定它是否足够准确。于是我请 Claude 向我解释像 Whisper 这样的转录是如何工作的,以及我是否能使用 ffmpeg 准确剪辑掉像“嗯”这样的小词或长时间停顿。

我希望 Claude 创建一个与我说话时间同步的 UI,但不确定它能否做到,于是我请 Claude 使用 Remotion 和一个转录创建一个原型视频,看看是否可行。

最后,视频本身看起来有点暗淡,我知道这是色彩分级的结果,但我并不真正了解色彩分级是什么。我第一次尝试是让 Claude 做几个变体供我选择,但我意识到在色彩分级方面我不知道“好”是什么样的。所以相反,我请 Claude 教我了解色彩分级,以发现我的未知项。

你可以在这里观看更深入的讲解视频。

匹配地图与疆域

模型越好,采用正确方法能实现的就越多。当一个长周期任务返回错误结果时,很可能你需要花更多时间来定义你的未知项,或者创建一个允许 Claude 通过它们即兴发挥的实现计划。

每一个解释、头脑风暴、访谈、原型和参考,都是在你发现之前以低廉代价了解你所不知道的事情的方式,等到修复时代价就高昂了。

所以,开始你的下一个项目时,让 Claude 帮你找到你的未知项。

  • 原文链接: x.com/trq212/status/2073...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~

相关文章

0 条评论