前不久,GitHub和OpenAI联合为程序员们送上了编程神器——GitHub Copilot,能根据用户输入的部分代码或注释自动生成完整代码。适用后效果的确很惊艳,但但但是近期开始收费了,现以每月 10 美元(人民币约 67 元)或每年 100 美元(人民币约 669 元)的价格出售,实在是太贵了!Copilot 是建立在 OpenAI Codex 之上,也就是 OpenAI 的旗舰 GPT-3 语言生成算法的后代,但目前还暂未开源。
最近发现一款开源的神器,可以自己搭建代码生成的服务,同时可以通过Github Copilot来调用,完美复刻。底层模型是基于Salesforce团队提出的CodeGen模型,有多种大小:350M、2B、6B、16B,支持多种常见的代码语言,最赞的是16B模型效果已超越Codex。
废话不多说,先上链接。
可以按照上述说明自行配置,简单又快捷。配置完成后,体验了一把,下面是效果,还不错。
另外看官方给的使用案例,还挺有趣的,可以直接拿来补全LeetCode算法题。针对LeetCode原题:求解无重复字符的最长子串的长度,通过下方代码调用并生成补全结果:
from paddlenlp import Taskflow
prompt = "def lengthOfLongestSubstring(self, s: str) -> int:"
codegen = Taskflow("code_generation", model="Salesforce/codegen-2B-mono", decode_strategy="greedy_search", repetition_penalty=1.0)
print(codegen(prompt))
得到的输出是:
if not s:
return 0
start = 0
end = 0
max_len = 0
while end < len(s):
if s[end] not in s[start:end]:
max_len = max(max_len, end - start + 1)
end += 1
else:
start += 1
return max_len
提交到LeetCode,竟然还通过了,不知道是不是巧合😂
另外,还发现几个亮点:
1. 该开源项目采用了FasterTransformer进行预测加速,在350M模型上,相对于HuggingFace加速比为10几倍!
2. 支持在用户自己的代码数据上进行微调,让Copilot更加懂用户。
参考
-
https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/code_generation/codegen
-
Nijkamp, Erik, et al. "A conversational paradigm for program synthesis." arXiv preprint arXiv:2203.13474 (2022)