智能体工程:囤积你会的代码

深度Simon Willison2026年3月16日3 分钟阅读
Simon Willison 分享他的智能体工程模式:囤积已知解决方案的代码片段,让 AI 编程助手能快速复用。他用 OCR 工具案例说明,结合 PDF.js 和 Tesseract.js 库,Claude 3 Opus 几分钟就生成了可用的原型。

我很多高效使用编程智能体的技巧,其实是我职业生涯中没用 AI 时也管用的建议的延伸。这里有个绝佳例子:囤积你会的代码

构建软件的一大技能是知道什么可行、什么不可行,至少对如何实现有个大致概念。

这类问题可大可小,有的还很冷门。比如:网页能单用 JavaScript 跑 OCR 吗?iPhone 应用不运行时还能连蓝牙设备吗?能用 Python 处理 100GB 的 JSON 文件而不全加载到内存吗?

你掌握的这类答案越多,就越可能发现用技术解决问题的机会,方式可能是别人没想到的。

知道理论上可行,和亲眼见过实现是两回事。作为软件从业者,关键资产是积累大量这类问题的答案,最好有运行代码佐证。

我用多种方式囤积这类解决方案。我的博客TIL 博客塞满了笔记,记录我搞明白怎么做的事。我有上千个 GitHub 仓库,收集为不同项目写的代码,很多是小型的概念验证,演示关键想法。

最近我还用大语言模型来扩充我的代码解决方案库。

tools.simonwillison.net 是我最大的大语言模型辅助工具和原型集合。我用它来收集所谓的HTML 工具——单个 HTML 页面,嵌入 JavaScript 和 CSS,解决特定问题。

我的 simonw/research 仓库有更大型、更复杂的例子,我让编程智能体研究问题,带回工作代码和详细报告。

重组囤积的代码

为什么要收集这些东西?除了帮你构建和扩展自身能力,过程中生成的资产会成为编程智能体极其强大的输入。

我最喜欢的提示模式之一,是告诉智能体通过组合两个或多个现有工作示例来构建新东西。

帮我理清这方法多有效的一个项目,是我工具集里加的第一个——浏览器端的OCR 工具这里有更详细介绍

我想要个简单、浏览器端的工具,来对 PDF 文件页面做 OCR——特别是那些完全由扫描图像组成、没提供文本版本的 PDF。

我之前试过在浏览器里跑 Tesseract.js OCR 库,发现它能力很强。这个库提供了成熟 Tesseract OCR 引擎的 WebAssembly 构建,让你能用 JavaScript 调用它从图像提取文本。

但我不想处理图像,我想处理 PDF。然后我记起我也用过 Mozilla 的 PDF.js 库,它能把 PDF 的单个页面转成渲染图像。

我笔记里有这两个库的 JavaScript 代码片段。

这是我喂给模型(当时是 Claude 3 Opus)的完整提示,结合了我的两个例子,描述了我想要的解决方案:

code
I want to build a web page that can perform OCR on PDF files directly in the browser. I have two existing examples:

1. Using PDF.js to render a PDF page as an image.
2. Using Tesseract.js to extract text from an image.

Combine these to create a tool where I can upload a PDF, select a page, and get the OCR text output.

效果完美!模型输出了一个概念验证页面,完全满足需求。

迭代了几次才得到最终结果,但只花了几分钟就构建出一个真正有用的工具,我一直受益至今。

编程智能体让这更强大

那个 OCR 例子是我 2024 年 3 月建的,差不多在 Claude Code 首个版本发布前一年。编程智能体让囤积工作示例变得更有价值。

如果你的编程智能体能上网,你可以让它做类似这样的事:

code
Build me a tool that extracts all links from a web page and displays them in a table with their anchor text. Use this example as a starting point: https://tools.simonwillison.net/link-extractor

(我指定了 curl,因为 Claude Code 默认用 WebFetch 工具,它会总结页面内容而不是返回原始 HTML。)

编程智能体很擅长搜索,这意味着你可以在自己机器上运行它们,告诉它们去哪找你想要它们做的例子:

code
Write a Python script that uses the GitHub API to list all of my repositories. Look at my existing GitHub API scripts for examples of authentication.

通常这就够了——智能体会启动搜索子智能体去调查,只拉回完成任务所需的细节。

既然我的研究代码大多公开,我常告诉编程智能体克隆我的仓库到 /tmp 并用作输入:

code
Clone https://github.com/simonw/research to /tmp and look at the ocr-pdf example. Use that as a reference to build a similar tool for extracting text from scanned images in a ZIP file.

关键想法是,编程智能体意味着我们只需要一次搞明白有用的技巧。如果那个技巧在某个地方有文档和运行代码示例,我们的智能体就能参考那个例子,用它来解决未来任何类似形状的项目。

本文编译自 Hoard things you know how to do - Agentic Engineering Patterns,版权归原作者所有。

觉得有用?分享给更多人

获取每周 AI 工具精选

工具推荐、实战教程和生态洞察,每周更新。

相关文章

Simon Willison 正在重构 LLM Python 库的抽象层,以支持服务器端工具执行等新功能。他利用 Claude Code 分析了四大 LLM 提供商的客户端库,生成了用于测试的 curl 命令和 JSON 输出。这些调研材料已开源,旨在帮助设计更通用的 API 抽象。

深度Simon Willison·4月5日·1 分钟

智能体技能——包含程序性知识和可执行资源的结构化包,供智能体在推理时动态加载——已成为增强 LLM 智能体的可靠机制。然而,推理时技能增强存在根本性限制:检索噪声引入无关指导,注入的技能内容带来大量 token 开销,而模型从未真正习得它所遵循的知识。我们提出一个问题:技能是否可以被内化到模型参数中,使其在无需任何运行时技能检索的情况下实现零样本自主行为?我们提出 Skill0,一个专为技能内化设计的上下文强化学习框架。Skill0 引入了一种训练时课程,从提供完整技能上下文开始,逐步撤除。技能按类别离线分组,并与交互历史一起渲染为紧凑的视觉上下文,教授模型工具调用和多轮任务完成。动态课程机制…

深度·4月5日·17 分钟

评论