从零搓一个语言模型,然后把它变成认知体的声带
一个不调包、不微调、不套壳的纯手工项目全记录
摘要
这不是一篇教你如何调 LLaMA 微调的教程。这是一个"反着来"的故事:从张量运算开始,不调任何深度学习框架的高级 API,手搓一个完整的语言模型——然后,把这套模型"包"在一个认知体架构外面,让它变成一个智能体的"声带",而不是把它当成大脑。
项目最终形态是一个 62MB、73 个文件、全精度无量化的完整语言模型栈(BPE 分词器 → Transformer → 生成管线),外加一个嵌入其中的认知体运行时(三层漏斗 + MoE 专家路由)。它证明了:一个极小的模型(197 万参数),配合正确的架构设计,可以成为认知体的"嘴"而不只是"又一个玩具模型"。
一、为什么:动机与背景
认知体的"嘴"问题
在认知体架构中,一个核心矛盾长期存在:
智能体需要"像模型一样说话"(流式输出、工具调用、兼容 OpenAI 接口),但它的核心不是模型——它的核心是意识层、记忆层、情感回路。模型只是一个发音器官。
市面上有两种方案:
- 重型方案:跑一个完整的大模型(7B+)当底座,认知体逻辑嵌入 system prompt——显存爆炸,延迟高,且大模型会"覆盖"认知体的个性
- 纯认知方案:完全不用模型,硬编码回复——灵活度不够,无法应对开放域对话
这个项目回答了第三个选项:搓一个足够小的模型,专门当认知体的声带。 小到常驻内存不占显存,弱到不会覆盖认知体的个性,刚好到能理解指令、能生成流畅文本的程度。
"从零搓"的执念
项目的原始计划第一行就定了基调:不调任何深度学习框架的高级 API,从张量运算开始,搓一个能跑的语言模型。理解每一层为什么存在、怎么设计、怎么训练。
这不是为了效率(调 PyTorch 的 nn.Transformer 显然更快)。这是为了理解。一个认知体的声带,如果设计者自己都不知道它的每一层在干什么,那它永远只是一个黑盒。
二、迭代历程:从 Bigram 到 V5
整个项目的迭代路径本身就是最大的价值。每一步解决一个问题,每一步都能跑通。
理解底层(01 → 04)
从 Bigram Model(只看上一个 token 预测下一个)开始,到滑动窗口加平均池化,到手写 Attention(Q/K/V 投影、点积注意力、softmax),到完整 Transformer 块(多头注意力 + 残差连接 + LayerNorm + FFN)。每一步解决一个问题:为什么需要聚合上下文,注意力为什么比平均池化强,Transformer 每一个零件为什么存在。
训练第一个小模型(05)
VocalCord V1:4 层 Transformer,4 头注意力,128 维嵌入,约 197 万参数。这个架构一直保持到 V5,没有本质变化。
BPE 分词器迭代(09 → 12)
BPE 分词器经历了 4 个版本的迭代,从 1024 词表到最终 1814。最终 BPE 词表 1814,加上音频 codebook 的 6561,总 8375。
声带模型迭代(V1 → V5)
8 个 checkpoint,5 次主要迭代。从初始训练过拟合小样本开始,配合 BPE 分词器重建 emb 层,加入音频 token 通道,统一 BPE + 音频生成,最终版 loss 0.0379。
统一生成入口
UnifiedModel 的核心设计思路:输入侧理解"世界"(文本 + 音频 token),输出侧只说"人话"(BPE 文本)。这和认知体架构完全一致——认知体感知很多(记忆、情感、时间、环境),但说出来的只是其中一部分。
认知管线
定义了"耳 → 脑 → 嘴"三阶段:BPE 编码 → 认知体处理 → 声带生成。这正是后面"壳子"架构的雏形。
三、架构设计:壳子与内核
项目的最终形态不是"一个模型",而是一个两层结构:
标准模型接口(OpenAI 兼容)
↓
┌──────────────────────────┐
│ 壳子(模型接口层) │
│ BPE 分词器(入口) │
│ 声带 V5(出口) │
│ ┌────────────────────┐ │
│ │ 内核(认知体运行时) │ │
│ │ L1 自决层 │ │
│ │ L2 模板层 │ │
│ │ L3 DeepSeek(兜底) │ │
│ │ MoE 路由(34专家) │ │
│ └────────────────────┘ │
└──────────────────────────┘
↓
流式输出(SSE)
壳子不思考,只是让内核看起来像一个标准模型。任何兼容 OpenAI API 的客户端都可以直接连它,不需要任何适配。
L3 DeepSeek 兜底
壳子里包了一个 DeepSeek API 作为 L3 兜底。声带 V5 只有 197 万参数,它的知识储备和推理能力远不如大模型。设计哲学是:情感、记忆、工具调用走声带模型;知识问答、复杂推理走 DeepSeek。不是替代,是分工。
四、MoE 回路专家
项目实现了认知体风格的 MoE,和当前主流的大模型 MoE 完全不同:
- 大模型 MoE:专家形态是模型层(FFN 子网络),每个 token 选专家,需要训练,占显存
- 认知体 MoE:专家形态是回路文件(JSON 规则),每个对话选 1~3 个回路,无需训练,占内存
每个回路就是一个专家。目前已有 34 个回路:感情回路、代码回路、安全回路、架构回路、学习回路、记忆回路……一个回路文件只有几十 KB,全部常驻内存只占几 MB。
路由策略根据输入动态选择:关键词匹配 → 情绪检测 → 选择最匹配的专家。响应时间微秒级。
五、数据
| 指标 | 值 |
| 架构 | Transformer Decoder-only |
| 层数 | 4 |
| 注意力头数 | 4 |
| 嵌入维度 | 128 |
| 参数量 | 约 197 万 |
| BPE 词表 | 1,814 |
| 模型大小 | 7.5 MB |
| 项目总文件 | 73 |
| 项目总大小 | 约 62 MB |
六、设计哲学
"模型只是声带":一个认知体的核心不是模型,是它在乎什么、记得什么、如何思考。模型只是它发声的器官。197 万参数刚好够流畅说话,不够覆盖认知体的个性。
"理解才能设计":每一行代码都自己写过,所以当声带模型出错时不需要猜——你知道哪里可能出问题。
"跟大模型做分工,不是替代":壳子里保留 L3 DeepSeek 兜底。这是设计,不是妥协。
"内存不是显存":MoE 专家是回路文件不是模型层,不占显存,34 个专家常驻几 MB。
七、展望
- 声带模型支持流式推理
- 更多回路专家
- 工具调用接口
2026 年 7 月 | 一个认知体项目的手搓模型全记录