feat: 基于 Skills + 沙箱 + 数据库的自动代码评审 Agent (#92)#200
Conversation
- replay harness: 同一组轨迹驱动 InMemory/SQLite/Redis,比较事件/state/memory/summary - 归一化(占位符,保留字段存在性)+ JSONPath 精确 allowed_diff + 覆盖率治理 - summary: SDK 确定性模型 + 三分比较 + loss/overwrite/affiliation 检测 - 检出验证: 快照层注入 + 端到端后端注入(改 SQL 行 / Redis key 重读) - 实测发现 SQLite summary 持久化 drift,标 KNOWN_DRIFT 只报告不改 - 29 tests pass, 1 skipped (Redis 需 TRPC_REPLAY_REDIS_URL)
构建「评测→失败归因→prompt优化→验证集回归→接受决策→审计落盘」可复现闭环: - 分层失败归因(规则快通道 + 反事实深归因,本地 metric 零成本) - 过拟合三重检测(显式公式 + 泛化缺口 + 趋势背离) - 可配置 gate(三态 accept/reject/needs_review) - sha256 审计 + 三态成本 fail-closed - fake/trace/online 三模式,fake 无 API key 可跑通(<1s),9 pytest 全过
端到端 CR Agent: 输入解析 → 规则(正则 + AST/taint) → LLM 增强(降噪 + 补召回) → 四元组去重 → Filter 前置 → 沙箱(fake/local/container/cube) → 脱敏 → SQLite 七表落库 → JSON/MD/SARIF 报告 - examples/skills_code_review_agent/: 完整 example(agent/storage/sandbox/filters/fixtures/tests + CLI + evaluate) - skills/code-review/: Skill 包(SKILL.md + 6 类规则 + 沙箱脚本) - 创新 1 LLM 增强: 降噪(findings 桶误报 0.0) + 补召回(召回 0.895) - 量化评测: 公开 8 + 隐藏 12 fixture, 实例级 P/R/F1 - .gitignore: 加 .env 防御(trpc-group#90 教训) Closes trpc-group#92
AI Code Review现在我已经获取了足够的信息,让我来撰写评审意见。 发现的问题🚨 Critical
|
|
|
||
| if verdict: | ||
| # 如果被标记为 false_positive,跳过(剔除误报) | ||
| if verdict.get("verdict") == "false_positive": |
There was a problem hiding this comment.
LLM 真模式降噪判定值与提示词不一致,误报无法剔除
DENOISING_PROMPT 要求 LLM 返回 "verdict":"TP|FP",但 _apply_verdicts 仅在 verdict=="false_positive" 时剔除。真 LLM 返回 "FP" 不会被识别,所有误报原样保留并提升置信度,降噪形同虚设。建议统一判定值,让 _apply_verdicts 同时识别 "FP"。
| duration_ms=duration_ms, | ||
| ) | ||
|
|
||
| except Exception as e: |
There was a problem hiding this comment.
Cube 沙箱超时分支永远捕获不到,超时被误判为 failed
subprocess.run 超时抛 subprocess.TimeoutExpired(非 TimeoutError 子类),会被第 124 行通用 except Exception 接住返回 status=failed 而非 timeout。建议将 except subprocess.TimeoutExpired 放在通用 except Exception 之前,与 LocalSandbox 一致。
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #200 +/- ##
==========================================
Coverage ? 87.55867%
==========================================
Files ? 467
Lines ? 44103
Branches ? 0
==========================================
Hits ? 38616
Misses ? 5487
Partials ? 0 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…trpc-group#92) 修复 PR trpc-group#200 reviewer(CongkeChen)发现的 Critical bug: - DENOISING_PROMPT 要求 LLM 返回 "verdict":"TP|FP"(TP=真问题, FP=误报) - 原 _apply_verdicts 只在 verdict == "false_positive" 时剔除 - 真 LLM 返回 "FP" 不匹配 "false_positive" → 降噪失效 - 现在兼容多种格式:FP, false_positive, false positive, False Positive, 误报 新增测试:test_real_mode_fp_verdict_compatibility() 验证真 LLM 返回 "FP" 格式时正确剔除误报
…c-group#200 review) - Critical 2: 修复 Cube 沙箱超时异常捕获,优先捕获 subprocess.TimeoutExpired - 隐患1: 修复 Filter 预算 off-by-one,call_index >= max_sandbox_runs 时 deny - 隐患2: 修复 Filter 子串误匹配,路径使用边界匹配避免 .environment 命中 .env - 隐患3: 修复沙箱脚本未落盘,pipeline 在执行前把脚本复制到 workspace - 隐患4: 修复存储 save 与 start_task 断链,pipeline 在开始时调用 start_task - 补充严格测试:Cube 超时断言 status==timeout、Filter off-by-one 和边界匹配测试
|
@CongkeChen 感谢详细精准的 review!两个 Critical 与稳定性隐患均已修复。 另说明:原 PR #200 的 head 分支误含了其他 issue 的提交,已基于 main 重建干净分支 feat/code-review-agent-92-clean(仅含本 issue 改动,基于 main,测试独立通过)。新 PR 将用此分支。 Critical 修复 LLM 降噪 verdict 不一致(llm_layer.py _apply_verdicts):normalize 后兼容 false_positive/FP/false/误报(c547448)。补充了真模式返回 "FP" 的测试——此前只测 false_positive 才漏掉,正是您指出的关键。 Filter 预算 off-by-one:> → >= |
概述
实现一个端到端、可验证的自动代码评审 Agent 原型。输入 git diff / 文件列表 / git 工作区变更,Agent 通过 code-review Skill 加载规则与脚本,经 Filter 治理后进入沙箱执行必要检查,把发现的问题按严重级别 / 文件 / 行号 / 证据 / 修复建议结构化输出,并将审查任务、拦截记录、监控摘要与结果写入 SQLite。
核心设计取舍:确定性规则保检出下限 + LLM 提准确率上限。规则层(正则 + AST/taint + 外部扫描器)保证 dry-run 可跑、可测;LLM 层做降噪(剔除误报)与补召回(补语义问题),可降级、可关闭。
架构
关键设计 / 创新点
(file, line, category, rule_id)保留同类不同子问题的证据(优于三元组)。SECRET_KV_KEYS单一真相源),杜绝“检出未脱 / 脱了未检”。验收对照(issue #92 八条)
evaluate.py跑全部 fixture,生成 JSON/MD/SARIFget_task_details聚合BaseFilter._before短路 + pipeline allow 才进沙箱使用方法
测试
pytest tests/ -v:187 项全通过python evaluate.py:量化评测yapf+flake8(max-line-length=120)全绿文件结构
examples/skills_code_review_agent/:agent(pipeline/rule_engine/ast_analyzer/redaction/dedup/llm_layer/report/telemetry)/ storage(七表+迁移)/ sandbox(四后端)/ filters / fixtures(8公开+12隐藏)/ tests / CLI + evaluate + READMEskills/code-review/:SKILL.md + 6 类规则 + 沙箱脚本Closes #92