使用ChatGPT进行开发

165 阅读6分钟

你是否对ChatGPT的可能性以及如何将其用于你自己的项目感到好奇?随着最近在语言模型和生成性人工智能方面取得的令人振奋的进展,现在是潜心研究并开始实验的最好时机。在这篇博文中,我将分享我自己使用ChatGPT开发个人助理的历程--从我面临的挑战到我在途中发现的解决方案。

作为一个一直关注语言模型、生成性AI和人工智能方面令人振奋的进展的人,我迫不及待地想深入到ChatGPT的世界。它代表了我们思考自然语言处理的方式的一种范式转变。

对我来说,这是一个明确的信号,表明我需要开始更认真地学习这些主题,所以我开始了一个个人项目,用ChatGPT创建我自己的个人助理。我想按照自己的节奏进行实验和学习,不受指导课程的限制。

我的最终目标是开发一个真正了解我的助手--一个能够记住我们以前的对话并在我自己的个人电脑上运行的助手。即使我从未完全实现这一崇高的野心,我知道在这个项目上的工作将是使自己沉浸在这一主题中的绝佳方式。

为了使事情更具挑战性,我决定使用Python--一种我并不特别精通的语言--并且总是依靠ChatGPT,而不是求助于谷歌或外部文档。这创造了一个不仅具有挑战性和令人兴奋的项目,而且令人难以置信的元。通过使用ChatGPT来开发工具,最终将用我自己的个性化版本来取代它。

目前来说,这种体验很好。我开发新功能的速度非常快,ChatGPT经常为我解锁,让我比阅读文档或搜索谷歌更容易进入流程,总的来说,速度和满足感都很好。我也相信,这是因为我在理想的情况下使用ChatGPT:

  • 一个新的小项目,一个命令行应用程序,所以添加功能非常容易,你不需要框架或组件或大的架构。

  • 在一个我不掌握的语言中,ChatGPT对于解决疑惑非常有用,而这个领域本身就是ChatGPT的专长。

  • Python是一种特别适合LLM的语言,因为它的语法少,而且是动态的。这些属性使它成为人类和LLMs的理想选择,因为现在它是我们最接近自然语言编程的东西。

如果没有所有这些因素,ChatGPT的实用性对我来说就开始下降了。事实上,在工作中,我使用它的频率要低得多,只是解释我想要的东西比自己做更难。但这就是为什么我认为我们最终都会有自己的个人或公司助理,他们知道我们项目的来龙去脉,可以帮助我们了解更多的情况......

Image description

但让我们进入正题,我将列出一些我在这个项目中使用ChatGPT的例子,当我可以时,我将链接到我与ChatGPT关于该主题的具体对话。这些是我用ChatGPT做的一些事情,是为了工作,而不仅仅是为了探索它所知道的东西,学习或尝试玩或娱乐自己:

  • Readme:Readme的第一个版本是由ChatGPT写的,我编辑了它,并从那时起一直在扩展和改进它。

  • Dockerfile:我向ChatGPT要了一个dockerfile,因为说实话,我对语法并不熟悉,最后我总是复制粘贴。起初,它给了我一个功能齐全的dockerfile和执行dockerfile中助手的命令。然后我编辑了一下,删除了一些我不需要的东西,并稍微改变了一下命令的顺序,以便更好地使用docker的缓存

  • TTS:助手有一个文本到语音的选项,所以你可以听它的回答,尽管默认情况下我把它关闭了(阅读更快,而且听代码也没有意义)。第一个版本又是它自己的,然后我试了几个声音和库,最后我确定了一个不是ChatGPT建议的那个。

  • 把对话上传到一个要点。我也向ChatGPT要了上传文件,然后我把代码放到一个函数中,从应用中使用它,而不是作为一个脚本

  • 检索解析markdown文件的对话。这还没有整合,但我已经和ChatGPT玩过了,并且有了初步的代码,应该可以实现

  • 重构。我已经做了几次重构,我给了它一个大的函数,要求它把它分成小的函数。

  • 测试。ChatGPT类的第一次测试是由ChatGPT完成的,而行动模块的测试是在copilot的帮助下完成的。

总的来说,ChatGPT在整个过程中都帮助了我。从概述解决方案,咨询库的工作方式,编写测试......每次的模式都是相似的,这就是为什么我认为如果你没有掌握语言,它就特别有用,因为如果你掌握了语言,你自己写的时候就会花同样的时间甚至更少。但是如果你不知道可用的库和模块,问ChatGPT会怎么做,就可以节省大量的试错和研究以及阅读文档的时间。

此外,对我来说,这个过程通常是一个兔子洞:我开始寻找一个做X的库,有10个,现在我得看看哪些库更受欢迎,为什么,我想看看它们是如何工作的......当我意识到已经过了2个小时,我还没有做任何事情。有了ChatGPT,所有这些过程都更加直接和流畅,即使我最终使用了另一个库或大量编辑或放弃了它的第一个解决方案。与所有那些充满广告和cookie弹出、视频和其他干扰的网站相比,它让我更顺畅,更专注于问题的解决。

我确信我在这里只是抓到了表面的东西。LLMs似乎在各个层面都有很大的潜力,我们会一点一点地将它们整合到IDE和用户界面中,但即使是在这种初级的形式下,在不太清楚自己在做什么的情况下,我认为我也获得了很多的生产力,开发过程中的挫折感也会减少很多。