Files
TARE-Learn/slidev/pages/day2/m3-hallucination.md
T
2026-06-12 18:25:01 +08:00

213 lines
6.5 KiB
Markdown

# 模块 3:若依场景中的幻觉死循环
<div class="mt-6 text-sm">
**常见表现:**
- AI 说所有接口都有权限校验 → 但不给 Controller 依据
- AI 说操作日志完整 → 但不给注解或 AOP 依据
- AI 说按钮权限安全 → 但只看到前端代码
</div>
<!--
在若依项目里,AI 很容易因为它“知道若依是权限系统”就过度自信。
它说所有接口都有权限校验,但不给 Controller 依据。
它说操作日志完整,但不给注解或 AOP 依据。
它说按钮权限安全,但只看到了前端按钮隐藏。
这就是需要切断的幻觉。
-->
---
# 幻觉控制顺序
<div class="grid grid-cols-3 gap-4 mt-10">
<div class="text-center p-6 rounded-xl bg-blue-500/10 border border-blue-500/30">
<div class="text-2xl mb-2">1️⃣</div>
<div class="font-bold">先找证据</div>
</div>
<div class="text-center p-6 rounded-xl bg-emerald-500/10 border border-emerald-500/30">
<div class="text-2xl mb-2">2️⃣</div>
<div class="font-bold">再判断原因</div>
</div>
<div class="text-center p-6 rounded-xl bg-amber-500/10 border border-amber-500/30">
<div class="text-2xl mb-2">3️⃣</div>
<div class="font-bold">最后给方案</div>
</div>
</div>
<!--
遇到这种情况,不要继续让 AI 给结论。
先让它找证据:文件、类、方法、注解、调用关系。
然后再判断问题。
最后才给方案。
-->
---
# 证据矩阵:事实、推测、不确定
<div class="mt-5 text-sm">
| 类型 | 判断标准 | 输出写法 |
|---|---|---|
| 已确认事实 | 能指向文件、函数、注解、配置或测试结果 | “在 xxxController#remove 看到 @PreAuthorize...” |
| 合理推测 | 有局部证据,但缺少完整链路 | “可能依赖全局拦截器,仍需查看配置” |
| 无法确认 | 当前上下文没有证据 | “未引用到日志 AOP,暂不能判断是否记录日志” |
</div>
<div class="mt-4 p-3 rounded-xl bg-red-500/10 border border-red-500/30 text-sm">
<strong>课堂红线:</strong>没有证据时,禁止写“已完成”“一定安全”“肯定没有问题”。
</div>
<!--
幻觉控制的关键,是让 AI 学会把事实、推测和无法确认分开。
只要能指向文件、函数、注解或配置,才叫事实。
有部分依据但链路不完整,只能叫推测。
上下文里没有看到,就必须写无法确认。
-->
---
# 若依证据收集 Prompt
<div class="mt-4 p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm">
```
请先不要修改代码。请围绕"用户管理删除按钮权限"收集证据:
1. 前端按钮在哪个页面
2. 使用了哪个权限字符
3. 前端如何判断按钮显示
4. 后端删除接口在哪里
5. Controller 是否有权限注解
6. 是否记录操作日志
7. 无法确认的内容
```
</div>
<!--
这是若依场景下的证据收集 Prompt。
它没有直接问“有没有风险”,而是先要求 AI 找证据。
前端按钮在哪里,权限字符是什么,前端怎么判断,后端删除接口在哪里,Controller 是否有权限注解,是否记录操作日志,哪些无法确认。
这些证据收集完,才能判断风险。
-->
---
# 证据表输出模板
<div class="mt-4 p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm">
```md
| 审查项 | 证据位置 | 证据内容 | 结论等级 | 不确定点 |
|---|---|---|---|---|
| 前端删除按钮 | 文件 + 行为 | 权限字符/显示条件 | 已确认/推测/未知 | 需要补充什么 |
| 后端删除接口 | Controller + 方法 | 请求路径/权限注解 | 已确认/推测/未知 | 需要补充什么 |
| 操作日志 | 注解/AOP/配置 | 日志类型/触发条件 | 已确认/推测/未知 | 需要补充什么 |
| 验证方式 | 测试步骤 | 账号/操作/预期结果 | 已确认/待执行 | 需要谁确认 |
```
</div>
<!--
这是建议学员要求 TRAE 输出的表格。
表格让证据可复查,也方便讲师点评。
如果某一列空白,就说明 AI 还没有真正完成证据审查。
-->
---
# 原因判断 Prompt
<div class="mt-4 p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-sm">
```
请基于证据判断风险:
- 每个风险必须对应文件、函数或注解
- 区分已确认事实和推测
- 无法确认的内容写入不确定点
- 不要直接下安全结论
```
</div>
<!--
第二步是原因判断。
比如发现前端按钮有权限字符,但后端删除接口没有找到权限注解。
这时可以说“存在接口级权限待确认风险”,但不能直接说“系统不安全”。
如果没有看到后端文件,也要写无法确认,而不是猜测。
-->
---
# 追问模板:把 AI 拉回证据
<div class="mt-4 p-4 rounded-xl bg-red-500/10 border border-red-500/30 text-sm">
```md
你刚才的结论缺少代码依据。
请重新输出:
1. 每条结论对应的文件路径和函数/注解
2. 哪些是已确认事实,哪些只是推测
3. 哪些文件还需要我补充引用
4. 在证据不足前不要给最终安全结论
```
</div>
<!--
当 AI 开始空泛总结时,不要继续追问“那怎么改”。
先用这个追问模板把它拉回证据。
这也是团队 rules 里应该写进去的一条:证据不足时,必须先请求补充上下文。
-->
---
# 方案生成 Prompt
<div class="mt-4 p-4 rounded-xl bg-amber-500/10 border border-amber-500/30 text-sm">
```
请基于已确认风险给出方案:
修改文件 · 修改方法 · 新增或调整权限注解 ·
是否需要操作日志 · 影响范围 · 验证方式 · 测试建议
```
</div>
<!--
第三步才给方案。
如果确认证据显示后端接口缺少权限注解,才建议补权限注解。
如果敏感操作缺少日志,才建议补操作日志。
每个方案都要说明文件、方法、影响范围、验证方式和测试建议。
-->
---
# 幻觉控制验收
<div class="grid grid-cols-2 gap-4 mt-6 text-sm">
<div class="p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30">
<div class="font-bold mb-2">通过</div>
- 结论能追溯到文件/函数/注解
- 风险分为事实、推测、未知
- 修改建议包含影响范围
- 验证步骤能被人工执行
</div>
<div class="p-4 rounded-xl bg-red-500/10 border border-red-500/30">
<div class="font-bold mb-2">不通过</div>
- 只有“建议加强权限”这类空话
- 把前端按钮隐藏当安全边界
- 看不到后端代码却断言接口安全
- 没有无权限账号验证步骤
</div>
</div>
<!--
第三模块结束时,学员应该知道什么叫“靠谱的 AI 输出”。
不是文字长,而是能追溯、能区分不确定、能执行验证。
-->