---
title: xiaoli-emb-v1
canonical_url: "https://www.modelscope.cn/models/shuiyu1123/xiaoli-emb-v1"
md_url: "https://www.modelscope.cn/models/shuiyu1123/xiaoli-emb-v1.md"
repository: shuiyu1123/xiaoli-emb-v1
chinese_name: "xiaoli emb v1（BitFlow-MoE 微型中文模型 GGUF 版）"
last_updated: 2026-08-08
license: mit
pipeline_tag: text-generation
tasks:
  - text-generation
library_name:
  - gguf
language:
  - zh
downloads: 5
stars: 0
tags:
  - gguf
  - moe
  - gla
  - linear-attention
  - microbit
  - embedded
  - edge-ai
  - tiny-model
  - chinese
---

# xiaoli-emb-v1

> xiaoli-emb-v1 - shuiyu1123 在 ModelScope 开源的模型。xiaoli emb v1 — GGUF 版

shuiyu1123/xiaoli-emb-v1 是 ModelScope 魔搭社区上的text-generation模型，采用 mit 许可。

- **Repository**: shuiyu1123/xiaoli-emb-v1
- **License**: mit
- **Tasks**: text-generation
- **Tags**: gguf, moe, gla, linear-attention, microbit, embedded, edge-ai, tiny-model, chinese
- **Downloads**: 5
- **Stars**: 0
- **Last updated**: 2026-08-08

Source: https://www.modelscope.cn/models/shuiyu1123/xiaoli-emb-v1

---

# xiaoli emb v1 — GGUF 版

**架构**：BitFlow-MoE（自研）· **参数**：59,131 · **词表**：149 字符 · **原生目标**：BBC micro:bit V2

GGUF 文件 `xiaoli-emb-v1.gguf`，236 KB，fp32，单文件自包含（权重 + 词表 + 超参全在里面）。

---

## 快速开始

只要 numpy，一条命令：

```bash
pip install numpy
python xiaoli_emb.py            # 交互聊天
python xiaoli_emb.py "你好吗"    # 单次提问
```

实测输出：

| 输入 | 输出 | 路由专家 |
|---|---|---|
| 你好吗 | 我很好谢谢 | E2 基础问答 |
| 你叫什么名字 | 我叫bit | E2 基础问答 |
| 什么会飞 | 鸟会飞 | E1 逻辑推理 |
| 猫吃什么 | 猫吃鱼 | E1 逻辑推理 |
| 天是什么颜色 | 天是蓝的 | E0 事实记忆 |

> 词表只有 149 个字符，不在表内的字会被静默忽略。整句都不在表里会提示换个说法。

## 文件

| 文件 | 说明 |
|---|---|
| `xiaoli-emb-v1.gguf` | 模型本体，236 KB，fp32，45 个张量 |
| `xiaoli_emb.py` | **零依赖单文件推理器**，内置 GGUF 解析，只需 numpy |
| `run_xiaoli_emb_gguf.py` | 完整版推理器，带 `--selftest` 一致性校验（需 `gguf` 包） |
| `convert_xiaoli_emb_to_gguf.py` | 从 `bitflow_moe.pt` 复现 GGUF 的转换器 |

## 正确性验证

```bash
python run_xiaoli_emb_gguf.py --selftest
```

对比原始 `bitflow_moe.pt`（PyTorch）：

| 项目 | 结果 |
|---|---|
| 权重张量逐位比对（45/45） | **0.000e+00** |
| 前向 logits 最大偏差 | 7.6e-06（fp32 累加顺序噪声） |
| 专家路由一致 | 10/10 |
| greedy next-token 一致 | 10/10 |
| 单文件版 vs 完整版 | **0.000e+00**（权重与 logits 均完全一致） |

---

## 为什么不能 `ollama run`

**GGUF 只是张量容器，能不能跑取决于运行时认不认得架构。** BitFlow-MoE 有六处与 llama.cpp 全部 122 个注册架构不兼容：

| 组件 | BitFlow-MoE | llama.cpp 支持的 |
|---|---|---|
| 注意力 | **GLA 门控线性注意力**，带 `q·z` 归一化 | softmax attention / RWKV6-7 / Mamba / KIMI_LINEAR —— 状态更新公式与张量集合均不同 |
| 位置编码 | learned **绝对位置嵌入** `pos.weight (48,40)` | RoPE |
| 层结构 | **2 层权重共享递归**（同一专家权重跑 2 次） | 每层独立权重 |
| MoE 粒度 | **block 级硬路由**，选整套 GLA+FFN | FFN 层 per-token top-k |
| 归一化 | LayerNorm **带 bias** | RMSNorm 无 bias |
| FFN | `ff1 → GELU(tanh) → ff2` 单路 | SwiGLU 三矩阵门控 |

上一代 `xiaoli v1.0` 能上 ollama，是因为它本质就是标准 Transformer，只差一个 final norm（补常数即可）。BitFlow-MoE 不同：**每一项都要重写前向**，不存在"近似映射"。

真要上 ollama 只有两条路，都不划算：

1. **给 llama.cpp 写 C++ arch 实现**（GLA 递归 + `ggml_get_rows` 动态选专家）。技术上可行，但用户得装你的 fork，达不到"一条命令下载即用"的目的。
2. **换架构重训**（把 GLA 换成标准 attention、RoPE 替换绝对位置嵌入）。那就不是这个模型了。

所以这里给的是**零依赖单文件 runner**——安装成本和 `ollama run` 相当，`pip install numpy` 之后直接跑。

## 架构

```
输入字符 → tok(149,40) + pos(48,40)
              ↓
    路由器: mean-pool → FC(40→32) → ReLU → FC(32→3) → argmax
              ↓  硬选 1 个专家
    ┌── E0 事实记忆 ┬─ LayerNorm → GLA → 残差
    ├── E1 逻辑推理 ┼─ LayerNorm → ff1→GELU→ff2 → 残差   × 2 次（权重共享）
    └── E2 基础问答 ┘
              ↓
       LayerNorm → head(40→149) → 采样(T=0.3)
```

GLA 递归：

```
g[t] = sigmoid(Wg·x[t]) ⊙ sigmoid(log_decay)
S[t] = g[t] ⊗ S[t-1] + k[t] ⊗ v[t]          # k,q 经 elu(x)+1 特征映射
z[t] = g[t] ⊙ z[t-1] + k[t]
y[t] = (q[t] · S[t]) / (q[t] · z[t] + 1e-6)
```

状态矩阵 40×40 固定，与序列长度无关 —— 这是它能塞进 micro:bit 128KB RAM 的根本原因。

## 生成参数

| 参数 | 默认 | 说明 |
|---|---|---|
| `--temperature` | 0.3 | 训练时即用此值，调高会明显胡言乱语 |
| `--greedy` | off | 确定性输出 |
| `--freq-penalty` | 0.0 | 设 `2.0` 复现 micro:bit 端的重复抑制 |
| `--n` | 20 | 最大生成 token 数，遇 `\n` 提前停止 |

上下文上限 **48 token**（含 prompt），超出会截断。这是训练时的 `CONTEXT`，别调大。

## 与 micro:bit 部署版的区别

板上跑的是 int8 量化版（`weights.bin`，58 KB），本 GGUF 是 fp32 原始精度（236 KB）。int8 量化经过 QAT，loss 从 0.0861 升到 0.0863。GGUF 版精度更高，但需要 PC 运行。

## 许可

MIT
