你只需要缰绳(大部分情况下)
The harness is all you need (mostly)
本文介绍了一个基于GitHub Copilot的AI工作流,强调“少即是多”原则,无需复杂prompt或MCP技能即可提升效率。工作流包括:选择工具(推荐CLI或Copilot应用)、开启YOLO模式(/allow-all)、从原型开始(如日期选择器web组件)、有条理规划(/plan模式)、使用Autopilot实现、人工审查与迭代、橡皮鸭审查(Rubber Duck review)及收获成果。作者指出,核心在于掌握工具架(harness),而非依赖噱头。
如果你现在对AI感到不知所措,你并不孤单。似乎每天都有新工具、新MCP、新模型、新技能、新工作流、新功能、新社交媒体帖子,内容都是某种形式的“快看!我用这个奇怪的prompt完全搞定了AI。”我……不信。我每天都在用AI,而我发现的是少即是多。真正起作用的不是我安装、配置或诱骗agent做什么。那些东西很有趣,但到头来感觉像是噱头。我最大的生产力提升来自于我如何使用这个“工具架”(harness)以及我对它的理解有多深。所以在这篇文章中,我将分享一个简单的工作流,你只需利用GitHub Copilot的现有功能,就能大幅提升使用AI的效率。没有奇怪的prompt。没有别人似乎都知道的技巧。只有工具架。你只需要工具架——大部分情况下。
免责声明
我在这里将“工具架”与“GitHub Copilot”互换使用。这篇文章的目的是保持简单,所以你只需知道GitHub Copilot是一个agent工具架。我并不是暗示你永远不需要任何技能、MCP、指令或自定义agent等。事实上,随着你深入并需要为团队定义复杂工作流和自动化任务时,这些东西会变得相当重要。实际上,我在这篇博文中就用了一些!我在这里想指出的是,你不需要任何这些东西也能在AI上取得巨大成功。另外,外面有很多“垃圾内容”(slop)。如果你不信,让agent创建一个技能来做任何事。它会欣然照做。无论生成的技能是否真的有效,它都可以轻松发布到任何数量的技能或MCP注册表中。
1. 选一个工具,随便哪个
这很明显,对吧?选一个工具!太简单了!但即使在GitHub Copilot家族内部,也有很多选择。包括CLI、新的GitHub Copilot应用、VS Code、Visual Studio和JetBrains,仅举几例。好消息是,这些体验正越来越多地集中到同一个工具架上。具体细节可能因工具而异,但核心工作流是一致的。学会工具架一次,到处都能用。话虽如此,我确实认为学习工具架是关键,而学习它的最佳方式是尽可能贴近它。所以如果你刚开始,我建议从GitHub Copilot CLI开始。它是一个终端界面,意味着只有文本。没有太多UI需要学习。你输入一个prompt。agent执行操作。但交互更直接、即时,坦率地说,非常令人满意。为了演示,我将使用新的GitHub Copilot应用。但该应用使用的工具架与你使用GitHub Copilot CLI、Visual Studio Code以及许多其他能找到GitHub Copilot的地方所用的完全一样。
2. 开启YOLO模式
YOLO模式也称为“允许所有”(Allow All)。这让agent无需请求许可即可执行任何命令。这取决于你使用的工具,但大多数情况下,只需在聊天中输入/allow-all命令。否则,agent每次需要执行工作时都会停下来等待你的批准。Agent需要自主性,你才能看到生产力的提升。如果你必须批准agent做的每一件事,那还不如你自己来做。而且,那是一种糟糕的用户体验。没有人愿意整天坐在办公桌前按“批准”按钮。反复按“批准”只会让你不再阅读被要求批准的内容,这违背了初衷。不过,使用agent时要注意安全。好人也会遇到坏事。使用YOLO模式时,你不希望在本地机器上运行agent。尤其是在工作中使用时——数据在组织的系统上是私有的,错误可能代价高昂。幸运的是,有很多选项可以在沙箱中运行agent。一个容易上手的是GitHub Codespaces或开发容器(development containers)。
3. 从原型开始
AI最神奇的一点是,你可以轻松地预先为任何东西制作原型。历史上并非如此。原型制作是项目的一个完整阶段,而且常常是一种奢侈。现在,你可以用一个prompt就做出一个原型。让我们看几个例子。假设我们要构建一个日期选择器web组件。这看起来简单,但实际上相当复杂。想想你可能想用它做的所有不同事情。如何在组件内导航?选中日期看起来什么样?选中范围看起来什么样?用户如何在日、月、年之间导航?从一个简单的原型开始,并获取几个变体。我通常这样开始:
给我一个日期选择器web组件的20个模拟。把它们都放在一个HTML文件中,以便我比较。
在这种情况下,AI生成了许多不同的布局,但其中一个是模拟从年份视图开始。这很有趣。我希望我的日期选择器能让用户缩放到年份,然后进入月份,最后到日期。这些是你直到看到它们才会考虑的事情。作为人类,我们处理图像、形状和具体布局等感官丰富的模型,比处理密集文本快得多。早期创建低投入的原型有助于让复杂概念立即变得直观。这也适用于非视觉任务。例如,如果我想添加一个新的API端点,我仍然会先创建一个视觉原型来理解需求和约束,然后再深入实现。
为这个项目创建一个API的视觉模型。添加五个选项,说明我们如何处理一个允许用户下载分析数据的新API端点。
由于GitHub Copilot应用支持Mermaid图表,agent会将其渲染为Markdown,勾勒出实现这个API端点的五种不同方式。与agent合作时,很容易忘记一切都有细微差别。原型制作有助于提前发现这些细微差别,这样你就不会把宝贵的时间和token浪费在返工上。我建议在大多数工作中使用中等规模的模型,如GPT 5.6 Terra或Claude Sonnet,并采用中等推理级别。我还建议你在处理这个特定功能、bug或增强的整个过程中,坚持使用你选择的模型。Prompt缓存会为你节省token。只要你不切换到不同的模型或推理级别,你之前的聊天记录就会保留在模型缓存中,从而在后续请求中获得折扣。
4. 有条理地规划
现在你知道了你实际想要什么,而不是你最初以为想要什么,是时候规划实现了。在不启动新会话的情况下,在GitHub Copilot中切换到规划模式。
/plan 构建一个日期选择器web组件。我希望用户能够缩放年份、月份和日期。
这是一个相当模糊的prompt,你可能比我在这里有更多的上下文给模型,但这只是一个演示。如果你没有更多上下文,也没关系。这正是这一步的目的。理论上,如果你能用完美的顺序组合完美的prompt和完美的上下文,你可以让模型一次性完成任何事。理论上。但我们没人能做到。不过,规划可以帮助你更接近那个理想状态,它会提出所有你在手工构建时需要自己回答的问题:
- 开始日期和结束日期可以相同吗?
- 部分选择是否有效?
- 用户应该能够清除日期吗?
- “今天”应该始终是一个可见选项吗?
- 允许手动输入吗?
- 日期以什么格式存储?
- 允许粘贴日期吗? 列表还在继续。你不可能想到所有这些边界情况,但模型可以帮助你识别其中许多。你可以通过安装Matt Pocock的“grill-me”技能,让规划模式在提问数量和边界情况上更加激进。
/plan /grill-me 构建一个日期选择器web组件。我希望用户能够缩放年份、月份和日期。
这个规划步骤至关重要。重点不是让你接受AI的每一个建议。如果你那样做,就否定了这个规划过程的价值。重点是你深入参与问题并引导模型。这是你的专业知识发挥作用的地方。你也可以向模型提问。在下面的截图中,它问我关于“非连续日期”的问题。我很确定我知道模型在这里的意思,但我会要求澄清,以确保我们理解一致。即使你打断提问澄清问题等,规划过程也会继续进行。
5. 使用Autopilot实现
规划完成后,GitHub Copilot很可能会提示你切换到Autopilot并开始实现规划。Autopilot是一个内置循环。它强制模型继续工作,确保它确实完成了它所说的要做的事情——在这种情况下,是完成规划中的每一项。GitHub Copilot在此阶段会自动充当编排器(orchestrator)。如果需要读取代码库中的文件,它会使用带有小模型的“Explore”子agent。如果它认为某个操作相对复杂,它可能会选择带有更大模型的“General Purpose”子agent。虽然你可以通过自定义agent和指令在GitHub Copilot中获得对编排的精细控制,但你不需要做任何特殊操作就能获得子agent和多模型工作流的优势。这开箱即用,即使你根本不知道这些东西的存在。
6. 人工审查与迭代
这是你获得多巴胺冲击的时刻。你可以看到AI创建了什么。但很可能你不会得到完全想要的东西。这是正常且预期的。模型无法读懂你的心思,而且它容易出错。与模型迭代,直到你得到真正想要的东西。无论是代码还是改进的UI,这部分是你的品味决定最终产品质量的地方。例如,这是GitHub Copilot给我的日期选择器。我已经看到它有一些问题:
- 动画不一致
- 悬停在选中日期上时,由于颜色对比度,文本不可读
- 顶部不需要显示“12 YEARS”
- 当我点击“Today”时,如果我在月份或年份视图中,它不会带我回到日期视图
- 而且我不喜欢这个设计。它看起来有点太像AI创建的了——因为它就是!
所以这里我们只是进入后续模式。我将使用一个我创建的CSS框架,叫做Postrboard。我把它添加为一个技能,指向CSS并告诉agent如何使用它。如果你想使用它,可以自行安装,或者选择任何你喜欢的其他CSS框架。给模型一些设计指导非常有帮助,通常一个CSS框架就足够了。
ok - 我们这里不需要着陆页 - 只需要组件、输出和设置面板,保持最小化。使用/postboard技能进行设计和配色。对于日期选择器,当我点击日期时,它会尝试放大,但无法放大,因为没有可放大的内容。那里不应该有缩放。顶部不需要显示“Zoom Out”。当我鼠标悬停在包含选中日期的月份或年份上时,我无法阅读悬停文本。当我点击“Today”时,它应该带我到日期视图,即使我在月份或年份视图上。月份下面不需要数字,也不需要放在框里。年份也一样。顶部不需要显示“12 years”。
注意这有多对话式。不要想太多。当你修复一堆这样的小问题时,直接交给模型。如果你有上下文,你就有prompt。最重要的是不要满足于“足够好”的AI输出。坚持质量。要毫不留情。这部分仍然是你的责任,知道什么是高质量结果、什么不是,是你带来的价值。没有AI能取代你的人性触感和创造力。这是我最终的日期选择器的样子。滚动到这篇文章末尾查看它的实际效果。
7. 橡皮鸭审查结果
在你迭代并对创建的内容满意后,是时候进行最终审查了。请求GitHub Copilot进行橡皮鸭(Rubber Duck)审查。你只需提出请求即可:
对这个日期选择器组件实现进行橡皮鸭审查。
在橡皮鸭审查中,GitHub Copilot会请求来自不同AI家族模型的审查。例如,因为我使用的是GPT 5.6 Terra,它请求了Sonnet的审查。不同模型在不同数据上训练,因此它们有不同的盲点。橡皮鸭审查有助于识别单个模型可能遗漏的潜在问题。请注意,你可以在工作流的任何阶段使用它。你可以对原型进行橡皮鸭审查。你可以对规划进行橡皮鸭审查。这完全取决于你是否想要对某件事进行第二次AI审查。如果你想更进一步,你可以将橡皮鸭与Autopilot结合,让模型在一个循环中协同工作,以改进最终结果。
/autopilot 对这个日期选择器实现进行橡皮鸭审查。得到结果后,仔细审查并进行必要的调整。重复橡皮鸭审查,直到你和审查模型都认为剩下的项目只有递减的回报。
经过这一步,你将获得比之前更精炼的结果,并且很可能识别出许多额外的边界情况。这一步确实会消耗更多token,但你是在真正地强化代码。把它看作是对未来自己的投资,因为你现在抓住了这些问题,以后就不必处理了。
8. 收获成果
此时,你已经准备好暂存并提交,或者继续处理你想在此pull request中添加的下一个功能。我建议为任何与这个日期选择器无关的下一步操作启动一个新的聊天会话。你可以将聊天会话视为按主题划分;如果你开始偏离主要主题太多,可能是时候开始一个新会话了。以下是我为这篇文章构建日期选择器的工作流的最终结果。我意识到这是一个有点刻意设计的例子,但我们能不能都暂停一下,惊叹一下我们现在能用AI做到的事情?构建日期选择器曾经是你可能尝试做的最难的事情之一。问问那些构建过它的英雄们就知道了。
事情不必复杂
这个简单的工作流对大多数人来说已经足够了。简单性也有助于你多任务处理。当你保持简单时,更容易推理出agent处于什么状态以及你上次在做什么。你的上下文窗口也是有限的。AI领域现在发生了太多事情。你可以构建和实验的东西没有上限。你可以添加MCP服务器、技能、指令和自定义agent。你可以设置工作流和循环,创建提示agent的agent,并搭建整个虚拟开发团队。但请记住,现在没有人真正知道自己在做什么。我们都在摸索中前进。今天许多AI的神奇咒语,明天就会成为反模式。只需专注于以最简单的方式获得可重复、高质量的结果。学会使用工具架,你就会做得很好。
尝试GitHub Copilot >
这篇文章《你只需要工具架(大部分情况下)》最初出现在GitHub博客上。