问:体验了一下 AI 编程,我发现这个编程能力受限于上下文的限制,对于大型项目的构建能力偏弱,不知道有没有什么好的方法能够解决这个问题呢?
答:编程能力确实受限于上下文的限制,但是使用 Cursor 这样的开发工具,有一些技巧可以让你在大型项目中,也能大幅提升效率。
核心是两点:
1. 将复杂任务拆分成小任务,每次只实现一个小任务
2. 每次交互选取最相关的上下文,让它可以照葫芦画瓢
既然我们知道大语言模型的上下文窗口长度是有限的,那么就需要最大化的利用好上下文。最简单有效的就是每次任务小一点,输入的代码和提示词少一点,这样就可以让模型在上下文窗口限制内很好的完成任务。
比如说我要让 Cursor 帮我实现一个爬虫,抓取某个网站的数据,要抓一级页面、二级页面、三级页面、四级页面。每一级页面还有很多细节。
如果我一次性要求 AI 去实现,那可能无法实现,或者完成的不好。但是我可以拆成若干小任务。
所以我第一步会要求 Cursor 帮我实现一个最基本的爬虫功能,能抓取网页、能解析网页内容,能保存内容到静态文件,这个任务 Cursor 能完成的很好。
第二步我要求 Cursor 帮我实现抓取首页,把页面的 HTML 结构发给它,让它能解析首页的内容成结构化的数据,并且保存到一个 sqlite 数据库。这个任务 Cursor 能完成代码,执行时可能会有点小问题,但是稍微修改就能正常运行。并且对代码细节进行半手动半AI辅助的完善。
第三步继续要求 Cursor 实现一个记录抓取位置的功能,让它可以中断后从上一次抓取位置继续。然后再完善优化代码。
第四步让它对去抓取二级页面,提供二级页面的结构给它,并且把之前优化好的抓取解析代码添加到上下文,让它去抓取二级页面。由于提供了优化好的代码参考,新的代码也会参考优化好的代码。
后面的步骤都是类似的,就是把之前写好的优化好的代码作为上下文,加上新的需求,让它去实现。
这样一步步下来,一个复杂的模块就完成了,而使用过程中也没有超出上下文长度。
所以不用担心上下文窗口长度的限制,也不用担心你的项目太大它不理解,核心是要把复杂任务拆成简单的任务,要一点点迭代,先优化好前面的代码,然后生成新的代码的时候参照前面优化好的代码。
同步发布于博客:网页链接
补充:
项目文档很重要,Cursor 在生成代码时可以把项目文档作为上下文。
答:编程能力确实受限于上下文的限制,但是使用 Cursor 这样的开发工具,有一些技巧可以让你在大型项目中,也能大幅提升效率。
核心是两点:
1. 将复杂任务拆分成小任务,每次只实现一个小任务
2. 每次交互选取最相关的上下文,让它可以照葫芦画瓢
既然我们知道大语言模型的上下文窗口长度是有限的,那么就需要最大化的利用好上下文。最简单有效的就是每次任务小一点,输入的代码和提示词少一点,这样就可以让模型在上下文窗口限制内很好的完成任务。
比如说我要让 Cursor 帮我实现一个爬虫,抓取某个网站的数据,要抓一级页面、二级页面、三级页面、四级页面。每一级页面还有很多细节。
如果我一次性要求 AI 去实现,那可能无法实现,或者完成的不好。但是我可以拆成若干小任务。
所以我第一步会要求 Cursor 帮我实现一个最基本的爬虫功能,能抓取网页、能解析网页内容,能保存内容到静态文件,这个任务 Cursor 能完成的很好。
第二步我要求 Cursor 帮我实现抓取首页,把页面的 HTML 结构发给它,让它能解析首页的内容成结构化的数据,并且保存到一个 sqlite 数据库。这个任务 Cursor 能完成代码,执行时可能会有点小问题,但是稍微修改就能正常运行。并且对代码细节进行半手动半AI辅助的完善。
第三步继续要求 Cursor 实现一个记录抓取位置的功能,让它可以中断后从上一次抓取位置继续。然后再完善优化代码。
第四步让它对去抓取二级页面,提供二级页面的结构给它,并且把之前优化好的抓取解析代码添加到上下文,让它去抓取二级页面。由于提供了优化好的代码参考,新的代码也会参考优化好的代码。
后面的步骤都是类似的,就是把之前写好的优化好的代码作为上下文,加上新的需求,让它去实现。
这样一步步下来,一个复杂的模块就完成了,而使用过程中也没有超出上下文长度。
所以不用担心上下文窗口长度的限制,也不用担心你的项目太大它不理解,核心是要把复杂任务拆成简单的任务,要一点点迭代,先优化好前面的代码,然后生成新的代码的时候参照前面优化好的代码。
同步发布于博客:网页链接
补充:
项目文档很重要,Cursor 在生成代码时可以把项目文档作为上下文。