git-lrc 在每次 commit 时自动触发微型 AI 代码审查,已开源,为开发流程增加智能把关能力。
大家好,我是 Maneshwar。我正在开发 git-lrc,一个在每次提交时运行的微型 AI 代码审查工具。它是免费且源代码公开的 Github 项目。收藏 git-lrc 来帮助开发者发现这个项目。一定要试一试,分享你的反馈。
在互联网的大部分历史中,搜索某样东西感觉有点像在和一个非常字面意思的机器人对话。
你会输入"舒适的鞋子用来整天站立",它会自豪地给你一个包含"舒适"、"鞋子"和"整天"这些词的页面,即使那个页面是一篇关于整天躺着有多舒适并且根本不穿鞋的博客。
那个机器人已经有了一个飞跃 xD
这叫语义搜索,简短的说法是这样的:它关心你的意思,而不仅仅是你碰巧输入的词。
关键词搜索是一场词匹配游戏。
它拿你的查询,搜索包含这些精确词汇的文档(如果它心情好的话还会加上一些同义词),然后收工。
它根本不知道任何东西的意思。
这就像一个图书馆员,他可以找到封面上有"苹果"的每本书,但无法告诉你,你是想要一个水果还是一个手机。
语义搜索玩的是一个完全不同的游戏。
它问"这个人实际上想找什么?"然后寻找那个东西,即使你的精确词汇根本不出现在答案中。
我最喜欢的证明含义比词更重要的例子:"巧克力牛奶"与"牛奶巧克力"。同样的两个词。
颠倒顺序,你就从一个你啜饮的饮料变成了一个你折断的巧克力棒。
关键词引擎看到相同的成分然后耸肩。
语义搜索知道你描述的是两个完全不同的零食。
这个小翻转就是整个革命的缩影。
这是同一个想法在分路上展现,一个查询,两种完全不同的哲学:
它是如何做到这一点的呢?(进入:嵌入)
这部分听起来像魔法,但实际上只是聪明的数学。
计算机不理解词。
它们理解数字。
所以语义搜索将每个词、句子和文档转换成一长串数字,称为嵌入——本质上是一个坐标,告诉你含义在哪里。
想象一张巨大的隐形地图。
不是地点的地图,而是含义的地图。在这张地图上,"狗"和"小狗"几乎叠在一起。
"猫"在同一个邻域。
"量子力学"在城镇的另一边,"巧克力牛奶"停靠在离"牛奶巧克力"相当远的距离,或者我是这样假设的。(记住这一点;我后来测试了它并被谦虚地对待。)
意思相似的东西最终聚在一起;不相似的东西漂散开。
这就是嵌入的全部:一个事物在含义空间中的地址。
最美妙的部分是机器通过阅读大量文本并注意到哪些词持续出现在相似的环境中,自己学习这些地址。
在相同语境中出现的词会得到相似的地址。
没有人手动标记任何东西。
一旦一切都在这张地图上,搜索变得非常简单。
引擎将你的查询作为一个坐标放到同一张地图上。
然后它只是四处看看并问"附近有什么?"
"查找最近邻居"的技术名称是 k-最近邻算法,但你可以在脑海中把它归为:获取停靠在离你最近的东西。
在含义空间中坐在离你的查询最近的结果是最符合你意图的,它们首先被提供。
从开始到结束,整个旅程只需五个步骤:
这就是为什么语义搜索可以给你完美的答案,即使它与你的问题共享零个词。
你搜索了"舒适的鞋子用来整天站立",它返回一个关于护士木屐和防疲劳鞋垫的指南——措辞几乎没有重叠,但在含义上击中了靶心,因为所有这些东西都住在地图的同一个角落。
含义不是固定的,它根据谁在问和在哪里而弯曲。
以单词"足球"为例。
在伦敦输入它,你几乎肯定是指那项有圆球和戏剧性倒地的运动。
在达拉斯输入它,你是指头盔、达阵和禁止用手触碰的圆球。
同一个词,两项不同的运动,一个好的语义引擎使用上下文、你的位置、你的措辞,甚至你五分钟前搜索的内容来确定你指的是哪一个。
上下文也是关于意图的。
你是想学点东西、买点东西还是去某个地方?"最佳浓缩咖啡机"可能想要评论和购买按钮。
"浓缩咖啡机如何工作"想要一个解释,而不是结账页面。读出这种差异是工作的一半。
说是便宜的,所以我实际上计算了数字。
使用一个真实的句子嵌入模型(all-MiniLM-L6-v2)和一个小的 Python 脚本,我针对真实的余弦相似度分数而不是直觉测试了上面的声明。(确切的数字会随着模型版本和归一化而略有变化,但形状保持不变。)
这是实际输出:
$ p exp.py
Query: "chocolate milk"
------------------------------------------------------------
doc keyword overlap semantic similarity
chocolate_milk 2 0.751
milk_chocolate 2 0.727
comfy_shoes 0 0.130
puppy 0 0.111
quantum 0 0.058
football_uk 0 0.058
football_us 0 -0.056
Query: "milk chocolate"
------------------------------------------------------------
doc keyword overlap semantic similarity
milk_chocolate 2 0.758
chocolate_milk 2 0.733
puppy 0 0.117
comfy_shoes 0 0.101
quantum 0 0.073
football_uk 0 0.034
football_us 0 -0.078
Query: "comfy shoes for standing all day"
------------------------------------------------------------
doc keyword overlap semantic similarity
comfy_shoes 2 0.583
football_uk 0 0.066
puppy 0 0.051
milk_chocolate 0 0.043
football_us 0 0.042
chocolate_milk 0 0.002
quantum 0 -0.078
Direct pairwise similarity (no corpus, just the two phrases):
"chocolate milk" <-> "milk chocolate": 0.980
"dog" <-> "puppy": 0.804
"dog" <-> "quantum mechanics": 0.214
(小狗行只是一个填充文档,我把它扔进语料库以确保模型不是对一切都排名很高,它每次都坐在底部,这是你想要的。是的,余弦相似度可能会略微低于零;这只是意味着两样东西在含义空间中指向略微相反的方向。)
舒适鞋子的例子完美地成立。我搜索"舒适的鞋子用来整天站立"针对一些候选文档,包括一个关于护士木屐和防疲劳鞋垫的文档。
语义相似度对那个文档的评分是 0.583,遥遥领先于下一个最佳匹配的 0.066。
关键词搜索只捕获了两个通用词("all"、"day"),而完全错过了搜索者关心的实际概念:舒适和鞋子。
含义是显而易见的;字面意思的词不是。
巧克力牛奶与牛奶巧克力也成立——但勉强。我写了一句描述每一个的句子("牛奶巧克力是一种甜蜜的零食棒...","巧克力牛奶是一种冷饮..."),并针对该对搜索两个查询。
关键词搜索将它们完全绑定,无论你运行哪个查询,都得到相同的词重叠数,这正是这篇文章开始时的确切失败。
语义搜索两次都正确打破了平局,但只有约 0.02–0.03。真实,但不戏剧化。
令我惊讶的部分,以及之前的"记住这一点":当我完全删除句子并仅嵌入两个赤裸短语"巧克力牛奶"和"牛奶巧克力"时,别的什么都没有——它们回来的相似度是 0.980。
地图上几乎是同一个点。
所以"有相当的距离分开"严重言过其实。
两个词单独不给模型足够的信息;正是周围的句子告诉它你指的是哪一个。
对于这样的短语,上下文在这里不是一个锦上添花的事情,它是防止"饮料"和"糖果棒"崩溃成同一个坐标的唯一东西。
作为对比,"狗"和"小狗"单独回来是 0.804(真正的近邻),而"狗"对"量子力学"是 0.214(真正相距遥远),所以地图隐喻总体上成立。
这只是短的、不清楚的、词序翻转的对需要真实上下文来拉开。
除了仅仅聪明之外,语义搜索悄悄地让一切都不那么令人烦恼。
你不必猜测数据库隐藏在后面的魔法关键词。
你可以像人一样提问——凌乱的、对话的、半成型的——并且仍然能找到你想要的东西。
随着时间的推移,这些系统也会学习,观察人们实际点击和坚持的结果,并推动自己做得更好。
这是一个评判你的拼写的搜索栏和一个实际理解意思的搜索栏之间的差异。坦诚地说?在多年与字面意思的机器人争论之后,"它理解意思"感觉像一个小奇迹。
所以下一次你在搜索框里输入模糊和懒惰的东西,它返回你脑子里转悠的精确东西——这不是运气。
那是一张含义地图、一把坐标和一个终于学会读出字里行间的机器人。
免责声明:这篇文章是我写的;AI 被用来修复语法和提高可读性。
AI agents 写代码很快。他们也悄悄地删除逻辑、改变行为和引入错误——而没有告诉你。你经常在生产环境中发现。
git-lrc 修复了这个问题。它连接到 git commit 并在每个差异落地之前审查它。60 秒设置。完全免费。
欢迎任何反馈或贡献者!它在线、源代码公开,准备好供任何人使用。
免费的微型 AI 代码审查,在 Git 提交时运行
| 🇩🇰 Dansk | 🇪🇸 Español | 🇮🇷 Farsi | 🇫🇮 Suomi | 🇯🇵 日本語 | 🇳🇴 Norsk | 🇵🇹 Português | 🇷🇺 Русский | 🇦🇱 Shqip | 🇨🇳 中文 | 🇮🇳 हिन्दी |
免费的微型 AI 代码审查,在提交时运行
今天的 GenAI 是一辆没有刹车的赛车。它加速很快——你描述一些东西,大块的代码立即出现。但 AI agents 悄悄地破坏东西:它们删除逻辑、放松约束、引入昂贵的云调用、泄露凭证并改变行为——而不告诉你。你经常在生产环境中发现。
git-lrc 是你的制动系统。它连接到 git commit 并在每个差异落地之前运行 AI 审查。60 秒设置。完全免费。
简言之,git-lrc 帮助在问题发生之前防止停机、泄露和技术债
一目了然:10 个风险类别 · 100+ 个失败模式被跟踪 · 每次提交……
一些评论可能仅对登录访客可见。登录查看所有评论。
有关进一步操作,你可以考虑阻止此人和/或报告滥用行为