Meta 发布了 Code Llama,这是一款基于 Llama 2 构建的、专用于代码生成的大型语言模型(LLM)。它能够根据自然语言提示生成代码,在代码相关任务上达到了公开可用的 LLM 中最先进的水平。Code Llama 免费提供,可用于研究和商业用途,有望帮助开发者更高效地编写、调试和记录代码,同时降低编程学习门槛。
Code Llama 的模型类型与参数
Code Llama 提供了三种模型变体,每种都有不同的侧重点:
- Code Llama:基础的代码模型,适合通用代码生成与补全。
- Code Llama - Python:专门针对 Python 语言优化的版本,在 100B 的 Python 代码 token 上进一步微调。
- Code Llama - Instruct:经过指令微调和对齐的变体,能够更好地理解自然语言指令,推荐用于代码生成任务。
所有模型均提供三种参数规模:7B、13B 和 34B。其中:
- 34B 模型:性能最佳,提供最强的编码辅助,但速度相对较慢。
- 7B 和 13B 模型:速度更快,适合低延迟场景(如实时代码补全)。7B 模型甚至可以在单个 GPU 上运行。

Code Llama 的工作原理
Code Llama 是 Llama 2 的代码专用版本,通过在 Llama 2 的基础上使用 500B 代码 token 及相关数据 进一步训练而成。它能够:
- 从代码或自然语言提示生成代码(例如:“写一个输出斐波那契数列的函数”)。
- 生成关于代码的自然语言描述。
- 支持代码补全和调试。
中间填充(FIM)功能:7B 和 13B 的基础模型及指令模型都经过了 FIM 训练,允许模型将代码插入现有代码中,实现实时代码补全。
超长上下文支持:所有模型在 16,000 个 token 的序列上训练,但能稳定处理 最多 100,000 个 token 的输入。这使得开发者可以将整个代码库的上下文传递给模型,用于更相关的生成或大型代码库的调试。

Code Llama 支持许多流行的编程语言,包括:Python、C++、Ja va、PHP、TypeScript (Ja vaScript)、C#、Bash 等(完整列表见研究论文)。
性能评估
Meta 使用两个主流编码基准测试了 Code Llama 的性能:
- HumanEval:测试模型根据文档字符串完成代码的能力。
- Mostly Basic Python Programming (MBPP):测试模型根据描述编写代码的能力。
结果显示,Code Llama 34B 在 HumanEval 上得分为 53.7%,在 MBPP 上得分为 56.2%,优于其他公开的代码 LLM,与 ChatGPT 相当。

使用指南与建议
- 代码生成任务:建议使用 Code Llama - Instruct,因为它经过指令微调,能更好地理解自然语言指令并生成安全、有用的答案。
- Python 项目:Code Llama - Python 提供了额外的实用性,尤其适合 AI 社区中大量使用 Python 和 PyTorch 的场景。
- 通用自然语言任务:不建议使用 Code Llama 或 Code Llama - Python,它们并非为此设计,应使用基础模型或专门的自然语言模型。
- 许可与安全:使用 Code Llama 时必须遵守 Meta 的许可和可接受使用政策。Meta 对模型进行了红队测试,评估了生成恶意代码的风险,结果显示 Code Llama 的回答比 ChatGPT 更安全。

小提示
- 若你需要在资源有限的设备上运行,7B 模型 可在单个 GPU 上部署,速度很快。
- 若追求最佳编码质量,34B 模型 是首选,但需要更强大的计算资源。
- 利用 Code Llama 的 100K token 上下文,你可以在调试时将整个文件甚至多个文件传递给模型,大幅提升相关性和准确性。
常见问题
Q1:Code Llama 完全免费吗?
A:是的,Code Llama 免费提供,可用于研究和商业用途,但需要遵守 Meta 的许可协议和使用政策。
Q2:如何选择最适合我的模型变体?
A:如果你需要理解自然语言指令来生成代码(例如:“写一个函数……”),选择 Code Llama - Instruct;如果你的项目主要是 Python,选择 Code Llama - Python;否则使用基础的 Code Llama 即可。参数大小上,追求速度选 7B/13B,追求最佳质量选 34B。
Q3:Code Llama 支持哪些编程语言?
A:官方支持 Python、C++、Ja va、PHP、TypeScript (Ja vaScript)、C#、Bash 等主流语言。更多语言细节可参考研究论文。
Q4:Code Llama 能否用于非代码的自然语言任务?
A:不推荐。Code Llama 专门为代码任务优化,不擅长处理通用的自然语言任务(如问答、文本摘要等)。这类任务应使用 Llama 2 或其他通用语言模型。
Q5:我可以在哪里获取 Code Llama 的模型和训练方法?
A:Meta 提供了模型参数和训练方法,可在 GitHub 存储库中找到(https://github.com/facebookresearch/codellama)。
Code Llama 的发布为开发者社区带来了强大的编码助手,无论是编写新软件、调试现有代码,还是学习编程,它都能显著提升效率。随着开放生态的不断完善,我们期待 Code Llama 在更多场景下释放潜力,推动 AI 辅助编程的进一步发展。
