V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  yisen123  ›  全部回复第 1 页 / 共 2 页
回复总数  24
1  2  
@HeyWeGo 你好,刚刚网页已加入了极细的线帮助阅读,谢谢反馈!
@HeyHudy 很酷!!
@xxlsize 主要的价值是给出代码质量分数,ai agent 有了这个分数以后从 mcp 获取,可以改进代码质量
@zhady009 你好,可以先用桌面版测试一下, 桌面版测出来是好的,这可能是 rust 以及 webassembly 的一个 bug ,我们正在修复网页版中,桌面版是好的
@009694

这不是悖论,这是 P vs NP 。
检测循环依赖 = O(V+E),Tarjan 算法跑一遍就知道 A→B→C→A 有环。
修复循环依赖 = 要理解代码语义才能决定:是让 A 不依赖 B ?还是 B 不依赖 C ?还是抽一个共享模块 D ? D 里放什么?
测量是多项式时间的,改进是需要语义理解的。温度计能告诉你 39 度发烧了,但不能开药方。开药方需要理解发烧的原因,不是量个温度就行。
这正是为什么需要大模型——传感器负责"发现哪里有问题",大模型负责"理解代码语义然后决定怎么改"。两个能力不在同一个复杂度层面上。
@yusf 说得很好,几个点回一下:

MCP 不够友好这个认同,我们在考虑更轻量的接入方式。

关于"低分但在我项目就应该这样写"——这正是为什么我们只量根因不量规则。sentrux 不会说"你的函数太长"或"耦合太高"这种主观判断。它量的是图论属性:依赖图是否有环、模块是否自然分簇、复杂度是否集中。这些是数学事实不是风格偏好——不管你是 feature-first 还是分层架构,循环依赖就是循环依赖,god file 就是 god file 。

但你说的"项目自己的工程要求"确实是需要的——这就是规则引擎做的事。你可以在 .sentrux/rules.toml 里定义你项目的架构约束,比如哪些层不能依赖哪些层、最大允许循环数。这部分是你定义的,不是我们定义的。

至于 sub-agent 来评判修改必要性——我觉得这个应该是 agent 自己的判断,不是传感器的职责。传感器只负责给信号,agent 自己决定要不要改、怎么改。跟温度计一样,温度计不决定你要不要开空调。
@bybyte

对,完全正确。一句话总结就是这个。
没有传感器的时候,agent 只能靠自己判断代码好不好——但它的判断依赖上下文,上下文烂了判断就不准了。
有了传感器,agent 有了一个跟自身判断独立的、基于数学的客观信号。方向明确了,改进就收敛了。
@p1094358629 好问题。重启后 agent 的"记忆"没了,但改善是沉淀在代码本身里的。
agent 上次重构了代码 → 代码结构变好了 → 这个改善永久保存在你的代码库里 → 下次新会话 agent 读到的就是更好的代码 → 它自然写得更好。
所以不需要 agent 记住"技巧"。代码库本身就是记忆。好的代码结构 = 好的上下文 = agent 下次表现更好。
这也是为什么叫"递归自我改进"——改善不是存在 agent 脑子里,是存在代码里,而代码就是 agent 下次的输入。
@moudy

疯牛病这个比喻很精准——模型吃自己的输出做训练确实会 model collapse ,这是已经被证明的。
但 sentrux 不是让模型吃自己的代码做训练。模型权重完全不变。
它做的是:模型写代码 → 外部传感器( tree-sitter 解析 + 图论计算)独立打分 → 分数反馈给模型 → 模型根据分数改代码。
这里的关键是"外部"——分数不是模型自己算的,是一个独立的数学计算。跟 RL 里的 reward function 是外部定义的一样——不是让 agent 自己评价自己,是让环境告诉它结果。
你说的 RL 调权重是模型层面的改进,sentrux 是推理层面的改进——同一个模型,更好的上下文,更好的输出。不改权重,改环境。
两者不矛盾。RL 让模型整体更强,传感器让模型在具体项目上更准。
@icyalala

后训练确实能让模型整体变好,但有个根本问题——它改善的是模型的通用能力,不是针对你这个项目的架构。
GPT-6 训练得再好,它读到你项目里 5 个文件互相循环依赖,它一样会在这个烂上下文里写出烂代码。模型能力是通用的,但代码库是具体的。
换个角度想:编译器不会因为程序员水平高就不需要了。测试不会因为模型更强就不跑了。传感器解决的是"这个具体项目的结构现在怎么样"——这个信息模型训练里拿不到,因为每个项目都不一样。
至于 vibe coding vs agentic coding——区别不在于谁写代码,在于有没有闭环。vibe coding = 开环,写完就完。加了传感器 = 闭环,写完能验证。叫什么名字不重要,有没有反馈回路才重要。
@sampeng

三个问题都很好,逐个回:

1. 和 sonar 的区别
sonar 量的是代理指标(症状):coupling ratio, function length, dead code %。这些可以刷——加假 import 提 cohesion ,拆函数凑 length ,标 public 消 dead code 。KPI 全绿,代码还是烂的。
sentrux 量的是图论根因:Newman's Q (依赖图是否自然分簇)、Tarjan SCC (有没有循环)、Gini (复杂度是否集中)。这些是数学性质,不是规则——加假 import 会让图更随机,Q 反而降。没法刷。
而且聚合用几何平均值( Nash 定理),刷一个拖垮另一个,总分降。唯一提分方式 = 真改架构。
设计文档写了为什么选这 5 个不是 20 个: https://github.com/sentrux/sentrux/blob/main/docs/quality-signal-design.md

2. agent 不听怎么办
agent 说"没问题就这么着"——这正好说明 agent 没有外部信号的时候只能靠自己的判断,而它的判断是基于当前上下文的,上下文烂了判断就烂了。
传感器不是"命令" agent 干什么,是给它一个客观信号。agent 看到 modularity 3711 和 modularity 8000 的区别,它自己会决定要不要改。跟你开车看仪表盘一样——油表不命令你加油,但你看到了就知道该加了。
当然如果 agent 就是不改,那是 agent 的问题不是传感器的问题。但至少你作为人能看到分数在降,知道架构在烂。

3. 为什么不直接把计算方式给 agent 让它自己算
可以试试。但实际问题是:
- Newman's Q 需要对整个依赖图做社区检测,复杂度 O(m*log(n)),几千个文件的项目算一次就要几秒
- Tarjan SCC 、Gini 、depth 都需要完整的依赖图——agent 的上下文窗口装不下整个项目的 AST
- tree-sitter 解析 52 种语言的 import/call/class 关系,这不是 prompt 能做的事
prompt 里写"请分析一下代码质量"和用 tree-sitter 解析完整 AST 算图论指标,精度差几个数量级。这就是为什么要一个独立的传感器而不是让 agent 自己猜。
@yangyaofei

看了一下 ouroboros ,它做的是 AI 改自己的代码——agent 修改自己的源码来"进化"自己。
sentrux 做的不是这个。完全不同的方向。
ouroboros:AI 改自己 → 自己变强
sentrux:AI 改你的项目代码 → 你的项目变好
ouroboros 是哲学实验——"AI 能不能自我进化"。
sentrux 是工程工具——"AI 帮你写代码时,怎么保证代码结构不烂"。
一个关心 agent 本身,一个关心 agent 产出的代码。不冲突,也不重叠。
@yusf

对,但关键不是评分本身——是评分之后形成的闭环。

评分工具很多,SonarQube 做了 20 年了。但它们都是给人看的——人看完报告,开个会,排个 sprint ,下个月再说。

sentrux 的区别是:分数直接给 AI Agent 看。Agent 看到分数 → 立刻改代码 → 重新扫描 → 分数上升 → 再改 → 循环。

这个闭环以前不存在,因为人做不到"看一眼分数立刻重构"。AI Agent 可以。

所以核心不是"评分系统",是"让评分能被 Agent 实时消费的反馈回路"。评分只是信号,闭环才是重点。
@askfilm

哈哈,反过来想——

没有传感器的时候,你的 token 花在哪了?
Agent 在烂代码里找半天找错文件,改完一个 bug 引入三个新 bug ,
然后你再花 token 让它 debug 自己写的烂代码。
这才是真正的 token 黑洞。

有传感器之后,Agent 一次扫描知道哪里该改,改完分数上升,
收敛之后就停了——跟梯度下降一样,边际收益趋近于零就自然停止。
不是无限循环烧 token ,是用几轮迭代省掉后面几百轮的 debug 。

你花 10 块钱让代码结构变好,省掉后面 100 块的反复修 bug 。
这笔账其实很划算。
@YanSeven

这是个非常好的问题,也是我们设计评分系统时最核心的考量。

你说的"KPI 好看但内部一坨屎"——这正是传统代码质量工具的问题。SonarQube 之类的工具量的是症状( coupling ratio, function length, dead code percentage ),这些确实可以刷:
- 加几个假 import → cohesion 好看了
- 把函数拆成两半 → function length 达标了
- 把代码标 public → dead code 没了
KPI 全绿,代码还是一坨屎。这就是 Goodhart 定律。

sentrux 刻意不用这些代理指标。它量的是 5 个根因——都是图论的基本结构属性:

1. Modularity Q ( Newman 2004 )——依赖图是否自然分簇。加假 import 会让图更接近随机图,Q 反而下降。
2. Acyclicity——有没有循环依赖。没法作弊,有就是有。
3. Depth——依赖链多深。没法作弊,深就是深。
4. Equality ( Gini 系数)——复杂度是否集中在少数文件。把 god function 拆成两个同样烂的函数,Gini 不变。
5. Redundancy——死代码+重复代码占比。

然后用几何平均值聚合( Nash 1950 定理)——刷任何一个单项指标同时拖垮其他指标,总分反而会降。唯一能提总分的方式,是同时改善所有维度,而这只有通过真正的架构改善才能做到。

而且这个分数不是给人当 KPI 用的——是给 AI Agent 当反馈信号用的。Agent 不会办公室政治,不会 P 数据,它看到分低就改代码,改完分高了就是真的高了。

设计文档在这里,数学原理写得很清楚:
https://github.com/sentrux/sentrux/blob/main/docs/quality-signal-design.md

当然,没有任何静态分析能检测所有问题( domain correctness, runtime behavior 这些超出了静态图分析的范围)。但在"架构是否在退化"这个维度上,这 5 个根因指标是我们能做到的最诚实的测量。
@p1094358629 是的,mcp 服务器会和 ai agent 对话
@xwhxbg 是这个 app 去帮助 ai review 代码质量,同时反馈给 ai 去让 ai 自我改进的
这个项目可以帮我们重获掌控感: https://www.v2ex.com/t/1197994
@beyondstars 这个项目非常适合那种 vibe coding 时代, 自己做项目从小到大那种:

在一些很火的开源项目(比如 GitHub 出品的 SpecKit )中,这类工具非常依赖于开发者在项目开始前,就彻彻底底想好整个代码结构、要实现的功能以及具体内容。

但真正在 AI Coding 的时候,我们的做法其实恰恰相反。在自然的情况下,我们使用 AI 写代码更倾向于一种“交谈启发式”的流程:

我们并不会提前规划好所有细节,而是从零开始,让 AI 快速生成原型。
像甲方和乙方一样,在交互中不断修改方案。
同时进行一些深刻的探讨,启发我们想到更好的产品方案或技术路线。
在这样的循环推进方式下,AI 不可避免地会生成一些架构很乱的“脏代码”。最终在一轮又一轮的 Prompt 之后,它确实可能给出一个外在功能完美的运行结果,但内部架构可能是极其混乱的。
多谢指正 @sillydaddy

核心就三件事:
1. 实时 treemap — 文件大小 = 代码行数,颜色 = 修改热度,连线 = 依赖关系。agent 改代码的时候文件会发光,你能看到整个项目的结构在实时变化
2. 14 维健康评分 A-F — coupling 、cycles 、dead code 、cohesion 、blast radius 等,每次扫描几百毫秒出结果
3. MCP server — AI agent 写代码的时候可以自己查架构分数,写烂了自己知道
1  2  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   6210 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 16ms · UTC 02:14 · PVG 10:14 · LAX 19:14 · JFK 22:14
♥ Do have faith in what you're doing.