job51-gitlab-cr-node-jt-1 2.8.6 → 2.8.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,7 +4,13 @@
4
4
 
5
5
  **⚠️ 最高优先级强制规则(违反将导致严重误报)**:
6
6
 
7
- 0. **「已安全处理」代码禁止报告**(关键规则):
7
+ 0. **文件路径必须保持原样**(关键规则,防止AI幻觉):
8
+ > - **LINE_INFO 中的 `new_path` 和 `old_path` 必须与 diff 块的实际路径完全一致,不得修改任何字符**
9
+ > - **严禁AI"纠正"或"规范化"文件路径命名**:连字符、下划线、点号等所有字符必须保持原样
10
+ > - **路径格式错误将导致评论无法发布到正确位置,被判定为AI幻觉并跳过发布**
11
+ > - **验证方法**:输出 LINE_INFO 前,必须检查路径是否与临时文件元数据中的路径字段完全匹配
12
+
13
+ 1. **「已安全处理」代码禁止报告**(关键规则):
8
14
  > - **如果代码已正确处理潜在风险(如已判空、已捕获异常、已有边界检查),则绝对禁止报告该问题**
9
15
  > - **如果分析结论包含"逻辑正确"、"无需修改"、"已有 XX 保护"、"符合安全编码规范"、"已正确处理该场景"等描述,必须省略该问题,不得输出报告**
10
16
  > - **示例**:判空检查后再进行值比较的逻辑(如:先检查对象非空,再访问其属性)— 已判空后再操作,是安全编码,**禁止报告任何问题**
@@ -1,9 +1,9 @@
1
1
  # GitLab Code Review AI Tool 技术文档
2
2
 
3
3
  **项目名称**: job51-gitlab-cr-node
4
- **当前版本**: 2.8.3
4
+ **当前版本**: 2.8.7
5
5
  **作者**: tao.jing
6
- **最后更新**: 2026-04-23
6
+ **最后更新**: 2026-04-28
7
7
  **项目地址**: https://gitdev.51job.com/51jobweb/ai-agent
8
8
 
9
9
  ---
@@ -27,6 +27,35 @@
27
27
 
28
28
  ## 版本历史
29
29
 
30
+ ### v2.8.4 (2026-04-28)
31
+
32
+ **当前版本**: AI 幻觉检测功能新增
33
+
34
+ **新增功能**:
35
+ - **AI 幻觉检测与过滤**:在评论发布前检测 AI 返回的文件路径是否匹配当前 diff 块,防止幻觉问题误导用户
36
+ - 问题现象:AI 在生成报告时可能编造错误的文件路径(如使用 `bms` 而非正确的 `bbs` 模块路径),导致评论指向错误文件
37
+ - 根本原因:规则文件中的示例代码包含真实的类名/路径,AI 在生成报告时可能"借用"这些示例内容,产生路径幻觉
38
+ - 修复方案:
39
+ - 在 `postSingleCommentToGitLab` 方法中新增文件路径匹配验证(第859-864行)
40
+ - 当 AI 返回的文件路径与当前 diff 块不匹配时,立即用 `console.warn` 输出警告信息
41
+ - 使用 `continue` 直接跳过该问题,**完全不发布任何评论**
42
+ - 移除原有的"降级为一般讨论"逻辑,避免幻觉问题误导用户
43
+ - 检测逻辑:
44
+ ```javascript
45
+ // 验证文件路径是否匹配当前 diff 块(检测AI幻觉)
46
+ if (problemInfo.new_path && diff_info.new_path &&
47
+ problemInfo.new_path !== diff_info.new_path) {
48
+ console.warn(`⚠️ 检测到AI幻觉:第 ${i + 1} 个问题的文件路径 ${problemInfo.new_path} 与当前 diff 块文件 ${diff_info.new_path} 不匹配,跳过该问题的评论发布`);
49
+ continue; // 直接跳过,不发布评论
50
+ }
51
+ ```
52
+ - 影响:
53
+ - 幻觉问题的评论不再发布到 GitLab MR,避免用户看到错误信息
54
+ - 提高审查准确性,避免错误路径导致的误导
55
+ - 减少无效评论,提升用户体验
56
+ - 新增文件:
57
+ - `index.js:859-864`:新增 AI 幻觉检测逻辑
58
+
30
59
  ### v2.8.3 (2026-04-23)
31
60
 
32
61
  **当前版本**: 评论发布功能修复
@@ -648,12 +677,15 @@ getDiffBlocks(diffObj) {
648
677
  │ │ for (let i = 0; i < allLineInfo.length; i++) │ │
649
678
  │ │ a. 提取单个问题报告内容 │ │
650
679
  │ │ singleProblemContent = extractSingleProblemReport(i + 1) │ │
651
- │ │ b. 构建目标行号 │ │
680
+ │ │ b. AI 幻觉检测 (v2.8.4) │ │
681
+ │ │ - 验证文件路径是否匹配当前 diff 块 │ │
682
+ │ │ - 不匹配时输出警告并跳过该问题 │ │
683
+ │ │ c. 构建目标行号 │ │
652
684
  │ │ - 删除代码:使用 old_line + old_path │ │
653
685
  │ │ - 新增/上下文:使用 new_line + new_path │ │
654
- │ │ c. 行号范围验证 (v2.4.10) │ │
655
- │ │ d. 发布评论到对应行 │ │
656
- │ │ e. GitLab API 失败降级为一般讨论 │ │
686
+ │ │ d. 行号范围验证 (v2.4.10) │ │
687
+ │ │ e. 发布评论到对应行 │ │
688
+ │ │ f. GitLab API 失败降级为一般讨论 │ │
657
689
  │ └───────────────────────────────────────────────────────────────────┘ │
658
690
  │ ↓ │
659
691
  │ 步骤 4: 所有评论发布完成 │
@@ -1228,7 +1260,37 @@ POST /projects/{projectId}/merge_requests/{iid}/notes
1228
1260
 
1229
1261
  ## 10. 错误处理与容错机制
1230
1262
 
1231
- ### 10.1 AI 审查失败处理
1263
+ ### 10.1 AI 幻觉检测与过滤 (v2.8.4)
1264
+
1265
+ **幻觉问题表现**:
1266
+ - AI 在生成审查报告时可能编造错误的文件路径
1267
+ - 例如:问题应该指向 `bbs` 模块,但 AI 返回的路径却指向 `bms` 模块
1268
+ - 根因:规则文件中的示例代码包含真实路径,AI 可能"借用"这些示例内容
1269
+
1270
+ **检测逻辑**:
1271
+ ```javascript
1272
+ // 验证文件路径是否匹配当前 diff 块(检测AI幻觉)
1273
+ if (problemInfo.new_path && diff_info.new_path &&
1274
+ problemInfo.new_path !== diff_info.new_path) {
1275
+ console.warn(`⚠️ 检测到AI幻觉:第 ${i + 1} 个问题的文件路径 ${problemInfo.new_path} 与当前 diff 块文件 ${diff_info.new_path} 不匹配,跳过该问题的评论发布`);
1276
+ continue; // 直接跳过,不发布评论
1277
+ }
1278
+ ```
1279
+
1280
+ **处理策略**:
1281
+ | 检测到幻觉时 | 处理动作 | 结果 |
1282
+ |------------|----------|------|
1283
+ | 文件路径不匹配 | 输出警告日志 + `continue`跳过 | **不发布评论**,避免误导 |
1284
+ | 行号超出范围 | 降级为一般讨论 | 发布到 MR(无行号定位) |
1285
+ | GitLab API失败 | 降级为一般讨论 | 确保评论可见 |
1286
+
1287
+ **效果**:
1288
+ - ✅ 防止错误路径的评论发布
1289
+ - ✅ 提高审查准确性
1290
+ - ✅ 减少无效评论
1291
+ - ✅ 提升用户信任度
1292
+
1293
+ ### 10.2 AI 审查失败处理
1232
1294
 
1233
1295
  ```javascript
1234
1296
  try {
@@ -1411,6 +1473,7 @@ npm run dev
1411
1473
 
1412
1474
  | 版本 | 日期 | 变更说明 |
1413
1475
  |------|------|----------|
1476
+ | **2.8.4** | 2026-04-28 | **AI 幻觉检测功能新增**:在 `postSingleCommentToGitLab` 方法中新增文件路径匹配验证,检测 AI 返回的文件路径是否与当前 diff 块匹配;当检测到幻觉时输出警告并跳过该问题,不发布评论;移除原有的"降级为一般讨论"逻辑;影响:防止错误路径的评论发布,提高审查准确性;新增代码:`index.js:859-864` |
1414
1477
  | **2.8.3** | 2026-04-23 | **GitLab 评论 API 兼容性修复**:将汇总报告发布从 Discussions API 改为 Notes API,避免权限问题;移除 `resolvable` 参数,使用普通注释类型发布;影响:汇总报告不再显示 resolve 按钮,评论类型统一为普通注释,提高 API 兼容性;修复文件:`index.js:987-1011` |
1415
1478
  | **2.8.2** | 2026-04-22 | **版本号同步**:更新 package.json 版本号到 2.8.2 |
1416
1479
  | **2.8.1** | 2026-04-22 | **汇总报告评论 Resolve 问题修复**:为汇总报告评论设置 `resolvable: false`,避免用户误操作导致报告消失;影响:汇总报告永久保留在 MR 讨论区;修复文件:`index.js:988-1010` |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "job51-gitlab-cr-node-jt-1",
3
- "version": "2.8.6",
3
+ "version": "2.8.8",
4
4
  "description": "GitLab merge request code review tool with AI-powered analysis and project context support",
5
5
  "main": "index.js",
6
6
  "bin": {