AI代码补全工具
前言
ChatGPT 把 AI 带火了,我就在想,能用它做点什么呢,总不能只让它给我们带来焦虑,也要让我们从科技浪潮中分得一点红利吧。一番查找下来,有个功能对我们程序员来说比较实用,就是 AI 的代码提示补全功能。最先找到的是 GitHub Copilot。不幸的是 GitHub Copilot 从 2022 年 8 月 22 日之后,开始收费。正式版定价 10 美元/月(人民币约 67 元),年付有优惠 100 美元/年(人民币约 669 元),每月 67 元还是有些小贵。经验告诉我,如果市场上存在一块大蛋糕,不可能只被一家公司看到,肯定有许多公司都在研究开发,有替代品。沿着这个思路,我找到了今天的主角 CodeGeeX。
CodeGeex 简介
CodeGeeX 是一个具有 130 亿参数的多编程语言代码生成预训练模型。CodeGeeX 采用华为 MindSpore 框架实现,在鹏城实验室“鹏城云脑 II”中的 192 个节点(共 1536 个国产昇腾 910 AI 处理器)上训练而成。截至 2022 年 6 月 22 日,CodeGeeX 历时两个月在 20 多种编程语言的代码语料库(>8500 亿 Token )上预训练得到。CodeGeeX 有以下特点:
- 高精度代码生成:支持生成 Python、C++、Java、JavaScript 和 Go 等多种主流编程语言的代码,在多语言代码生成基准HumanEval-X代码生成任务上取得 47%~60%求解率,较其他开源基线模型有更佳的平均性能。
- 跨语言代码翻译:支持代码片段在不同编程语言间进行自动翻译转换,翻译结果正确率高,在 HumanEval-X 代码翻译任务上超越了其它基线模型。
- 自动编程插件:CodeGeeX 插件现已上架 VSCode 插件市场(完全免费),用户可以通过其强大的少样本生成能力,自定义代码生成风格和能力,更好辅助代码编写。
- 模型跨平台开源: 所有代码和模型权重开源开放,用作研究用途。CodeGeeX 同时支持昇腾和英伟达平台,可在单张昇腾 910 或英伟达 V100/A100 上实现推理。
我使用下来,觉得 CodeGeeX 的主要功能是通过解读你的代码注释生成对应功能的代码,或者基于你前面/以前的代码给出后面/下一代码片段的补全建议。
刚开始装完 VSCode CodeGeeX 插件,写代码的时候,看不到任何反应,大概过了 3 秒钟之后,神奇的事情发生了,终于看到了代码提示内容。
我看网上的介绍,千篇一律使用的都是英文函数注释生成代码,国内程序员平常写代码,大多写的都是中文注释。为了使着顺手,测试一下,看它支不支持根据中文注释,生成代码片段,不支持的话就继续找。咱不整虚头巴脑,中看不中用的测试用例,写一个实实在在,能提高编码生产力的示例。用项目中实际用到的功能测试一下 CodeGeeX 的代码补全功能。
代码补全功能
写一个生成饼图的中文注释,不负期望,一会儿 CodeGeeX 就把用 ECharts 生成饼图的主体功能实现了, 微调一下就可以投入实际使用。不敢相信,免费的 AI 代码补全工具,功能都这么强大了。我本来还以为,免费的 AI 代码补全工具,都和 TabNine 一样,只能提示一行代码,现在看来,自己就是井底之蛙。果断卸载了 TabNine。
CodeGeex 有三种模式:
自动模式
这是默认的模式,查看用户以前的代码或代码注释,为用户生成下一行代码。它不会干扰用户写代码。仅在用户输入 3 秒钟之后给出建议代码,而建议的代码在你按 Tab 键时才生效。之所以需要等待 3s,是因为要和服务器通信,获取补全建议。存在多个候选的情况下,可以使用Alt/Option + [ 或 ] 在几个候选间进行切换。用户也可以在设置中改变"Candidate Num:。如果对现有建议不满意,可使用Alt/Option + N获得新的候选。
交互模式
按下 Control+Enter 会进入交互模式,VSCode 会分成两个版面。一个版面正常编写代码,另一个版面显示建议的代码片段。点击使用代码的时候会将提示代码填充到正常编写的代码中。在自动模式不工作的时候,可以按下Ctrl+Enter 组合键进入交互模式,继续获得提示,每按一次Ctrl+Enter, 产生一次提示。
提示模式
按下 ALT+T 进入提示模式,会给你提供一些代码解释,代码总结。使用提示 (Prompt) 模式,需要选中想要获得解释的代码,过一会儿,代码下方就会出现英文功能解释。这个模式只支持按照 Java 和 Python 两种语言的代码风格解释代码功能,个人觉得用处不大。
代码转换功能
CodeGeeX 的另外一个功能是转换不同编程语言之间的代码。这个功能一般情况下用不上,如果能提供一个 React 和 Vue 代码互转的功能,那我们公司的项目就用得上。
有一个细节要注意,安装完 CodeGeeX 插件后,会弹出一个问询窗口,询问是否愿意将自己的代码共享到 AI 平台当做训练数据使用,记得点击拒绝,免得带来一些不必要的麻烦。
本以为这么好用又免费的 AI 代码补全工具可能比较稀缺,网上找了找,VSCode AI 代码补全功能扩展还蛮多:
- Codeium 是一个人工智能驱动的代码完成工具。它支持超过 20 种语言,并与常用的 IDE 集成,个人用户永久免费。需要注册登陆后才能使用。
- Codiga 是一个平台,使开发人员能够更快地编写更好的代码。 开发人员可以使用 Codiga 编码助手直接从他们的 IDE 生成、分发和重用代码片段。
- CodeWhisperer 亚马逊的 CodeWhisperer 通过基于自然语言注释和集成开发环境 (IDE) 中的代码生成代码建议来提高开发人员的工作效率。
- Kite 是另外一种基于机器学习的代码自动补全插件。它的目标是帮助开发者更快地编写高质量的代码, Kite 支持超过 16 种语言以及 16 种代码编辑器。
- Captain Stack 它使用 Google 传输用户的搜索查询,然后从 StackOverFlow 和 Github Gist 收集答案,为用户自动完成填充,这个过程中不使用 AI。
- IntelliCode 是一种在 GitHub 項目样本上训练的实验性 AI 编码辅助工具。
先收藏备用着,哪个以后收费了不能用了,就换成其它的。