(注:本文为小报童精选文章。已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费)
痛点
我本科读的计算机专业。当时编程,讲究的就是个扎实。例如哈夫曼编码用来压缩解压文件,那真的是自己一行行代码写过来的。更不用说汇编语言这种课,都没有什么捷径可走,得下笨功夫。
可如今的编程实践,早已不是小作坊式的单打独斗,不用「一切从头开始」。大部分情况下,我们都在巨人的肩膀上前行 —— 利用他人编写的基础代码,根据我们的独特需求进行调试,来达成目标。GitHub 上汇集了全球无数开发者精心打造的框架和软件包,直接调用就好,这让开发工作变得非常便捷。
然而,这种大规模协作开发方式也带来了一些挑战。例如,你需要先仔细阅读框架开发者们编写的文档和样例,才能知道如何正确调用这些框架。如果你凭空想象来随意写代码调用类对象和函数,结果往往是一连串的错误。不过,有的项目功能虽强,文档写得却着实难以恭维,读来不仅晦涩,而且文档涵盖功能不齐全。这时候,你还得深入源码去查看某些文档中没有涉及的功能该如何实现。
更麻烦的是,这些框架和软件包是不断变化的。很多时候,开发者为了统一调用方式或提升效率,会对接口进行各种调整。一个函数可能从一个包移动到了另一个包,调用方式和参数也都可能发生变化。在某个工具框架快速演进时期,这种更改的频率非常高,周期可能以小时,乃至分秒来计算。
原本可以运行的代码,突然报错了。你原先也只能上 Stack Overflow 查找问题的答案。很多人兴许会告诉你这是版本升级的原因,于是你需要参考文档进行调整。
对懒人来说,无论是通读文档、样例甚至源码,还是不断调整代码以适应框架更新,都是非常繁琐的事情。
有没有什么方法可以让我们根据这些文档和源代码,让 AI 自动进行代码编写和修改呢?
这是我们长久以来的期盼,而从前确实没有什么好办法来实现。不过自从有了 ChatGPT 为代表的 AI 大语言模型,我们就看到了希望 —— 期盼它能够智能地帮助我们进行代码生成和改进。可惜要解决 AI 自适应编程问题,想单独依靠 ChatGPT 们自身训练获得的知识与能力,无异于痴人说梦。
我们都知道,大语言模型的训练有一个周期。本文写作时(2024 年 6 月)我们看到的 GPT-4o 已经是很新的模型了,可实际上它训练用的知识也截止在 2023 年。即使它包含了大量你需要的 GitHub 项目,GPT-4o 所掌握的知识对你的实际应用来说也不够新。它可能会写出过时的代码,当你运行最新版本框架时,会产生一系列的冲突和错误。
聪明的人们早就开始寻找解决方案。例如,我想要让 ChatGPT 学会某一个函数的调用方法,就可以把它最新的文档和样例提供给 ChatGPT。
只不过,很多框架(例如 fast.ai, CrewAI 等)所包含的文件有许多,且相互依赖。只学会了某个函数的最新样例,不足以让 AI 编出正确的代码。
怎么办呢?
我们于是就需要把某些 Github 项目库的全部内容,都交给 ChatGPT,让它来学习。在《开发文档 RAG 的 GPTs 如何更高效地帮你 AI 编程?》一文中,我给你介绍了用 gpt-crawler 爬取 llamaindex 这个项目的全部文档,然后让 ChatGPT 帮助我们编写程序的例子。
只不过,彼时这些工具要么用起来比较麻烦,要么磨合程度还不够,所以效果并不是非常理想。你让 AI 做一些功能单一的程序出来,效果尚可;一旦涉及到框架比较复杂的情况,AI 编写代码能力往往就捉襟见肘了。
好在,随着技术的进步和软件的打磨,现在 AI 自动阅读文档样例编写符合你需求代码的能力,已经显著提升了。咱们这一篇文章,就为你介绍一下具体实现方法。