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

你的 AI 助手是不是也经常"一本正经地胡说八道"?今天咱们聊聊怎么让它变得更靠谱。


问题引入:AI 编程助手的"幻觉"之痛

最近在用 AI 助手写代码的时候,我遇到了一个挺有意思的问题…

假设你正在写一个复杂的业务逻辑,让 AI 帮你生成一段代码。它刷刷刷给你写了一大段,看起来有模有样,变量命名规范、注释齐全、甚至还有一些"优化"。你心想:这 AI 可以啊!

结果一运行,报错了。再仔细看,发现它用了一个根本不存在的 API

// AI 生成的"看起来很对"的代码
public void processOrder(Order order) {
    // 使用 OrderProcessor 的 validateAndSave 方法
    OrderResult result = OrderProcessor.validateAndSave(order);
    // 问题:OrderProcessor 类里根本没有 validateAndSave 这个方法!
    if (result.isSuccess()) {
        notifyUser(order.getUserId());
    }
}

这就是传说中的 “AI 幻觉” —— 它自信满满地给你编了一个不存在的 API。更坑的是,有时候它还会:

  • 用过时的库版本,给你已经废弃的方法
  • 忽略你项目的特定约束(比如必须用公司内部的工具类)
  • 生成的代码风格跟你的项目完全不搭

问题来了:怎么让 AI 助手更懂你的项目、更靠谱?


方案分析:为什么 AI 会"胡说八道"

我一开始想的是,多给 AI 一些上下文不就行了?但每次都要把项目背景说一遍,太麻烦了。

后来仔细分析,发现核心问题有三个:

问题 说明
上下文缺失 AI 不知道你项目的具体结构、约束、规范
知识过时 训练数据有截止日期,新框架/新 API 不认识
缺乏验证 AI 生成代码后,没法自己验证对不对

看来得换个思路 —— 给 AI 装上"外挂"


Superpowers 是什么

Superpowers 是一个让 AI 编程助手变得更可靠、更专业的工具。说白了,它给 AI 提供了三个核心能力:

  1. 项目感知:让 AI 读懂你的项目结构、代码规范、业务约束
  2. 实时知识:打破训练数据的限制,获取最新文档、API 信息
  3. 工具调用:让 AI 能执行命令、验证代码、获取反馈

咱们一个个来看。


核心能力一:项目感知(Project Awareness)

场景:AI 读不懂你的项目

假设你的项目有个内部规定:所有数据库操作必须用公司封装的 DbHelper,不允许直接用 JDBC。但 AI 不知道啊,它生成的代码可能是这样的:

// AI 默认生成的代码(不符合规范)
public List<User> getUsers() {
    Connection conn = DriverManager.getConnection(url, user, password);
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT * FROM users");
    // ... 手动处理 ResultSet
}

Superpowers 的解决方案

在项目根目录放一个 AGENTS.md 文件,把项目的关键信息写进去:

# 项目规范说明

## 数据库访问
- 必须使用 `com.company.utils.DbHelper` 进行所有数据库操作
- 禁止直接使用 JDBC 的 Connection、Statement

## 代码风格
- 使用 Google Java Style Guide
- 所有 Service 类必须以 `Service` 结尾
- 所有异常必须包装为 `BizException`

AI 读取这个文件后,生成的代码就变成了:

// AI 读取 AGENTS.md 后生成的代码(符合规范)
public List<User> getUsers() {
    // 使用公司封装的 DbHelper
    return DbHelper.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:生成代码]

def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

[步骤2:调用代码执行工具验证]
测试 fibonacci(10) = 55… ✓
测试 fibonacci(20) = 6765… ✓

[步骤3:性能测试]
发现递归版本在 n=100 时很慢,建议改为迭代版本:

def fibonacci(n):
    if n <= 1:
        return n
    a, b = 0, 1
    for _ in range(2, n + 1):
        a, b = b, a + b
    return b

验证通过!


看到区别了吗?**AI 从"只动嘴"变成了"能动手"**,自己写、自己测、自己优化。

---

## 实战:Superpowers 在项目中的应用

### 场景:排查一个诡异 Bug

假设你遇到一个问题:线上服务偶尔报错 `NullPointerException`,但本地复现不了。

**传统方式**:
1. 到处加日志
2. 重新部署
3. 等待下次报错
4. 分析日志...

**用 Superpowers**:

用户:帮我排查这个 NullPointerException

AI:让我分析一下…

[步骤1:读取项目结构]

  • 发现这是一个 Spring Boot 项目
  • 使用了 MyBatis 作为 ORM 框架

[步骤2:分析报错堆栈]

  • 定位到 UserService.java:45 行
  • 发现是从缓存获取数据后没有判空

[步骤3:查看相关代码]

// 问题代码
public User getUser(Long id) {
    User user = cache.get(id);  // 缓存可能返回 null
    return user.getName();      // 这里 NPE!
}

[步骤4:修复建议]

public User getUser(Long id) {
    User user = cache.get(id);
    if (user == null) {
        user = userMapper.selectById(id);
        cache.put(id, user);
    }
    return user != null ? user.getName() : null;
}

问题原因:缓存过期时返回 null,代码没有处理这种情况。


整个过程 AI 主动完成了:**读代码 → 分析 → 定位 → 修复**,你只需要确认方案就行。

---

## 踩坑记录:使用 Superpowers 的注意事项

当然,这个工具也不是万能的,我踩过几个坑:

### 坑1:AGENTS.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),觉得体验怎么样?咱们一起交流交流~

---

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐