git-lrc 集成到 git commit 流程,自动执行 AI 代码审查,社区反响热烈(45 次互动)。适合想自动化代码质量检查的开发者。
我叫Maneshwar。我正在开发git-lrc,一个微型AI代码审查工具,可在每次提交时运行。它是免费且源代码可用的,托管在Github上。给git-lrc加星来帮助开发者发现这个项目。试试看并分享你的反馈。
我刚才给Claude扔了一个简单的点谜题。
. .. . ... . .... . .... . ... .
它回答说缺少的结尾是:
.. .
"等等...大语言模型只预测下一个token。它们不执行算法。它们不推理。那它是怎么想出来的呢?"
这个问题让我陷入了研究的兔子洞。
因为如果你检查答案,它是正确的。
单个点是分隔符;真正的集群是2、3、4上升,然后4、3、2对称下降。
从头到尾读取点的数量得到一个完美的回文:
1 2 1 3 1 4 1 4 1 3 1 2 1
这就是关键:这是一个模型可能从未见过的谜题。
我一直在脑子里带着的民间模型说,LLM"只是根据向量和它在训练中看到的任何东西猜测下一个词"。
如果它只做这个,一个困难的谜题应该会难倒它。
没有下一个词的统计数据可以依靠。
所以要么那个心智模型是错的,要么发生了更有趣的事情。
是第二种。以下是我发现的。
是的,这些模型被训练来预测下一个token(粗略地说,是下一块文本)。
民间解释的这部分是真的。
但这里是人们跳过的关键:这是它被评分的目标,而不是对它学到的东西的描述。
想象一个学生只根据考试题目被评分。
从技术上讲,他们"做"的所有事情就是回答考试题目。
但要在几千道多样化的题目上做得好,他们不能只是死记答案。
他们必须真正学会算术、逻辑、如何读题。
考试是压力。
理解是在压力下成长的东西。
同样的道理。要在数万亿个token上很好地预测下一个token——即包含数学、代码、论证、故事,以及是的,谜题的文本——靠记忆"词X倾向于跟在词Y后面"是绝望的。
可能输入的空间实际上是无限的,你喂给它的几乎所有东西都是新的。
在这个规模上唯一能降低预测错误的方法是开发能泛化的内部机制:计数、比较、识别对称性、继续一个模式。
这些能力之所以出现,是因为它们对预测任务很有用。
没有人手工编码"检测回文"函数。
这是一种从无情优化中出现的能力,就像学生真实的理解从无情测试中出现的方式一样。
如果学生类比对你没什么帮助,这是一个对大多数开发者很有效的类比:压缩。
想象你必须把有史以来的每一本书压缩成最小的表示。
你不会只存储原始文本走很远,你会被迫发现潜在的规律:语法、反复的叙述结构、算术、化学规则、代码的形状。
不是因为有人教了你,而是因为捕捉这些概念是表示数据的最有效方式。
训练LLM来预测文本是同样的挤压。
好的预测需要世界中模式的紧凑内部模型,所以模型构建它们。
这是对民间模型最大的升级:下一个token预测是训练信号,通用能力是模型为了满足它而找到的策略。
在我们进入机制之前,有一件事为我重新定框了。
模型从不"看到"点。
它看到token,无论分词器将输入分成什么块。确切的分割方式并不重要,因为对于模型来说,我的谜题在结构上与以下相同:
A AA A AAA A AAAA A AAAA A AAA A
1 2 1 3 1 4 1 4 1 3 1 ...
这些点只是伪装。
模型实际上处理的是序列的抽象形状,分隔符与上升然后下降的计数交错。
这是一个关于为什么它泛化的大线索:它不是在"点"上做模式匹配,而是在独立于传递它的符号的结构上运作。
"每个词与前一个词相关,固定在训练中"的图景缺少做大部分工作的机制。
它叫做注意力(ATTENTION),是transformer架构的核心——每个现代LLM都建立在它之上。
这是直觉。
当模型处理你的输入时,每个位置可以"看到"其他每个位置,并为这个特定的输入动态计算它们如何相关。
这不是一个在训练时烤进去的冻结查找。
这是每次你按回车时的新计算。
所以对于点谜题,没有什么调出了一个存储的"点谜题答案"。相反,大致上:
重复的单个点被识别为分隔符元素。
集群被彼此比较。
上升然后下降的计数(2、3、4、4、3、...)被表示为一个结构,一个"想要"继续下降的结构。
那些token向量呢?它们不仅仅是"这个符号的含义"。
它们携带可以几何地操纵的抽象特征。
"镜像这个序列"正是在你的数据作为向量存在于正确空间时变得易处理的操作类型。
计数和反射停止是魔法,开始是表示的算术。
还有一个值得命名的深度维度。
注意力不是一次性通过,表示在流经数十层时得到精化,每层增加一点点抽象。
一个松散的、说明性的直觉(不是任何层"思考"的字面意思):
早期层:"这些符号重复。"
中间层:"每个更大的运行被单个点分隔。"
后期层:"整个东西是对称的,我们可能在完成镜像。"
没有层持有英文句子。
但内部向量渐进地编码更高级别的属性,直到"完成回文"在那个学习空间中是明显的延续。
这是我们脑子里的模型和实际运行的东西之间的区别:
这是"它如何解决我的谜题"这个问题的真实答案。
它没有记住我确切的点序列。
它学会了通用操作——计数、比较、检测对称性、继续一个模式——这些操作组合起来处理新输入。
给它点,给它数字,给它字母:同样的"找到结构并扩展它"机制适用。
有真实的研究关于这个,其中一些来自Anthropic这样的可解释性团队。
他们发现了特定的内部电路,一个著名的例子是做模式继续的归纳头。
机制本质上是:"在这个输入的前面,A后面跟着B;这里又是A,所以B接下来可能。"
这是一个字面的、可识别的网络内部部分在做模式匹配和扩展。
这正是让模型继续一个新颖的模式而不是回忆一个存储的模式的东西。
当你用这种方式构思它时,点谜题停止神秘。
模型有机制来找到和扩展模式。它找到了并扩展了它。
如果你用这些模型构建,实际的课程是这样的:你不是在和一个重新吐出训练数据的花哨自动完成功能一起工作。
你在和一个在下一个token压力下学会了可转移操作的系统一起工作,并把它们应用到它从未见过的输入。
那种重新框架改变了你如何提示,如何调试奇怪的输出,以及你如何推理它在哪里可靠与哪里会自信地摔跤。
"它只是预测下一个词"是那种真实但无用的陈述,会导致你产生错误的直觉。
一个愚蠢的小点谜题让我去查阅这个。
免责声明:本文由我撰写;AI被用来修正语法和改善可读性。
AI agents写代码很快。它们也会默默地移除逻辑、改变行为和引入bug——而不告诉你。你经常在生产中才发现。
git-lrc修复了这个。它钩入git提交并在每个diff着陆前审查它。60秒设置。完全免费。
欢迎任何反馈或贡献者!它在线、源代码可用,并准备好供任何人使用。
免费、微型AI代码审查在Git提交时运行
| 🇩🇰 Dansk | 🇪🇸 Español | 🇮🇷 Farsi | 🇫🇮 Suomi | 🇯🇵 日本語 | 🇳🇴 Norsk | 🇵🇹 Português | 🇷🇺 Русский | 🇦🇱 Shqip | 🇨🇳 中文 | 🇮🇳 हिन्दी |
免费、微型AI代码审查在提交时运行
GenAI如今是一辆没有刹车的赛车。它加速很快——你描述一些东西,大块代码立即出现。但AI agents默默地破坏东西:它们移除逻辑、放宽约束、引入昂贵的云调用、泄露凭证、改变行为——而不告诉你。你经常在生产中才发现。
git-lrc是你的制动系统。它钩入git提交并在每个diff着陆前运行AI审查。60秒设置。完全免费。
简而言之,git-lrc帮助在生产宕机、漏洞和技术债之前预防它们
一览:10个风险类别·100+失败模式被追踪·每次提交...
有关进一步的行动,你可以考虑屏蔽此人和/或报告滥用