---
title: "3.6.1 AI 常见的\"不听话\"表现"
---


![03-technique_3.6-debugging-ai_3.6.1-common-issues.png](/images/Basic/03-technique_3.6-debugging-ai_3.6.1-common-issues.png)
# 3.6.1 AI 常见的「不听话」表现

## 经过本节学习，你将掌握

- 识别 AI 输出问题的六种常见类型
- 理解 AI 幻觉的四种形态及其危害
- 了解 2024-2025 年新兴的「Slopsquatting」安全威胁
- 获得一份实用的验证技巧速查表

## 六种常见问题类型

AI 的「不听话」表现看似五花八门，但归纳起来主要有六种类型：

| 类型 | 症状 | 典型案例 |
|-----|------|---------|
| **答非所问** | AI 理解错了你的意图 | 你要登录页，它给了注册页 |
| **过度发挥** | 做了你没要求的事情 | 你要简单时钟，它给了带时区切换的全功能版 |
| **偷工减料** | 少做了关键部分 | 没有错误处理，缺少边界检查 |
| **自相矛盾** | 前后逻辑不一致 | 注释说「返回数组」，代码实际返回对象 |
| **幻觉** | 编造不存在的内容 | 推荐不存在的库，调用不存在的 API |
| **死循环** | 反复犯同一个错误 | 你指出问题，它改了，下次又改回去 |

### 类型一：答非所问

**场景**：你让 AI 做一个「用户登录功能」，它却给了你完整的「用户注册 + 登录 + 找回密码」三件套。

**为什么会这样**：AI 基于大量训练数据进行模式匹配，当它看到「登录」这个词时，会联想到常见的用户认证系统，然后「好心」地给你全套方案。

**识别信号**：
- 输出的内容比你要的多很多
- 包含了你没提到的功能模块
- AI 在解释时说「我假设你还需要...」

### 类型二：过度发挥

**场景**：你只想要一个显示当前时间的简单组件，AI 却加上了时区选择、12/24 小时切换、自定义格式等功能。

**为什么会这样**：AI 见过太多「完整」的解决方案，倾向于给出「全面」的实现，即使你只需要最简单的版本。

**识别信号**：
- 代码量远超预期
- 引入了你不认识的第三方库
- 包含大量你不需要的配置选项

### 类型三：偷工减料

**场景**：AI 给的代码能跑，但没有处理「用户输入为空」「网络请求失败」等异常情况。

**为什么会这样**：为了让代码看起来简洁，或者因为你没有明确要求，AI 省略了防御性代码。

**识别信号**：
- 代码中没有 try-catch 或错误处理
- 没有输入验证
- 「Happy Path」（理想路径）能跑，边界情况会崩

### 类型四：自相矛盾

**场景**：AI 说「这个函数返回用户列表」，但实际代码返回的是单个用户对象。

**为什么会这样**：AI 生成注释和生成代码是相对独立的过程，有时会出现不同步。

**识别信号**：
- 注释与代码行为不符
- 函数名暗示的功能与实际实现不一致
- 前面说的方案和后面的代码不匹配

### 类型五：幻觉（重点）

这是最危险的问题类型，下面会详细展开。

### 类型六：死循环

**场景**：你指出代码有问题，AI 修改后，下一轮又改回了原来的写法。

**为什么会这样**：
- 对话上下文太长，早期的修正内容被挤出上下文窗口，AI 无法看到
- 你的修正指令不够明确
- 任务本身超出了 AI 的能力范围

**识别信号**：
- 同样的错误反复出现
- AI 的修改越来越「绕」
- 修一个问题引入两个新问题

## 重点：AI 幻觉的识别与应对

AI 幻觉（Hallucination）是指 AI 生成**看起来正确但实际错误**的内容。在编程场景中，这可能导致代码无法运行，甚至引入安全漏洞。

### 代码幻觉的四种类型

| 类型 | 表现 | 危害程度 | 示例 |
|------|------|---------|------|
| **包幻觉** | 推荐不存在的 npm/pip 包 | 🔴 高（安全风险） | `npm install super-easy-utils`（包不存在） |
| **API 幻觉** | 编造不存在的函数或方法 | 🟡 中 | 调用 `array.findLast()` 在旧版 JS 中不存在 |
| **逻辑幻觉** | 代码逻辑与描述不符 | 🟡 中 | 说「返回去重后的数组」，实际没有去重 |
| **版本幻觉** | 使用已废弃的语法或 API | 🟡 中 | 使用 React 旧版类组件生命周期 |

### 包幻觉：最危险的幻觉类型

为什么包幻觉的危害程度最高？因为它涉及到**软件供应链安全**。

**真实案例**：2024-2025 年的安全研究发现了一种名为「Slopsquatting」的攻击方式：

1. 研究人员测试了 16 种主流 AI 模型，发现它们推荐的包中约 **20% 是不存在的**
2. 更令人担忧的是，**43% 的幻觉包名会在多次询问中重复出现**
3. 攻击者可以注册这些 AI 经常「幻觉」出的包名，植入恶意代码
4. 当开发者按 AI 建议安装这些包时，就会中招

**攻击链条**：
```
AI 幻觉出包名 → 攻击者注册该包名 → 植入恶意代码 → 开发者按 AI 建议安装 → 系统被入侵
```

**真实威胁**：2024-2025 年间，安全研究人员发现了利用这种技术的恶意活动，攻击者通过注册 AI 幻觉出的包名，植入恶意代码，窃取开发者的 npm tokens、GitHub 凭证等敏感信息。

### API 幻觉：看起来对但跑不起来

**典型场景**：

```javascript
// AI 生成的代码
const lastItem = myArray.findLast(item => item.active);
```

问题：`findLast()` 是 ES2023 引入的方法，在旧版浏览器或 Node.js 中不可用。AI 可能混淆了不同版本的 API。

**常见的 API 幻觉模式**：
- 混淆不同库的 API（把 Lodash 的方法当成原生方法）
- 使用已废弃的 API
- 编造不存在的配置选项

### 逻辑幻觉：代码能跑但结果不对

**典型场景**：

你让 AI 写一个「去重函数」，它给了你：

```javascript
function removeDuplicates(arr) {
  // 去除数组中的重复元素
  return arr.filter((item, index) => arr.indexOf(item) === index);
}
```

代码看起来没问题，注释也对。但如果数组中包含对象，这个方法就失效了，因为对象比较的是引用而不是值。

### 版本幻觉：用的是「过时」的写法

**典型场景**：

你让 AI 用 React 写一个组件，它给了你类组件写法：

```javascript
class MyComponent extends React.Component {
  componentWillMount() {
    // ...
  }
}
```

问题：`componentWillMount` 在 React 16.3 后已被废弃，React 18 中会产生警告。

## 验证技巧速查表

面对 AI 生成的代码，用这份清单快速验证：

### 验证包是否存在

```bash
# npm 包
npm search <包名>
# 或直接访问 https://www.npmjs.com/package/<包名>

# Python 包
pip index versions <包名>
# 或直接访问 https://pypi.org/project/<包名>
```

### 验证 API 是否正确

1. **查阅官方文档**：不要只相信 AI 的解释
2. **检查兼容性**：使用 [caniuse.com](https://caniuse.com)（前端）或查看库的版本说明
3. **小范围测试**：先在独立环境跑一下，确认能用

### 要求 AI 提供来源

当 AI 推荐了你不熟悉的库或 API 时，追问：

```
请给出这个库的官方文档链接。
```

```
这个 API 是在哪个版本引入的？请给出参考来源。
```

如果 AI 无法给出有效链接，或者链接打开是 404，那很可能是幻觉。

### 验证逻辑正确性

1. **用边界情况测试**：空数组、空字符串、null、超大数值
2. **用反例测试**：故意输入「应该失败」的数据，看是否正确处理
3. **让 AI 自己检查**：
   ```
   请检查上面的代码，列出可能的边界情况和异常情况，以及当前代码是否正确处理了它们。
   ```

## 本节要点

✓ **六种问题类型**：答非所问、过度发挥、偷工减料、自相矛盾、幻觉、死循环

✓ **四种代码幻觉**：包幻觉（最危险）、API 幻觉、逻辑幻觉、版本幻觉

✓ **Slopsquatting 威胁**：攻击者利用 AI 幻觉的包名进行供应链攻击，20% 的 AI 推荐包可能不存在

✓ **验证习惯**：对 AI 推荐的包和 API，先验证再使用；对代码逻辑，用边界情况测试

识别问题只是第一步。下一节，我们来学习如何快速定位问题的根源。
