上一篇文章,我推荐了一些常用的AI辅助编程工具,很多朋友反馈说,很有帮助。但也有朋友说,工具是有了,但不知道怎么用,才能发挥最大的效果。今天,就来聊聊AI辅助编程的进阶技巧,这些技巧,可能很多人都不知道,但掌握了之后,能让AI辅助编程的效果,提升一个档次,真正成为你编程的得力助手。

先说说背景。我用AI辅助编程工具,已经有一段时间了,从最开始的代码补全,到后来的代码生成、bug修复、文档生成、代码重构等,用得越来越深入。最开始,我也只是把AI工具,当成一个高级的代码补全工具,用得很基础,效果也一般。

但后来,我慢慢摸索,发现了很多进阶的用法和技巧,用了这些技巧之后,AI辅助编程的效果,提升了很多,很多复杂的任务,AI都能帮我完成,大大提升了开发效率。今天,就把这些进阶技巧,分享出来。

一、写好提示词(Prompt):和AI沟通的艺术

用AI辅助编程,最重要的,就是写好提示词(Prompt)。同样的工具,同样的任务,提示词写得好,AI生成的代码,就准确、高质量;提示词写得不好,AI生成的代码,就可能有bug,或者不符合你的需求。

很多人,用AI工具的时候,提示词写得很简单,比如,"写一个排序函数",这样,AI生成的代码,可能不是你想要的,因为你没有说清楚,用什么语言,什么排序算法,输入输出是什么,有没有什么特殊要求。

写好提示词,有几个技巧:

1. 说清楚上下文和需求

写提示词的时候,一定要说清楚,你在做什么项目,用什么技术栈,这个函数/模块,是干什么用的,输入是什么,输出是什么,有没有什么特殊的要求和约束。

比如,不要只说"写一个排序函数",而是说:"用Python写一个快速排序函数,输入是一个整数列表,返回排序后的列表,要求原地排序,空间复杂度O(1),并且加上详细的注释。"这样,AI生成的代码,就会更符合你的需求。

2. 给出示例

如果你的需求,比较复杂,或者有特殊的格式要求,可以给出一些示例,告诉AI,你想要的输入输出,是什么样的。AI看到示例,就能更准确地理解你的需求,生成更符合要求的代码。

比如,你想让AI写一个函数,解析某种格式的字符串,你可以给出几个输入输出的示例,AI看到示例,就知道该怎么解析了,比你用文字描述,更准确。

3. 分步骤描述复杂任务

如果任务比较复杂,不要一下子,把所有需求,都扔给AI,那样,AI可能理解不了,或者生成的代码,有很多问题。可以把复杂任务,拆分成几个小步骤,一步一步,让AI生成,每一步,都检查一下,确认没问题了,再进行下一步。

比如,你想让AI写一个完整的用户注册登录系统,不要一下子说"写一个用户注册登录系统",而是分步骤:第一步,写用户数据模型;第二步,写注册接口;第三步,写登录接口;第四步,写Token验证中间件;第五步,写前端页面。一步一步来,每一步,都检查和修改,这样,最终的结果,会好很多。

4. 指定代码风格和规范

如果你的项目,有特定的代码风格和规范,比如,命名规范、注释规范、缩进、错误处理方式等,一定要在提示词里,告诉AI,让AI按照你的规范来生成代码。这样,生成的代码,就不需要你再大量修改格式了,可以直接用。

比如,你可以说:"按照Google的Python代码规范,写一个函数,函数名用小写下划线,参数要有类型注解,返回值也要有类型注解,函数要有docstring,错误用异常处理。"

5. 迭代优化

AI生成的代码,不一定一次就完美,可能有一些问题,或者不完全符合你的需求。这时候,不要放弃,可以迭代优化,把你发现的问题,告诉AI,让AI修改。比如,"这个函数,没有处理空列表的情况,加上边界检查","这个变量名,不太清楚,改成更有意义的名字","这个算法,时间复杂度太高了,优化一下"。

通过几次迭代,AI生成的代码,就能越来越符合你的需求,越来越完美。很多人,用AI生成一次,觉得不好,就不用了,这样,就浪费了AI的潜力。要学会迭代优化,和AI一起,把代码越改越好。

二、善用上下文:让AI理解你的项目

AI辅助编程工具,比如GitHub Copilot,是有上下文感知能力的,它会根据你当前打开的文件、项目结构、注释、变量名等,来理解你的需求,生成更符合项目上下文的代码。

很多人,用AI工具的时候,不注意上下文,打开一个空文件,就让AI生成代码,这样,AI不知道你的项目结构,不知道你的编码规范,不知道你已经定义了哪些函数和类,生成的代码,可能和你的项目,不兼容。

善用上下文,有几个技巧:

1. 打开相关的文件

让AI生成代码之前,先打开相关的文件,比如,你要写一个新的函数,用到了项目里已经定义的类和函数,就先打开那些文件,让AI看到,这样,AI就知道,项目里已经有哪些定义了,生成代码的时候,会直接用,不会重复定义,也不会用错。

比如,你要写一个用户服务的函数,用到了User模型,就先打开User模型的文件,让AI看到User模型的定义,这样,AI生成代码的时候,就知道User有哪些字段,哪些方法,会正确地使用。

2. 写好注释和文档

AI工具,会读取你代码里的注释和文档,来理解你的代码是干什么的。所以,写好注释和文档,不仅对人有好处,对AI也有好处。AI看到清晰的注释和文档,就能更准确地理解你的代码,生成更符合你意图的代码。

比如,你写一个函数,写好了函数名、参数、返回值、docstring,描述清楚这个函数是干什么的,AI看到这些,就能理解你的意图,在你写函数体的时候,自动补全正确的实现。

3. 保持一致的命名和风格

在项目里,保持一致的命名和代码风格,AI就能更好地理解你的代码,生成更符合你风格的代码。如果你的项目里,命名混乱,风格不统一,AI就很难理解,生成的代码,也可能乱七八糟。

比如,你的项目里,函数名都用小写下划线,变量名都用小写下划线,类名都用大驼峰,AI看到这些,就会按照你的规范,生成代码。如果一会儿用小写下划线,一会儿用大驼峰,AI就不知道该用哪个了。

4. 利用项目级别的配置

有些AI工具,支持项目级别的配置,比如,在项目根目录,放一个配置文件,告诉AI,项目的技术栈、代码规范、特殊要求等。这样,AI在整个项目里,都会按照你的配置来生成代码,不需要每次都在提示词里说。

比如,你可以在配置文件里,指定项目用Python 3.8,用pytest做测试,用Google代码规范,错误处理用异常,等等。AI看到这些配置,生成代码的时候,就会遵守。

三、高级用法:不只是代码补全

很多人,用AI辅助编程工具,只用来做代码补全,这就太浪费了。AI辅助编程工具,还有很多高级用法,比如,代码解释、bug修复、代码重构、单元测试生成、文档生成、代码翻译等,掌握了这些高级用法,能大大提升开发效率。

1. 代码解释

看到一段复杂的代码,看不懂,没关系,可以让AI帮你解释。把代码贴给AI,让AI解释这段代码是干什么的,每一行是什么意思,用了什么算法,时间复杂度是多少。AI就能给你详细的解释,帮你快速理解复杂的代码。

这个功能,对于接手老项目,或者看开源项目的代码,非常有用。以前,看一段复杂的代码,要琢磨半天,才能看懂;现在,让AI解释一下,几分钟就懂了,大大节省了时间。

2. bug修复

代码有bug,报错了,不知道怎么修,可以把报错信息和相关代码,贴给AI,让AI分析bug的原因,给出修复建议。很多常见的bug,AI都能准确地找出原因,给出修复方案,甚至直接生成修复后的代码。

比如,你写的代码,运行的时候,报了一个空指针异常,把报错信息和代码贴给AI,AI就能告诉你,哪个变量可能是null,为什么会是null,怎么加边界检查,怎么修复。

当然,对于一些复杂的bug,AI可能找不准原因,但至少能给你一些思路和方向,帮助你排查。

3. 代码重构

老代码,写得很乱,想重构,但又不知道从哪里下手,可以让AI帮你重构。把代码贴给AI,告诉AI,你想怎么重构,比如,"把这个长函数,拆分成多个小函数","优化这个算法的时间复杂度","把这段代码,改成面向对象的风格","消除重复代码",AI就能帮你生成重构后的代码。

这个功能,对于代码重构,非常有用。以前,重构一段复杂的代码,要花很长时间,还要担心改出bug;现在,让AI帮你重构,几分钟就能生成重构后的代码,你只需要检查一下,确认没问题,就能用了,大大提升了重构的效率。

4. 单元测试生成

写单元测试,是很多开发者头疼的事情,费时费力,还容易漏。现在,可以让AI帮你生成单元测试。把你要测试的函数或类,贴给AI,告诉AI,用什么测试框架,要覆盖哪些场景,AI就能帮你生成完整的单元测试代码,包括正常场景、边界场景、异常场景等。

比如,你写了一个函数,输入是一个列表,返回列表中的最大值,把这个函数贴给AI,让AI用pytest生成单元测试,AI就能生成测试正常列表、空列表、只有一个元素的列表、有负数的列表、有重复元素的列表等各种场景的测试用例,非常全面。

当然,AI生成的单元测试,可能有些场景,还是需要你自己补充,但大部分常见的场景,AI都能覆盖,大大节省了写单元测试的时间。

5. 文档生成

写文档,也是很多开发者头疼的事情。现在,可以让AI帮你生成文档。把你的代码,贴给AI,让AI生成函数的docstring、类的文档、API文档、README等。AI就能根据代码的逻辑,生成清晰、详细的文档。

比如,你写了一个类,有很多方法,把这个类贴给AI,让AI生成类的文档,包括类的功能说明、每个方法的功能、参数、返回值、异常等,AI就能生成完整的文档,你只需要稍微修改一下,就能用了。

6. 代码翻译

想把代码,从一种语言,翻译成另一种语言,比如,把Python代码,翻译成Go代码,把JavaScript代码,翻译成TypeScript代码,可以让AI帮你翻译。把源代码贴给AI,告诉AI,翻译成什么语言,AI就能帮你生成对应的代码。

这个功能,对于学习新语言,或者迁移项目,非常有用。比如,你熟悉Python,想学Go,可以把你写的Python代码,让AI翻译成Go代码,对比着看,就能很快学会Go的语法和写法。

当然,AI翻译的代码,可能不是最优的,有些语言特性,可能翻译得不好,但作为参考,还是很有价值的。

四、和AI协作:把AI当成结对编程的伙伴

用AI辅助编程,最高级的用法,不是把AI当成一个代码生成工具,而是把AI当成一个结对编程的伙伴,和AI一起,讨论问题,设计方案,写代码,找bug,优化代码。

很多人,用AI的时候,是单向的,就是给AI一个需求,让AI生成代码,然后自己检查。这样,AI的作用,没有充分发挥。更好的方式,是和AI双向交流,把AI当成一个同事,一起讨论,一起解决问题。

和AI协作,有几个技巧:

1. 让AI参与设计

在写代码之前,先和AI讨论,这个需求,应该怎么设计,用什么架构,什么数据结构,什么算法,有哪些优缺点,有哪些需要注意的地方。AI能给你很多建议和思路,帮你完善设计。

比如,你要做一个短链接服务,先和AI讨论:"我要做一个短链接服务,每天有1000万的访问量,应该怎么设计?用什么数据库?短码怎么生成?怎么处理高并发?"AI就能给你一个详细的设计方案,包括架构、数据库、短码生成算法、缓存策略、高并发处理等,你可以在这个基础上,讨论和优化。

2. 让AI帮你review代码

代码写完了,可以让AI帮你review,看看代码有没有问题,有没有bug,有没有可以优化的地方,有没有不符合规范的地方。AI能从一个客观的角度,帮你找出很多问题,有些问题,你自己看,是看不出来的。

比如,把你写的代码,贴给AI,说:"帮我review一下这段代码,看看有没有bug,有没有性能问题,有没有可以优化的地方。"AI就能给你详细的review意见,包括潜在的bug、性能瓶颈、代码风格问题、优化建议等,非常有价值。

3. 和AI一起调试

代码有bug,调试不出来,可以和AI一起调试,把你的调试过程、发现的线索、报错信息,都告诉AI,让AI帮你分析,可能的原因是什么,下一步该怎么排查。AI能给你很多思路,帮你更快地定位bug。

比如,你可以说:"我的代码,运行的时候,偶尔会出现数据不一致的情况,我检查了代码,没有发现明显的bug,数据库是MySQL,用了事务,可能是什么原因?该怎么排查?"AI就能给你很多可能的原因,比如,事务隔离级别、并发竞争、索引问题、主从延迟等,以及对应的排查方法,帮你更快地定位问题。

4. 让AI教你新知识

遇到不懂的技术、概念、算法,可以让AI教你,用通俗易懂的语言,给你解释,还可以给你举例子,写示例代码。AI就像一个耐心的老师,随时可以问,不用怕问的问题太简单。

比如,你不懂什么是一致性哈希,可以问AI:"什么是一致性哈希?解决了什么问题?原理是什么?用Python写一个简单的实现。"AI就能给你详细的解释,从问题背景,到原理,到实现,一步步讲清楚,还能给你示例代码,帮你快速理解。

五、注意事项:AI不是万能的

虽然AI辅助编程,很强大,但也不是万能的,在使用的时候,要注意一些问题,不能完全依赖AI。

1. 仔细检查AI生成的代码

AI生成的代码,不一定是正确的,可能有bug,可能有安全漏洞,可能性能不好,可能不符合你的需求。所以,对于AI生成的代码,一定要仔细检查,逐行阅读,理解每一行的意思,确认逻辑正确,没有问题了,再使用。

不要因为AI生成的代码,看起来很合理,就直接用,那样,可能会引入严重的bug,甚至安全漏洞。我就遇到过,AI生成的代码,看起来很对,但有一个边界条件,没处理好,导致线上出了bug,排查了很久,才发现是AI生成的代码的问题。

所以,一定要仔细检查,AI生成的代码,要像检查同事写的代码一样,严格要求。

2. 理解代码,不要复制粘贴

用AI工具,很容易陷入复制粘贴的模式,AI生成什么,就用什么,自己不理解。这样,虽然短期看,效率很高,但长期来看,对你的技术成长,没有好处,而且,一旦出了问题,你不知道怎么排查和修复。

所以,用AI生成代码的时候,一定要理解代码,知道它为什么这么写,原理是什么,有哪些优缺点。把AI工具,当成一个学习的助手,而不是一个替代你思考的工具。这样,既能提升效率,又能提升自己的技术能力。

3. 注意代码安全和隐私

很多AI辅助编程工具,是云端的,需要把代码上传到云端,才能分析和生成。对于一些敏感的代码,比如,涉及商业机密、用户隐私、安全相关的代码,要注意,不要随便上传到云端,避免泄露。

如果项目对隐私要求很高,可以选择支持本地部署的AI工具,在自己的服务器上运行,代码不需要上传到云端,更安全。

另外,AI生成的代码,可能会有安全漏洞,比如,SQL注入、XSS、硬编码的密钥等,一定要仔细检查,确保代码安全。

4. 保持自己的判断力

AI工具,虽然很强大,但它不是万能的,它的建议,不一定是最优的,也不一定适合你的项目。所以,要保持自己的判断力,对于AI的建议,要思考一下,是不是适合你的项目,是不是符合你的架构设计,是不是有更好的方案。不要盲目地听从AI的建议,要有自己的思考和判断。

比如,AI给你推荐了一个架构方案,看起来很先进,但你的项目,规模很小,用这么复杂的架构,就是过度设计了,这时候,就要根据自己的项目情况,选择合适的方案,而不是盲目听从AI的建议。

5. 不要让AI替代你的思考

最后,也是最重要的,不要让AI,替代你的思考。AI是工具,是助手,是用来提升效率的,不是用来替代你思考的。如果什么都让AI帮你做,你自己不思考,不学习,不成长,那你的技术能力,就会越来越差,最终,会被AI替代。

所以,用AI工具的时候,要保持思考,保持学习,把AI当成一个老师,一个助手,和AI一起,解决问题,一起成长。这样,才能真正发挥AI的价值,也能让自己,不断进步。

六、写在最后

今天,分享了AI辅助编程的进阶技巧,包括写好提示词、善用上下文、高级用法、和AI协作、注意事项等方面。这些技巧,都是我在实际使用中,总结出来的,掌握了之后,能让AI辅助编程的效果,提升一个档次。

AI辅助编程,是一个趋势,未来,会越来越强大,越来越普及。作为开发者,我们要学会使用AI工具,提升自己的开发效率,让自己,从重复性的工作中解放出来,专注于更有创造性、更有价值的工作。

但同时,我们也要保持清醒,AI不是万能的,不能完全依赖AI,要保持自己的思考,保持自己的判断力,不断学习,不断成长。只有这样,才能在AI时代,立于不败之地。

最后,想说的是,工具是死的,人是活的。同样的工具,不同的人用,效果可能天差地别。关键是,要掌握正确的使用方法,不断摸索,不断总结,让工具,真正为你所用,发挥最大的价值。

希望这篇文章,能帮助大家,更好地使用AI辅助编程工具,提升开发效率。如果有什么问题或者不同的看法,欢迎在评论区交流。