欢迎回来
登录你的知识库账户
忘记密码?
还没有账户?立即注册
创建账户
注册你的专属知识库
已有账户?去登录
找回密码
输入注册邮箱获取验证码
返回登录
请输入图片中的验证码以继续注册
加载中...
取消
新建收藏
手动添加你喜欢的内容
取消
编辑头像与昵称
上传新头像或修改你的显示昵称
支持 JPG/PNG,最大 2MB
取消

问题反馈

notebasewww.notebase.cn
控制台
内容库
动态
管理
账户
U
用户
--
在线
v0.8.7 · 知识库
笔记
KnowledgeBase
网络无边,知识有迹。
0笔记
0工具
30推荐

分类导航

按主题直达

编辑精选

站内用户贡献 · 真实笔记

最新收录

每日更新
继续浏览全部内容 →
>
笔记
0
加载中...
工具
0
此页用于记录用户反馈问题后的每一次改进
笔记用法

“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。

md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。

要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。

工具用法

在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。

要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。

工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。

隐藏笔记

写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。

适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。

数据安全

你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。

技术

全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。

理念

这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。

原则

不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。

更多

产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。

举报

如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。

趋势
// 点击导航加载发现
归档
// 归档为空
最近浏览
// 暂无浏览记录
发布
// 加载中...
用户发布
// 加载中...
用户管理
// 加载中...
访问统计
// 加载中...
内容审核
// 加载中...
个人信息
// 加载中...
返回首页

“Ruby 是最适合 AI 的栈” 只说对了一半

2026/7/6编程开发

先说说那对的一半:写 Ruby 这事,AI 确实拿捏了

过去一年里,你在任何 Ruby 相关的讨论帖里都能看到这个说法:“Ruby 和 Rails 是对 AI 最友好的技术栈。” 理由听起来也很合理——token 更少、幻觉更少、模型写出来的代码干净利落。

我承认,这说法有一半是真的,而且我没什么好争的。另一半嘛,我花了点功夫,在十三个真实的 Ruby 代码库上做了实测,结果画出了一条非常清晰的分界线——它把每个仓库都划到了两边。包括你的。

为什么写 Ruby 这件事对 AI 来说这么顺手?因为 Rails 的“约定优于配置”哲学,不只是为下一个读代码的人设计的。它同样为“下一个读代码的模型”铺好了路。一个见过上万个 Rails 应用的模型,在你还没写一行代码之前,就已经知道 model 该放哪、job 该去哪、concern 是干嘛的、has_many 意味着什么。

所以当你跟它说“写个 service object”、“加个 scope”、“重构这个 controller”——栈本身已经帮模型回答了它一半的问题。更少的错误猜测、更短的反馈循环、更少的幻觉空间,因为代码的骨架已经是明牌。

任何一个用 Rails 干活的人都体验过这个,Ruby 的 AI 友好口碑就是这么来的。我不是来否定这个的。我是想指出,这个能力回答的是一个没人真正处于危险中的问题。


那另一半呢:在规模化的 Ruby 里导航,AI 翻车了

“AI 能不能写 Ruby”这个问题已经盖棺定论了。但真正导致线上事故的问题是另一个:AI 能不能在 Ruby 代码库里导航?

比如:这个 model 改了,会破坏什么?谁依赖它?爆炸半径在哪?

当你自己是个熟练的开发者时,读代码和导航代码看起来像同一件事。但对于一个 AI agent 来说,它们完全不是一回事。

  • 读一个文件是局部的——答案就在那几行文本里。
  • 导航代码是结构性的——答案藏在文件之间的边里:谁调了谁、谁破坏了谁。没有任何一个文件能单独告诉你这个。

所以我在这十三个仓库上跑了同样的测试。任务都一样:选一个核心 model(比如 Chatwoot 的 Inbox、GitLab 的 MergeRequest、Solidus 的 Spree::Order),然后在做 teardown 变更之前,找到所有依赖这个 model 的地方。那些分散的、不明显的依赖项,我手动标记好藏起来了。

测试分两组跑,用同一个模型、同一个 commit:

  • 普通 agent:只会 grep 加推理的 agent
  • 带结构地图的 agent:同一个 agent,但给它一个可以查询的结构化依赖图

最后对照我藏好的关键依赖,逐行检查每个引用是否命中。

看看这组数据,你就明白了。先看基线召回率,然后看加上结构地图后的召回率:

仓库 核心模型 基线召回率 +地图召回率
Chatwoot Inbox 0.29 0.97
Mastodon Status 0.28 0.83
GitLab MergeRequest 0.26 0.67
Discourse Upload 0.35 0.75
Solidus Spree::Order 0.40 0.68
Forem Article 0.35 0.63
Rails ActiveRecord::Relation 0.67 0.92

然后,差距突然缩小了:

仓库 核心模型 基线召回率 +地图召回率
Lobsters Story 0.68 0.79
Redmine Issue 0.67 0.78
RubyLLM provider/Chat 0.76 0.80
raix - 0.60 0.73
llm.rb provider 0.48 0.48

下面这一组,就是 Ruby 那个“AI 友好”口碑的完美体现。小、可读、代码集中——Ruby 用字面量命名依赖,实现也紧挨着。一个强一点的 agent 直接读完 app/models 就能找到大部分依赖,地图只是多帮你找出一个两个。对于 llm.rb,地图甚至没增加任何答案——只是用少了 1/5 的 token 就得到了同样的结果。这半句话是真的,没有任何星号。

还有一个仓库不属于这两组——langchainrb,基线 0.24 → 地图后 0.41。一个小 gem,但得分却像个单体巨石。原因是:模型“知道”langchainrb,但它知道的是一个已经不再发布的版本——因为这个 gem 迭代太快,训练数据没跟上。记住这个点,后面会回来。

上面那组仓库,就是同一个栈在规模大到可读性不再能缩放时的情况。核心 model 的依赖通过 association、concern、多态、配置字符串注册表,散落在各个目录里——没有任何一个 token 能让 grep 抓到。普通 agent 只能找到一小部分,然后自信地停下来。

这不是 Chatwoot 写得乱。恰恰相反——它分解得太符合教科书了,而教科书式的分解,恰恰把依赖散布到了 grep 够不着的地方。


同一个问题,两种规模

这就是问题的本质:同一件事,在不同规模下表现完全不同。

  • 在分界线以下:模型能读完整个仓库,地图是多余的。
  • 在分界线以上:模型只能从你的代码库里读到一个样本——而且它不会告诉你它读的是哪个样本。

两个我没想到的反直觉发现

1. 最小的模型拿到了第二大的提升

我跑了五个模型:两个前沿模型,三个开源模型。提升幅度:

  • Opus(前沿模型):+0.26
  • Devstral(最小的开源模型):+0.24——排在第二,超过了另一个前沿模型和其他所有模型。

这看起来反直觉,直到你想明白原因:地图替模型补上了它自己脑子里装不下的东西。模型自己能装得越少,地图的价值就越大。 模型大小和代码库大小,其实是同一个杠杆从两端拉。

2. 最出名的代码库反而是最难搞的

Forem 就是 dev.to 本身——互联网上被读过最多次的 Ruby 代码库之一。你可能会猜模型处理它应该最拿手。但恰恰相反,它是个警示案例。

一个前沿模型可能部分记住了这个代码库,有时能直接从训练数据里背出核心 model 的依赖——完全不靠任何工具。地图带来的提升确实存在,但那个方差才是真正的教训:一个靠记忆背诵代码库的模型,仍然可能漏掉它今天实际是怎么连接的——而你无法判断自己拿到的是记忆版本还是实时版本。

Rails 是同一个效应的干净版本。每个模型都背过 Rails 源码,地图在那里的全部提升都来自查询编译器的内部逻辑——那些从未进入模型权重的部分。

而之前那个 langchainrb,得分像个单体巨石——它就是过时版本:模型背诵的是一个已经不存在的 langchainrb。名气让代码库被更多背诵,而不是被更好理解。


你可能想找的出口——以及它为什么是堵死的

每个读这种文章的人,心里都会默默把自己排除在外:“我的代码很整洁。我的应用分解得很好。如果有隐藏的依赖,我肯定知道。我肯定在下面那组。”

也许你现在确实在。今天在。

但这条分界线不是固定的。当你的代码库大到模型一次读不完时,你就从“grep 就够了”的那一半,滑到了“grep 不够”的那一半。 没有“你已超出 agent 能力范围”的弃用警告。你发现的方式永远是一样的——一个通过了 review 的 diff,三周后,在生产环境里炸了。

而且这条分界线正朝着不利于你的方向移动。

模型读代码的能力越来越强——这就是为什么小仓库那一半已经是平局,而且只会更安全。但你实际上线的应用,增长速度快于上下文窗口的增长。依赖随着代码库的增长而越散越远。

地图获胜的那一半,描述的是真正的生产工作——而且那一半正在变大。


为什么“等更好的模型”解决不了问题

这也是为什么“等更好的模型”不是一个答案。更好的模型能读更多代码,所以它会把分界线往前推。但你的代码库也在增长,所以它又把分界线往后推。这是一个你永远追不上的赛跑。

地图不是赌在“弱模型永远弱”上。它是:

  • 仓库专属的:基于你当前 commit 的代码构建,没有模型背过它
  • 保持新鲜的:代码变了,地图就变
  • 模型无关的:通过 MCP 服务任何 agent,换模型不会让你卡住

别猜了,测一下

你没法靠推理判断自己在哪一半。在你的代码上跑一下。只要几分钟。

选一个你会在改之前专门安排一个下午小心处理的 model。让你的 agent 直接问:“在我改这个 model 的 teardown 方式之前,找到所有依赖它的地方。” 看它 grep 和猜测。数它找到了多少。

然后给它地图:

curl -fsSL https://luuuc.github.io/sense/install.sh | sh
sense scan    # 在你最熟悉的项目根目录跑
sense setup   # 连接你的 agent

再问一次,对比结果。

  • 小且整洁? 你会看到一个平局——这是真正可信的答案:你的仓库在友好那一半,可以不用操心了。
  • 大应用? 你会看到差距打开。

不管结果如何,你都会拿到那个口碑给不了你的数字:你的代码库到底在哪一边。

编写使用方法
Markdown 格式 · Ctrl+Enter 确定
新建笔记
预览
数据表格
点击单元格编辑 · Tab 移动
A1fx
Sheet1
BIH1H2≡🔗</>
隐私提醒

取消
编辑工具
取消