将某功能 Prompt 的 ACU 消耗从 42 降到 12
逐步分析一个在分页任务上消耗了预期 3 倍 ACU 的真实会话,找出三个根本原因,并重写 Prompt 以节省 70% 的消耗。触发本次调查的会话
一位开发者让 Devin 为一个 API 端点添加分页功能。这个提示词很简短,看起来也很合理:这次会话顺利完成——测试通过,拉取请求(pull request,PR)看起来也不错。但它消耗了 42 ACU,而这本该是一个 约 12 ACU 的任务。成本是预期的三倍半,而这个功能在代码库的其他地方已经有可复用的实现模式。下面介绍如何找出问题所在,并确保这种情况不再发生。
从 Session Insights 入手
每个已完成的会话都会附带一次免费的 Session Insights 分析。点击任意已完成会话顶栏中的 灯泡图标 即可打开,无需高级会话。对于这个分页会话,Session Insights 标记了:
- Issue Timeline — 在第 14 分钟和第 28 分钟处有红色标记,表示 Devin 在这些时间点完全更换了实现思路。
- Issues Detected — “错误的代码库假设:在
src/utils/paginate.ts已经存在的情况下仍从零实现分页功能”和 “错误的实现类型:使用了游标分页,但测试期望的是基于偏移量的分页。” - Improved Prompt — 填补了缺失上下文的重写版本,可直接复制使用。
- ACU Usage — 使用了 42 个 ACU,被标记为相对于任务范围而言不成比例。
借助 Advanced Devin 获得逐阶段的拆解分析
在 Session Insights 面板中点击 Investigate with Devin,即可启动一个预加载了原始会话完整历史的 Advanced Devin 会话。你也可以手动启动一个新的 Advanced 会话:从 session dropdown 中选择该会话,并描述你希望分析的内容:Advanced Devin 会审查原始会话中的每一步操作,并找出 Devin 花费异常长时间或采用低效方法的地方:三个根本原因,其实只要改进提示词或代码仓库配置就都能避免。
重写提示并进行比较
你可以让 Advanced Devin 直接使用改进后的提示词开启一个新会话——无需手动复制粘贴。分析会生成一个结构化的提示词,准确包含之前缺失的上下文:将这两个提示词并排对比:
优化后的提示词消除了上述三大根本原因。Devin 无需再探索 23 个文件,一开始就选对分页类型,并且遵循经过验证的模式。
| 原始版本 | 优化版本 | |
|---|---|---|
| Pagination type | 未指定 | ”offset-based” |
| Existing utility | 未提及 | src/utils/paginate.ts |
| Reference pattern | 无 | ”same as GET /api/projects” |
| Response shape | 未指定 | 明确的响应 schema |
| Testing criteria | ”Run the tests” | 具体的边界情况 |
| ACU result | 42 ACUs | ~12 ACUs |
将发现转化为永久修复
单次提示重写只能在一个会话中节省 ACU。把这些结论转化为永久配置,则可以在所有后续会话中节省 ACU。把会反复使用的上下文添加到 Knowledge。 分页分析揭示了 Devin 会反复需要的两点信息——分页类型和工具函数的位置。把它们添加为 Knowledge 条目,这样每个会话都会自动从这些上下文开始:
- “所有 API endpoint 都使用基于 offset 的分页。公共工具函数位于
src/utils/paginate.ts。参考实现见 GET /api/projects。” - “使用
npm test运行测试。使用npm run typecheck运行类型检查。”
npm install 失败浪费的 3 个 ACU 是由于私有 registry 缺少 .npmrc 配置导致的。将 registry 配置添加到仓库设置中,可以防止后续的每个会话再遇到这个错误。批量分析以发现团队范围的共性模式。 如果多名开发者都出现 ACU 消耗很高的会话,把它们一起分析以找出共同的根本原因: