---
title: LycheeAI-coder-2b-II-pro-MLX-bf16
canonical_url: "https://www.modelscope.cn/models/whcl412/LycheeAI-coder-2b-II-pro-MLX-bf16"
md_url: "https://www.modelscope.cn/models/whcl412/LycheeAI-coder-2b-II-pro-MLX-bf16.md"
repository: whcl412/LycheeAI-coder-2b-II-pro-MLX-bf16
chinese_name: "LycheeAI-coder-2b-II-pro 无损版（bf16）"
last_updated: 2026-09-18
license: apache-2.0
model_type:
  - llama
architectures:
  - LlamaForCausalLM
base_model:
  - openbmb/MiniCPM5-2B
base_model_relation: finetune
parameters: 2.5B
tensor_type:
  - BF16
library_name:
  - transformer
  - mlx
  - safetensors
language:
  - zh
  - en
downloads: 10
stars: 0
tags:
  - mlx
  - bf16
  - tool-calling
  - function-calling
  - minicpm
  - chinese
---

# LycheeAI-coder-2b-II-pro-MLX-bf16

> LycheeAI-coder-2b-II-pro-MLX-bf16 - whcl412 在 ModelScope 开源的模型。LycheeAI-coder-2b-II-pro-MLX-bf16

whcl412/LycheeAI-coder-2b-II-pro-MLX-bf16 是 ModelScope 魔搭社区上的 2.5B 参数机器学习模型，采用 apache-2.0 许可，基于 openbmb/MiniCPM5-2B 构建。

- **Repository**: whcl412/LycheeAI-coder-2b-II-pro-MLX-bf16
- **License**: apache-2.0
- **Parameters**: 2.5B
- **Base model**: openbmb/MiniCPM5-2B
- **Tags**: mlx, bf16, tool-calling, function-calling, minicpm, chinese
- **Downloads**: 10
- **Stars**: 0
- **Last updated**: 2026-09-18

Source: https://www.modelscope.cn/models/whcl412/LycheeAI-coder-2b-II-pro-MLX-bf16

---

# LycheeAI-coder-2b-II-pro-MLX-bf16

> **无损版本（bfloat16）** · v7 · 基于 [MiniCPM5-2B](https://huggingface.co/openbmb/MiniCPM5-2B) · Apache 2.0 · **5.03 GB**

这是 [LycheeAI-coder-2b-II-pro](https://huggingface.co/whcl412/LycheeAI-coder-2b-II-pro) 的**未量化**版本：
LoRA adapter 已融合进基座，权重是 bf16 全精度，**没有经过任何量化**。

**MLX 和 transformers 都能直接加载**——它是标准 safetensors 格式，所以一套权重两种用法。

> **和 `-f16` 仓库的关系**：同一份权重。两个仓库名只是为了让不同用户都能找到它——
> 想在 MLX 上找无损版的人，看到 `-f16` 这个名字不会意识到"这个 MLX 也能用"。
> 如果你只想要一份，用哪个都行，字节完全相同。
>
> 国内用户推荐 ModelScope：[modelscope.cn/models/whcl412/LycheeAI-coder-2b-II-pro-MLX-bf16](https://modelscope.cn/models/whcl412/LycheeAI-coder-2b-II-pro-MLX-bf16)

---

## 什么时候该用这个（而不是 4bit）

| 你的目的 | 用哪个 |
|---|---|
| 就想跑起来用，越省事越好 | [MLX 4bit](https://huggingface.co/whcl412/LycheeAI-coder-2b-II-pro)（1.42 GB） |
| **质量基准 / 要"没有量化误差"的结果** | ✅ **本仓库** |
| 在无损基础上做自己的量化（q4/q8/custom） | ✅ **本仓库** |
| 继续微调（续训 LoRA） | ✅ **本仓库**（4bit 不能训） |
| 转 GGUF | ✅ 本仓库，或直接用现成的 [GGUF 仓库](https://huggingface.co/whcl412/LycheeAI-coder-2b-II-pro-GGUF) |
| CUDA 卡上跑 | ✅ 本仓库 |

**一句话**：**要在它身上"再加工"，就必须用这个版本**；只是想用它，4bit 更省。

---

## 快速开始

### MLX

```bash
pip install mlx-lm
```

```python
from mlx_lm import load, generate

model, tok = load("whcl412/LycheeAI-coder-2b-II-pro-MLX-bf16")

msgs = [
    {"role": "system", "content": "你是 LycheeAI-coder-2b-II-pro，由 MiniCPM5-2B 通过 LoRA 微调而来的编程助手。回答简洁、直接，不谄媚；做不到的事直接说明，不要编造。"},
    {"role": "user",   "content": "递归是什么？一句话。"},
]

# ★ 必须套 chat template，否则会复读乱码（见下文"踩坑"）
prompt = tok.apply_chat_template(msgs, tokenize=False,
                                 add_generation_prompt=True,
                                 enable_thinking=False)
print(generate(model, tok, prompt=prompt, max_tokens=256, verbose=False))
```

实测输出：

```
递归是**函数自己调用自己**。
```

命令行也行（`mlx_lm.generate` 自己会套模板）：

```bash
python -m mlx_lm.generate \
  --model whcl412/LycheeAI-coder-2b-II-pro-MLX-bf16 \
  --prompt "用 Python 写一个二分查找，带注释。" \
  --max-tokens 256 --temp 0.4
```

### transformers

```python
from transformers import AutoModelForCausalLM, AutoTokenizer

mid = "whcl412/LycheeAI-coder-2b-II-pro-MLX-bf16"
tok = AutoTokenizer.from_pretrained(mid, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    mid, torch_dtype="bfloat16", device_map="auto", trust_remote_code=True)
```

### 工具的用法

和 4bit 版完全一致——**模型输出裸 JSON**：

```json
{"name": "calculate", "arguments": {"expression": "789*123"}}
```

完整接入代码（含多步循环、JSON 兜底解析）见主仓库的
[宿主接入章节](https://huggingface.co/whcl412/LycheeAI-coder-2b-II-pro#工具调用)。

---

## ⚠️ 踩过的坑

**1. 不套 chat template 会复读。**

直接 `generate(model, tok, prompt="递归是什么？")` 会得到类似这样的东西：

```
还是说：递归是函数自己调用自己。区别很大，对吧。还是说：递归是**把问题缩小到更小的问题**。还是说：…
```

这不是模型坏了，是你喂的是**裸补全**而不是对话。用 `tok.apply_chat_template(...)`，
或者干脆用 `mlx_lm.generate` 命令行。

**2. `enable_thinking` 记得显式传 `False`。**

模板里有 `<think>` 开关，不传的话没有默认值，输出可能带游离的 `</think>`。
想要思考内容就传 `True`，它会单独出现（不混在回答里）。

**3. 加载比 4bit 慢、占内存多——这是正常的。**

实测对比（MacBook Pro M4 / 16GB）：

| | MLX 4bit | 本仓库（bf16） |
|---|---|---|
| 磁盘 | 1.42 GB | 5.03 GB |
| 峰值内存 | 1.52 GB | ~5.5 GB |
| 冷启动 | 3.4 s | ~10 s |

差的是文件大小，不是模型质量——**两者输出质量的区别只来自量化误差**。

---

## 关于这个版本

| 项 | 值 |
|---|---|
| 基座 | MiniCPM5-2B（面壁智能 OpenBMB，Apache 2.0） |
| 精度 | **bfloat16（无量化）** |
| 微调 | LoRA（rank 8，16 层），已融合进基座 |
| 训练数据 | 精选 980 条 × 1 epoch（490 步） |
| 验收 | **26 / 27**（上一版 25/27） |
| 许可 | Apache 2.0（可商用） |

完整能力说明、局限、训练方法论见主仓库：
**[whcl412/LycheeAI-coder-2b-II-pro](https://huggingface.co/whcl412/LycheeAI-coder-2b-II-pro)**

**已知问题（简版）**：
① 无工具时算术会算错 → 在 system 里要求"一律调 calculate"；
② 通用 system 下身份可能答错 → system 里写清身份；
③ 偶发控制字符 `\x08` → 输出前过滤；
④ 偶发工具名幻觉 → 宿主必须查注册表。

---

## 📁 文件说明

| 文件 | 大小 | 说明 |
|---|---|---|
| `model.safetensors` | 5,033,556,906 B | bf16 全精度权重（已融合 LoRA） |
| `model.safetensors.index.json` | — | 分片索引 |
| `config.json` | — | 无 `quantization` 字段（= 未量化） |
| `chat_template.jinja` | — | 含 tools 支持的完整对话模板 |
| `tokenizer.json` / `tokenizer_config.json` | — | 分词器 |
| `generation_config.json` | — | 生成默认参数 |

---

## 🙏 致谢

- 基座：[MiniCPM5-2B](https://huggingface.co/openbmb/MiniCPM5-2B)（面壁智能 OpenBMB）
- 许可：**Apache 2.0**

个人项目，欢迎提 issue。有用的话 [Bilibili 关注一下](https://space.bilibili.com/3493128967293256) 🤖
