今年6月,智源发布悟道·天鹰(Aquila)大模型系列,开启国内通用大模型「开源可商用」先河。
作为目前支持中英双语、性能最好的开源“文本-代码”生成模型,AquilaCode 逾一月更新迭代,全面升级多语言代码生成模型AquilaCode-multi及 Python 语言生成模型AquilaCode-py,依然商用许可,且持续迭代开源。
AquilaCode-multi 支持 Python/C++/Java/Javascript/Go等多种编程语言的生成,在多语言代码生成评测 HumanEval-X 的各项指标上显著超过了其他开源模型。
专注于Python代码生成的AquilaCode-py 也在OpenAI 编制的 HumanEval(Python)各项评测指标中领先,Pass@1 仅次于月初 Salesforce 开源的 CodeGen2.5-7B-mono。
得益于基座模型的强大能力,AquilaCode 以小规模高质量数据实现高性能代码生成 :
Aquila-7B 基座模型在HumanEval 评测中 Pass@1 和 Pass@100 得分均超越了近期开源的 Llama2-7B。
将“质重于量”进一步彰显,AquilaCode 使用经过高质量过滤且有合规开源许可的代码数据进行训练,以仅为其他开源代码生成模型的 10~40%数据量实现了更高性能。
此外,支持开发者定制“Copilot”代码助手以提升代码编写效率亦是亮点。
使用方式一(推荐):
通过 FlagAI 加载 Aquila 系列模型
https://github.com/FlagAI-Open/FlagAI/tree/master/examples/Aquila
使用方式二:
通过 FlagOpen 模型仓库单独下载权重
https://model.baai.ac.cn/
使用方式三:
通过 Hugging Face 加载 Aquila 系列模型
https://huggingface.co/BAAI
AquilaCode
高性能代码生成
显著领先同等参数量级开源模型
AquilaCode-multi 支持 Python/C++/Java/JS/Go等多编程语言高准确率生成。
在衡量生成代码的功能正确性的多语言代码生成评测HumanEval-X评测结果中,AquilaCode-multi 在多语言代码生成任务上展现出了显著优势,Pass@1、Pass@10、Pass@100 三项评测结果中均排名第一,明显优于其他模型。
在Pass@1的指标中,AquilaCode-multi 对于各种语言,包括Python、C++、Java、JavaScript和Go的处理结果均显著优于其他模型,平均得分为22.0,比第二名CodeGeeX-13B 高出近20%。
HumanEval-X Pass@k 各模型在多语言代码生成上的平均成绩,数据来自 HumanEval-X 官方公布结果:
HumanEval-X 多语言生成能力表格 Pass@k
(Python/C++/Java/Javascript/Go):
指标说明:模型针对每个问题生成 k个代码样本,如果有任何样本通过单元测试,则认为问题已解决,并报告问题解决的总比例,即 Pass@k 得分。
pass@1
pass@10
pass@100
Aquila-7B 基座模型在HumanEval(Python)排名领先。
HumanEval(Python)是评估“文本-代码”生成模型功能正确性的代码评测数据集。同等参数量级的基座模型中,Aquila-7B 在 HumanEval(Python)代码生成评测中名列前茅,Pass@1 和 Pass@100 得分均超越了 Meta 近期开源的Llama2-7B。
表1:基座模型Base model HumanEval 评测结果,评测数据结果来自公开技术报告。
Python语言生成模型AquilaCode-py,HumanEval(Python)排名领先。
基于Aquila-7B基座模型强大的生成能力,AquilaCode在Aquila-7B基础上使用经过高质量过滤且有合规开源许可的代码数据进行训练。尽管其代码训练数据量约为其他开源代码生成模型的10~40%,但依靠小规模高质量训练数据,AquilaCode实现了更高的性能,再一次验证了“质重于量”的训练原则。
在同等参数量级的开源代码模型中,AquilaCode-py 在各项指标上排名第二,仅次于 Salesforce 发布的 CodeGen2.5-7B-mono。
以Pass@1为例,AquilaCode-py-7B 和 AquilaCode-multi-7B 的准确率分别达到了28.8%和26%,接近或超过了参数量更大的 CodeGen-mono-16B。
表2:HumanEval 评测结果,其他模型评测数据来自公开技术报告
代码生成能力展示
AquilaCode-multi 多语言代码生成展示:
评测问题:Check if in given list of numbers, are any two numbers closer to each other than given threshold.
AquilaCode-multi不但可以准确补全 Python、C++、Java、JavaScript、Go 语言代码,且补全后的代码可以成功运行。
Python 语言输入:
from typing import List
def has_close_elements(numbers: List[float], threshold: float) -> bool: """ Check if in given list of numbers, are any two numbers closer to each other than given threshold. >>> has_close_elements([1.0, 2.0, 3.0], 0.5) False >>> has_close_elements([1.0, 2.8, 3.0, 4.0, 5.0, 2.0], 0.3) True """
AquilaCode-multi 多语言代码生成模型返回的的答案:
for i in range(len(numbers) - 1): for j in range(i + 1, len(numbers)): if abs(numbers[i] - numbers[j]) < threshold: return True return False
C++ 语言输入:
/*Check if in given vector of numbers, are any two numbers closer to each other thangiven threshold.>>> has_close_elements({1.0, 2.0, 3.0}, 0.5)false>>> has_close_elements({1.0, 2.8, 3.0, 4.0, 5.0, 2.0}, 0.3)true*/#include<stdio.h>#include<vector>#include<math.h>using namespace std;bool has_close_elements(vector<float> numbers, float threshold){
AquilaCode-multi 多语言代码生成模型返回的的答案:
for(int i=0; i<numbers.size()-1; i++){ for(int j=i+1; j<numbers.size(); j++){ if(abs(numbers[i]-numbers[j])<threshold){ return true; } } } return false;}int main(){ vector<float> numbers = {1.0, 2.0, 3.0, 4.0, 5.0, 2.0}; float threshold = 0.3; bool result = has_close_elements(numbers, threshold); printf("%s\n", result ? "true" : "false"); return 0;}
Java 语言输入:
import java.util.*;import java.lang.*;
class Solution { /** Check if in given list of numbers, are any two numbers closer to each other than given threshold. >>> hasCloseElements(Arrays.asList(1.0, 2.0, 3.0), 0.5) false >>> hasCloseElements(Arrays.asList(1.0, 2.8, 3.0, 4.0, 5.0, 2.0), 0.3) true */ public boolean hasCloseElements(List<Double> numbers, double threshold) {
AquilaCode-multi 多语言代码生成模型返回的的答案:
if (numbers.size() < 2) { return false; } Collections.sort(numbers); for (int i = 0; i < numbers.size() - 1; i++) { if (Math.abs(numbers.get(i) - numbers.get(i + 1)) < threshold) { return true; } } return false; }}
JavaScript 语言输入:
/* Check if in given list of numbers, are any two numbers closer to each other than given threshold. >>> hasCloseElements([1.0, 2.0, 3.0], 0.5) false >>> hasCloseElements([1.0, 2.8, 3.0, 4.0, 5.0, 2.0], 0.3) true */const hasCloseElements = (numbers, threshold) => {
AquilaCode-multi 多语言代码生成模型返回的的答案:
const sorted = numbers.sort((a, b) => a - b); for (let i = 0; i < sorted.length - 1; i++) { if (Math.abs(sorted[i] - sorted[i + 1]) < threshold) { return true; } } return false;};
Go 语言输入:
import ( "math")
// Check if in given list of numbers, are any two numbers closer to each other than given threshold.// >>> HasCloseElements([]float64{1.0, 2.0, 3.0}, 0.5)// false// >>> HasCloseElements([]float64{1.0, 2.8, 3.0, 4.0, 5.0, 2.0}, 0.3)// truefunc HasCloseElements(numbers []float64, threshold float64) bool {
AquilaCode-multi 多语言代码生成模型返回的的答案:
for i := 0; i < len(numbers)-1; i++ { for j := i + 1; j < len(numbers); j++ { if math.Abs(numbers[i] - numbers[j]) < threshold { return true } } } return false}
VS Code AquilaCode 插件,辅助开发者编写程序
在 AquilaCode 辅助下,开发者可在 2 分钟内完成 FastAPI 的“列表”、“详情”、“修改”、“删除”等功能接口代码编写,实现成功运行,且可以从浏览器访问。
在 AquilaChat 对话模型中集成 AquilaCode,增强代码生成能力
AquilaChat 对话模型中定义了可扩展的指令规范,开发者可以将 AquilaCode 模型集成至对话模型中,实现“自然语言文本”到“代码”的生成。
开发者使用指南
智源 FlagAI 仓库中提供了详细的使用方式。推理、预训练、集成至 VSCode 的方法。
尤其值得推荐的是,开发者可以使用 AquilaCode 进行推理和预训练并集成至 Visual Studio Code 扩展,通过AquilaCode 模型来定制自己的代码助手“Copilot”,提升代码编写效率。
更多信息请查看 README 文档:
https://github.com/FlagAI-Open/FlagAI/tree/master/examples/Aquila/Aquila-code
领取专属 10元无门槛券
私享最新 技术干货