许多我的编码代理工作效率提高技巧都是我在没有它们的情况下工作时发现有用的建议的延伸。这里有一个很好的例子:积累你知道如何做的事情。
构建软件的技能的一个关键方面是了解什么是可能的,什么是不可能的,以及如何实现那些东西。
这些问题可以很广泛,也可以很奇怪。一个网页是否可以在 JavaScript 中独立运行 OCR 操作?一个 iPhone 应用程序是否可以与蓝牙设备配对,即使应用程序没有运行?我们是否可以在 Python 中处理 100GB 的 JSON 文件,而不需要首先将其全部加载到内存中?
你有越多这样的问题的答案,你就越有可能能够识别出其他人可能没有想到的解决问题的机会。
知道某件事情理论上是可能的,并不等同于你自己已经见过它被实现。作为软件专业人员的一个关键资产是深入了解这些问题的答案,理想情况下是通过运行的代码来说明。
我在各种方式上积累了这样的解决方案。我的 博客 和 TIL 博客 都充满了我如何解决问题的笔记。 我有 超过一千个 GitHub 仓库 收集了我为不同项目编写的代码,许多都是小的证明概念,展示了一个关键思想。
最近,我使用 LLMs 来帮助扩展我的解决方案集合。
tools.simonwillison.net 是我使用 LLM 协助工具和原型的最大收藏。 我使用这个来收集我称之为 HTML 工具 的单个 HTML 页面,它们嵌入 JavaScript 和 CSS 并解决特定的问题。
我的 simonw/research 仓库包含更大的、更复杂的示例,其中我挑战了编码代理来研究一个问题并返回工作代码和写好的报告,详细说明它找到了什么。
为什么要收集所有这些东西?除了帮助你建立和扩展自己的能力外,沿途产生的资产变得非常强大的输入你的编码代理。
我最喜欢的提示模式是告诉代理将两个或多个已知工作示例组合起来来构建新的东西。
一个帮助我清晰了解这一点的项目是我添加到工具收藏中的第一个项目——一个基于浏览器的 OCR 工具,如 这里 所述。
我想要一个简单的基于浏览器的工具来 OCR PDF 文件的页面——特别是 PDF 文件,它们完全由扫描的图像组成,没有提供任何文本版本。
我之前已经尝试在浏览器中运行 Tesseract.js OCR 库,并发现它非常有能力。这个库提供了成熟的 Tesseract OCR 引擎的 WebAssembly 构建,并允许从 JavaScript 中调用它来从图像中提取文本。
但我不想处理图像,我想处理 PDF。然后我记得我也曾经与 Mozilla 的 PDF.js 库一起工作过,它可以将 PDF 的单个页面转换为渲染的图像。
我在笔记中有这两个库的 JavaScript 片段。
这是我向模型(当时是 Claude 3 Opus)输入的完整提示,结合了我的两个示例并描述了我想要的解决方案:
这真的有效!模型输出了一个证明概念页面,它做了我需要做的事情。
我最终 与它进行了几次迭代 以获得我的最终结果,但只花了几分钟就建立了一个真正有用的工具,我已经从中受益。
我在 2024 年 3 月建立了那个 OCR 示例,几乎是在 Claude Code 的第一版发布前一年。编码代理使积累工作示例更加有价值。
如果你的编码代理有互联网访问,你可以告诉它做一些事情,如:
(我在指定了 curl 因为 Claude Code 默认使用一个 WebFetch 工具,它会概要页面内容,而不是返回原始 HTML。)
编码代理在搜索方面非常出色,这意味着你可以在自己的机器上运行它们,并告诉它们哪里可以找到你想要它们做的事情的示例:
通常就足够了——代理会启动一个搜索子代理来调查并将所需的细节拉回:
由于我的大部分研究代码都是公开的,我通常会告诉编码代理将我的仓库克隆到 /tmp 并将其作为输入:
关键思想是,编码代理意味着我们只需要在有用技巧上花费时间 一次。如果这个技巧被记录在一个工作代码示例中,我们的代理可以咨询这个示例并使用它来解决任何类似的项目。