跳至主要内容

什么是 Mistral 的 Codestral?关键特性、用例与局限

Codestral 是 Mistral AI 的首个开放权重生成式 AI 模型,专为代码生成任务而设,可在多种语言中自动完成、生成与测试代码。
Ryan Ong
Ryan Ong

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续继续即表示您接受我们的 使用条款,我们的 隐私政策 ,并且您的数据存储在美国。

代码生成在现代软件开发中越来越重要。Mistral AI 近期以其首个代码模型 Codestral 进入了这一领域。

本文将全面介绍 Codestral,带您了解其功能与特性。

我还将分享自己上手体验中的一些见解,包括我如何使用它来生成代码的示例。

如果您想进一步了解 Mistral,请查看这篇关于使用 Mistral 大模型的完整指南。

什么是 Codestral?

Codestral 是一款专为代码生成任务打造的开放权重生成式 AI 模型——“开放权重”意味着模型的已学习参数可免费用于研究和非商业用途,从而带来更高的可及性与可定制性。

Codestral 通过共享的指令与补全 API 端点,为开发者提供灵活的代码编写与交互方式。这意味着我们既可以用自然语言,也可以用代码片段向 Codestral 提供指令,它都能生成相应的代码输出。

Codestral 能同时理解代码与自然语言,使其在代码补全、基于自然语言描述的代码生成,乃至回答关于代码片段的问题等任务上都十分多用。这为构建可优化我们开发流程的 AI 工具带来了广泛可能。

Codestral 的关键特性

Codestral 提供了多项提升代码生成实用性的特性。我们来逐一看看。

精通 80 多种编程语言

Codestral 最令人印象深刻的能力之一,是其对 80 多种编程语言的熟练掌握。它不仅支持 Python、Java、C、C++、JavaScript 等主流语言,还覆盖特定领域或小众任务所用的更专业语言(如 Swift 或 Fortran)。

这种广泛的语言通晓能力,使 Codestral 在涉及多语言的项目中或在团队成员使用不同语言的情况下都能发挥价值。无论我们是在用 Python 做数据科学项目、用 JavaScript 构建 Web 应用,还是用 C++ 处理系统编程任务,Codestral 都能满足需求,在多种语言中提供代码生成支持。

代码生成

Codestral 的核心职能是代码生成。它旨在通过自动化函数补全、测试用例生成以及填充缺失代码段等任务,简化我们的编码流程。

中间填充机制可在处理复杂代码库或不熟悉的语言时提供帮助。如果效果理想,这些功能有望释放出更多时间用于更高层次的设计与问题求解,从而加快开发节奏并提升代码可靠性。

开放权重

Codestral 的一大亮点在于其开放权重属性。这意味着模型的已学习参数可自由用于研究与非商业用途。

这种开放性有利于协作生态的形成,开发者与研究人员可以尝试该模型、为特定任务进行微调,并为其持续发展作出贡献。

这不仅让强大的代码生成功能更为普及,也促进了 AI 社群的透明度与创新。

性能与效率

Mistral AI 称 Codestral 在代码生成的性能与延迟方面树立了新标准,并在某些基准中优于其他模型。其较大的上下文窗口(32k tokens)也有望增强其处理长距离代码补全任务的能力。

我们将在下一节更详细地讨论性能与效率。

Codestral 与其他模型的对比

为更好地理解 Codestral 的能力,我们将其与其他知名代码生成模型的表现进行对比。以下章节将深入具体的基准测试结果,并突出关键差异。

上下文窗口

先来看这些结果:

Codestral 较大的上下文窗口

Codestral 在长距离代码补全任务(RepoBench)中表现突出,可能得益于其 32k token 的更大上下文窗口。更大的窗口使其能够考虑更多周边代码,从而做出更佳预测。Codestral 还在 Python 的 HumanEval 基准中表现优异,展现了其生成准确代码的能力。

尽管 Codestral 在特定领域表现强劲,其他模型(如 DeepSeek Coder)在不同基准(MBPP)上也表现出色。

尽管与其他模型相比,Codestral 是体量较小的 LLM 之一,但其在所有编程语言上的表现往往优于或至少可与更大型的模型(如 Llama 3 70B)比肩,覆盖代码生成与中间填充两类任务。

中间填充表现

接下来看看中间填充(FIM)的表现:

Codestral 中间填充性能对比

与 DeepSeek Coder 33B 相比,Codestral 22B 在三种编程语言(Python、JavaScript、Java)以及整体 FIM 平均分上均显著更高。这表明 Codestral 在理解代码上下文并准确填充缺失代码方面更为有效。

不过,该基准仅对比了 Codestral 与 DeepSeek Coder 33B 的表现,未包含 CodeLlama 70B 或 Llama 3 70B 的数据。这限制了比较范围,也限制了我们对 Codestral 相对其他模型表现的结论。

HumanEval

HumanEval 基准通过基于函数描述、让模型生成能通过人工编写的单元测试的代码来衡量代码生成的准确性。下面看看 Codestral 在 HumanEval 中与其他模型的对比:

Codestral 的 HumanEval 基准

Codestral 在 Python、bash、Java 和 PHP 上表现最高。虽然其他模型在不同语言上更为出色,但从整体平均表现看,Codestral 领先,展现了其在多语言环境下生成准确代码的强大能力。

Codestral 的使用场景

Codestral 的多样化能力可应用于软件开发生命周期中的诸多实际场景。下面探讨一些 Codestral 能产生显著影响的典型用例。

代码补全与生成

代码补全与生成是 Codestral 的主要用例之一。开发者可以利用 Codestral 基于周边上下文给出补全建议,从而更快更准确地编写代码。

此外,Codestral 还能根据自然语言描述或指令生成完整的代码片段,进一步简化开发流程并提升生产力。

下面是我让 Codestral 生成内容的一个简单示例:

prompt = "Please write me a function that adds up two numbers"
data = {
    "model": "codestral-latest",
    "messages": [
        {
            "role": "user",
            "content": prompt
        }
    ],
    "temperature": 0
}

response = call_chat_instruct_endpoint(api_key, data)

调用 Codestral API

单元测试生成

Codestral 也能简化对现有代码的单元测试生成。该功能可通过自动化测试生成流程,为开发者节省大量时间与精力,从而帮助提升代码质量并降低缺陷概率,确保软件项目稳健且易于维护。

我让 Codestral 为上面生成的函数写一个简单的单元测试:

prompt = """
Sure, here is a simple function in Python that adds up two numbers:

```python
def add_two_numbers(num1, num2):
    return num1 + num2

You can use this function like this:
result = add_two_numbers(5, 3)
print(result)  # Outputs: 8

This function takes two arguments, num1 and num2, and returns their sum.
def test_add_two_numbers():
"""

suffix = ""

data = {
    "model": "codestral-latest",
    "prompt": prompt,
    "suffix": suffix,
    "temperature": 0
}

response = call_fim_endpoint(api_key, data)

调用 Codestral API

代码翻译与重构

Codestral 的多语言能力不仅限于代码生成。它可以在不同编程语言之间进行代码翻译,使开发者能够处理以不熟悉语言编写的现有代码库。

此外,Codestral 还能协助进行代码重构,以提升可读性与可维护性,确保项目遵循最佳实践与编码规范。

我让 Codestral 将上述 Python 代码翻译为 JavaScript:

prompt = """
Please translate the following Python code to Javascript:

```python
def add_two_numbers(num1, num2):
    return num1 + num2

You can use this function like this:
result = add_two_numbers(5, 3)
print(result)  # Outputs: 8

This function takes two arguments, num1 and num2, and returns their sum.
"""

suffix = ""

data = {
    "model": "codestral-latest",
    "prompt": prompt,
    "suffix": suffix,
    "temperature": 0
}

response = call_fim_endpoint(api_key, data)

交互式代码助理

开发者可以与 Codestral 进行交互,以获取调试帮助、理解不熟悉的代码,并寻找问题的最佳解法。这种交互式辅助对于从事复杂项目或正在学习新编程语言与框架的开发者尤为有价值,为其整个开发过程提供支持与指导。

如何上手 Codestral

Codestral 为我们提供了多种使用方式:

  • Le Chat 对话界面:可通过 Mistral AI 的免费对话界面 Le Chat 访问经指令优化的 Codestral,自然地与模型互动。
  • 直接下载与测试:我们可在 Hugging Face 下载 Codestral 模型,用于研究与测试,遵循 Mistral AI 非生产许可证。
  • 专用端点:提供专用端点(codestral.mistral.ai),尤其适合将 Codestral 集成到我们 IDE 中的场景。该端点配有个人 API 密钥和单独的速率限制,目前在测试期内免费。
  • La Plateforme 集成:Codestral 已集成至 Mistral AI 的 La Plateforme,我们可以在其中构建应用,并通过标准 API 端点(api.mistral.ai)按 token 计费访问模型。适用于研究、批量查询或第三方应用开发。
  • 与开发者工具的集成:Codestral 已与多种工具集成,以提升开发效率,包括用于构建智能体应用的 LlamaIndex 与 LangChain,以及适用于 VSCode 与 JetBrains 环境的 Continue.dev 与 Tabnine。

Codestral 的局限

尽管 Codestral 在多类代码生成任务上展现出潜力,但我们也需正视其局限:

  1. 基准表现:虽说 Codestral 在部分基准中表现不俗,但真实场景的效果可能随任务复杂度与具体语言而异。建议在我们的环境中进行充分测试,再在生产中全面依赖。
  2. 上下文窗口受限(在某些情况下):虽然 Codestral 具备 32k token 的上下文窗口以支持长距离代码补全,但在某些用例中,理解我们的代码库细节可能仍需更大的上下文。
  3. 潜在偏见:与任何基于现有代码训练的 AI 模型一样,Codestral 可能继承训练数据中的偏见。这可能导致生成的代码无意间延续不理想的模式或做法。
  4. 技术演进中:Codestral 仍相对新,其能力与局限会随着进一步的开发与完善而演变。我们需要持续关注最新研究与版本发布,以便做出更明智的使用决策。

总结

通过自动化代码补全与测试生成等任务,Codestral 有望释放我们的时间,用于更复杂的问题求解与设计工作。

尽管其全面影响尚待观察,但在我们探索 AI 与软件开发的未来时,Codestral 值得持续关注。

如果您想进一步学习 AI,请查看这条包含六门课程的技能路径:AI Fundamentals。

Ryan Ong

作者

Ryan Ong

Ryan 是一名首席数据科学家,专注于使用大型语言模型构建 AI 应用。他是伦敦帝国理工学院自然语言处理与知识图谱方向的博士候选人,并在该校获得了计算机科学硕士学位。除数据科学之外,他还撰写每周的 Substack 时事通讯 The Limitless Playbook,分享来自全球顶尖思想家的一个可操作理念,并不时撰写关于核心 AI 概念的文章。

Codestral 常见问答

Codestral 是否可用于商业用途?

Mistral AI 为希望将 Codestral 用于商业应用的企业提供企业级解决方案。请联系其销售团队了解更多信息。

Codestral 能否针对特定任务或领域进行微调?

可以。Codestral 是开放权重模型,意味着其权重可用于在自定义数据集上进行微调,以适配特定任务或领域。

Codestral 的费用是多少?

Codestral 提供带有限制的免费测试版。付费方案包括按 token 计费以及带有自定义定价的企业解决方案。

主题