2026年7月12日 2 分钟阅读

Topos 实战教程:给 AI 编码 Agent 装上代码质量“质检员”

tinyash 0 条评论

你的 Claude Code 提交了一个 800 行的 diff,横跨 14 个文件。CI 全绿,语法完美,测试全过。但滚动到第 200 行时你意识到——Agent 在三个文件夹之外重新实现了一个早已存在的工具函数,还自创了一个看似简洁实则诡异的抽象层。你眼睛花了,体力耗尽,看着绿色的 CI 徽章,按下了 Squash and Merge。

这不是你的问题,这是 AI 编码 Agent 时代的通病。Krv Labs 的开源工具 Topos 就是来解决这个问题的——它不检查代码能不能跑,而是检查代码结构好不好

Topos 是什么?

Topos 是一个面向 AI 编码 Agent 的结构化代码质量分析工具。它把代码解析成数学图结构(控制流图、模块依赖图、数据流图),从三个独立维度打分,最终给每个文件颁发一个代码质量勋章

  • SIMPLE(简洁):AST 熵和 CFG 圈复杂度——代码是不是不必要的复杂?
  • COMPOSABLE(可组合):模块间耦合度——你改一个文件,其他文件会不会跟着崩?
  • SECURE(安全):危险 API 可达性和污染路径——有没有不安全的调用链?

| 勋章 | 条件 |

|:—|:—|

| 🥇 GOLD | 三个维度全部通过 |

| 🥈 SILVER | 通过两个维度 |

| 🥉 BRONZE | 通过一个维度 |

| ❌ SLOP | 一个都没过(或无法解析) |

这种设计的高明之处在于:它不是简单的”合格/不合格”二元判断,而是一个8 元素评估格——三个维度互相独立,GOLD 是它们的交集。Agent 在时间和 Token 预算内,可以根据优先级选择”保护哪个维度”。

快速上手

安装非常简单,一条命令:

curl -fsSL https://docs.krv.ai/topos/install.sh | sh

安装后即可使用。比如评估 src/ 目录下所有文件:

topos evaluate src/ -r

-r 参数会递归扫描,输出一个排过分数的摘要:哪些 Pillar 通过了、最差的文件、以及要翻转一个失败 Pillar 最便宜的修复路径。需要 CI 集成时加 --json 即可输出 JSON 格式。

想让 Agent 自己知道该优先保护哪个维度?用 --preferences

topos evaluate src/ -r --preferences simple,composable,secure

如果不设偏好,Agent 在 GOLD 不可达时会优先尝试 silver 的任意一个组合。设了偏好后,它会按你的优先级降级——比如 simple,composable 意味着先保简洁和可组合性,安全可以暂时放一放。

检查单个文件和比较版本

想看单个文件的详细指标:

topos inspect src/app.py

想看两个版本之间的代码”走了多远”:

topos compare old_version.py new_version.py -v

compare 计算的是 AST 编辑距离——不是简单的行数加减,而是从语法树层面衡量代码的结构变化程度。比如 Agent 重构了一个模块后,用 compare 比对新旧版本,能清晰看到结构层面的改动量级。加上 -v 可以输出详细的差异分析。

COMPOSABLE 维度需要额外一步

SIMPLESECURE 可以在单个文件上直接评估,但 COMPOSABLE 需要跨文件的依赖图。首先安装 GitNexus:

npm install -g gitnexus

然后在项目中生成依赖图:

topos depgraph generate

最后带上依赖图数据做评估:

topos evaluate src/ -r --gitnexus-dir .gitnexus

这一步会分析模块间的 Martin Instability(马丁不稳定性)指标——如果一个工具模块被太多模块依赖,而它本身又依赖了大量其他模块,这种”中心枢纽”式的代码结构就会在 COMPOSABLE 维度暴露问题。

给 Agent 装上 MCP 实时反馈

Topos 最实用的功能是 MCP 服务器——让 Claude Code、Cursor、Gemini CLI 或 Windsurf 在写代码时实时知道自己写得好不好

claude mcp add --transport stdio topos -- topos mcp

配置好之后,Agent 会在每次生成代码后自动调用 Topos 评估结果。比如 Claude Code 写了一个模块,Topos 回告”BRONZE(SIMPLE 通过,COMPOSABLE 和 SECURE 未通过)”,Agent 就知道下一步该拆解模块耦合了。

对于 Cursor,在 .cursor/mcp.json 中添加:

{
  "mcpServers": {
    "topos": {
      "command": "topos",
      "args": ["mcp"]
    }
  }
}

对于 VS Code + GitHub Copilot,在 .vscode/mcp.json 中同样配置即可。详细指引在 docs.krv.ai/topos/agents

结构化测试覆盖率检查

除了评估代码质量,Topos 还能检查结构化的测试覆盖率

topos coverage src/

不同于传统行覆盖率只告诉你”这行代码被执行过”,Topos 的 coverage 检查的是控制流路径覆盖和模块间接口覆盖——测试真正测试了分支逻辑的各个方向,还是只走了 Happy Path?

这在 Agent 生成的代码中尤其重要——Agent 倾向于为”通过测试”而写代码,而不是为”全面覆盖边界情况”而写。Topos coverage 恰好暴露这个差距。

在 CI 中集成

在 CI 工作流中加入质量门禁:

- name: Code quality check
  run: |
    topos evaluate src/ --json > topos-report.json
    topos evaluate src/ --preferences simple,composable,secure

如果设置了 --preferences,Topos 会在 GOLD 或指定组合不可达时返回非零退出码,CI 管道可以直接拦截低质量的 Agent 代码合入。

最佳实践

设全局偏好文件:在项目根目录创建 .toposrc 文件,设置团队统一的评估偏好。这样所有开发者和 Agent 共享同一套质量标准。

不要追求全部 GOLD:SIMPLE、COMPOSABLE、SECURE 三者存在天然的权衡。一个高度安全的模块(大量权限检查)必然降低简洁性,一个极致简洁的工具函数可能缺少安全的异常处理。让 Agent 的 --preferences 反映你项目当前最薄弱的环节。

结合 Code Review 一起用:Topos 不是替代 Review,而是给 Review 提供数据支撑。”这个文件从 SILVER 降到了 BRONZE”比”感觉写得有点乱”有力得多。

结语

Topos 的思想很简单:Agent 生成了代码,但代码是否真的属于这个代码库,需要结构质量的确认,而不是仅靠跑一遍测试。在 Agent 一天生成数千行代码的节奏下,结构化的质量门禁不是附加功能,而是必需品。

BSD-3-Clause 开源许可,pip install topos-mcp 或 curl 一键安装,MCP 即插即用。如果你每天在 Claude Code 或 Cursor 的 PR 里纠结”这个 diff 到底行不行”,Topos 值得一试。

相关链接

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。