Hello 大家好,好久不见,有一阵子没写笔记了。这段时间一直在忙着疯狂vibe coding——说是coding 其实不太准确,因为做了很多项目,并不完全是写代码的事。但确实有种停不下来的感觉:原本可能要花一个月甚至几天的复杂项目,现在一个下午几个小时就能出结果。然后紧接着快速迭代,继续往下做,这种节奏真的让人欲罢不能。
Agent Generated LLM Notes
https://github.com/leemojiang/llm-notes-all-in-one
首先介绍一下,这是我最近一直在忙的一个项目。之前我多次尝试系统学习大模型,断断续续记了很多笔记。大模型这个东西的问题在于,它的知识点非常庞杂。我当时很想用一种很有逻辑的方式把这些东西梳理到一起,但一般的笔记工具根本做不到。所以遇到的情况就是学了又忘、忘了又学,兜兜转转。举个例子,我最开始学的时候,是从 NLP 历史发展的角度切入,从 Attention 机制是怎么提出的,到从期望的数学视角去理解它,再到 Transformer,再到之后的种种发展。这大概也是一般人学习大模型的典型路径——前几年大模型的教程,一般上来就先讲 Transformer 是什么。但这个东西其实完全不 make sense,因为大模型是一个实践性非常强的东西。你学一堆理论可能完全没用,必须真的自己去训练、跑代码,才能见到效果。当然,中间遇到了一个非常好的项目叫 MiniMind,它覆盖了大模型的方方面面,几乎可以说是手把手教你训练一个迷你LLM。训练完之后,理解会深入很多。
总而言之,我积累了很多笔记——来自不同时间节点的、或记忆深刻或已经忘得差不多的知识碎片。我一直想系统地把它串起来,这在以前是很困难的。而这个项目我稍微多利用了一下 Agent 的力量,具体来说用的是 Codex。这种学习方法在知乎上的一些大佬(比如周舒畅)之前也提到过:用写一本书的方式来做费曼学习法,用输出,倒逼自己的输入。事实上也确实做到了这一点。我现在已经断断续续写了一多半,粗略算下来将近 20 章,每章用 Markdown 写都有 1000 多行.所以确实有段时间没更新笔记了.这倒不是我没有写,而是都写在一个目录里了.
这些工作如果没有 Agent,会非常非常困难。但在 Agent 的帮助下,它以超乎想象的速度被完成了。我觉得这体现了 Agent 一个巨大的进化,也是最令人惊讶的地方——它拥有了自主管理上下文的能力。举一个具体的例子:我在写某一章节需要润色时,这一章跟之前的章节相关,比如我要引用上一节的定义。我可以直接告诉 Agent:“你去参考一下上一章节,然后把这一节按照某某思路处理一下。“而事实上 Agent 确实能做到,而且写出来的结果大概率就是我想要的效果。Agent 的上下文窗口其实是远强于人类的。给我的感觉,它就像是我思维的放大器。很多时候我写章节时,并不需要规划很细节的东西,比如段落之间的逻辑转折,或者具体的语言润色。因为在传统的创作流程里,这些东西都需要你自己去思考,而你不得不在整体文章规划和这些细节之间进行上下文切换,这其实非常累、非常困难。但有了 Agent,你只需要告诉它一个框架,就可以把注意力完全集中在整体构思和高层思想上。具体的行文构思和润色,Agent 都能自己完成,甚至自动修改你思路的不足,或者跨过没意识到的坑。所以效率真的非常惊人。
第二点,Agent 甚至某种意义上变成了你思想的延伸器。很多想法最开始只是一个大概的轮廓,你需要在讨论过程中,通过多次询问和交流,才能把这个想法精炼成你实际想要的效果。现在 Agent 已经能做到这一点了——它所提供的知识和逻辑性,其实已经远超平均水平的人类。甚至有时候在你问题还没有完全明晰的时候,它就能一针见血地把你要的答案说出来。在写书的同时也是学习的过程,确实做到了这一点:有很多我之前写文章时没考虑到的问题,在写作过程中,包括向 Agent 提问时,它就像提供了一个虚拟的实践过程一样,帮我开拓了思路,让我意识到了之前没想到的问题。而且在 Agent 这种环境下,它的处理速度非常快,比自己实际去写代码的学习速度还要快。也就是说,它不但能加速你的工作过程,同时也加速了你的学习过程。我甚至觉得,用 Agent 来做软件开发,可能才是是锻炼项目管理和整体思路的好方法,它把我们从原来纷繁的代码细节中解放了出来,而能够关注更High-level的思考。
最后,向大家推荐一下我自己的这个项目。其实这也是我自己的笔记整理,我现在还在一直维护它,把各种我觉得跟 LLM 相关的内容加进去。我还没有写完,会继续更新。同时我把它写得尽可能详细,既方便我随时回顾,也考虑了入门者的阅读体验。我希望它能帮到像我当时一样正在学习大模型的这些入门者.
Some Insights
最后,我想根据这个 project 总结一下我这段时间对 Agent 开发的一些 insight。挺神奇的,之前我也看到过相关的文章和概念,但在真正自己实践中再零五一遍之前,其实是没体会的。
总而言之,我觉得出乎意料的是,之前两个月好像还很火的 “Harness Engineering” 和 “Skill” 这些东西,可能在很短的时间内就要结束了。我认为 Skill 这个东西已经比之前的 Workflow 之类的要轻量很多了,但它核心的思路还是想通过人去教 Agent 如何做事。而这个思路,我觉得随着 Agent 能力的提升,会变得越来越拧巴。
我个人的观点是:Agent(或者说 Vibe Coding,或者说 Harness Engineering 这些东西),用一个简单的话概括,就是它会转变成测试驱动的开发,而不是设计驱动的开发。这是我在做上个 RAG Pipeline 的时候突然明白的道理。OK,我们可以用一句听起来有点哲学的话来概括:如果你不能验证一个东西是对的还是错的,或者你不知道怎么去验证它,那其实你做不做这个事情也无所谓。
这个结论落实到软件开发上,就是测试会变得越来越重要,甚至会主导驱动整个开发流程。尤其是如何用自动化的方式去进行测试,而不是手动审阅代码来验证 Agent 的结果是否正确。就是这么简单——我现在用 Agent 写代码的时候,已经不再去想用什么 Skill 或 Workflow,或者说如何规定和指导 Agent 的工作方式。我更多的在想的是如何定义清楚目标,以及如何去验证和测试它,而且这个测试和验证的过程最好是自动化的。
事实上,如果真的做到了自动化,验证清晰这点,Agent 自己就已经能够达到闭环了。比如 Codex 会自动跑单元测试,并保证测试结果是正常的。那我们会发现,之前开发一些小的项目或者 Demo 项目时,很多时候你感觉无法快速完成,就是因为你的测试就是自己跑一下看看行不行。在编写代码还很昂贵的时候,这个流程感觉还行。可是现在当代码变得如此轻易的时候,你会发现反馈和测试变成了流程中的薄弱点和阻塞点。
具体来说还有一点,我发现 Git 的应用越来越重要了。这是第一点的一个具体表现:你要让 Agent 自己去跑、随便跑,但你要确保它不会把整个环境弄崩掉,确保你的修改和它的修改是可控和可追溯的。起码在代码管理方面,这就是 Git 在做的事。当然,我觉得未来给 Agent 的环境(比如沙箱或系统),以及与之相对的环境管理,也可能是一个重要的的基础设施。
最后还有一点,也是最重要的一点:归根结底都是上下文(Context)。你要给 Agent 提供足够的信息。当然,这也是现在 Agent 进化出的最重要的能力——它拥有了自己管理上下文的能力,你也不用手把手给Agent喂饭,选择了,可以启发式,High Level的提供上下文了,Agent自己可以去做选择。比如:你甚至可以把整个目录的地址扔给它,然后告诉它让它在两个目录之间操作、去做什么事情。它真的会像人一样一步一步去搜索文件和做相应的事情。这确实是它能力的一个巨大提升,效果非常惊人。举个例子,我之前把我一个项目——就是我那个 RAG 项目——整个扔给它,然后让它把整个东西整合成一个项目模板,放到工作文件夹里,再写到简历里。Agent 做到了,而且做得非常好。或者可能说这已经不是管理上下文了.而是选择要给Agent提供什么上下文了.