Superpowers(二):让 AI 编程助手从“能用“到“好用“

张开发
2026/4/13 18:32:14 15 分钟阅读

分享文章

Superpowers(二):让 AI 编程助手从“能用“到“好用“
Superpowers二让 AI 编程助手从能用到好用你的 AI 助手是不是也经常一本正经地胡说八道今天咱们聊聊怎么让它变得更靠谱。问题引入AI 编程助手的幻觉之痛最近在用 AI 助手写代码的时候我遇到了一个挺有意思的问题…假设你正在写一个复杂的业务逻辑让 AI 帮你生成一段代码。它刷刷刷给你写了一大段看起来有模有样变量命名规范、注释齐全、甚至还有一些优化。你心想这 AI 可以啊结果一运行报错了。再仔细看发现它用了一个根本不存在的 API。// AI 生成的看起来很对的代码publicvoidprocessOrder(Orderorder){// 使用 OrderProcessor 的 validateAndSave 方法OrderResultresultOrderProcessor.validateAndSave(order);// 问题OrderProcessor 类里根本没有 validateAndSave 这个方法if(result.isSuccess()){notifyUser(order.getUserId());}}这就是传说中的“AI 幻觉”—— 它自信满满地给你编了一个不存在的 API。更坑的是有时候它还会用过时的库版本给你已经废弃的方法忽略你项目的特定约束比如必须用公司内部的工具类生成的代码风格跟你的项目完全不搭问题来了怎么让 AI 助手更懂你的项目、更靠谱方案分析为什么 AI 会胡说八道我一开始想的是多给 AI 一些上下文不就行了但每次都要把项目背景说一遍太麻烦了。后来仔细分析发现核心问题有三个问题说明上下文缺失AI 不知道你项目的具体结构、约束、规范知识过时训练数据有截止日期新框架/新 API 不认识缺乏验证AI 生成代码后没法自己验证对不对看来得换个思路 ——给 AI 装上外挂。Superpowers 是什么Superpowers 是一个让 AI 编程助手变得更可靠、更专业的工具。说白了它给 AI 提供了三个核心能力项目感知让 AI 读懂你的项目结构、代码规范、业务约束实时知识打破训练数据的限制获取最新文档、API 信息工具调用让 AI 能执行命令、验证代码、获取反馈咱们一个个来看。核心能力一项目感知Project Awareness场景AI 读不懂你的项目假设你的项目有个内部规定所有数据库操作必须用公司封装的DbHelper不允许直接用 JDBC。但 AI 不知道啊它生成的代码可能是这样的// AI 默认生成的代码不符合规范publicListUsergetUsers(){ConnectionconnDriverManager.getConnection(url,user,password);Statementstmtconn.createStatement();ResultSetrsstmt.executeQuery(SELECT * FROM users);// ... 手动处理 ResultSet}Superpowers 的解决方案在项目根目录放一个AGENTS.md文件把项目的关键信息写进去# 项目规范说明 ## 数据库访问 - 必须使用 com.company.utils.DbHelper 进行所有数据库操作 - 禁止直接使用 JDBC 的 Connection、Statement ## 代码风格 - 使用 Google Java Style Guide - 所有 Service 类必须以 Service 结尾 - 所有异常必须包装为 BizExceptionAI 读取这个文件后生成的代码就变成了// AI 读取 AGENTS.md 后生成的代码符合规范publicListUsergetUsers(){// 使用公司封装的 DbHelperreturnDbHelper.queryList(SELECT * FROM users,User.class);}说白了AGENTS.md 就像是给 AI 写的一份入职指南告诉它在这个项目里该怎么干活。核心能力二实时知识Real-time Knowledge场景AI 的知识过时了你问 AI“Spring Boot 3.2 有什么新特性”如果它的训练数据截止到 2023 年初那它根本不知道 Spring Boot 3.2 的存在。它可能会告诉你 3.2 还没发布或者更危险的是瞎编一些特性Superpowers 的解决方案让 AI 能够实时搜索网络获取最新信息用户Spring Boot 3.2 的虚拟线程怎么配置 AI让我查一下最新文档... [调用搜索工具] → 获取 Spring Boot 3.2 官方文档 [分析结果] → 找到虚拟线程配置方式 回答 Spring Boot 3.2 开始支持虚拟线程配置很简单 yaml spring: threads: virtual: enabled: true或者在启动类上加EnableVirtualThreads注解…关键点在于**AI 不再依赖固定的训练数据而是能主动获取最新信息**。 --- ## 核心能力三工具调用Tool Use ### 场景AI 生成代码后没法验证 以前的工作流是这样的 1. 你让 AI 写代码 2. AI 给你一段代码 3. 你手动复制到 IDE 4. 编译运行发现报错 5. 把错误贴给 AI让它修改 6. 重复步骤 2-5... 效率太低了 ### Superpowers 的解决方案 让 AI 能直接调用工具自己验证代码用户帮我写一个计算斐波那契数列的函数AI好的我来写并验证一下…[步骤1生成代码]deffibonacci(n):ifn1:returnnreturnfibonacci(n-1)fibonacci(n-2)[步骤2调用代码执行工具验证]测试 fibonacci(10) 55… ✓测试 fibonacci(20) 6765… ✓[步骤3性能测试]发现递归版本在 n100 时很慢建议改为迭代版本deffibonacci(n):ifn1:returnn a,b0,1for_inrange(2,n1):a,bb,abreturnb验证通过看到区别了吗**AI 从只动嘴变成了能动手**自己写、自己测、自己优化。 --- ## 实战Superpowers 在项目中的应用 ### 场景排查一个诡异 Bug 假设你遇到一个问题线上服务偶尔报错 NullPointerException但本地复现不了。 **传统方式** 1. 到处加日志 2. 重新部署 3. 等待下次报错 4. 分析日志... **用 Superpowers**用户帮我排查这个 NullPointerExceptionAI让我分析一下…[步骤1读取项目结构]发现这是一个 Spring Boot 项目使用了 MyBatis 作为 ORM 框架[步骤2分析报错堆栈]定位到 UserService.java:45 行发现是从缓存获取数据后没有判空[步骤3查看相关代码]// 问题代码publicUsergetUser(Longid){Userusercache.get(id);// 缓存可能返回 nullreturnuser.getName();// 这里 NPE}[步骤4修复建议]publicUsergetUser(Longid){Userusercache.get(id);if(usernull){useruserMapper.selectById(id);cache.put(id,user);}returnuser!null?user.getName():null;}问题原因缓存过期时返回 null代码没有处理这种情况。整个过程 AI 主动完成了**读代码 → 分析 → 定位 → 修复**你只需要确认方案就行。 --- ## 踩坑记录使用 Superpowers 的注意事项 当然这个工具也不是万能的我踩过几个坑 ### 坑1AGENTS.md 写得太啰嗦 一开始我把项目所有细节都写进去结果 AI 反而看晕了抓不住重点。 **解决方案** - 只写关键约束必须做什么、禁止做什么 - 用列表形式不要大段文字 - 定期更新移除过时的规则 ### 坑2过度依赖实时搜索 有时候 AI 搜索到一些不太权威的信息比如某博客的过时文章反而给出错误答案。 **解决方案** - 优先使用官方文档 - 交叉验证多个来源 - 对关键信息保持怀疑 ### 坑3工具调用权限过大 如果给 AI 的权限太大比如能直接执行 rm -rf那风险就高了。 **解决方案** - 只开放必要的工具 - 敏感操作需要确认 - 在沙箱环境中运行 --- ## 总结 Superpowers 本质上是在解决 AI 编程助手的三个短板 1. **上下文不足** → 用 AGENTS.md 给 AI 项目背景 2. **知识过时** → 用实时搜索获取最新信息 3. **无法验证** → 用工具调用自己测试代码 用了 Superpowers 之后我的感受是 - AI 生成的代码更贴合项目规范了 - 遇到新技术时AI 能给出准确的最新信息 - 排查问题的效率提升了不少 当然**AI 还是辅助工具最终的判断和决策还是要靠人**。但有了 Superpowers至少它从猪队友升级成了靠谱的搭档。 --- ## 互动时间 你在用 AI 编程助手时遇到过什么坑有没有被 AI 一本正经地胡说八道 坑过的经历欢迎在评论区分享 另外如果你已经在用类似的工具比如 Cursor、GitHub Copilot Chat觉得体验怎么样咱们一起交流交流 ---

更多文章