代码生成 · 开放模型 · 语言模型

Code Llama:基于 Llama 2 的开放代码模型

Code Llama 在 Llama 2 上继续训练,HumanEval 最高 67%、MBPP 最高 65%,是发布时开放模型最好成绩,支持填空与 10 万 token 上下文。

Code Llama:基于 Llama 2 的开放代码模型

快速答案

Code Llama 是 Meta AI 基于 Llama 2 构建的开放代码模型族,HumanEval 最高 67%、MBPP 最高 65%,在 2023 年 8 月发布时是公开可获得模型中的最好成绩。它提供 7B、13B、34B、70B 四种规模和三个版本:基础版 Code Llama、Python 专门版 Code Llama - Python,以及指令跟随版 Code Llama - Instruct。许可证允许研究和商业使用——这一点才是真正改变生态的关键。

把 Llama 2 专门化到代码

Code Llama 不是从零训练一个代码模型,而是从通用语言模型 Llama 2 出发,在大量代码数据上继续训练,再叠加针对具体任务的训练阶段。这个选择正是它的精髓:通过继承 Llama 2 的语言推理能力,代码模型既获得了编程能力,又没有丢掉理解指令、解释自身行为所需的自然语言能力。

发布版本分成三条线,让你不必妥协。基础模型负责通用代码生成;Code Llama - Python 在 Python 数据上进一步训练,适合以 Python 为主的团队;Code Llama - Instruct 经过指令微调,行为更安全、更听话,是大多数助手类产品真正应该部署的版本。每条线都覆盖 7B 到 70B,你可以在质量和能负担的 GPU 之间权衡。

填空与长上下文

两个工程特性把 Code Llama 和普通代码补全器区分开。第一是 infilling 填空:7B、13B、70B 的基础版和 Instruct 版可以同时利用缺失片段前后的代码来补全中间的空缺,而不只是接着前文往下写。这正是 IDE 真正需要的能力——写代码很少严格从左到右,更多是往已有文件的中间插入。

第二是上下文长度。所有模型在 16k token 序列上训练,但在最长 10 万 token 的输入上仍有提升。对代码来说,这比对普通文本更重要:单个函数往往装不下整个问题,把真实仓库的一大段代码喂给模型,常常就是「看似合理」和「真正正确」之间的差别。

关键结果

Code Llama 在多个代码基准上达到开放模型的最优表现,HumanEval 最高 67%、MBPP 最高 65%。最锋利的一个数据点是:Code Llama - Python 7B 在 HumanEval 和 MBPP 上都超过了 Llama 2 70B——一个十分之一大小的模型,仅靠代码专门化就胜过了自己的基座模型。所有版本在多语言代码基准 MultiPL-E 上也击败了当时其他所有公开可获得的模型,说明提升并不局限于 Python 或英文提示。

局限与存疑

需要诚实说清的几点。67%/65% 这个头条数字来自最大、最专门化的配置;你能在笔记本上跑的 7B 分数明显更低,所以「Code Llama 达到 67%」并不是关于大多数人实际会运行的那个模型的说法。HumanEval 和 MBPP 都是短小、自成一体的写函数任务,几乎说明不了跨文件修改、调试真实仓库或维护大型代码库的能力——而这正是代码助手至今仍然薄弱的地方。开放权重也不等于安全输出:模型仍可能生成不安全或细微出错的代码,测试、审查和依赖治理依然是你的责任,而不是模型的。

常见问题

Code Llama 是什么,谁做的?

Code Llama 是 Meta AI 于 2023 年 8 月发布的开放代码大语言模型族,通过在 Llama 2 上继续训练代码数据得到。它提供 7B、13B、34B、70B 四种规模,许可证允许研究和商业使用。

Code Llama 在 HumanEval 和 MBPP 上表现如何?

Code Llama 的 HumanEval 最高 67%、MBPP 最高 65%,是发布时开放模型中的最好成绩。值得注意的是,Python 专门版 Code Llama - Python 7B 在这两个基准上都超过了规模大得多的通用版 Llama 2 70B。

Code Llama 能在文件中间编辑代码吗?

可以。7B、13B、70B 的基础版和 Instruct 版支持 infilling 填空,即同时利用缺口前后的代码来补全中间内容——这正是 IDE 自动补全真正需要的行为,而不只是从末尾往下续写。

Code Llama 能处理多长的输入?

Code Llama 在 16k token 序列上训练,并在最长 10 万 token 的输入上仍有提升,足以喂入真实代码库的大段内容,而不只是单个孤立的函数。

应该用哪个 Code Llama 版本?

助手类产品要跟随自然语言请求,用 Code Llama - Instruct;以 Python 为主的栈用 Code Llama - Python;需要纯代码生成或继续微调则用基础版 Code Llama。在硬件预算允许范围内选最大的规模,因为质量随参数量提升。

Code Llama 真正的贡献不是刷新基准,而是给出了一个许可宽松、足够好到可以在其上构建的开放基线——原文见 https://arxiv.org/abs/2308.12950。