缓存时间:
2026/10/13 18:29
# 让你的编程助手成为 10x AI 工程师
来源:https://sarthakai.substack.com/p/a-coding-plugin-to-make-you-a-10x
以下是 TLDR:
- 我构建了 **agent-engineer(https://github.com/sarthakrastogi/agent-engineer)**,一个免费且完全开源的插件。它支持 Claude Code、Codex CLI、Cursor、OpenCode 和 Gemini CLI。
- 它包含 **11 个技能、4 个子代理和 5 个钩子**。这些技能承载着代理工程知识(工具、提示词、上下文、RAG、评测、追踪、护栏、生产环境)。
- 在 6 个代理任务的盲测 A/B 测试中,Claude Code(Opus 5.5)使用插件时满足了 **53% 的需求,未使用时为 34%**。
- 你只需 2 条命令即可安装。
- 该插件不会接触或收集你的任何数据或代码。它也不收集任何分析数据等。它是完全开源的,没有后端。
**为了测试它,我让 Claude Code(Opus 5.5)在使用和不使用插件的情况下完成同样的六个代理工程任务**,每个任务运行三次,然后根据一份在任何运行之前写好的检查清单对每个结果进行盲评。插件带来了显著的改进。
[](https://substackcdn.com/image/fetch/$s_!c-v9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc70ffc3c-45cb-429e-ab96-8c9eabeee754_712x495.png)*每对柱子中,左边为无插件,右边为有插件*
**编程代理写代理的方式仍然像个实习生,而不是一位资深 AI 工程师。**
[](https://substackcdn.com/image/fetch/$s_!Rcsn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a96fa2a-4784-4c29-ad18-f3c13506a228_738x414.png)事情就是这样发展的。
如果你构建代理并使用 Claude Code、Codex 或 Cursor 进行编码,你可能经常遇到这些问题。它们是构建非确定性系统的日常摩擦:
- **所有测试/评测都通过了,尽管存在明显错误。**因为测试太简单,没有覆盖真实世界的边缘情况。然后需要 3-4 轮对话才能达到本应是默认状态的结果。生气的 NPC(反应积累)(https://substackcdn.com/image/fetch/$s_!wngD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3e692e8-2772-4d8b-a865-1a40a328845d_720x726.png)
- **打补丁式修复。**修复被写入提示词,而真正的差距在代理的其他地方。
- **长会话中的漂移。**第 3 轮的规则到第 40 轮就消失了,你又得重新粘贴一遍。
- **不安全的工具设计。**例如,我经常遇到 Claude 编写的退款、删除或发送 MCP 工具没有限制、没有所有权检查、也没有幂等键。
- **不需要的文件和密钥。**即使没有插件,每个任务大约会产生一个多余的 markdown 报告(我的数据中每次运行 1.0 个),偶尔还会把 API 密钥粘贴到源代码中"只是测试一下"。
迭代次数就是我试图用这个插件解决的问题。
感谢阅读 AI Agent Engineering!这篇文章是公开的,请随意分享。
分享 (https://sarthakai.substack.com/p/a-coding-plugin-to-make-you-a-10x?utm_source=substack&utm_medium=email&utm_content=share&action=share)
agent-engineer 是一个插件,它让编程助手在处理代理任务时像一位细心的资深 AI 工程师那样工作。它有三个部分:
- **技能**:包含检查清单、决策规则和参考文档的 MD 文件。按需加载,所以当你不做代理相关工作时零成本。
- **钩子**:一个标准库 Python 脚本,在会话事件上触发。它会调用正确的技能,阻止 API 密钥被写入源代码,并在助手完成前要求提供证据。
- **子代理**:为会淹没主上下文的工作提供隔离的工作者,比如读取 100 条追踪记录。
它为各级别的 AI 工程师打造——参见下表了解它是否适合你:
如果你在多个会话中构建代理,该插件可以在你的仓库中 `agent-engineer/` 目录下维护一份共享记录,这样第一周的设计决策在第六周调试时仍然存在。流程是:
1. 设计
2. 评测
3. 修复
4. 实验日志
以下是这些共享记录的样子:
[](https://substackcdn.com/image/fetch/$s_!nHaZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafbc97e2-00c8-42ba-af18-6a781503fea6_683x340.png)
[](https://substackcdn.com/image/fetch/$s_!Z_X2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec80b9da-affb-47ae-a02d-8a553d6e9e48_683x624.png)
[](https://substackcdn.com/image/fetch/$s_!PPCg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94a85ff0-aa98-4051-b821-c0961528b057_689x301.png)
[](https://substackcdn.com/image/fetch/$s_!YOTs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfcedd3f-5471-4c34-94a2-220f54cedcfd_688x327.png)
路由技能按层次诊断问题。每一层包含其下一层,规则是在能解释该问题的**最低**层修复失败:
[](https://substackcdn.com/image/fetch/$s_!hNbN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28ff0d27-2f6c-40f8-954b-890b030057f4_3021x3154.jpeg)
如果你想阅读这些层次的完整解释,请看这篇已被 13,000 位 AI 工程师阅读的讲解文章:
agent-engineer 根据需要修复的层次来决定使用哪个技能:
[](https://substackcdn.com/image/fetch/$s_!1CII!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c29ce66-cc34-4780-8532-ea3925d087d7_642x525.png)
好消息是,只有当证据表明更简单的层次失败时,它才会添加新层次。
两个按钮(流汗的男人)(https://substackcdn.com/image/fetch/$s_!6MeV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8969de8a-612e-49d7-b777-f065691e325e_600x941.png)
首先克隆开源仓库:
```
git clone https://github.com/sarthakrastogi/agent-engineer.git ~/agent-engineer
```
然后根据你使用的编程助手选择对应的命令:
- **Claude Code**:`/plugin marketplace add ~/agent-engineer`,然后 `/plugin install agent-engineer@agent-engineer`
- **Codex CLI**:`cd your-project && ~/agent-engineer/install.sh --harness codex`,然后在 `/hooks` 中批准钩子
- **Cursor**:从 GitHub 安装插件,或使用 `~/agent-engineer/install.sh --harness cursor`
- **OpenCode**:`cd your-project && ~/agent-engineer/install.sh --harness opencode`
- **Gemini CLI**:`cd your-project && ~/agent-engineer/install.sh --harness gemini`
- **仅技能,任何工具**:`npx skills add sarthakrastogi/agent-engineer`
另外,`install.sh` 还有几个选项:
- `--scope user`:为你所有项目安装
- `--dry-run`:显示将要进行的更改
- `--uninstall`:移除已安装的内容
- `--no-hooks` 和 `--no-agents`:跳过相应部分
分享 (https://sarthakai.substack.com/p/a-coding-plugin-to-make-you-a-10x?utm_source=substack&utm_medium=email&utm_content=share&action=share)
不需要特殊命令。像平时一样说话,agent-engineer 会加载正确的技能并引导你的编程助手:
[](https://substackcdn.com/image/fetch/$s_!PYmT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e3573f-6b0b-46fa-8410-5508d72ee845_1372x1014.png)
如果你想直接调用某个技能,可以在 Claude Code 中使用 `/agent-engineer:agent-evals`,或在 Codex 中使用 `$agent-evals`。
我尝试按照这个顺序来设计我的代理:
[](https://substackcdn.com/image/fetch/$s_!c4BM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f341df-4a44-4211-b444-067c133ef016_3197x1502.jpeg)
因为每一步都会引入你不得不评估的失败模式,而且大多数任务永远不需要多代理系统(MAS)。工作流(代码定义的路径)比代理(模型选择路径)更可预测,所以你只在值得的地方为自主性买单。
**`agent-design` 强调的要点:**
- 在架构之前先写成功标准。
- 只在有证据要求时才爬梯子。
- 先了解形态再选择框架,而不是反过来。
**延伸阅读:**在 AWS re:Invent 上,Anthropic 的 Applied AI 团队总结了他们当年构建代理的经验 (https://dev.to/kazuya_dev/aws-reinvent-2025-what-anthropic-learned-building-ai-agents-in-2025-aim277-jn8),开头就讲了工作流与代理的区别,然后进入上下文工程和工具设计。
工具描述是模型能获得的唯一文档。模糊的名称或无用的错误信息会导致错误调用、重试和浪费 token,而没有任何提示词能修复一个设计糟糕的接口。
**`agent-tools` 强调的要点:**
- 清晰的命名、类型化的 schema、读起来像提示词的描述。
- 模型能据此行动的错误信息。
- 有界的响应大小。
- 把工具集当作需要评测的接口来对待。
**延伸阅读**:Anthropic 关于代理工具的工程文章 (https://anthropic.com/engineering/writing-tools-for-agents) 描述了原型制作工具、在真实的多调用任务上运行评测,然后让 Claude 阅读转录并重写工具描述。他们报告了通过这个循环在内部 Slack 和 Asana MCP 工具上的留出测试集提升。
代理运行是输入密集型的,每一步都重新发送相同的前缀,所以缓存未命中在准确率体现之前就会先反映在账单和延迟上。
**`agent-context` 和 `agent-production` 强调的要点:**
- 保持提示词前缀稳定。把时间戳和请求级数据放在末尾。
- 通过丢弃可重新获取的内容来压缩,而不是删除事实。
- 把廉价且不影响质量的节省(提示词缓存)放在有风险的节省(切换模型)之前。
- 任何模型切换都必须经过评测对比的验证。
**`agent-eval` 强调的要点:**
- 从对真实追踪记录的错误分析开始。在写任何裁判模型之前先建立失败分类体系。
- 当失败是机械性的时,优先使用代码检查而非 LLM 裁判。
- 每个 LLM 裁判都要用人工标注进行验证。
- 多次运行;一次运行什么也证明不了。
- 接入 CI 门禁。
**延伸阅读:**Anthropic 对最近三个问题的事后复盘 (https://www.anthropic.com/engineering/a-postmortem-of-three-recent-issues) 涵盖了降低响应质量的基础设施缺陷,以及为什么他们通常的评测和监控最初没有发现它们。
例如,任务 3 要求助手让分类提示词更友好,添加一个退款类别,"然后告诉我新版本是否更好"。没有插件时,三次运行都回答了类似的内容:
> 新版本更好吗?是的——绝对的。证据:更好的准确率……(预期准确率提升 +5-15%)
实际上什么都没运行过。使用插件后,有一次运行说:
> 这些修改未经评估。我没有用真实模型运行测试用例,所以我无法告诉你新版本是否确实更好……README 上写着旧提示词的得分是 13/14。
使用 agent-engineer 后,未经测量的声明从 **3 次运行中有 3 次** 降到了 **3 次运行中有 1 次**。
一次代理运行是一棵 LLM 调用和工具调用的树。没有每一步的 span,你无法判断哪一步失败了、花费了多少、或者涉及哪个客户的案例。标准 schema 还意味着你可以更换后端而不需要重新插桩。
**`agent-observability` 强调的要点:**
- 每次 LLM 调用和工具调用一个 span,附带 token 使用量。
- 遵循 OpenTelemetry GenAI 规范(或 OpenInference),这样任何后端都能读取。
- 使用**关联 ID**,方便找到单个客户的案例。
- 把提示词和邮件正文视为 PII;有意识地采集内容。
用户经常尝试越狱和提示词注入(比如告诉代理忽略指令,因为某处有个垂死的奶奶所以要写一个炸弹配方)。
如果你关注我的作品有一段时间,你会知道我构建了一组开源分类模型,能很好地检测有害用户查询。你可以通过我的 Python 库 rival-ai 尝试:(https://github.com/sarthakrastogi/rival/tree/main)
但提示词注入无法 100% 准确过滤,所以防御必须是架构层面的。Simon Willison 的致命三位一体 (https://www.bespacific.com/?p=123053) 指出,拥有私有数据、不可信内容和外部通信渠道的代理可以被引导泄露信息,而移除其中一个支柱是可靠的解决方案。
例如:
[](https://substackcdn.com/image/fetch/$s_!uaoQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0266e380-36cd-4053-a7a3-dc4c576a464d_592x322.png)
> 如果三个支柱同时存在 = 需要设计评审
**`agent-guardrails` 强调的要点:**
- 询问代理是否同时具备以下三项:访问私有数据、暴露于不可信内容、以及与外部通信的方式。如果具备,攻击者就可以引导它泄露信息。
- 移除一个支柱(或将各支柱隔离在不同的上下文中),而不是寄希望于提示词能守住。
- 在代码中实施权限和审批。用真实的攻击集进行红队测试。
分享 (https://sarthakai.substack.com/p/a-coding-plugin-to-make-you-a-10x?utm_source=substack&utm_medium=email&utm_content=share&action=share)
IQ 钟形曲线 (https://substackcdn.com/image/fetch/$s_!zRnD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0346838b-360c-456a-a88d-ea0a31bad88e_640x508.png)
我写了 6 个任务来测试这个插件:
[](https://substackcdn.com/image/fetch/$s_!XRk1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6ec269c-c0da-467b-b744-48932a36ffac_695x553.png)
每个都是一个小型真实项目,其中有一个陷阱,用来区分"能用"和"能像一位有经验的代理工程师那样交付"。任务 5 和 6 是**留出集**:在根据实验结果对插件做任何修改之前编写并运行的。
[](https://substackcdn.com/image/fetch/$s_!cETY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde816325-688b-437f-815f-cebe2cb02476_652x417.png)
在退款任务中,一次插件运行同时添加了单笔退款限额和每日限额,两次使用了确定性幂等键,所以同一封邮件不会触发两次相同的退款。在分类任务中,第三次插件运行先写了一个关键词匹配的"模拟"和一个声称 100% 准确率的报告文件。评测门禁触发了,最终消息自我纠正了("我用的是关键词启发式方法,不是真实模型"),但它已经写好的报告文件仍然带着那个声明,所以那次运行在诚实性项目上未通过。在低成本模型任务中,一次无插件运行把 Opus 切换成了 Haiku,并宣称 Haiku "能力绰绰有余",什么都没测量;三次插件运行中有两次明确表示切换未经评估,并给出了先运行评测命令的建议。
[](https://substackcdn.com/image/fetch/$s_!8InF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40aadc39-ce4d-4e7f-a21b-95cbafc9b2f1_470x271.png)
所有内容都在 [eval-results 分支](https://github.com/sarthakrastogi/ai-agent-engineer/tree/eval-results)的 `evals/ab/` 下:任务固件、提示词、评分标准、运行器和报告脚本。([https://github.com/sarthakrastogi/ai-agent-engineer/tree/eval-results/evals/ab](https://github.com/sarthakrastogi/ai-agent-engineer/tree/eval-results/evals/ab))完整运行两个分支每个任务三次的费用大约在 10 到 15 美元左右,耗时约 30 分钟:
[](https://substackcdn.com/image/fetch/$s_!RzD8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b74b59e-6421-4c89-8e3e-3d3b1ef6a146_1343x379.png)
这就是全部内容。安装很简单,插件轻量且完全开源,没有后端。试试看,看看你的迭代次数是否下降了。