Transformers 与 Mamba:理解差异
要理解 Codestral Mamba 的独特之处,我们将其底层架构——Mamba 状态空间模型(SSM)——与传统的 Transformer 架构进行比较。
Transformers
以GPT-4o 为代表的 Transformer 模型通过自注意力机制,同时关注输入的不同部分,来处理复杂的语言任务。
然而,它们存在一个主要问题:二次复杂度。随着输入规模增大,其计算成本和内存使用呈指数级增长,使得在处理超长序列时效率低下。
Mamba
基于状态空间模型(SSM)的 Mamba 模型避免了这一二次瓶颈,在处理长序列时表现更佳,甚至可扩展到 100 万个 token。其运行速度最高可比 Transformer 快五倍。
Mamba 在性能上可与 Transformer 匹敌,并在长序列场景下具备更好的扩展性。其作者 Albert Gu 和 Tri Dao 指出,Mamba 具有快速推理和线性扩展能力,常常优于同规模的 Transformer,并可与规模大一倍的模型相当。

为何用于代码?
Mamba 的架构非常适合代码生成,需要在长序列中维持上下文。与在长上下文下会变慢并出现内存问题的 Transformer 不同,Mamba 的线性时间复杂度和处理“无限”上下文长度的能力,能在大型代码库中保持快速且可靠的性能。
Transformer 的注意力机制存在二次复杂度:每个 token 在预测时都会关注所有先前的 token,导致极高的计算与内存成本。随着上下文增长,训练与生成新 token 的速度显著变慢,且常引发内存溢出错误。
Mamba 通过使用 SSM 在 token 之间高效传递信息,避免了 Transformer 的二次复杂度,从而解决这些问题。其设计可高效处理长序列,是需要广泛上下文处理能力场景的有力之选。
Codestral Mamba 基准测试
Codestral Mamba(7B)在与代码相关的任务中表现出色,在 HumanEval 基准(衡量多种编程语言代码生成能力)中稳定超过其他 7B 模型。

来源:Mistral AI
具体来看,它在 Python 的 HumanEval 上实现了 75.0% 的准确率,优于 CodeGemma-1.1 7B(61.0%)、CodeLlama 7B(31.1%)以及DeepSeek v1.5 7B(65.9%)。它甚至略胜更大的Codestral(22B)模型,其准确率为 81.1%。
在 HumanEval 的其他语言上,Codestral Mamba 也保持了强劲表现。尽管其在 Bash 脚本上的得分低于其他基准,但在同级模型中仍具竞争力。
值得注意的是,在跨任务代码生成的 CruxE 基准上,Codestral Mamba 取得了 57.8% 的稳健成绩,超过 CodeGemma-1.1 7B,并可与 CodeLlama 34B 相媲美。
这些结果凸显了 Codestral Mamba 在代码生成与理解任务上的有效性,尤其是在与部分更大体量的竞品相比时。
尽管进一步在更广泛的模型与任务上进行测试与对比会更有帮助,但初步结果已将 Codestral Mamba 定位为一个有前景的开源替代方案。
设置 Codestral Mamba
下面介绍开始使用 Codestral Mamba 所需的步骤。
安装
安装 Codestral Mamba,运行以下命令:
pip install codestral_mamba
获取 API 密钥
要使用 Codestral API,您需要一个 API 密钥。获取方式如下:
- 前往 Mistral AI 注册页面并创建账号。
- 在api.mistral.ai 中,进入API Keys 选项卡,点击Create new key 以生成您的 API 密钥。

使用以下命令将您的 API 密钥设置为环境变量:
export MISTRAL_API_KEY='your_api_key'
Codestral Mamba 的应用
完成设置后,我们来看看几个示例。
代码补全
当您有一段未完成的代码片段时,可使用 Codestral Mamba 进行补全。例如:
import os
from mistralai.client import MistralClient
from mistralai.models.chat_completion import ChatMessage
api_key = os.environ["MISTRAL_API_KEY"]
client = MistralClient(api_key=api_key)
model = "codestral-mamba-latest"
messages = [
ChatMessage(role="user", content="Please complete the following function: \\n def calculate_area_of_square(side_length):\\n # missing part here")
]
chat_response = client.chat(
model=model,
messages=messages
)
print(chat_response.choices[0].message.content)
The function calculate_area_of_square(side_length) is designed to calculate the area of a square given its side length.
The area of a square can be calculated by squaring the length of one of its sides. Therefore, the function simply needs to multiply the side length by itself to get the area.
Here is how you can complete the function:
def calculate_area_of_square(side_length):
area = side_length * side_length
return area
You can also write this function in a more concise way using the exponentiation operator **:
def calculate_area_of_square(side_length):
return side_length ** 2
Both of these functions will correctly calculate and return the area of a square given its side length.
函数生成
Codestral Mamba 也可根据描述生成函数。例如,对于“请编写一个返回数字阶乘的 Python 函数。”,输出如下:
import os
from mistralai.client import MistralClient
from mistralai.models.chat_completion import ChatMessage
client = MistralClient(api_key=api_key)
model = "codestral-mamba-latest"
messages = [
ChatMessage(role="user", content="Please write me a Python function that returns the factorial of a number")
]
chat_response = client.chat(
model=model,
messages=messages
)
print(chat_response.choices[0].message.content)
Sure, here's a simple Python function that calculates the factorial of a number:
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
This function uses recursion, a method in which a function calls itself. The base case is when n is 0, in which case the function returns 1. For any other value, the function returns n multiplied by the factorial of n-1.
重构
最后,您还可以使用 Codestral Mamba 重构并改进现有代码库,例如:
import os
from mistralai.client import MistralClient
from mistralai.models.chat_completion import ChatMessage
api_key = os.environ["MISTRAL_API_KEY"]
client = MistralClient(api_key=api_key)
model = "codestral-mamba-latest"
messages = [
ChatMessage(role="user", content="""Please improve / refactor the following Python function: \\n```python
def fibonacci(n: int) -> int:
if n <= 0:
return "Input should be a positive integer."
elif n == 1:
return 0
elif n == 2:
return 1
else:
a, b = 0, 1
for _ in range(2, n):
a, b = b, a + b
return b
```""")
]
chat_response = client.chat(
model=model,
messages=messages
)
print(chat_response.choices[0].message.content)
The provided Python function is already quite well-written and efficient. However, it could be improved by adding some type hints for clarity and to provide better documentation. Here's a refactored version of the function:
def fibonacci(n: int) -> int:
"""
Calculates the nth Fibonacci number.
Args:
n (int): The position of the Fibonacci number to be calculated.
Returns:
int: The nth Fibonacci number.
"""
if not isinstance(n, int) or n <= 0:
raise ValueError("Input should be a positive integer.")
if n <= 2:
return n - 1
else:
a, b = 0, 1
for _ in range(2, n):
a, b = b, a + b
return b
I've added a docstring to the function to explain what it does. I've also added some input validation to check that the input is a positive integer and to raise a meaningful error if it's not. I've also adjusted the base cases to return `n - 1` for `n <= 2` to make the function more concise and easier to understand.
Codestral Mamba 的其他优势
Codestral Mamba 还有多项优势,使其成为颇具吸引力的选择。
多语言支持
Codestral Mamba 支持 80 多种编程语言。这使其能够灵活适配不同的开发环境,无论您使用的是 Python、JavaScript,还是其他受支持的语言。
超大上下文窗口
Codestral Mamba 可处理多达 256,000 个 token,能够管理更大的代码库并在多个文件间维持上下文。
这对于需要跟踪大量代码与依赖项的复杂项目尤为实用。
开源优势
Codestral Mamba 是开源项目,采用 Apache 2.0 许可。这意味着其代码透明、可被任何人查看、修改或贡献。
开源属性促进了社区协作,便于开发者改进并针对多样化需求进行适配。
微调 Codestral Mamba 与高级用法
尽管 Codestral Mamba 开箱即用已具备强大能力,您仍可通过微调与高级提示工程技术,进一步提升其表现并贴合您的特定需求。
在自定义数据上微调
通过在您的自有数据上进行微调,Codestral Mamba 可更好地适配具体需求。该过程涉及在与您领域或代码库相关的代码与信息上对模型进行训练。
微调可提升模型表现,使其在您的特定应用中更有效,提高代码生成的准确性与相关性。
高级提示
为解决更复杂的任务,您可以在 Codestral Mamba 中使用高级提示技术。其中一种方法是链式思维提示,即引导模型进行逐步推理。该技巧可发挥模型的高级推理能力,处理更复杂的查询,并产出更详尽、思路清晰的回答。
总结
Codestral Mamba 借助 Mamba 状态空间模型,解决了传统 Transformer 在处理长代码序列时的诸多限制。
其开源属性、多语言支持以及处理大上下文的能力,使其成为开发者的高价值替代方案。
若您想进一步了解 Mistral 的一系列大语言模型,推荐阅读以下博文:
Ryan 是一名首席数据科学家,专注于使用大型语言模型构建 AI 应用。他是伦敦帝国理工学院自然语言处理与知识图谱方向的博士候选人,并在该校获得了计算机科学硕士学位。除数据科学之外,他还撰写每周的 Substack 时事通讯 The Limitless Playbook,分享来自全球顶尖思想家的一个可操作理念,并不时撰写关于核心 AI 概念的文章。

Mistral AI 的 Codestral Mamba 是一款专为生成代码而设计的专业语言模型。
与传统的 Transformer 架构模型不同,它采用Mamba 状态空间模型(SSM),在处理长代码序列和保持效率方面具有优势。
本文将探讨这两类架构的关键差异,并带您快速上手 Codestral Mamba。