引言
生成式 AI 正接近完全自动化代码生成,但尚未达到这一里程碑。然而,次优工具就是 Code Llama!Meta 于 2023 年发布的这款最新代码生成器旨在帮助程序员完成各种编程任务。Code Llama 专注于提升开发者工作流程、生成和补全代码,并协助测试。让我们先独立探索 Code Llama,然后将其与其他专注于编码的生成式 AI 工具进行比较。
Code Llama 的工作原理
Code Llama 是 Llama 2 的代码专用变体,通过进一步在代码专用数据集上训练 Llama 2,并从这些数据集中更长时间地采样更多数据而开发。这一过程赋予了 Code Llama 更强大的编码能力,建立在 Llama 2 的基础上。它可以根据代码和自然语言提示(例如,“编写一个输出斐波那契数列的函数”)生成代码及其自然语言描述。此外,它还可用于代码补全和调试。Code Llama 支持多种流行编程语言,包括 Python、C++、Java、PHP、TypeScript(JavaScript)、C# 和 Bash。
来源:Meta AI
Meta 发布了四种规模的 Code Llama,分别具有 7B、13B、34B 和 70B 参数的模型。除了 70B 版本外,每个模型都在 500B 个代码及代码相关数据 Token 上训练,而 70B 模型则在 1T 个 Token 上训练。7B 和 13B 的 base 和 instruct 模型还具备中间填充(FIM)能力,允许它们将代码插入现有代码中,并开箱即用地支持代码补全等任务。
这些模型可满足不同的服务和延迟需求。例如,7B 模型可以在单个 GPU 上运行。虽然 34B 和 70B 模型能提供最佳结果和更优质的编码辅助,但较小的 7B 和 13B 模型速度更快,更适合需要低延迟的任务,如实时代码补全。
Code Llama 的能力
Code Llama 模型可稳定生成最多 100,000 个 Token 的上下文。所有模型均在 16,000 个 Token 的序列上进行训练,并且在输入高达 100,000 个 Token 时表现出改进。
这种处理更长输入序列的能力不仅有助于生成长程序,还为代码语言模型(LLM)解锁了新的用例。例如,用户可以向模型提供更多来自其代码库的上下文,使生成的代码更具相关性。此外,在较大代码库中的调试场景中,它也非常有用,因为开发者很难跟踪与特定问题相关的所有代码。通过允许开发者输入整段代码,模型可以协助调试大段代码。
此外,Meta 还对 Code Llama 的两个额外变体进行了进一步微调:Code Llama — Python 和 Code Llama — Instruct。
Code Llama — Python 是语言专用版本,在 100B 个 Python 代码 Token 上进一步微调。由于 Python 是代码生成方面最常被基准测试的语言,并且在 AI 社区中与 PyTorch 一起扮演重要角色,因此这个专用模型提供了额外的实用性。
Code Llama — Instruct 是经过指令微调和对齐的变体。指令微调以不同的目标继续训练过程,模型被提供“自然语言指令”输入和预期输出。这增强了它理解人类从提示中期望的能力。对于代码生成,建议使用 Code Llama — Instruct 变体,因为它们经过微调,能够用自然语言生成有用且安全的回答。
不建议将 Code Llama 或 Code Llama — Python 用于通用自然语言任务,因为这些模型并非为遵循自然语言指令而设计。如果你想完成 NLP 任务,可以选择 Llama2 或 Llama3 模型,通过集成 novita.ai LLM API 即可访问:

凭借最实惠的价格和可扩展的模型,Novita AI LLM 推理 API 赋予您的 LLM 难以置信的稳定性,并在不到 2 秒内实现相当低的延迟。通过 Novita AI LLM 推理 API,LLM 性能可以得到极大提升。
Code Llama 专用于代码特定任务,不适合作为其他应用程序的基础模型。
Code Llama 模型的用户必须遵守 Meta 的许可和可接受使用政策。
Code Llama 的性能评估
为了评估 Code Llama 与现有解决方案相比的性能,Meta 使用了两个流行的编码基准测试:HumanEval 和 Mostly Basic Python Programming(MBPP)。HumanEval 评估模型根据文档字符串补全代码的能力,而 MBPP 测试模型根据描述编写代码的能力。
基准测试表明,Code Llama 优于其他开源、代码专用的语言模型,并超越了 Llama 2 的性能。例如,Code Llama 34B 在 HumanEval 上得分为 53.7%,在 MBPP 上得分为 56.2%,这是最先进开放解决方案中的最高分,与 ChatGPT 相当。
与所有尖端技术一样,Code Llama 也存在一定风险。负责任地构建 AI 模型至关重要,因此在发布 Code Llama 之前实施了多项安全措施。作为红队测试的一部分,进行了定量评估,以评估 Code Llama 生成恶意代码的风险。使用了旨在以明确意图请求恶意代码的提示,并将 Code Llama 的回答与 ChatGPT(GPT-3.5 Turbo)进行了比较。结果表明,Code Llama 提供了更安全的回答。
如何使用 Code Llama
Code Llama 不能通过网站或平台直接访问。相反,它可以在 GitHub 上获取,并可下载到本地使用。以下是访问 Code Llama 的几种方式:
-
聊天机器人集成:Perplexity-AI,一个类似于 ChatGPT 的基于文本的 AI,已集成了 Code Llama 的 34B 参数版本。这使得用户可以通过文本提示生成代码。Perplexity-AI 提供了多个专注于特定编程语言(如 Python、Java、C++ 和 JavaScript)的变体。
-
模型集成:开源平台 Hugging Face 提供了默认模型,可用于轻松生成代码。
-
集成开发环境(IDE):Ollama 是一个 Code Llama 库,可以下载并直接集成到 IDE 中。这使得用户能够在本地使用大型语言模型。
在本教程中,我们将使用 Perplexity AI 展示 Code Llama 的能力。我们将从定义和创建排序函数开始。首先,我们将创建一个二分排序函数,它类似于插入排序,但使用二分搜索来确定元素的位置。然后,我们将询问 Perplexity 是否有其他算法与二分排序相当。最后,我们将请求 Perplexity 生成一个包含其中一些函数的 Sorting 类。
提示:
我有一個 Python 類,如果能有二分排序算法会更好。您能否创建一个 Python 类,该类接收一个值列表,使用二分排序对其进行排序,并返回排序后的列表?
回答:

提示:
是否有其他算法与二分排序相当或更好?
回答:

提示:
我实际上希望有多个排序选项来满足我的需求。您能否创建一个包含二分排序、快速排序和归并排序功能的 Sorting 类?
回答:



谁受益于 Code Llama
程序员已经使用大型语言模型(LLM)来协助完成各种任务,从编写新软件到调试现有代码。目标是提升开发者工作流程,让他们能够专注于工作中更人性化的方面,而不是重复性任务。
在 Meta,他们认为 AI 模型(尤其是用于编码的 LLM)从开放的策略中受益匪浅,这既能促进创新,也能保障安全。公开可用的代码专用模型可以推动新技术的开发,从而改善人们的生活。通过发布 Code Llama 等模型,整个社区可以评估其能力、识别问题并解决漏洞。
负责任地使用 Code Llama
Meta 的研究论文提供了关于 Code Llama 开发的详细信息、进行的基准测试、模型的局限性以及遇到的挑战,以及已采取的缓解措施和未来需要应对的挑战。
此外,负责使用指南已更新,包含关于如何负责任地开发下游模型的指导,涵盖以下方面:
- 定义内容策略和缓解措施
- 准备数据
- 微调模型
- 评估和改进性能
- 处理输入和输出层面的风险
- 在用户交互中建立透明度和报告机制
建议开发者使用代码专用评估基准来评估其模型,并对代码专用用例(例如生成恶意软件、计算机病毒或恶意代码)进行安全研究。还建议使用安全数据集进行自动和人工评估,并针对对抗性提示进行红队测试。
编码生成式 AI 的未来
Code Llama 旨在支持所有行业的软件工程师,包括研究、行业、开源项目、非政府组织和企业。然而,我们的基础模型和指令模型目前所能支持的用例仍有局限。
我们希望 Code Llama 能够激励其他人利用 Llama 2 创建新的创新工具,用于研究和商业产品。
结论
Code Llama 是一款独特的工具,旨在协助编程项目,让开发者能够将注意力从代码生成转移到项目目标上。它支持代码补全、编写人类可读的注释以及生成代码。
作为一款 AI 编程工具,Code Llama 的离线能力使其脱颖而出。它可以导入到 IDE 中,无需互联网连接。经过 100GB 数据的训练,它在代码补全和生成方面表现出色。Code Llama 有多个版本可供选择,包括 7B、13B 和 34B 参数版本,以及针对 Python 和指令的专用版本。选择最适合你需求的版本,祝你的编程之旅顺利!
novita.ai 是一个一站式平台,为无限创意提供 100 多种 API。从图像生成、语言处理到音频增强和视频处理,采用按量付费模式,让你摆脱 GPU 维护的烦恼,专注于构建自己的产品。免费试用。
推荐阅读
