---
title: TGAI_NB
canonical_url: "https://www.modelscope.cn/models/JXW7777/TGAI_NB"
md_url: "https://www.modelscope.cn/models/JXW7777/TGAI_NB.md"
repository: JXW7777/TGAI_NB
chinese_name: "TGAI NB"
last_updated: 2026-10-11
license: mit
pipeline_tag: text-generation
tasks:
  - text-generation
library_name:
  - gguf
language:
  - zh
downloads: 225
stars: 0
tags:
  - tgai
  - moe
  - llm
  - tg-format
  - tgai-go
  - cpu-inference
  - gguf
---

# TGAI_NB

> TGAI_NB - JXW7777 在 ModelScope 开源的模型。TGAI NB 是由高二学生 JXW 独立研发的中文 MoE（混合专家）大语言模型系列。从数据处理、架构设计、训练到推理部署全流程一人完成。本仓库提供 GGUF 格式，可直接用 Ollama 本地运行。

JXW7777/TGAI_NB 是 ModelScope 魔搭社区上的text-generation模型，采用 mit 许可。

- **Repository**: JXW7777/TGAI_NB
- **License**: mit
- **Tasks**: text-generation
- **Tags**: tgai, moe, llm, tg-format, tgai-go, cpu-inference, gguf
- **Downloads**: 225
- **Stars**: 0
- **Last updated**: 2026-10-11

Source: https://www.modelscope.cn/models/JXW7777/TGAI_NB

---

# TGAI NB 系列

**TGAI NB** 是由一名**高二学生 JXW** 独立研发的中文大语言模型系列。

这是一个"一个人从零做完"的项目：**数据采集与清洗、分词器、MoE 架构设计、预训练、SFT、LoRA 蒸馏、推理引擎、终端应用**，全部由作者独立完成。训练框架不使用 HuggingFace Transformers —— **Transformer Block 是逐行手写的**。

---

## ⚠️ 先读这段：V2.7 请用 `.tg` 格式

> **V2.7 的 GGUF 需要「魔改版 llama.cpp」才能加载，原版 llama.cpp 会报错。**
> 因此 **V2.7 不推荐走 GGUF 路线**，请使用本仓库的 **`TGAI_NB_V2.7.tg`** 配合
> **TGAI GO 推理引擎**（`pip install tgai-go`，一行装好，不需要编译器）。
>
> 原因见 [「为什么 V2.7 用 .TG 而不是 GGUF」](#为什么-v27-用-tg-而不是-gguf)。

---

## 🚀 V2.7 快速开始（3 步）

### 第 1 步：下载模型

```bash
pip install modelscope
modelscope download --model JXW7777/TGAI_NB TGAI_NB_V2.7.tg --local_dir .
```

文件：**`TGAI_NB_V2.7.tg`**（5.6 GB）

### 第 2 步：安装推理引擎（一行命令）

```bash
pip install tgai-go
```

**不需要编译器、不需要 CUDA、不需要联网** —— 原生推理引擎（C 语言编写）随包分发。

### 第 3 步：开始对话

```python
from tgai_go import Chat, TGEngine

engine = TGEngine()
engine.load("TGAI_NB_V2.7.tg")          # 换模型只改这一行

chat = Chat(engine, system="你是TGAI，由JXW独立研发")
print(chat.ask("你好，介绍一下你自己"))
```

**就这样。** 上下文（`<用户>` / `<TGAI>` / `<思考>` / `<回答>` 等 9 个对话标记）
由引擎按模型内嵌配置**自动拼接**，你不需要手工拼 prompt。

---

## 🖥️ TGAI GO 是什么

**TGAI GO** 是作者为本系列模型**专门自研的推理引擎**，也是本项目与"只会调 API"的项目最大的区别。

| | |
|---|---|
| 实现 | **纯 C**（约 5900 行），零外部 ML 库依赖 |
| 依赖 | Windows 版 DLL 实测**只依赖 `KERNEL32.dll`**（静态链接 CRT） |
| 覆盖 | 支持 **FP32 / FP16 / BF16 直算** 与 **INT8 / Q8_0 / Q4_0 / Q4K** 量化 |
| 后端 | CPU（AVX2）· CUDA（NVIDIA）· Vulkan（跨厂商） |
| 跨端 | 同一份源码跑 **10M 单片机 → 0.86B 手机 → 3B PC** |
| 实测速度 | V2.7 BF16 在 Ryzen 7 7730U（4 线程）约 **11 tok/s** |
| 授权 | MIT |

**它已经能做的事**：

- ⌨️ **命令行**：`chat` / `info` / `meta` / `gen` / `version` 五个子命令
- 🖥️ **PC 桌面端**：交互式 TUI（27 项可调参数、流式 Markdown 渲染、思考档）
- 🐍 **Python 库**：`pip install tgai-go`，两行代码推理
- 🔌 **OpenAI 兼容服务器**：任何 AI 客户端（openai SDK / Cherry Studio / NextChat…）可直接连接
- 📱 **手机端**：安卓 App 内置（见本仓库 `TGAI-app-*.apk`）
- 🔧 **ESP32-S3 单片机**：实测 **3 tok/s**（7.8M 参数 Q4_0 模型）

### 三种用法

#### A. 命令行（最快，一条命令就能对话）

```bash
pip install tgai-go

# 交互式对话
python -m tgai_go chat -m TGAI_NB_V2.7.tg

# 只看模型信息（不加载全部权重，秒出）
python -m tgai_go info -m TGAI_NB_V2.7.tg

# 只看模型内嵌的对话配置（看看它自带什么模板/停止符）
python -m tgai_go meta -m TGAI_NB_V2.7.tg

# 单次生成
python -m tgai_go gen -m TGAI_NB_V2.7.tg "你好"

# 检查安装是否正常
python -m tgai_go version
```

实测 `python -m tgai_go version` 输出：

```
tgai-go 1.1.0
native: OK
```

实测 `python -m tgai_go meta -m TGAI_NB_V2.7.tg` 输出（**这就是"配置内嵌"的直接证据**）：

```
render_mode      markers
chat_template    {SYS}{HIST}<用户>
{Q}
<TGAI>{TAIL}
template_turn    <用户>
{Q}
<TGAI><回答>
{A}
special_tokens   ['<用户>', '<TGAI>', '<思考>', '<回答>', '<系统>', '<记忆>', '<工具表>', '<TGH>', '<工具结果>']
turn_markers     ['<用户>', '<TGAI>', '<系统>', '<记忆>', '<工具表>']
stop_strings     ['<用户>', '<TGAI>', '<系统>', '<记忆>', '<工具表>', '<TGH>']
```

#### B. Python 库（推荐集成）

```python
from tgai_go import Chat, TGEngine

engine = TGEngine()
engine.load("TGAI_NB_V2.7.tg")

chat = Chat(engine)
chat.ask("我叫小明")            # 自动记住上下文
print(chat.ask("我叫什么？"))    # → 它记得
chat.ask("1+1", keep=False)     # 单次调用，不进历史
chat.save("对话.json")           # 存档
```

#### C. OpenAI 兼容服务器（推荐接入现有工具）

```python
from tgai_go import Chat, TGEngine, server

engine = TGEngine()
engine.load("TGAI_NB_V2.7.tg")
srv = server.start(engine, port=11435)
print(srv.base_url)     # http://127.0.0.1:11435/v1
```

然后用任意 OpenAI 客户端连接即可：

```python
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:11435/v1", api_key="dummy")
print(client.chat.completions.create(
    model="tgai",
    messages=[{"role": "user", "content": "你好"}],
).choices[0].message.content)
```

### 从源码编译（可选）

```bash
git clone https://github.com/JXW666NB/TGAI-GO
cd TGAI-GO
rebuild_cpu.bat          # Windows，约 12 秒
```

---

## ❓ 为什么 V2.7 用 `.TG` 而不是 GGUF

### 根本原因：V2.7 升级了 MoE 专家负载均衡

V2.7 的 MoE 路由**不再是纯 softmax**，而是：

```
top2(router_logits + _qb_bias) → softmax(top2)
      ↑ 新增的 per-expert 路由偏置（Quantile Balancing）
```

这个 `_qb_bias` 是**前向无条件生效**的（不是只在训练时用），
是 V2.7 用来做**专家负载均衡**的关键机制。它的量级很大：

| 实测项 | 值 |
|---|---|
| 28 层偏置绝对值范围 | **0.07 ~ 187** |
| 均值 / 标准差 | -0.77 / 32.6 |
| 各层 top-2 gap | 多数层 20~145，但 L23=1.81、L22=3.69 等层偏置压不住 |

**如果运行时丢掉这个偏置会怎样**（作者实测记录）：

```
第 0 层 hidden state cos_sim = 0.64  →  第 1 层起崩塌到 ~0
<TGAI> 之后的末位 logits:
    带偏置: <回答>(+18.36)  /  <思考>(+16.86)     ✅ 正常
    无偏置: <EOS>(3)(+7.30)                       ❌ 直接吐结束符
⇒ 表现就是"输出 0 个 token，直接结束"
```

**问题在于：llama.cpp 的 `llama` 架构本来就不支持 MoE 路由偏置**
（`models/llama.cpp` 的 MoE 分支把 `exp_probs_b` 传 `nullptr`，
也不创建 `ffn_gate_inp.bias` 张量）。
所以 V2.7 的 GGUF 必须配合**打了补丁的 llama.cpp** 才能正确运行 ——
补丁只有 2 处约 10 行：

```cpp
// ① load_arch_tensors 的 MoE 分支：新增可选偏置张量
//    （GGUF 里没有就是 nullptr ⇒ 对现有模型零影响）
layer.ffn_gate_inp_b = create_tensor(tn(LLM_TENSOR_FFN_GATE_INP, "bias", i),
                                     {n_expert}, TENSOR_NOT_REQUIRED);

// ② graph 的 MoE 分支：把 gate_inp_b 传给长重载（在 softmax 之前相加）
cur = build_moe_ffn(cur,
        model.layers[il].ffn_gate_inp, model.layers[il].ffn_gate_inp_b,
        ...);
```

> **⇒ 这就是 V2.7 推荐 `.tg` 的原因**：
> TGAI GO 引擎**原生支持 `_qb_bias`**（`tgai_engine.c` 里显式加载
> `blocks.N.moe._qb_bias` 并加到 router logits 上），
> 用户 `pip install tgai-go` 就能正确运行，**不需要编译任何东西**。

### `.TG` 与 GGUF 的其它差异

| | `.TG` | GGUF |
|---|---|---|
| **V2.7 MoE 路由偏置** | ✅ **原生支持** | ⚠️ **需打补丁的 llama.cpp** |
| 安装难度 | `pip install tgai-go` | 需自行编译补丁版 |
| 对话配置 | **内嵌在模型文件里** | 需外部 Modelfile / `--chat-template-file` |
| 采样默认值 | 模型自带，引擎自动读取 | 用户自己配 |
| 量化格式 | FP32/FP16/BF16/INT8/Q8_0/Q4_0/Q4K | 另一套（Q4_K_M 等）|

**"对话配置内嵌"也很实用**：V2.7 用了 9 个结构化对话标记
（`<用户>` `<TGAI>` `<思考>` `<回答>` `<系统>` `<记忆>` `<工具表>` `<TGH>` `<工具结果>`），
这些模板、停止符、采样默认值**全部写在 `.tg` 文件内部** ——
引擎拿到文件就知道该怎么对话，**换模型不用改一行代码**，
也不会出现"模板配错导致输出乱码"这类问题。

> V2.7 的 GGUF（`TGAI_NB_V2.7_k005_bf16.gguf`）仍然提供，
> 但**只建议已经装好补丁版 llama.cpp 的用户使用**。

---

## 📦 系列版本

| 版本 | 规模 | 上下文 | 推荐格式 | 说明 |
|------|------|--------|----------|------|
| TGAI NB V1 | 0.86B | 2K | GGUF | 系列起点，验证从零训练中文 MoE 全流程 |
| TGAI NB V2 | ~3B | 4K | GGUF | 扩展版 |
| TGAI NB V2.5 | MoE 3B | 4K | GGUF | 8 专家 top-2 |
| TGAI NB V2.6 | MoE 3B | 8K | GGUF | 质量飞跃 |
| **TGAI NB V2.7** | **MoE 3B** | **8K** | **`.tg`** ⭐ | **当前最新**：域隔离 MoE + 9 标记结构化对话 |

### 文件下载

| 文件 | 格式 | 大小 | 说明 |
|------|------|------|------|
| **TGAI_NB_V2.7.tg** | **.TG** | **5.6GB** | **⭐ 最新，配 TGAI GO 使用** |
| TGAI_NB_V2.7_k005_bf16.gguf | GGUF | 5.5GB | 需魔改 llama.cpp |
| TGAI_NB_V2.6.gguf | GGUF | 5.5GB | V2.6 全精度 |
| TGAI_NB_V2.6_Q4_K_M.gguf | GGUF | 1.7GB | V2.6 量化版（手机/低配推荐）|
| TGAI_NB_V2.5.gguf | GGUF | 5.5GB | V2.5 全精度 |
| TGAI_NB_V2.5_Q4_K_M.gguf | GGUF | 1.7GB | V2.5 量化版 |
| TGAI_NB_V1.gguf | GGUF | 1.6GB | V1 全精度 |
| TGAI_NB_V2.gguf | GGUF | 5.5GB | V2 全精度 |

> **V2.6 及更早**的 GGUF 可直接用 **Ollama / 原版 llama.cpp** 运行，见下方附录。

---

## 🧠 模型介绍

### 架构参数（V2.7）

| 项目 | 值 |
|------|-----|
| 架构 | Decoder-Only MoE Transformer |
| 参数量 | ~3B |
| 隐藏层维度 d_model | 1024 |
| 层数 n_layers | 28 |
| 注意力头 n_heads | 16（head_dim 64）|
| 前馈维度 d_ff | 4096 |
| 专家数 n_experts | 8 |
| 激活专家 n_activated | 2（top-2 路由）|
| 上下文长度 | 8192 |
| 位置编码 | RoPE（θ = 10000）|
| 归一化 | RMSNorm |
| 前馈网络 | SwiGLU |
| 权重绑定 | Embedding ↔ LM Head 共享 |
| 对话标记 | **9 个结构化标记**（V2.7 新增）|

### V2.7 的 9 个对话标记

```
<用户>  <TGAI>  <思考>  <回答>  <系统>  <记忆>  <工具表>  <TGH>  <工具结果>
```

这套标记让模型能区分「思考」与「回答」，并为**工具调用**预留了结构化槽位
（`<工具表>` / `<TGH>` / `<工具结果>`）。
标记定义、对话模板、停止符**全部内嵌在 `.tg` 文件中**，
由 TGAI GO 引擎自动读取并使用。

### 技术组件

| 组件 | 技术 |
|------|------|
| 位置编码 | RoPE（旋转位置编码） |
| 归一化 | RMSNorm |
| 注意力 | Flash Attention（`scaled_dot_product_attention`）+ KV Cache |
| 前馈网络 | SwiGLU |
| 混合专家 | MoE Top-K 路由 + 负载均衡 loss + **域隔离**（V2.7）|
| 分词器 | 自研中文分词器 |
| 推理引擎 | **TGAI GO（自研 C 引擎）** |

---

## 🏋️ 模型训练

### 训练框架

- **PyTorch 原生**，不使用 HuggingFace Transformers / Trainer
- **AMP 混合精度** + **梯度累积**（等效大 batch）
- **余弦衰减 + warmup** 学习率调度
- **MoE 负载均衡 loss**，防止专家分化
- **断点续训**：checkpoint 全量恢复（权重 / 优化器 / 调度器 / step）
- **FSDP 分布式训练**，支持多卡
- **ROCm / CUDA 双后端**适配（海光 DCU 已完成适配）

### 训练流程

1. **预训练** —— 大规模语料上训练基座模型
2. **SFT** —— 指令对话数据微调
3. **LoRA 蒸馏** —— 低秩适配器微调（r=16, alpha=32）

### 训练数据

- 中文指令数据：Belle / Alpaca-ZH / Firefly 等公开数据集
- 代码、数学、多轮对话等多类语料
- 自研数据清洗、去重、mmap 缓存管线
- V2.7 语料按 **9 标记模板**转换 + 去第三方人格/工具轨迹 + 非中英脚本过滤

### 训练成本

- **总训练成本约 ¥800**（云 GPU 租用费用）

---

## ⚡ 性能实测

在 **AMD Ryzen 7 7730U（8 核 16 线程，DDR4-3200 双通道）** 上，V2.7 BF16：

| 指标 | 实测值 |
|------|--------|
| 生成速度 | **约 11 tok/s**（4 线程即饱和）|
| 首 token 延迟 | 0.6 ~ 3.6 秒（取决于需计算的 token 数）|
| prefill | 约 50~62 ms/token，与长度无关 |
| 内存占用 | 约 5.7 GB（mmap，不全部读入内存）|

> **瓶颈说明**：每生成一个 token 需要把约 **1.71 GB 权重**过一遍内存。
> DDR4-3200 双通道实际带宽约 18.5 GB/s ⇒ 理论上限约 10.8 tok/s。
> 实测 11 tok/s，**已达内存带宽的约 92%** —— 这是内存带宽瓶颈，不是算力瓶颈。
> 想更快应**降低精度**（Q8_0 约 1.9×，Q4 约 3.6×），而非增加线程或换 GPU。

---

## ⚙️ 环境要求

| 项 | 要求 |
|---|---|
| 系统 | Windows 10/11 · Linux · macOS |
| Python | 3.8+（仅 Python 库需要；命令行版不需要）|
| 内存 | 8 GB 以上（推荐 16 GB）|
| 显卡 | **不需要**（CPU 即可；有 NVIDIA / AMD 独显可自动启用 GPU 后端）|
| 磁盘 | 约 6 GB（模型文件）|

---

## ⚠️ 已知局限（诚实说明）

模型参数量仅 3B，且为个人独立研发项目，**请勿用于专业决策**：

- **复杂推理、长文写作能力有限**
- **算术能力不稳定**：简单加减法（如 `1+1`）有时会算错
- **可能陷入复读**：偶发连续重复句式，建议降低 `max_tokens` 或调整 `repeat_penalty`
- 中文为主，**英文能力相对较弱**
- 受训练数据规模限制，部分领域知识可能缺失
- 生成内容可能存在偏差

> **如果遇到复读**，用命令行界面调参：
> ```bash
> python -m tgai_go chat -m TGAI_NB_V2.7.tg
> ```
> 对话中可以用参数命令实时调整（共 27 项）：
> ```
> /params            查看全部参数
> /set rpen 1.15     提高重复惩罚（抑制复读）
> /set dry 2.0       提高 DRY 强度（抑制复读）
> /preset precise    套用"精确"预设
> ```

---

## 📎 附录：V2.6 及更早版本使用 GGUF（Ollama）

```dockerfile
FROM ./TGAI_NB_V2.6_Q4_K_M.gguf
PARAMETER num_ctx 8192
PARAMETER temperature 0.3
PARAMETER top_p 0.9
PARAMETER repeat_penalty 1.3
TEMPLATE """{{ range .Messages }}{{ if eq .Role "user" }}<用户>
{{ .Content }}
<TGAI><回答>
{{ else if eq .Role "assistant" }}{{ .Content }}
{{ end }}{{ end }}<TGAI><回答>
"""
```

```bash
ollama create tgai-nb -f Modelfile
ollama run tgai-nb
```

---

## 🔗 相关项目

- 🚀 [TGAI-GO](https://github.com/JXW666NB/TGAI-GO) —— **自研 C 推理引擎**（本文主推）
- 🧪 [TGAI-GUI-NLP](https://github.com/JXW666NB/TGAI-GUI-NLP) —— 训练框架主仓库
- 📱 [TGAI_CHAT](https://github.com/JXW666NB/TGAI_CHAT) —— 手机端 App
- 📦 [PyPI: tgai-go](https://pypi.org/project/tgai-go/) —— Python 推理库

---

## 📜 声明

- 系统提示词：**你是TGAI，由JXW独立研发**
- 本模型为个人学习研究项目，欢迎交流与建议
- License: **MIT**（可自由使用、修改、分发，需保留原作者署名）

> **真实性声明**：本模型与推理引擎均为作者独立研发，
> 训练、评测数据均来自作者实测记录；引擎源码、Python 库、
> 手机 App 全部公开可查（见上方"相关项目"）。
> 如对任何数据有疑问，欢迎通过仓库 Issue 质询。
