综合介绍
csm-mlx 是基于苹果公司开发的 MLX 框架,专门为苹果芯片(Apple Silicon)优化了 CSM(Conversation Speech Model)语音对话模型。这个项目让用户可以用简单的方式在苹果设备上运行高效的语音生成和对话功能。开发者 senstella 在 2025 年 3 月 15 日发布此项目,目标是让更多人利用苹果设备的强大性能,探索语音技术。项目核心是提供一个轻量、易用的工具,支持生成自然语音和处理对话场景。
功能列表
- 语音生成:输入文本后生成自然的人声音频。
- 对话上下文支持:根据之前的对话内容生成连贯的语音回复。
- 苹果设备优化:利用 MLX 框架在苹果硅片上高效运行模型。
- 开源模型加载:支持从 Hugging Face 下载预训练模型(如 csm-1b)。
- 可调参数:提供采样器参数调整,比如温度(temp)和最小概率(min_p),控制生成效果。
使用帮助
安装流程
要在本地使用 csm-mlx,需要先安装一些依赖工具和环境。以下是详细步骤:
- 准备环境
- 确保你使用的是 macOS 系统,且设备搭载苹果硅片(如 M1、M2 芯片)。
- 安装 Python 3.10 或以上版本。可以用命令
brew install python@3.10
通过 Homebrew 安装。 - 安装 Git,运行
brew install git
(如果已安装可跳过)。
- 克隆项目
- 打开终端,输入以下命令下载 csm-mlx 项目:
git clone https://github.com/senstella/csm-mlx.git
- 进入项目文件夹:
cd csm-mlx
- 打开终端,输入以下命令下载 csm-mlx 项目:
- 创建虚拟环境
- 在项目目录下创建 Python 虚拟环境:
python3.10 -m venv .venv
- 激活虚拟环境:
source .venv/bin/activate
- 在项目目录下创建 Python 虚拟环境:
- 安装依赖
- 安装项目所需的 Python 包,运行:
pip install -r requirements.txt
- 注意:需要确保安装了 MLX 框架和 Hugging Face 的
huggingface_hub
库。如果遇到问题,可以单独运行pip install mlx huggingface_hub
。
- 安装项目所需的 Python 包,运行:
- 下载模型
- csm-mlx 使用预训练模型
csm-1b-mlx
。运行以下代码自动下载:python -c "from huggingface_hub import hf_hub_download; hf_hub_download(repo_id='senstella/csm-1b-mlx', filename='ckpt.safetensors')"
- 模型文件会保存在本地缓存目录(通常是
~/.cache/huggingface/hub
)。
- csm-mlx 使用预训练模型
如何使用
安装完成后,你可以用 Python 脚本运行 csm-mlx 的语音生成功能。以下是操作步骤:
基本语音生成
- 编写脚本
- 在项目目录下创建一个文件,比如
generate_audio.py
,输入以下代码:from csm_mlx import CSM, csm_1b, generate from mlx_lm.sample_utils import make_sampler from huggingface_hub import hf_hub_download # 初始化模型 csm = CSM(csm_1b()) weight = hf_hub_download(repo_id="senstella/csm-1b-mlx", filename="ckpt.safetensors") csm.load_weights(weight) # 生成音频 audio = generate( csm, text="你好,我是 csm-mlx。", speaker=0, context=[], max_audio_length_ms=10000, # 最大音频长度 10 秒 sampler=make_sampler(temp=0.5, min_p=0.1) ) # 保存音频 import audiofile audiofile.write("output.wav", audio, 22050) # 22050 是采样率
- 注意:保存音频需要安装
audiofile
库,运行pip install audiofile
。
- 在项目目录下创建一个文件,比如
- 运行脚本
- 在终端中输入:
python generate_audio.py
- 运行后会在当前目录生成
output.wav
文件,双击即可播放。
- 在终端中输入:
添加对话上下文
- 修改脚本支持上下文
- 如果想让模型根据之前的对话生成回复,可以添加
context
参数。修改代码如下:from csm_mlx import CSM, csm_1b, generate, Segment import mlx.core as mx from huggingface_hub import hf_hub_download # 初始化模型 csm = CSM(csm_1b()) weight = hf_hub_download(repo_id="senstella/csm-1b-mlx", filename="ckpt.safetensors") csm.load_weights(weight) # 创建对话上下文 context = [ Segment(speaker=0, text="你好,今天天气怎么样?", audio=mx.array([...])), Segment(speaker=1, text="很好,阳光明媚。", audio=mx.array([...])) ] # 生成回复 audio = generate( csm, text="那我们出去走走吧!", speaker=0, context=context, max_audio_length_ms=5000 ) # 保存音频 import audiofile audiofile.write("reply.wav", audio, 22050)
- 注意:
audio=mx.array([...])
需要之前的音频数据。如果没有,可以先用基本生成方式生成音频,再用其结果填充。
- 如果想让模型根据之前的对话生成回复,可以添加
- 运行并测试
- 执行
python generate_audio.py
,生成带上下文的语音文件reply.wav
。
- 执行
参数调整
- 温度(temp):控制语音的随机性。值越小(如 0.5),语音越稳定;值越大(如 1.0),语音更多样。
- 最大长度(max_audio_length_ms):单位是毫秒,比如 5000 表示 5 秒。
- 调整方法:在
make_sampler
或generate
函数中修改参数,然后重新运行脚本。
注意事项
- 如果生成音频时遇到内存问题,尝试减小
max_audio_length_ms
。 - 确保网络连接正常,因为模型首次运行需要下载权重文件,大小约为几 GB。
应用场景
- 教育辅助
用户可以用 csm-mlx 生成教学内容的语音讲解。比如,输入课文内容,生成自然语音后用于听力练习。 - 虚拟助手开发
开发者可以利用 csm-mlx 打造智能语音助手。结合对话上下文功能,让助手根据用户的话生成连贯回复。 - 内容创作
播客制作者可以用它将脚本转为语音,快速生成音频素材,节省录音时间。
QA
- csm-mlx 支持中文吗?
是的,它支持中文输入和生成中文语音。但效果取决于训练数据,建议测试具体语句以确认质量。 - 需要多大硬盘空间?
模型文件约 1-2 GB,加上依赖库和生成的文件,建议预留 5 GB 空间。 - 可以在 Windows 上运行吗?
不行,csm-mlx 专为苹果硅片设计,依赖 MLX 框架,目前只支持 macOS。