Hermes vs OpenCode 代码审计能力对比

分析日期: 2026-06-05|基于 kc-portfolio-algo-v251210 组合算法项目审计任务的实际对比


背景

使用同模型(deepseek-v4-flash)同算力(本地 V100)分别运行 opencode 全自动编程Hermes 私人助理 对 kc-portfolio-algo-v251210 项目进行代码审计,评分差距巨大:

工具审计评分
OpenCode70+ 分
Hermes~15 分

根因分析

一、代码加载方式(贡献 35%)

维度OpenCodeHermes
代码摄入批量加载整个项目所有 .py 文件到上下文逐文件工具调用(read_file + search_files)
上下文连贯性全库在同一个代际上下文中,跨文件引用可一次分析文件间跳转需等工具返回,跨文件关系被冲淡
文件数量影响10 个文件 = 100 个文件,批量加载无差别20+ 文件需多次 read_file,读不完就开始总结

二、任务分解——根本差距(贡献 40%)

OpenCode 的 SDD 流程(项目 STD.md 中定义):

Understand → Spec → Test → Code → Review

分析代码前先理解架构,再系统化逐一检查每个模块:输入格式、边界条件、错误处理、性能瓶颈。每阶段产出一份结构化文档。

Hermes 的默认行为:

用户要求分析 → 打开几个关键文件 → 凭印象写总结

没有阶段化分解、没有检查清单、没有逐模块覆盖。从历史 trace 看,重构 PortBacktest 的 Trilium 笔记时:✅ 画了 ASCII 流程图 → ✅ 整理了参数表 → ✅ 列出优化项 → ❌ 未逐行审查代码逻辑 → ❌ 未发现硬编码问题 → ❌ 未检查错误处理 → ❌ 未交叉引用问题

三、审计深度(贡献 15%)

OpenCode 会做:

  • 逐函数签名检查:参数类型、返回值、None 路径
  • 数据流追踪:asset → asset_matrix → _asset,每一步 shape 一致性
  • 错误路径枚举:calc_chip_floor_left() 返回 NaN 的影响链
  • 性能分析:循环向量化可行性、pandas 操作优化
  • 代码异味检测:硬编码常量(保证金=1、手续费=0)、魔法数值
  • 输出结构化报告:问题清单 + 严重级别 + 代码定位 + 修复建议

Hermes 实际产出(从 trace 看):

  • ✅ 画了几个 ASCII 流程图
  • ✅ 整理了参数表格
  • ✅ 列出了优化项
  • ❌ 没有逐行审查代码逻辑
  • ❌ 没有发现硬编码问题
  • ❌ 没有检查错误处理
  • ❌ 没有交叉引用问题

四、工具链副作用(贡献 10%)

Hermes 的 read_file / search_files / terminal 工具链在代码审计场景下是负面资产——每次工具调用都刷新上下文窗口,打断连续推理链。而 OpenCode 直接通过 Go SDK 批量读取文件系统,无中间工具调用开销。


根因归因

原因贡献占比
OpenCode 全量加载代码(vs Hermes 逐文件工具调用)35%
OpenCode SDD 流程化审计(vs Hermes 无检查清单)40%
Hermes 工具调用碎片化打断推理链15%
Hermes 无代码审计专用模式/Skill10%

改进方向

要让 Hermes 达到接近 OpenCode 的代码审计质量,需要:

  1. 为审计编写专用 Skill:强制分阶段执行(全量加载 → 清单检查 → 逐模块覆盖 → 结构化输出),不让 AI 自由发挥
  2. 批量代码加载机制:增加一次性读取整个项目目录树的能力,减少逐文件工具调用
  3. 审计检查清单模板:函数签名、数据流、错误处理、性能热点、代码异味,逐项强制覆盖
  4. 结构化报告框架:问题编号 + 严重级别 + 文件定位 + 修复建议的统一输出格式

📅 2026-06-05 · 基于实际对比数据的根因分析