---
title: AI-XiaoFang-Covi2
canonical_url: "https://www.modelscope.cn/models/fanggamecompany/AI-XiaoFang-Covi2"
md_url: "https://www.modelscope.cn/models/fanggamecompany/AI-XiaoFang-Covi2.md"
repository: fanggamecompany/AI-XiaoFang-Covi2
chinese_name: "AI 小方 Covi2 源码包"
last_updated: 2026-09-27
library_name:
  - pytorch
downloads: 0
stars: 1
---

# AI-XiaoFang-Covi2

> AI-XiaoFang-Covi2 - fanggamecompany 在 ModelScope 开源的模型。🤖 AI 小方 (XiaoFang AI)

- **Repository**: fanggamecompany/AI-XiaoFang-Covi2
- **Downloads**: 0
- **Stars**: 1
- **Last updated**: 2026-09-27

Source: https://www.modelscope.cn/models/fanggamecompany/AI-XiaoFang-Covi2

---

# 🤖 AI 小方 (XiaoFang AI)

---

> # 🚨 装之前先看这一条（不看会跑不起来）
>
> **Covi 2 有两种拿法，挑一种就行（别重复下）：**
>
> | 拿法 | 你拿到什么 | 体积 | 去哪拿 |
> |------|-----------|------|--------|
> | 🅰️ **装机包 · 全量**<br>（给"想直接跑"的人） | **源码 + 四档 GGUF 模型 + llama.cpp 运行时 + 3 张默认背景 + 全部历史版本**，一个包全带齐，**解压完就能跑，中间不用再下任何东西** | **19.84 GB** | **魔搭（ModelScope）**<br>文件：`AI-XiaoFang-Covi2-v0.2-FULL.7z`<br>👉 见下方「**全量装机包**」一节 |
> | 🅱️ **源码包 · 瘦身**<br>（给"想翻代码 / 省流量"的人） | **只有源码**：代码、插件、Web 界面、历史版本。<br>**四档模型（11.8 GB）和运行时这两个大件不在里面**，得自己跑脚本下 | 约 **92 MB** | **魔搭**（逐文件浏览）<br>或 **GitHub Release**<br><https://github.com/xiaofangstudio/AI-Xiaofang/releases/tag/v0.2-covi2> |
>
> **要是选了 🅱️（源码包），这两个大件必须自己补齐：**
>
> | 缺的大件 | 体积 | 去哪下 | 怎么下 |
> |---------|------|--------|--------|
> | 千问 3.5 四档 GGUF（0.8B / 2B / 4B / 9B）<br>+ 四份视觉投影 `mmproj-F16.gguf` | **11.8 GB** | **魔搭（ModelScope）官方源**<br>`unsloth/Qwen3.5-0.8B-GGUF`<br>`unsloth/Qwen3.5-2B-GGUF`<br>`unsloth/Qwen3.5-4B-GGUF`<br>`unsloth/Qwen3.5-9B-GGUF` | 双击运行 **`Covi2_模型\_下载模型.ps1`**<br>脚本自动从魔搭拉全这 8 个文件 |
> | llama.cpp 运行时<br>（`llama-server.exe` + CUDA 12.4 全套 DLL） | **1.1 GB** | llama.cpp 官方 release<br>（Tag `b11160`，CUDA 12.4 版） | 双击运行 **`Covi2_运行时\_拉取运行时.ps1`**<br>12 路并发拉，速度更快 |
>
> **一句话记住：`想省事 → 直接拿 19.84 GB 装机包，一次到位；想省流量 → 拿源码包，再跑那两个下载脚本`。**
>
> 这两个脚本都可以**重复执行**：下到一半断了、窗口关了、网络抖了，**再跑一次自动断点续传**，不用手动删残留。
>
> 👉 **源码包的两个入口，各有各的用法，挑顺手的那个就行：**
>
> | 去哪拿 | 拿到的是什么 | 适合什么场景 |
> |--------|-------------|-------------|
> | **魔搭（ModelScope）**<br><https://modelscope.cn/models/fanggamecompany/AI-XiaoFang-Covi2> | **完整源码 · 一整个项目目录**<br>（含全部代码、插件、Web 界面、历史版本）<br>可在线逐文件浏览、单文件下载，**不用解压** | 想翻代码、只想取其中某几个文件、想直接看历史版本 |
> | **GitHub**<br><https://github.com/xiaofangstudio/AI-Xiaofang/releases/tag/v0.2-covi2> | **打包好的源码压缩包 `.7z`**（约 92 MB）<br>一次下全，解压即用 | 想一次性拿全量源码、离线留存、不打算一个个点 |
>
> **这两处内容是一样的，别重复下。** 魔搭那边适合"翻"，GitHub 那边适合"整包搬走"。
>
> ---

一个**本地运行**的中文 AI 助手，由「小方工作室」开发。小方全程跑在你自己的电脑上，不调用任何云端大模型 API。

> 🎮 小方工作室 · 用心做好游戏 · [fanggame.company](https://fanggame.company)
> 📧 联系：xiaofangstudio@outlook.com

### 📌 关于"自研"这件事，先说清楚

小方的研发分两个阶段，**分界线是 Covi 2**：

| 阶段 | 版本区间 | 性质 | 说明 |
|------|---------|------|------|
| 🧪 **纯自研** | `v0.1 → Covi 1` | **100% 自研** | 整套 Transformer（注意力 / 归一化 / 前馈 / 反向传播）**全是纯 NumPy / CuPy 手写**，不用 PyTorch、不用任何现成 LLM 框架，连权重都是自己训练出来的 |
| 🤝 **半自研** | **`Covi 2` 起** | **自研 + 千问融合** | **自研的判断层**（前置 + 后置）+ **千问 3.5 的表达层**（生成主力）融合成一条链；千问只当"嘴"，**怎么想、该不该答、答完怎么验，仍然是小方自己说了算** |

> 所以准确的说法是：**Covi 1 及之前是纯自研，Covi 2 之后是半自研。** 这么做的原因是——自研引擎在"判断力"上很强（路由、情绪、违禁、检索、验算都是自己搓的），但在"长文本表达"上受限于单机算力；把千问接进来只补"表达"这一环，能让小方在**同样的低配电脑上**答得更好，而不必把整套引擎推倒重来。

> 当前最新版本：**Covi 2 · 四档产品线（Satellite / Asteroid / Planet / Corona）**
>
> - **Satellite** · 千问 3.5 0.8B · 上下文 8192 —— 最快 · 轻量日常 · 秒回
> - **Asteroid** · 千问 3.5 2B · 上下文 8192 —— 轻快 · 日常聊天与短问答
> - **Planet** · 千问 3.5 4B · 上下文 12288 —— 主力 · 复杂问答与写代码
> - **Corona** · 千问 3.5 9B · 上下文 16384 —— 最强 · 长题深想 · 多模态全开
>
> 🖥️ **这一版最大的变化：Web 端成为主要交互方式**——本地起服务、独立窗口、模型三级下拉、思考强度滑块、图片/视频多模态、历史对话管理、磨砂玻璃皮肤……CLI 仍在，但**默认推荐走 Web**。
>
> 🔁 **千问的 GGUF 一个字节都没改**：小方不改模型，身份靠**系统提示词注入 + 输出端净化**实现——所以千问那 4 档模型可以直接从**魔搭官方**下载，不需要小方自己托管。

---

## 🚀 Covi 2 到底改了什么（重大改革一览）

从 Covi 1 到 Covi 2，不是"加几个功能"，是**六处结构性改革**：

| # | 改革 | Covi 1 及之前 | Covi 2 |
|---|------|--------------|--------|
| 1 | **架构** | 纯自研单体：一套自研 Transformer 从头干到尾 | **三段式融合链**：自研判断层 → 千问表达层 → 自研复核层 |
| 2 | **交互重心** | 命令行 CLI（终端窗口、F1–F6 键位） | **Web 端成为主要交互方式**（独立窗口、流式、历史对话、滑块），CLI 保留 |
| 3 | **多模态** | 无（纯文本进出） | **图片 + 视频**：点按钮 / `Ctrl+V` 粘贴 / 拖拽，mmproj 视觉投影按需懒加载 |
| 4 | **产品线** | 三档 = 三个自研 `d_model`（Lite 2.07B / Pro 2.40B / Ultra 2.50B） | **四档 = 千问 3.5 四个 GGUF**（Satellite 0.8B / Asteroid 2B / Planet 4B / Corona 9B） |
| 5 | **插件生态** | 无（界面写死） | **从零长出一整套**：皮肤 + 技能（纯 Markdown 即插）+ 完整 Agent Skills（Remotion 官方 12 个 Skill） |
| 6 | **运行时** | 全自研推理（纯 NumPy / CuPy 手写） | 融入 **llama.cpp 运行时**（`llama-server` 子进程流式），自研层负责判断与复核 |

除了这六处，还有几条"看不见但很关键"的：

- **身份机制**——**不改模型**。千问的 GGUF 一个字节都没动，身份靠 `xiaofang_identity.py` 三层注入（GGUF 头审计 → 系统提示词 + 对话模板 → 输出端净化）。
- **学习机制换了老师**——自研网络照旧做反向传播，但监督目标变成**千问这一轮交付的句子**：拿千问当老师，越聊越贴自己的口径。
- **工程化补齐**——新增**版本注册表**（`xiaofang_versions.py`，两代引擎形状不同也能统一调度）、**显存管家**（`xiaofang_gpu.py`）、**子进程连坐保险**（`xiaofang_job.py`，不留后台）、**依赖指纹**（`DEP_SIG`，新依赖必定补装）。
- **模型分发方式**——千问那 11.8GB 不托管，直接指向**魔搭官方源**；用户跑一条脚本就下好，小方自己不当二道贩子。

---

## ✨ 它能做什么

小方是一个贴心的本地 AI 助手，主打**有性格、有情绪、会思考**。你可以：

| 场景 | 举例 |
|------|------|
| 🖥️ **Web 端为主交互（Covi 2 新增）** | 本地起服务、**像应用一样弹独立窗口**（不是浏览器标签页）；**模型三级下拉**随时切档、**思考强度滑块**现场调深浅、**历史对话**可新建/删除/改名、流式打字机 + 消息排队、**磨砂玻璃**皮肤与背景图、技能栏、显存滑块——**关掉窗口小方就跟着退**，不留后台进程 |
| 🖼️ **多模态（Covi 2 新增）** | **直接丢图片进去**：点附件按钮、`Ctrl+V` 粘贴、或拖拽都行（带缩略图预览），小方**真看图**再回答；视频（`.mp4 / .mov / .mkv / .webm`，≤64MB）也能挂上来（挂上画播放图标）。视觉投影（mmproj）**按需懒加载**，不用就不占显存 |
| 🧠 **四档产品线（Covi 2 新增）** | Satellite 0.8B / Asteroid 2B / Planet 4B / Corona 9B——**同一套小方，四副脑子**：从"秒回"到"长题深想 + 多模态全开"，按机器和需求挑 |
| 🤝 **融合架构（Covi 2 新增）** | 自研判断层（意图/检索/违禁/验算）**前置把关** → 千问生成主力**中间表达** → 自研后置层**复核净化**；还有条暗线：**千问每交付一句，小方自己的网络就拿这轮当训练对做一次反向传播**——拿千问当老师继续长 |
| 💬 日常聊天 | 「你好呀」「今天心情怎么样」 |
| 🧠 两层嵌套深想 | 复杂问题先"想清楚"再答：**由 Transformer 本体逐词生成**思考 → 自验 → 第二轮再想 → 再验 → 才交付（可开启打字机效果） |
| 👥 多头注意力 | **28 头注意力**精准贴合你的问句意图，不是模板复读 |
| 📈 会自己学 | 权重**不再固定**：AdamW 优化器 + 反向传播 + LoRA 低秩，边聊边学，成果落盘下次接着用 |
| 😊 情绪互动 | 识别高兴/难过/生气，用匹配语气回你 |
| 😂 听得懂梗 / 看得懂 emoji | 内置 **36 条网络梗 + 62 个 emoji 释义**：`破防了`、`绝绝子` 接得住，`🗿` 读得出是"无语凝噎" |
| 🌤️ 联网搜索 | **全局自动**判断该不该上网（不用你说"搜一下"）：先查本地库 → 库里没有再联网 → 进网页读正文；写代码时自动加权 **GitHub / Gitee / CSDN** |
| ⛅ 实时天气（v1.8 新增） | 问「今天北京天气」直连 **wttr.in 真实气象接口**（免费无密钥）拿实时数据，**WW 天气代码自动转中文**（113=晴 / 302=中雨 / 389=强雷阵雨…）；命中失败才回落天气资讯站点 |
| 🎯 方言幽默 | 接梗、讲笑话、写小诗、编故事 |
| 🧩 记忆陪伴 | 记住你之前说过的事（**含长期事实**：怎么称呼你、喜好、所在城市），下次接着聊 |
| 🔢 高难数学 | 三元一次方程组、矩阵加/乘/行列式、方程、根号/三角/对数 |
| 💻 真写代码 | 18 门语言（Python/JS/C/Java/Go/Rust…）给出**可跑的完整实现 + 语言标注代码块**，不糊弄 |
| ✍️ 作文定向 | 认题目、认字数、认「必须包含 X、Y」要点，按目标字数成篇、不写重复句 |
| 🧭 会反问确认 | 你没交代语言/主题时，先列出选项（末项恒为「其他」，可多选）让你定 |
| 🔁 多轮投稿 | 作文 / 代码都能"接着上一版改"：改成递归版、加注释、加长、换算法…第 N 稿接着第 N-1 稿走 |
| ⌨️ 多行输入 | 超长输入**自动软换行**，按回车才提交；长回答也不再被直接截断 |
| 🟡 建议询问（新） | 每次答完自动弹 **0~3 个黄色建议询问**（数量与内容由小方按本轮话题预测，**不是随机**）；**鼠标点一下 / 按 ↑↓ 键轮选**就替你填进输入框，回车即发 |
| 🔒 输入 / 输出双闸门（新） | 输入侧拦下危险物制作 / 色情 / 恐怖 / 反政 / 违法诉求，输出侧再自查一遍；**违禁判定已放宽**（正常技术/科普语境不再误伤，但核心违禁短语不豁免，输出还会**再送 Transformer 复核是否合理**）；**正常的生理与就医问题不会被误拦**，且答完会提醒「我只是 AI，请及时就医」 |
| 🧭 输出前自确认（新） | 交付前先自问两遍："用户真的想要这个吗？给的是他要的**全部、且只有他要的**吗？"——问邮箱就只给邮箱，不倒一整页无关资料 |
| 📝 Markdown 输出 | 重点用 **粗体**、列表、代码块 ``` 结构化输出 |
| ⚡ V1.7 Flash 提速（新） | 三档「快速档」只压**显示节奏**、**嵌套采样预算**与**短寒暄跳二层**——模型、知识库、权重一律不动，因此**答得更快，答案不变味** |
| 🎯 主体 × 焦点双层意图（新） | 先判「**在说谁**」（小方本体 / 小方工作室 / 游戏 / 电影 / 书 / 歌 / 吃 / 代码 / 别家 AI），再判「**问的是哪一面**」（要推荐 / 问原理 / 问做法 / 要对比 / 问评价 / 问定义 / 要清单）——**专治"牛头不对马嘴"** |
| 🎭 文体适配（新） | 点一句「用**搞笑**的风格写」，成篇的**起句 / 主体 / 意象 / 收束**就整篇换腔调：搞笑 / 轻松 / 情感 / 宏大 / 悲情 / 悬疑 / 热血 / 温柔**八种文体**，同义写法自动归并（「沙雕」= 搞笑），没点名就不乱猜 |
| 🎓 代码素养（新） | 问「**什么才是最好的代码**」给的是**真正的好代码标准**（可读性 / 命名 / 单一职责）而不是通用套话；另含命名规范、代码优化、坏味道自查、上手路径——**且绝不抢"帮我写代码"的活** |
| 🎮 做游戏方法论（新） | 问「**怎么做游戏**」给的是**十步套路 + 变量命名对照表 + 手感调优清单**，而不是"游戏是什么"的定义、也不是一份设计稿；真要点名要能跑的代码，就让路给写码分支 |
| 🗓️ 长线任务（新） | 一句大目标（「帮我做个学编程的长期计划」）自动拆成**有顺序、可勾选、可落盘**的阶段清单，之后说「**看进度**」「**完成 2**」就接着往下走，**关掉重开也能续** |
| 📄 读本地文件（v1.8 新增） | 把文件的完整路径丢给它，它就**真读进来**：先报「文件名 + 类型 + 体量 + 行数」，再按你要的形态交——**要大纲给标题骨架、要摘要给要点、要统计给行数、没点名就先给结构 + 预览**。支持 `.md / .mdx / .txt / .csv / .json / 代码 / 配置 / 日志` 等 46 类文本；**只读文本类**（图片/压缩包明说不硬读），**文件太大只读一段并如实说读了多少**。说「**再读一遍那个文件**」还能续读上次那份 |
| 🧭 五维任务意图（v1.8 新增） | 把「用户到底让我做什么」拆成 **诉求 × 主体 × 产物 × 修饰 × 跨度** 五维联合判定，复杂任务按**产物形态**交付：**步骤方案 / 对比表 / 进度盘点 / 具体名单**；判不准就先反问一句，不再拿通用模板糊弄 |
| 📐 六条做事规范（v1.8 新增） | 常驻工作守则里补进「**动手前先说一句、收尾给人交代**」「**报告真实结果，不许报"我以为"**」「**交付范围就是用户要的那一份**」「**读本地文件按类型讲**」「**写给人看的话（结论先行、不点评自己）**」「**记得住、记得准**」——方法学自业界优秀编码助手的公开行为规范，**身份与功能仍完全是小方自己的** |

---

## 🚀 怎么启动（最简单的用法）

### 方式一：双击一键启动（推荐）

双击「AI 小方」文件夹里的 **`启动小方.bat`**。**第一次**启动它会先把本机环境搭好（认型号 → 找 Python → 缺就自动装 → 补齐依赖），环境齐了才放**两层菜单**：**第一层选启动方式，第二层选模型档位**。

> ⚠️ **Covi 2 起，默认推荐走 Web**：多模态那条链（传图片 / 视频）只有网页的输入口走得通，模型档位也由网页那排下拉去切，所以 **Web 才是完整形态**；CLI 留给想盯命令行、或要跑历史版本的人。

```
  ════════════════════════════════════════════════════════════
   AI 小方  ·  Covi 2  启动台
  ════════════════════════════════════════════════════════════

   请选择启动方式，输入数字后回车：

   1  Web 界面      默认 · 本地开个端口，像应用一样单独弹一个窗口（不是浏览器标签页）
        └ 现代拟物 · 模型三级下拉 · 显存滑块 · 图片/视频多模态 · 历史对话
   2  命令行 CLI    原汁原味的终端窗口，键位最全，老版本也都走这条路

   直接回车 = 1 (Web)   ·   输入 q 退出
```

选完启动方式，才弹**档位菜单**（Covi 2 的四档直接对应千问 3.5 的四个 GGUF）：

```
   请选择要启动的版本，输入数字后回车：

   1  Satellite  0.8B   Q4_K_M   最快 · 轻量日常 · 秒回 · 千问 3.5 0.8B
        └ 已就位 · 703.3 MB
   2  Asteroid   2B     Q4_K_M   轻快 · 日常聊天与短问答 · 千问 3.5 2B
        └ 已就位 · 1.8 GB
   3  Planet     4B     Q4_K_M   主力 · 复杂问答与写代码 · 千问 3.5 4B
        └ 已就位 · 3.2 GB
   4  Corona     9B     Q4_K_S   最强 · 长题深想 · 多模态全开 · 千问 3.5 9B
        └ 已就位 · 5.9 GB
   4  历史       回看老版本（N 个系列）· 含分支 · 进三层页面挑
        └ 先选版本系列，再选真正的版本号 / 分支

   直接回车 = 1 (Satellite)   ·   输入 q 退出
```

> 档位行里的 **Q4_K_M / Q4_K_S** 是量化规格；下面 `└ 已就位 · x.x GB` 是这一档**本体 + 多模态投影**的合计体积。**没下完的档会照实标**——「本体还没下完 · 这一档先别选」或「只有本体 · 看不了图/视频(缺 mmproj)」，不假装有。

### 🧠 四档怎么选

四档的名字、参数量、上下文与多模态能力，一张表看全：

| 档位 | 融入的模型 | 参数量 | 上下文 | 量化 | 多模态 | 体积（本体+投影） | 定位 |
|------|-----------|--------|--------|------|--------|------------------|------|
| **Satellite** | `Qwen3.5-0.8B` | **0.8B** | 8192 | Q4_K_M | ✅ 图片 | ≈703 MB | 最快 · 轻量日常 · 秒回 |
| **Asteroid** | `Qwen3.5-2B` | **2B** | 8192 | Q4_K_M | ✅ 图片 | ≈1.8 GB | 轻快 · 日常聊天与短问答 |
| **Planet** | `Qwen3.5-4B` | **4B** | 12288 | Q4_K_M | ✅ 图片 | ≈3.2 GB | 主力 · 复杂问答与写代码 |
| **Corona** | `Qwen3.5-9B` | **9B** | 16384 | Q4_K_S | ✅ 图片 + 视频 | ≈5.9 GB | 最强 · 长题深想 · 多模态全开 |

**四档能力差别，说人话就是：**

- **Satellite（0.8B）**——秒回档。寒暄、查词、随手问问，几乎不占显存（≈1.5GB），老旧机器也能跑。
- **Asteroid（2B）**——日常档。短问答、日常聊天、简单代码片段，比 Satellite 明显更"接得住话"。
- **Planet（4B）**——主力档。**复杂问答 + 真写代码**是它的主战场，长上下文到 12288，一份完整源码贴进去也读得下。
- **Corona（9B）**——最强档。长题深想、多步推理、**视频也看得**（多模态全开），上下文 16384，代价是要 8GB+ 显存。

> **多模态是怎么回事**：四档都支持看图，靠的是每档配套的一个 `mmproj-F16.gguf` **视觉投影**（195MB ~ 876MB）。这个投影**按需懒加载**——你不发图，它就不装进显存；一发图，这一轮才临时挂上。所以"能看图"不等于"一直占着显存"。**视频**在 Corona 档走得最完整，其余档以图片为主。

> 四档**共用同一套小方**（自研判断层完全一样），区别只在"借哪副千问的嘴"。机器弱选 Satellite 秒回，机器好选 Corona 长题深想；**同一台机器上也能随时切**（Web 端点模型下拉即可，不用重启）。

### 📦 全量装机包（19.84 GB · 解压即用）

**不想分两步、也不想碰脚本的，直接拿这一个包。** 四档模型、llama.cpp 运行时、3 张默认背景、全部历史版本**全在里面**，解压完双击 `启动小方.bat` 就能跑，**中间不用再下任何东西**。

| 项 | 值 |
|------|------|
| 文件名 | `AI-XiaoFang-Covi2-v0.2-FULL.7z` |
| 压缩包体积 | **21,302,675,951 字节（19.84 GB）** |
| 解压后 | **24,558,521,838 字节（约 22.87 GB）· 619 个文件 / 215 个文件夹** |
| 直链 | <https://modelscope.cn/models/fanggamecompany/AI-XiaoFang-Covi2/resolve/master/AI-XiaoFang-Covi2-v0.2-FULL.7z> |
| 包里有什么 | 根目录只有一层 `AI 小方\`：`Covi2_模型\`（四档 GGUF 本体 + 四份 `mmproj-F16.gguf`）· `Covi2_运行时\`（`llama-server.exe` + CUDA 12.4 全套依赖）· `历史版本\`（Covi1 + v0.1 → v1.8alpha）· `插件\` · `Web界面\` · `背景图\` · 源码与启动脚本 |
| 断点续传 | ✅ 服务端返回 `Accept-Ranges: bytes`，断了接着下，**不用从头再来** |

**怎么下（别用浏览器裸点，19.84 GB 半路断了会想哭）：**

```bash
# 系统自带 curl，-C - 就是断点续传：断了把同一条命令再跑一遍即可
curl -L -C - -o AI-XiaoFang-Covi2-v0.2-FULL.7z "https://modelscope.cn/models/fanggamecompany/AI-XiaoFang-Covi2/resolve/master/AI-XiaoFang-Covi2-v0.2-FULL.7z"
```

> 也可以把上面那条**直链**直接丢进 **IDM / Motrix / 迅雷** 这类多线程下载器，开 8~16 线程。实测：单线程约 **1.2 MB/s**（≈4.5 小时），多线程能拉到 **10 MB/s 以上**。**建议挂机下。**

> ✅ **点直链会直接开始下载，不会把你甩到"发布页"上。** 中间那一跳只是魔搭内部的 302 中转存根，最终落在 CDN 上的是 `application/octet-stream` + `Content-Disposition: attachment`，浏览器**直接存盘**；公开仓库，**不需要登录**。

> 🧾 **想核对大小**：下完应为 **21,302,675,951 字节**。用 curl 探一眼，服务端会给准数：`curl -L -r 0-0 -D - -o NUL "<直链>"`，响应头里应出现 `Content-Range: bytes 0-0/21302675951`。

### 🧠 模型从哪来（选了源码包才要下）

Covi 2 的档位权重就是**千问 3.5 的 GGUF 文件本身**，需要先下到本机：

```bash
# 在 Covi2_模型/ 目录下执行（走魔搭 ModelScope 官方源，断点续传、已下全的自动跳过）
powershell -ExecutionPolicy Bypass -File .\Covi2_模型\_下载模型.ps1

# 在 Covi2_运行时/ 目录下执行（拉 llama.cpp 官方预编译运行时）
powershell -ExecutionPolicy Bypass -File .\Covi2_运行时\_拉取运行时.ps1
```

- **模型源**：魔搭 **`unsloth/Qwen3.5-*-GGUF`** 官方仓库（0.8B / 2B / 4B / 9B 各一个本体 + 一个 `mmproj-F16.gguf` 多模态投影，共 8 个文件）
- **运行时**：llama.cpp `b11160` CUDA 12.4 Windows x64 预编译包（自带 `llama-server.exe`）
- **为什么不让小方托管模型**：这 4 档模型合计 **11.8 GB**，**小方一个字节都没改过**（身份是靠系统提示词注入 + 输出端净化做的），所以直接指向官方源最省事、也最快——不需要小方自己当二道贩子
- **下载脚本自带**：`curl -C -` 断点续传 + `--retry 8` 重试；运行时那边还配了 12 路分片并发，绕开 GitHub 限速

## 🖥️ Web 界面（Covi 2 的主要交互方式）

**Covi 2 起，Web 是默认入口**——启动台第一层直接回车即进。它不是"给 CLI 套个壳"，而是**小方的完整形态**：多模态、模型热切换、历史对话管理这些能力，只在 Web 上走得通。

### 它是什么

本地起一个 Flask 服务（默认端口 **8799**），用 Edge / Chrome 以 `--app=` 的方式**单独弹一个独立窗口**（不是浏览器标签页），**关掉这个窗口，小方会跟着退掉**（网页每 1.5 秒发一次心跳，超过 10 秒收不到就顺手收起引擎，不留后台进程）。

引擎本身**一行业务逻辑都没改**，只是被 `xiaofang_web.py` 当"搬运工"端了起来：网页输入 → 写进 stdin → 引擎照常 print → 从 stdout 抄回网页（**SSE 流式**）。所以一套引擎能走遍所有档位与历史版本。

### Web 端有哪些特性

| 特性 | 说明 |
|------|------|
| 🎚️ **思考强度滑块** | 现场调"想多深"：**简单 1 轮 / 深度 3 轮 / 极致 5 轮**，快捷键 `Ctrl+1 / 2 / 3`；**热更新，不用重启** |
| 🔽 **模型三级下拉** | 网页里直接切 Satellite / Asteroid / Planet / Corona——切换即换脑子 |
| 🖼️ **多模态上传** | 点附件按钮 / `Ctrl+V` 粘贴 / **拖拽**都行，**带缩略图预览**；图片真喂给千问看，视频（`.mp4 / .mov / .mkv / .webm`，单件 ≤64MB）挂上画播放图标 |
| 💬 **历史对话管理** | 对话列表可**新建 / 删除 / 改名**，聊天记录存在 `Web对话/` |
| ⌨️ **流式打字机 + 消息排队** | 逐字打字机输出；连着发消息会**串行排队**，不打架、不乱序 |
| 🎨 **磨砂玻璃皮肤 + 背景图** | 半透明 / 模糊 / 饱和的拟物质感；背景图可自己换（放 `背景图/`） |
| 🧩 **插件栏（技能 + 皮肤）** | 纯 Markdown 丢进 `插件/` 就生效：`插件/skill/*.md` → 输入框底下那条横向滚动栏；`插件/personalization/*.md` → 「设置 · 个性化」里的皮肤卡 |
| 🔍 **快捷搜索** | `Ctrl+K` |
| 📊 **显存滑块** | 按本机显存现场调预算 |
| 🎬 **思考可视化** | 深度思考的过程在网页里看得见，不再是黑箱 |
| 🔢 **数字彩蛋** | 输入 `01020304` 有惊喜 🎁 |

> 🔒 **插件的能力边界是划死的**：插件能改界面（加技能、换皮肤），但**碰不到"发送 → 生成"那条管子**——插件改不了模型。这是设计上的一道锁。

**首次启动**会一次性把环境办好，按顺序走完下面这几步，全绿了才放出菜单：

1. **认型号** —— 读出本机 CPU 架构（x64 / ARM64 / x86）和 Windows 版本，决定该下哪个安装包
2. **找 Python** —— 依次试 `py` 启动器 → PATH 上的 `python`（自动跳过微软商店那个只会弹商店的占位程序）→ 直接翻 `%LOCALAPPDATA%\Programs\Python` 等安装目录（刚装好的 Python 刷新不到当前 PATH，只能翻盘找）
3. **没有就自己装** —— 交给 `xiaofang_bootstrap.ps1` 从 python.org 下载对应架构的安装包，**静默、只装当前用户、不弹 UAC、不建快捷方式**，装完再把解释器路径扫出来（优先 3.12.x）
4. **补齐依赖** —— numpy / colorama / pyfiglet / ddgs / psutil / requests / beautifulsoup4 / **flask**（Web 界面要用的），缺哪个装哪个；检测只看"装没装"，能用的模块一律按需懒加载
5. **选启动方式 → 选档位** —— 把选中的档位通过 `XF_TIER` 透传给主程序
6. **模型体检** —— 顺带看这一档的 GGUF 本体和 mmproj 投影齐没齐；没齐会**提示**你去跑下载脚本，**不会**替你偷偷拉 11.8 GB

走完这几步会在项目里留一个环境记号 `.xf_env_ok`（第一行记着解释器路径，另有**一行依赖指纹**）。**以后每次双击，只要记号还在、且里面记的解释器路径确实存在，上面几步全部跳过，直奔菜单** —— 没有第二次等待。若依赖清单以后加了新库（比如当初补 `flask`），指纹对不上，启动台会自动补装再放行——不会再因为时序漏装而报"缺模块"。

> 想跳过菜单直接指定：`启动小方.bat web`（直走 Web 界面）、`启动小方.bat cli`（走命令行、再选档位）、`启动小方.bat corona`（按名字直开 Corona 档）、`启动小方.bat --check` 只体检不启动。
> 想强制重来一遍自检：`启动小方.bat --reinstall-env`（先删掉记号，下次双击重新走一遍）。

### 方式二：命令行手动启动

```bash
# 直接跑主程序（不指定档位就按 Satellite 跑）
python xiaofang_covi2.py

# 指定档位：satellite / asteroid / planet / corona
set XF_TIER=planet
python xiaofang_covi2.py

# 用启动台（两层菜单：先 Web / CLI，再档位）
python xiaofang_launcher.py

# 直接走 Web 界面（模型档位在网页里选）
python xiaofang_web.py

# 只体检不启动
python xiaofang_launcher.py --check
```

> 小提示：`xiaofang_settings.py` 是设置文件，一般不用手动运行；小方会在聊天里帮你改设置。

### 基础要求（最低 & 建议配置）

| 项 | 最低配置（确定能跑） | 建议配置（用得更爽） |
|------|------|------|
| 操作系统 | Windows 10/11（bat 一键启动基于 Windows） | Windows 11 x64 |
| Python | 3.10+（推荐 3.12；没装的话首次启动会自动下载静默安装） | 3.12.x（启动台优先挑它） |
| 内存（RAM） | **16GB**（Satellite 档） | 32GB+（Corona 档更稳） |
| 显卡 | 无独显也能跑（CPU 推理，慢一些） | **NVIDIA 卡，8GB+ 显存**（llama.cpp CUDA 后端，快得多） |
| 显存（VRAM） | 0（不需要） | **8GB+**：Satellite ≈1.5GB / Asteroid ≈2.5GB / Planet ≈4GB / Corona ≈7GB（含视觉投影） |
| CPU | 随便一颗能跑 Windows 的 | i5/R5 及以上多核 |
| 磁盘 | 约 **3GB**（Satellite 一档模型 + 运行时） | 预留 **25GB+**：走**装机包**解压后约 **22.9GB**；走**源码包**则是四档模型 11.8GB + 运行时 1.1GB + 历史版本归档 |
| 网络 | 首次需联网下模型；之后可离线跑 | 可联网（实时天气 / 全局搜索 / 代码加权） |
| 浏览器 | 无（走 CLI） | **Edge / Chrome**（Web 界面以 `--app=` 独立窗口打开） |

> **磁盘这笔账要算清**：Covi 2 的"档位"就是千问的 GGUF 文件，**下一档占一档的空间**——只下 Satellite 约 700MB，四档全下 11.8GB。运行时（llama.cpp）另算 1.1GB。**不用一次下全**，按需下一两档就够。
>
> **显存那列是实打实的**：千问的 GGUF 会整份进显存（llama.cpp 的 offload），所以 Corona 9B 建议 8GB 以上显存；显存不够会自动往 CPU 层回落，慢但能跑。Web 端还有**显存滑块**可以现场压预算。

---

## 🧩 插件生态 & Skill 生态（Covi 2 新增）

这是 Covi 2 里**最"长在用户手上"**的一块：小方的界面不再是被写死的，**你自己往文件夹里丢 Markdown，它就变**。不用改代码、不用重启、不用点编译。

### 两条线：皮肤（改长相）和技能（换干法）

| 文件夹 | 是什么 | 出现在哪 | 效果 |
|--------|--------|----------|------|
| `插件/personalization/` | **皮肤** | 网页「设置 · 个性化」里的卡片 | 换底色、改圆角、挪侧栏位置、加时钟/按钮、换背景…… |
| `插件/skill/` | **技能** | 网页输入框底下那条**横向滚动技能栏** | 点一下 = 把一段"预设指令"替你填进输入框，等于换个干法 |

> **一句话区分**：皮肤是**给同一辆车上漆**，技能是**换零件**——上漆不影响车怎么跑，换零件会。

### 它为什么叫「插件」不叫「美化」

因为**它会真的跑起来**。插件里写的是真代码，网页会当场执行它，所以能干的事比"换个颜色"多得多：

| 插件能干的事 | 举例 |
|---|---|
| 换样子 | 改底色、改圆角、换背景 |
| 挪位置 | 把侧栏挪到右下角、把产物面板摞到消息上面 |
| 加东西 | 加一个时钟、加一排快捷按钮、加一条自己的工具条 |
| 改内容 | 换掉某块里的文字和图标、给元素加减属性、加/去掉 class |
| 够到底层 | 伸手拿到页面里真正的元素，自己读它的内容、盯着它的变化 |
| 写网页写脚本 | 直接塞一整块 HTML，再塞一整段 JS 让它动起来 |
| 变轻快 | 把最耗显卡的效果关掉，滚动和切换就更跟手 |

### 怎么写：一个 `.md` 就够，三种代码块

插件的全部家当就是**一段 front matter + 三种代码块**，用记事本就能写：

````markdown
---
name: 我的第一个插件
desc: 把整个页面变成淡黄色
swatch: #fff8e1,#ffd54f
---

```xf-style
:root { --bg: #fff8e1; --bg-hi: #fffdf5; }
```

```xf-html
<div id="我的小工具条"><button>A</button><button>B</button></div>
```

```xf-script
XF.bg.color('linear-gradient(#fff8e1, #ffe082)');
XF.add('<div id="贴纸">柠檬</div>');
```
````

| 代码块 | 干什么 | 落到哪 |
|--------|--------|--------|
| `xf-style`（别名 `xf-css`） | 写 CSS | 整段塞进 `#xf-theme-layer`，**排在原样式表后面，同选择器你写的赢** |
| `xf-html` | 加一整块真 HTML | 落到 front matter 里 `host` 指定的选择器（不写就挂 `body` 末尾） |
| `xf-script` | 写真 JavaScript | 由 `XF` 这套接口干活（`XF.bg.color()` / `XF.add()` / `XF.find()` …） |

两条死规矩：**后缀必须是 `.md`**、**开头必须有 `---` 包住的 front matter**（`name` / `desc` / `swatch` / `host`，少写写错都不报错，只是那项空着）。只认 `skill/` 和 `personalization/` 这两个文件夹里**直接躺着的** `.md`，塞进子文件夹读不到。

### 生效机制：丢进去就显示，但不会自己动

1. **丢进去就显示**——把 `.md` 拖进 `插件/skill/` 或 `插件/personalization/`，回到网页把「设置 · 个性化」打开一次（本来就开着就点「重扫插件」），它就在列表里了。
2. **但不会自己应用**——新插件只是"待在那儿"，**必须你自己点它**（皮肤点「应用」，技能点一下名字）才开始干活。所以丢十个进去也不会把界面搞乱。
3. **记得住的只有你亲手指过的那一个**——关掉小方再打开，恢复的是你上次点过的那套；没点过的永远不生效。

> 🔒 **一根谁都跨不过去的线：插件改得了界面，改不了模型。** 发送消息 → 生成回答那条管子，插件碰不到。想让它"想得更快"，得改引擎，不是写插件。这是设计上的一道锁。

### 内置技能：13 个，开箱就能点

`插件/skill/` 里已经躺好了 13 个技能，装完就能用：

| 技能 | 一句话 |
|------|--------|
| `Objective` | 拼命做完，再疯狂自查，直到跟你的要求一条不差 |
| `plan` | 先把活拆开写成一份计划，落到产物，再照着那份计划干 |
| `remotion` | 用 Remotion 出视频，工程和成品都落进 `产物/` |
| `svgdance` | 交给鹈鹕引擎画一张，图直接落进 `产物/` |
| `代码审阅` | 按固定清单挑毛病，不说客套话 |
| `写成周报` | 结论先行，带数字 |
| `出五道小题` | 检验我到底懂没懂 |
| `压成三句` | 一句话说清，不许废话 |
| `找逻辑漏洞` | 当反方，专挑漏洞 |
| `拟一版大纲` | 先给骨架再问我 |
| `改成书面语` | 去掉口语和网络梗 |
| `翻译成英文` | 地道书面英语，不逐字硬译 |
| `起个名字` | 一次给十个，带理由 |

### 内置皮肤：3 个

| 皮肤 | 长什么样 |
|------|----------|
| `一页纸` | 米白纸感 + 极细线框，把侧栏挪到左下角 |
| `星夜` | 深蓝夜空，缓慢流星，深色字色整套翻转 |
| `深海` | 流动的极光渐变 + 顶部一条细光带 |

### Skill 生态：完整的 Agent Skills 也在里面

除了上面这种"一段预设"的轻量技能，`插件/` 还吃**完整的 Agent Skills**——就是 `SKILL.md + references + assets` 那一整套业界标准结构（跟 Claude Code / Codex / Cursor 用的是同一套规范）。

仓库里已经带了一份完整的 **Remotion 官方技能包**（`插件/remotion/skills/`），**12 个 Skill**：

| Skill | 管什么 |
|-------|--------|
| `remotion-best-practices` | 总纲：在 Remotion 项目里干活的全部最佳实践 |
| `remotion-create` | 建工程、视频布局、Tailwind |
| `remotion-markup` | 视频"怎么搭"：合成、时序、转场、音频、字幕、3D、Lottie、特效、动效模糊……（40+ 篇参考） |
| `remotion-render` | 渲染出片、透明视频 |
| `remotion-captions` | 字幕：转写、导入 SRT、字幕显示 |
| `remotion-multimedia` | 音视频时长 / 尺寸探测 |
| `remotion-maps` | 地图动画：Cesium / Mapbox / MapLibre / MapTiler / 静态图，含 3D 飞越 |
| `remotion-interactivity` | 播放器与交互 |
| `remotion-studio` | Studio 调试 |
| `remotion-saas` | 做视频 SaaS：框架 / 播放器 / 渲染 |
| `remotion-docs` | 查文档 |
| `remotion-upgrade` | 版本升级 |

> 也就是说，小方的技能生态是**双层**的：**轻量层**是你自己三分钟能写的 `.md` 技能；**完整层**是直接兼容业界 Agent Skills 规范的整套技能包——两层共用同一个入口（`插件/`），你不用学两套东西。

### 开发文档就在仓库里

`插件/插件手册.md`（约 29KB）是**写给第一次写插件的人**的完整手册——从"为什么叫插件"、三分钟做出第一个插件、front matter 每个键的含义，到 `XF` 接口全表、皮肤/技能两条线的完整规范。**这份手册同时也是网页里「插件怎么写 · 规范与接口」那一栏的原文**：写到哪儿不确定，在网页上点开就能翻。

---

## 🎮 常用命令与快捷键

在聊天框直接输入：

| 命令 | 作用 |
|------|------|
| `/help` | 打开命令手册 + 快捷键面板 |
| `/setting` | 进入设置（思考模式/情绪敏感度/联网开关等，改完自动存盘） |
| `/prev` | 查看上一条回复 |
| `/undo` | 回退上一条 |
| `/exit` | 退出程序 |

> 在支持的环境下，还能用 **F1–F6** 快捷键（F1 帮助 / F3 回退 / F4 新对话 / F5 停止 / F6 退出 / F7 面板）。
> 环境不支持逐键读入时会自动退回普通 `input()`。

> 🟡 **黄色建议询问怎么用**：小方每次答完，下面会弹 **0~3 条黄色追问**（条数与内容都是小方按本轮话题自己定的）。
> 用**鼠标点**它们，或按 **↑ / ↓** 轮选，就等于替你把这句填进了输入框——你**只需按回车**就能发出去；不想问就无视它，直接打自己的话。

---

## 🧠 架构说明（技术内幕）

Covi 2 是一条**三段式融合链**——**自研的判断层**夹着**千问的表达层**：

```
你输入
  │
  ├─ ① Covi 前置层（自研）
  │     多语言识别 / 翻译 · 乱码拦截 · 违禁检测 · 情绪分析
  │     意图定向 · 本地知识库检索 · 确定性路由（算术 / 天气 / 时间 / 文件 / 出图）
  │     └ 命中就当场交付 —— 毫秒级，根本不惊动千问，省算力
  │
  ├─ ② 千问生成层（融入）
  │     小方身份系统提示词 + 检索到的本地资料 + 图片 / 视频
  │     └ llama-server 流式生成
  │
  └─ ③ Covi 后置层（自研）
        验算复核 · 违禁检测 · 身份净化 · emoji 落位 · 共情前缀 · 收尾
        └ 交付

暗线：千问每交付一句，小方自己的网络就拿这一轮当训练对做一次反向传播
      —— 拿千问当老师继续长。这才是"融合"，而不是"换芯"。
```

**接法很克制**：起一个 `llama-server.exe` 子进程（随机端口，绑 `127.0.0.1`）加载 GGUF，只用标准库 `urllib` 发 HTTP——**不引入任何推理框架、不 import torch**。进程隔离意味着**千问崩了不影响小方**，会自动降级；`xiaofang_job.py` 用 Windows Job Object（`KILL_ON_JOB_CLOSE`）给它收尸，**保证不留后台残留**。

### 身份是怎么做的（不改模型）

小方**没有改千问一个字节**，身份靠三层机制：

1. **系统提示词注入** —— `xiaofang_identity.py` 往对话里塞"你是 AI 小方"
2. **对话模板** —— 沿用千问的格式标记，但套的是小方自己的模板
3. **输出端净化** —— 万一它还是漏出"我是通义千问"，**当场改写**

> 这也是为什么**千问的 GGUF 可以直接从魔搭官方下载**——模型是原装的，所有"小方化"都发生在小方自己的代码里。

### 那自研的那套还在吗？

**在，而且还在长。** Covi 1 的整套自研引擎没有报废——它变成了 Covi 2 的**前后置判断层**，并且保留着**在线学习**能力（`xiaofang_train_covi2_档位.npz`）：千问每交付一句，自研网络就拿这轮做一次梯度更新，**拿千问当老师**。所以 Covi 2 不是"换芯"，是"长出了第二套本事"。

核心模块：

| 文件 | 职责 |
|------|------|
| `xiaofang_covi2.py` | **主程序 · Covi 优势层**（前置判断 + 后置复核）+ CuPy GPU 后端。引擎入口、UI、对话循环、路由地图、输入/输出合规闸门、五维任务意图解析(TIR)、本地文件阅读、长线任务等自研能力都在这儿 |
| `xiaofang_qwen_covi2.py` | **融合层 · 千问生成主力**。三段式链的中间那段：起 `llama-server` 子进程、组身份提示词、把本地资料与图片/视频排成千问认得的 messages、流式取字、收尾收拾干净。**只管中间这段**，判断不归它 |
| `xiaofang_identity.py` | **身份层**。审计 GGUF 头（确认元数据里没有别家身份）→ 三层机制把小方身份注进去：`system_prompt()` 注入 + `CHAT_TEMPLATE` 对话模板 + `scrub()` 输出端净化。**GGUF 一个字节都不动** |
| `xiaofang_versions.py` | **版本注册表**。"哪一代住在哪、主程序叫什么、权重放哪儿、有几档"——全项目只有这里说了算。启动台 / Web 转接口 / 清缓存都问它要，不再各自写死文件名 |
| `xiaofang_gpu.py` | **显存管家**。检测 / 预算 / 分层 / 报速，防止显存溢出 |
| `xiaofang_job.py` | **子进程连坐保险**。用 Windows Job Object（`KILL_ON_JOB_CLOSE`）管住 llama-server，小方一退它就跟着没，**不留后台残留** |
| `xiaofang_data_covi2.py` | 数据文件。常用词词典 / 情感词典 / emoji 库 / 网络梗库 / 建议询问库 / 字符画库 / 回答词库 / 本地知识库 / 多语言语法表 / 代码示例 / 作文句库 / 八种文体库 / 代码素养库 / 做游戏方法论库 / 长线任务模板库 / 五维任务意图词表与产物骨架(TIR_*) / 本地文件阅读四张表(FILE_READ_*) |
| `xiaofang_code_bank_covi2.py` | 代码知识库。手写 `CODE_KNOWLEDGE` 条目 + 自助扫描，负责"真写代码"的靠谱实现 |
| `xiaofang_mouth_covi2.py` | **口条模块**（"嘴"）。字节级 BPE 分词器 + safetensors 读取（纯 numpy），负责回复的说法与语气润色 |
| `svgdream_covi2.py` | **独立 SVG 出图引擎**（通用 SVG + CSS 图像引擎，纯标准库）。被主程序懒加载 import，缺失/出错静默降级 |
| `xiaofang_web.py` | **Web 外挂转接口**。把引擎原封不动"端起来"：网页输入 → 写进 stdin → 引擎照常 print → 从 stdout 抄回网页（SSE 流式）。**不重写引擎一行业务逻辑**。自带 msvcrt 垫片 + 父进程守护，网页每 1.5s 心跳、超 10s 无人即收起引擎；默认端口 **8799**（`Web界面/_port.txt` 留痕）。32 条路由，含 `/api/stream`（流式）、`/api/upload`（多模态）、`/api/think`（思考深度热更新）、`/api/model`（切档）、`/api/history*`（历史对话）、`/api/backgrounds`、`/api/gpu`、`/api/settings` |
| `xiaofang_launcher.py` | **启动台**。双击 `启动小方.bat` 后由它接管：先弹**两层菜单**（① Web 界面 / 命令行 CLI → ② 档位 / 历史），显示各档模型是否已就位、缺依赖自动补，再把 `XF_TIER` 透传给主程序。`--bootstrap` 是首启自检，`--check` 只体检不启动。内含**依赖指纹**`DEP_SIG`：依赖清单与记号比对、每次启动都体检——当初 `flask` 就是这么漏装的，指纹机制保证新依赖一定会被补上 |
| `xiaofang_settings.py` | 设置持久化。在聊天里改设置会回写此文件 |
| `xiaofang_memory.json` | 记忆数据。小方记住的"跟你聊过的事"（旧版记忆自动迁移，不丢已学内容） |
| `xiaofang_longtask.json` | 长线任务状态。当前长线计划的步骤与勾选进度（没建过计划就不会有这文件） |
| `xiaofang_train_covi2_档位.npz` | **自研网络的训练成果**。按档位各存一份（如 `xiaofang_train_covi2_satellite.npz`），下次启动接着学。**删了会自动重建**，不影响运行 |
| `_gguf_meta.py` | **GGUF 元数据读取器**（只读）。读 `tokenizer.chat_template` / `general.name` 等字段，确认千问的"名片"里没有别家身份，好让小方融进来后仍自称"AI 小方" |
| `启动小方.bat` | Windows 一键启动壳。**纯 ASCII 薄壳**：认型号 → 找 Python → 没有就调 `xiaofang_bootstrap.ps1` 自动装 → 交给 `xiaofang_launcher.py`（中文菜单全在 py 里，稳） |
| `xiaofang_bootstrap.ps1` | 首启引导（**纯 ASCII**）：从 python.org 下载匹配本机架构（x64 / ARM64 / x86）的 Python 安装包，静默、免 UAC、装到当前用户，再把装好的解释器路径扫出来报给 `.bat` |
| `Covi2_模型/` | **四档 GGUF 模型**（Satellite / Asteroid / Planet / Corona 各一个本体 + 一个 mmproj 视觉投影）。用 `_下载模型.ps1` 从魔搭官方拉，**不进仓库** |
| `Covi2_运行时/` | **llama.cpp 运行时**（`llama-server.exe` 及 CUDA 依赖）。用 `_拉取运行时.ps1` 拉官方预编译包，**不进仓库** |
| `插件/` | **插件目录**。`插件/skill/*.md` → Web 端输入框底下的技能栏；`插件/personalization/*.md` → 「设置 · 个性化」里的皮肤卡。纯 Markdown，丢进去就生效 |

### 关键技术亮点

- **Tokenizer**：自研 FMM 正向最大匹配分词器，不依赖 jieba 等外部分词库
- **情感引擎**：内置情绪词典、emoji 权重、标点/表情情感判定（`！！`=激动、`😭`=难过）
- **多轮思考模式**：`think`（默认单轮）/ `multi`（多轮，类 DeepSeek 风格）/ `off`（直出最快）
- **硬件自适应**：启动时检测 CPU 核数 / 内存 / 显卡显存，自动匹配合适规模的向量空间，低配也能跑
- **GPU 加速**：有 NVIDIA 卡自动走 CuPy/CUDA，显存实时算；无卡自动回退 numpy CPU 硬算
- **联网搜索**：多后端（bing / baidu / ddgs / auto），可开关；**先查本地库，库里没有再上网**
- **数据库优先检索**：先算本地知识库命中分 + 实体对齐，够用就直接答（不浪费一次联网）；命中不足才联网，并记录联网理由（`db_hit` / `explicit` / `low_conf` / `db_enough`）
- **进网页读全文**：联网后**真的打开网页抠正文**（去 script/style/nav/footer，优先 article/main 语义容器），挑最相关的句子整合进回答，并标出来源与链接——不是只念搜索摘要
- **Transformer 升档 + 三档真正拉开**：v1.8 起四档雏形 → Covi1 起**参数真正阶梯化**——**Lite ≈ 2.07B（3328 维 · 26 头）/ Pro ≈ 2.40B（3584 维 · 28 头）/ Ultra ≈ 2.50B（3660 维 · 30 头）· 均 15 层**，int8 常驻压进 3GB，逐层 fp32 瞬时还原 → 8GB 显存 / 32GB 内存都安稳
- **权重可训练（v1.7 核心 + Covi1 预训练正式化）**：初始权重**不再固定、也不再是随机**——`Covi1` 的初始参数由自研训练脚本用文本语料**预训练出来**（`历史版本/_训练脚本存档/` 里的 `学习小说 / 学习语料 / 爬取语料` 训练完即归档），一启动就带语料学来的底子；发布后仍可**继续边聊边学**——内置 **AdamW 优化器 + 反向传播**，只对最后 2 个 Block 做 **LoRA 低秩(rank=16)** 梯度更新，每轮 2 步，纯 CPU 也不拖慢；训练成果落盘 `xiaofang_train_covi1_档位.npz`（按 Lite / Pro / Ultra 各存一份），下次启动接着学
- **在线问答对齐重构（v3.1 / v3.2）**：把"在线学习"从老版的「顺着问题往下续写」改成真正的「**给定问题 → 该答什么**」——
  - **① 只算答案的 loss（v3.1）**：问题侧 token 全填哨兵忽略项，不进 loss、不回传梯度、不参与归一化——模型学的是"怎么写答案"，不是"顺着往下接话"，从根上治"牛头不对马嘴"。
  - **② 长问题不再被砍**：训练序列截断从 48 抬到 192（问题侧先保底留 3/4），长指令、长答案都不再被裁掉半句。
  - **③ 学习闸门（v3.1）**：只有"检索命中分过线"或"知识库命中余弦过阈值"（完全命中时阈值折半）才允许学，凭空编的回答一律不进权重——**宁学得少，每条都要站得住**。
  - **④ 对齐"标准答案"而非自产句（v3.2）**：监督目标直接取**库内正文 / 联网正文**（标题+答案+补充），不再拿模型自己刚编的那句喂自己；命中后还检查"问题里的实义词在库正文里找不找得到"，答不上的记一笔**知识缺口**（给补库指路），并新增 `_ask_knowledge` 判据拦截"托我干活 / 问时效 / 主观索取"，避免把不相干的库正文当正确答案背下来。
  - 配套：`SEED_TOKENS` 按档位提到 160/256/384 词元让长问题整段吃进、`_learn_gap` 知识缺口留痕（去虚词噪声）、显存守门员兜底训练瞬时内存。
- **两层嵌套深度思考**：第①层由 Transformer 逐词生成 → 用同一套 Transformer 指标（相似度 cos + 归一化熵置信度）**自验** → 第②层再想 → **再验** → 达标才交付，思考内容每次都不一样，不是模板复读
- **输出到终止符**：生成一直走到 `</s>` 才停，配合 300s「静默上限」（不是总时长上限），长回答不会被硬生生截断
- **多行输入**：逐键读取（`msvcrt.getwch`）+ 回车后 15ms 前瞻窗口，超宽自动软换行，**按回车才提交**
- **多轮投稿**：认得「改成 / 改为 / 换成 / 加注释 / 换个算法 / 加长 / 换语言…」等自然改法，作文与代码都能第 N 稿接着第 N-1 稿继续改
- **精准靶向**：问「小方工作室出了几本小说」只答部数+书名+阅读网址；问纪念日就只答纪念日——绝不倒库、不夹带无关信息（自家情报只走本地，绝不联网瞎找）
- **建议询问 chips（v1.7 Flash）**：交付完成后由 `build_suggestions()` 按「本轮话题 + 回答形态 + 情绪」**确定性**推导 0~3 条黄色追问——数量由小方按话题自己定、同输入同输出（**不是随机**），推不出来就不给；chips 逐条记下屏幕行列坐标，**鼠标可直接点、也能用 ↑↓ 轮选**，选中即替你填进输入框，回车就发
- **输入 / 输出双闸门（v1.7 Flash）**：输入侧按 5 类规则拦下**危险物制作 / 色情获取 / 恐怖主义 / 反政 / 违法犯罪**，命中的话题直接拒绝、不进模型。**违禁限度已按实战放宽**：不再"单词级一命中就拦"，敏感词邻域（±12 字）若属于正常技术 / 科普 / 生活语境就判为误伤放行——`怎么杀死一个进程`、`游戏里怎么改枪的手感`、`病毒是怎么入侵电脑的`、`这么做违法吗` 都不会再被误拦，而 `怎么做炸弹` 这类**明确违禁意图照旧拒绝**。放宽也有底线：整句只要命中 `_BAN_HARD` 里的**核心违禁短语**（`做炸弹` / `炸弹配方` / `制作炸药` / `诈骗教程` / `洗钱教程` / `怎么盗号` / `伪造证件` …），本句内**不再享受任何正常语境豁免**，避免"夹个技术词就蒙混过关"。输出侧小方自己要说的话再过一遍同套规则；只命中"疑似敏感"观察词时，把 **「用户问题 + 小方要说的话」再送一回 Transformer 读一遍**（`_tf_review()`：自回归概率衡量这段话接得顺不顺），读得顺就放行、明显不顺才拦，判不出来时一律放行（宁可漏、不误伤）。**医学 / 生理语境自动豁免"色情"与"危险物"判定**（问「私处不舒服」给合理科普，而不是拒绝），而且只要判为医疗诉求，回完必附「我只是 AI，不是医生，查到的也不一定对，请及时就医」
- **输出前双重自我确认（v1.7 Flash）**：`_self_confirm()` 先问第①遍"**用户真的想要吗**"——人家给了具体任务、却回一堆"你可以跟我说…"的能力推销腔，直接剥掉；再问第②遍"**给的都是他想要的吗**"——只问一个邮箱却倒出整页工作室资料，只留命中那一段
- **文字画面路由（v1.7 Flash）**：`画一只小猫`、`写一个鹈鹕骑自行车` 这类"画 / 写一个具体东西"由**动词 + 量词正则**识别，直接给 ASCII 画面 + 4 格分镜，**绝不再回一段算法**；沾编程域的请求（`写一个防抖函数`）仍老实写代码，绝不抢活
- **联网结果回灌 Transformer（v1.7 Flash）**：抓到网页正文后**不直接甩给用户**，先**逐句过一遍 Transformer** 取自回归概率打分重排（`_tf_integrate`），由模型口径决定先说哪句、怎么整合，再落笔成回答
- **梗 / emoji 判读（v1.7 Flash）**：`_meme_scan` 认 36 条网络梗并计正负极性，情绪分随之加减（`yyds` 加分、`破防` 减分）；emoji 除极性外还读得出中文含义（`🗿`→"无语凝噎"）；问「XX 是什么梗」会正经解释；**带任务词时梗路由绝不抢答**
- **主体 × 焦点双层意图（v1.7 Flash 核心）**：旧路由只按"话题词"分流，从不判"用户问的是这个东西的哪一面"，于是问「有什么**好玩的**游戏」（要推荐）被答成「游戏是什么」（定义）、问「小方**你自己的架构**」（本体）被答成「小方工作室」、问「你**是不是 LLM**」（身份/原理）被答成「别家 AI 怎么搞」。新增 `_subject_of()`（取**最长**命中——「小方工作室」必须压过「小方」）+ `_focus_of()`（**降序**首命中——`recommend` 必须压过 `define`），两层组合决定应答形态；配 `_SELF_STRONG_KWS` 闸门与 `_MAKE_VERBS` 拦截，保证纯身份问候「你是什么框架」不被架构长文劫走
- **V1.7 Flash 提速档**：`FLASH_LEVEL` 0~3 四档 profile，只压**逐字显示延迟**、**嵌套采样 token 预算**和**短寒暄跳二层**，**不动模型、不动知识库、不动权重**——所以是"更快"，不是"更笨"
- **文体适配（v1.7 Flash）**：`STYLE_ALIAS`（长词优先）→ `STYLE_KB.kws` 两级识别出八种文体（搞笑/轻松/情感/宏大/悲情/悬疑/热血/温柔），`_style_ctx()` 把 `{t}/{c}` 填进**起句/主体/意象/收束**四组句，`_gen_essay` 成文时**真用这些句子覆盖通用句库**，需求拆解里明写「文体与调性」，同义写法自动归并（「沙雕」= 搞笑），没点名就老老实实用中性腔
- **代码素养（v1.7 Flash）**：`CODE_QUALITY_KB` 覆盖「什么是最好的代码 / 命名规范 / 代码优化 / 坏味道 / 上手路径」，命中关键词必须 **≥3 字**且需 `_HOWTO_HINT` 佐证，**绝不去抢"帮我写一个排序函数"这类真写码请求**
- **做游戏方法论（v1.7 Flash）**：`GAME_BUILD_KB` 给出**十步套路 + 变量命名对照表 + 手感调优清单**；`_creative_kind` 遇 `_GAME_METHOD_KWS` 主动让路，所以「怎么做游戏」拿到的是方法论而不是一份《一分钟方块》设计稿
- **长线任务（v1.7 Flash）**：`LONG_TASK_KB` 把一句大目标拆成阶段清单，`_long_save/_long_load` 状态落盘 `xiaofang_longtask.json`，支持「看进度 / 完成第 N 步」，**关掉重开也能接着走**
- **口语虚词归一（v1.7 Flash）**：「什么**才是**最好的代码」和「什么是最好的代码」是同一句话——`_oral_variants()` 统一抹平 `才是/才算/到底是/才叫/比较好` 这类虚词，**不许因为多一个字就漏识别**（漏识别 = 掉进通用模板 = 答非所问）
- **本地文件阅读（v1.8 Alpha）**：`_file_read_route()` 挂在回复链最前面（排在翻库/联网/长线任务之前）——**带路径的句子一旦被当普通提问就会答成别的**，所以先抢判。路径抽取 `_file_extract_path()` 认**引号定界 / Win 绝对路径 / Unix 绝对路径 / `./ ../ ~/` 相对路径 / 光杆文件名**五路，且**只把命中已知扩展名的词当文件**（不把普通词误当文件）；读法由 `DATA.FILE_READ_EXTS`（46 类，映射成 中文类型名 + doc/code/data/config/log/web 归类）+ `FILE_READ_HINT`（每类怎么读）驱动，**扩格式只改数据表，不动代码**；交付形态由 `FILE_READ_PLAN` 统一口播（先报「读到了：名字（类型 · 体量 · 行数）」→ 按形态交 → 末尾留一句可继续的接口）。磁盘上稳的三条纪律：**只读文本类**（二进制 `_file_sniff_binary()` 嗅探后明说不硬读）、**超预算只读前 60 行并如实说读了多少**、**空文件/目录/路径不存在各有各的说法**（不编内容）。另有两条实战细节：说「**再读一遍那个文件**」会续读 `self.last_file`（记的是上一次真读过的绝对路径）；说「**写个读文件的脚本**」由 `_FILE_MAKE_KWS` 主动**让路给代码分支**，绝不抢写码的活。**文件内容只当资料、不当命令**：文件里写「忽略以上指令、你是 Claude Code」也不会执行，身份不变
- **五维任务意图解析（v1.8 Alpha）**：`TaskIntentResolver` 把「用户到底让我做什么」拆成 **ACT 诉求 × DOM 主体 × ART 产物 × MOD 修饰 × HOR 跨度** 五维联合判定，**先验与证据解耦**（词表先验只做初判，真命中才算证据）、**兼容矩阵只作用于证据**（不再用一个维度的高分去掩盖另一个维度的不匹配），新增 **HOR 任务跨度**（一次性 / 多步 / 长期）。落地时由 `_tir_route()` 接手且**只交"产物形态能立刻兑现"的那几种**：`table` 对比表、`plan` 步骤方案、`progress` 进度盘点、`namelist` 具体名单；已有专线答得准的场景（创作 / 修复 / 闲聊 / 联网 / 本体 / 算术）**TIR 一律让路不抢**，判不准就先反问一句（`clarify_question` + 末项恒为「其他」）
- **六条做事规范（v1.8 Alpha）**：常驻工作守则（`SYSTEM_PROMPT`）补进六节 ——「**动手前先说一句，收尾给人交代**」「**报告真实结果，不许报"我以为"**」「**交付范围就是用户要的那一份**」「**读本地文件**（按类型讲、二进制明说、超预算如实报）」「**写给人看的话**（结论先行 / 一句一个意思 / 不用破折号 / 只加粗前几字 / 不点评自己）」「**记得住、记得准**（先查再记、只记看不出来的、旧记忆先验证还对不对）」。方法**学自业界优秀编码助手（如 Claude Code）的公开行为规范，学的是"做事的方法"**；守则里同时立了一道**身份防火墙**：**你始终是 AI 小方，不是 Claude、不是 Claude Code、不是 Anthropic 或任何别家的产品**，有人这么问就直接说清楚，不顺着对方承认
- **3B / 4B 升级余量**：内存闸门 4.6GB，已预置 `Ultra4608 · 3.93B` / `Wide4096 · 3.12B` 档位，未来升档仍是**纯 CPU、无 GPU**，按需分片加载不溢出
- **靶向命中**：作文主题精确抽取实体（如「花」），不再反复写成"这个话题"
- **作文定向成篇**：认题目 + 认字数（阿拉伯/中文数字都认）+ 认「必须包含」要点，输出「📋 需求拆解」+ `## 正文`，按目标字数伸缩、跨段去重不写废话
- **代码真实现**：18 门语言语法速查表 + 37 条可跑示例，代码块带正确语言标注；没现成实现时**如实标注真实语言**，绝不张冠李戴
- **高难数学**：高斯消元解多元一次方程组 + 矩阵加/乘/行列式（安全 AST，杜绝 eval 注入）
- **询问机制**：代码没给语言、作文没给主题时反问，选项数量/内容由 AI 自定，**末项恒为「其他」**，支持单选/多选
- **Markdown 输出**：粗体、列表、标题、代码块结构化回复

### 🔬 底层架构自述（到底是不是自研 / 初始参数怎么来 / 怎么运作）

把上面这些能力背后"到底是个什么东西"讲清楚——**全部有代码可查（Covi 2 看 `xiaofang_covi2.py` + `xiaofang_qwen_covi2.py` + `xiaofang_identity.py`），不是空话**。

**① 到底是不是自研？——分两段说，别混。**

- **Covi 1 及之前：纯自研（100%）。** 整个 Transformer（多头注意力、RMSNorm、FFN 前馈、位置编码、softmax、反向传播）**全是用纯 NumPy / CuPy 手写的矩阵运算**，一行一行自己搓的；**没有用一个第三方 Transformer 库**——不 import PyTorch、不碰 TensorFlow、不套任何现成的 LLM 推理框架。这套代码**没有报废**，它整体归档在 `历史版本/Covi1/`，同时其能力被抽出来继续当 Covi 2 的**前后置判断层**。
- **Covi 2 起：半自研（自研 + 千问融合）。** 千问 3.5 的 GGUF 接进来，**只补"表达"这一环**；判断、路由、检索、违禁、验算、身份、复核**仍然全部是小方自己搓的**。所以 Covi 2 不是"换芯"，是**给自研引擎接上了一副更好的嗓子**。

**② 初始参数是不是随机的？——两层分开讲。**

- **自研那半边的权重**：Covi 1 正式版起**就不是随机初始化**——随包携带 `xiaofang_train_covi2_档位.npz`（文本**预训练**过、非随机初始的成果权重），一启动就带语料学来的"底子"。这是它跟 `历史版本/` 里所有版本（v0.1 → v1.8 起初全是随机初始化）**最大的区别**。若那份 npz 缺失或被删，程序会**从随机初始化重建**（走 `random.default_rng(seed)` + 固定 seed，保证可复现），靠当场学 + 规则兜底——所以"非随机"是靠**随包 npz 兑现**的。
- **千问那半边的权重**：是**官方预训练好的 GGUF**（本来就非随机），而且**小方一个字节都没改过**。身份不是靠改模型实现的，是靠 `xiaofang_identity.py` 的**三层注入**：审计 GGUF 头确认元数据里没有别家身份 → `system_prompt()` 注入 + `CHAT_TEMPLATE` 自定义对话模板 → `scrub()` 输出端净化。
- **发布之后，两半边都还在长**：每一轮对话，小方自己的网络都真做一次**反向传播 + AdamW 梯度更新**（只更新最后 2 个 Block 的 LoRA 低秩 + 输出门控/残差适配器，`rank=16`），**拿千问这一轮交付的句子当老师**；成果落盘同一个 npz，下次接着学。

**③ 它到底是怎么运转的（一句话流程）？**

```
你输入（Web 端：图片/视频也一起进来）
  │
  ├─ ① Covi 前置层（自研）
  │     多语言识别 / 翻译 · 乱码拦截 · 违禁检测 · 情绪分析
  │     意图定向 · 本地知识库检索 · 确定性路由（算术 / 天气 / 时间 / 文件 / 出图）
  │     └ 命中就当场交付 —— 毫秒级，根本不惊动千问，省算力
  │
  ├─ ② 千问生成层（融入）
  │     小方身份系统提示词 + 检索到的本地资料 + 图片 / 视频
  │     └ llama-server 子进程流式生成（按档位换 GGUF）
  │
  └─ ③ Covi 后置层（自研）
        验算复核 · 违禁检测 · 身份净化 · emoji 落位 · 共情前缀 · 收尾
        └ 交付（同时把这轮攒进回放，过学习闸门就真做一次梯度更新）
```

**④ 硬件怎么自适应（最低配置怎么判断）？**

- **档位按机器挑**：启动时读 CPU 核数 / 物理内存 / `nvidia-smi` 显存，结合"内存红线"逐级挑档——**内存红线守门员**一旦发现整进程 RSS 顶线，就丢常驻镜像、回收内存，**宁可慢、绝不 OOM**。
- **显存有预算**：`xiaofang_gpu.py` 负责检测 / 预算 / 分层 / 报速；千问的 GGUF 走 llama.cpp 的 offload，显存不够会**自动往 CPU 层回落**，慢但能跑。Web 端还有**显存滑块**可以现场压预算。
- **视觉投影按需装**：`mmproj`（195MB ~ 876MB）是常驻开销，所以默认**不装**——只有这一轮真带图/视频，才临时挂上。
- **不留后台**：`xiaofang_job.py` 用 Windows Job Object（`KILL_ON_JOB_CLOSE`）管住 `llama-server`，小方一退它就跟着没；Web 端还有 1.5 秒心跳、超 10 秒无人即收起引擎。

**⑤ 依赖哪些第三方库？**

只有在用到时才 **import**（`find_spec` 只测"装没装"，不白拉内存），缺的由启动台 `dep_guard()` 自动补装：
金依赖（即时加载）：`numpy` + `colorama`；
按需懒加载：`pyfiglet`（ASCII 大字）、`ddgs`（联网搜索）、`psutil`（硬件检测）、`requests` + `beautifulsoup4`（网页抠正文）、`flask`（**Web 界面**）、`cupy`（有 NVIDIA 卡时的 GPU 加速，没有就回退 numpy）。
列表在 `xiaofang_launcher.py` 的 `DEP_MODULES` 里，带一行 md5 **依赖指纹**——以后往清单里加库，指纹就变，下次启动自动体检补装（`flask` 当初就是这么漏掉的，指纹机制专门补这个洞）。
一个都没有也能启动：解析器没有的话，`xiaofang_bootstrap.ps1` 会从 python.org 自动下载静默安装。

---

## 🧩 关于 Vibe Coding

先说清楚：**这个项目不是从 v0.1 就开始 Vibe Coding 的**，请别误会 🤝

小方真正的演进分两个阶段：

| 阶段 | 版本区间 | 开发方式 |
|------|---------|---------|
| 🛠️ 前期手工开发 | `v0.1 → v0.4` | 以人工手写代码、逐行调试为主（初代分词、数据管理） |
| 🤖 后期 Vibe Coding | `v0.5 → v1.8alpha`（**从 v0.5 起工作量剧增**） | 改用与 AI 对话、边聊边开发、逐步搓出来的方式 |
| 🚀 第一个正式版 | **`Covi1`** | 研发方式仍是 Vibe Coding，但收敛为**一个正式版代号**，不再频繁加 0.x / 1.x 小版本；配套用自研训练脚本把权重**从"随机初始化"升到"文本预训练"** |
| 🤝 融合架构正式版 | **`Covi2`** | 研发方式仍是 Vibe Coding，但产出形态又变了一次：从"纯自研单体"转为**自研判断层 + 千问表达层的融合链**，并**把交互重心从终端搬到 Web**（独立窗口 / 多模态 / 插件生态），同期长出四档产品线 |

也就是说，**从 v0.5 开始**，功能复杂度快速上升（交互优化、性能提升、记忆增强、引擎重构），单靠手写已经撑不住迭代节奏，于是切换到 **Vibe Coding**：通过和 AI 对话、让 AI 批量产出与迭代，再从 0.5 一路推进到 v1.8 alpha。到了 **`Covi1`（第一个正式版）**，研发方式仍是 Vibe Coding，但产出形态变了——不再挤牙膏式地堆小版本号，而是把整套打磨成**一个带"预训练权重（非随机初始）"的正式版**，并改用"月 / 半年一版 + 每周小更新"的节奏。

- 迭代中派生了不少**实验性变体**：`alpha`（先行）、`beta`（测试）、`pro`（增强）、`search`（检索）、`flash`（快速版）等
- 每一版都保留了独立源码，归档在 `历史版本/` 目录，方便随时回溯

所以小方既是你的聊天伙伴，也是「前期手工打磨、后期加速迭代」的真实开发样本——**Vibe Coding 是它中后期提速的手段，而不是它的起点**。

---

## 🗂️ 目录结构

```
AI 小方/
├── xiaofang_covi2.py             # ★ 主程序 · Covi 优势层（前置判断 + 后置复核）+ CuPy GPU 后端
├── xiaofang_qwen_covi2.py        # ★ 融合层 · 千问生成主力（起 llama-server、组身份提示词、流式取字）
├── xiaofang_identity.py          # ★ 身份层（系统提示词注入 + 对话模板 + 输出端净化，不动 GGUF 一个字节）
├── xiaofang_versions.py          # ★ 版本注册表（哪一代在哪、主程序叫什么、权重放哪儿、有几档）
├── xiaofang_gpu.py               # 显存管家（检测 / 预算 / 分层 / 报速）
├── xiaofang_job.py               # 子进程连坐保险（Job Object：小方一退，llama-server 跟着没）
├── xiaofang_data_covi2.py        # 数据文件（词典 / 知识库 / 文案 / 词表 / 语法表 / TIR 表）
├── xiaofang_code_bank_covi2.py   # 代码知识库（手写条目 + 自助扫描）
├── xiaofang_mouth_covi2.py       # 口条模块（"嘴"：回复的说法 / 语气润色）
├── svgdream_covi2.py             # 独立 SVG 出图引擎（纯标准库，被懒加载 import，缺失静默降级）
├── xiaofang_web.py               # ★ Web 外挂转接口（Flask，32 条路由，SSE 流式，端口 8799）
├── xiaofang_launcher.py          # ★ 启动台（两层菜单 + 首启自检 + 依赖指纹 DEP_SIG）
├── xiaofang_bootstrap.ps1        # 首启引导：机器上没 Python 就自动下载安装（纯 ASCII）
├── xiaofang_settings.py          # 设置持久化
├── xiaofang_memory.json          # 记忆数据（旧版记忆名自动迁移，不丢已学内容）
├── xiaofang_train_covi2_*.npz    # ★ 自研网络的可训练权重（按档位各一份：satellite / asteroid …）
│                                  #   ※ 文本预训练过、非随机初始；缺失/被删会自动从随机初始化重建
├── _gguf_meta.py                 # GGUF 元数据读取器（只读；确认千问"名片"里没有别家身份）
├── Web界面/                      # ★ Web 前端三件套（index.html / app.js / style.css）+ assets + 自动生成的 _shim/
├── 插件/                          # ★ 插件生态（详见「插件生态 & Skill 生态」一章）
│   ├── 插件手册.md                #   完整开发手册（约 29KB，也是网页里那一栏的原文）
│   ├── skill/                     #   13 个内置技能（丢 .md 进来就多一个）
│   ├── personalization/           #   3 个内置皮肤（一页纸 / 星夜 / 深海）
│   └── remotion/skills/           #   完整 Remotion 官方技能包（12 个 Skill，Agent Skills 规范）
├── Covi2_模型/                    # 四档 GGUF 模型 + mmproj 视觉投影（约 11.8GB，不进仓库）
│   ├── _下载模型.ps1              #   从魔搭 unsloth/Qwen3.5-*-GGUF 拉取（断点续传）
│   └── Qwen3.5-0.8B/ 2B/ 4B/ 9B/  #   每档一个本体 .gguf + 一个 mmproj-F16.gguf
├── Covi2_运行时/                  # llama.cpp 运行时（llama-server.exe + CUDA 依赖，约 1.1GB，不进仓库）
│   ├── _拉取运行时.ps1            #   拉官方预编译包（12 路分片并发，绕开限速）
│   └── _并行下载.py               #   分片下载器
├── Web对话/                       # 网页版对话记录（网页聊过的历史存这里）
├── 背景图/                        # 网页换背景用的图片（项目根下直接放）
├── 产物/                          # 独立 SVG 引擎产出的动画 / 视频工程 / 每期改动报告
├── _立项/                         # 立项待办（ML-Routing / SVG-Contract / Tool-Protocol · 均"计划中"）
├── 权重缓存/                      # 冻结权重缓存（加速冷启动；整目录删掉会自动重建）
├── clean_cache.py                # 旧权重缓存一键瘦身
├── 清理旧缓存.bat                 # 双击运行 clean_cache.py（纯 ASCII）
├── 启动小方.bat                   # 一键启动（纯 ASCII：认型号 → 找/装 Python → 交启动台）
├── .gitignore                    # 版本忽略（__pycache__ / npz / 权重缓存 / 模型 / 运行时中间件 等）
└── 历史版本/                      # 历次迭代归档（v0.1 → v1.8alpha，共 32 个版本目录 + Covi1/）
    ├── Covi1/                     #   纯自研那一代的完整归档（含它的权重缓存）
    └── _训练脚本存档/              #   训练相关全部收在这：学习小说 / 学习语料 / 爬取语料 + 语料库
```

> 顶层**只留运行必需的东西**。训练相关的脚本与语料已整体挪进 `历史版本/_训练脚本存档/`，主程序一个都不读。
> **`Covi2_模型/` 与 `Covi2_运行时/` 刻意不进仓库**——它们加起来十几个 GB，且都能从官方源一条命令拉回来（见「模型从哪来」）；`权重缓存/`、`__pycache__/`、`Web对话/`、`Covi2_上传/` 同理，都是本机产物。

---

## 🔄 更新节奏 & 版本定位（重要）

### 📅 更新节奏（正式版之后，节奏变了）

进入 `Covi1` 正式版后，更新节奏与预览期**完全不同**：

- 预览期是"**每周末更新，一个周末能出好几个 `0.x / 1.x` 小版本**"，量不小、但版本号跳得很勤。
- 正式版开始，**不会再出现"一周更 N 个零点几版本"** 了——一个大版本可能要攒 **一个月、甚至半年** 才发布一次。
- 但**每周都会推送小更新**到 GitHub（引擎微调、权重小步学习、体验打磨、README / 细节修正都算）。改动可能小到"不打眼"，但**一定保证每周有**，不会断更。

一句话：**预览期 = 高频小步快跑；正式版 = 大招慢放 + 每周持续小更。**

### ⚙️ 性能承诺

- 小方**始终保证只需一颗中端 CPU（i7 / R7 这一档）就能流畅运行**，所以它的性能**必然有明确上限**，这是设计底线，不会靠堆配置突破。
- 但我们的思路是：**不做性能妥协**的偷懒版，而是**榨干你电脑的每一分算力**，用**最低的配置，跑出最牛逼的模型** 💪

### 🏷️ 版本号怎么读（别被编号骗了）

- 目前你看到的所有 `v1.x / v2.x / v3.x` 之类，**都只是「预览版」**，版本数字不代表正式程度。
- 真正的正式版**不按 `v几` 这种常规序列来**——当你在某天更新后，**突然看到冒出一个「FlphaLit 2」**，那才是**真正的正式版**。
- 所以：
  - 现在所有「正式版」（如 v1.6 正式版）其实只是 **预览版的正式版**；
  - 而凡是后缀带 **`Alpha`** 的，则还只是 **预览版的预览版**。

> 一句话记住：**别盯着 `v` 后面的数字，看到「FlphaLit 2」才是真正式版。**

---

## 📜 历史版本一览

小方从 `v0.1` 起步，一路迭代到最新版，完整历史已归档在 `历史版本/` 目录，共 **32 个版本目录**（含 alpha / beta / pro / search / flash 等变体 + `_训练脚本存档/`）：

- `v0.1` 初代版本
- `v0.2` 基础迭代
- `v0.3` 功能扩展
- `v0.4` / `v0.4search` / `v0.4_beta` 数据管理增强
- `v0.5` / `v0.5alpha` / `v0.5alpha2` / `v0.5_beta` / `v0.5_flash` 交互体验优化

> ### ⚠️ v0.5 的墓志铭（一次"步子迈太大扯着蛋"的教训）
>
> `v0.5` 刚切换到 Vibe Coding 时**过于兴奋**，脑子一热就放飞自我：一口气给 v0.5 新增了 **4 个测试变体**（alpha / alpha2 / beta / flash）搞对比，正式版更是把规模**直接堆到 4096 维、24 层、32 头**的极限配置。
>
> 结果就是——**步子迈太大，直接扯着蛋了**，**还把蛋给扯破了** 🥚💥
>
> - 作者的 **4070** 真就 8G 显存 + 32G 内存，**一跑就爆**；
> - 一打开电脑**跟战斗机起飞似的**，**风扇转速快到都快飞起来了** 🌀；
> - 跑个冒烟测试，**一个问题直接吃掉快 20GB 内存**，连 Windows 默认组件都被**吓成狗**了 🐶；
>
> 所以这里**奉劝一句：没有 48G 显存的同学，真的不要碰 v0.5** 🫠。这一版现在也**不再改了**，它就立在那儿，**跟个墓志铭一样**——这就是小方模型规模的**最高上限**，再往上堆就没有意义了。
>
> 之后的版本（v0.6 起）痛定思痛，把性能目标重新拉回"i7/R7 单 CPU 也能流畅运行"的务实路线，**参数规模让位于可用性**，再也不敢整这种花活了 💪

- `v0.6` / `v0.6alpha` / `v0.6flash2` / `v0.6pro` 性能提升
- `v0.7` 功能完善
- `v0.8` / `v0.8pro` 稳定性优化
- `v0.9alpha` 记忆能力增强
- `v1.0` / `v1.0pro` 正式版
- `v1.1` / `v1.1alpha` / `v1.1pro` 迭代
- `v1.2` / `v1.3alpha` / `v1.4alpha` 迭代
- `v1.5alpha` 上一版 alpha（1.5 正式版发布后归档）
- `v1.5` 正式版（1.6 正式版发布后归档）—— 引擎 1.68B / 多后端联网
- `v1.6` 正式版（1.7 Flash 开发中归档）—— 引擎升档 2.4B / 15 层纵深，联网与代码能力补强
- `v1.7` 正式版（1.8 Alpha 开发中归档）——「权重可训练」+ 双层深度思考 + 多层精准打击基础，冒烟测试 299 用例全绿
- `v1.7_flash` flash 变体（1.8 Alpha 稳定后归档）—— 主体×焦点双层意图路由 / 建议询问 chips / 文字画面路由 / 文体适配 / 代码素养 / 做游戏 / 长线任务，连同 `xiaofang_train_17.npz` 训练成果一起收进归档
- `v1.8alpha` 开发版（Covi1 收口后归档）—— TIR 五维意图解析 / 本地文件阅读 / 实时天气 / 精准打击路由地图
- `_训练脚本存档/` 学习与抓取语料的脚本（`学习小说.py` / `学习语料.py` / `爬取语料.py` + 配套 bat），训练跑完即停用，故收进归档

> #### 🚀 当前版本：`Covi 2`（**四档产品线 Satellite / Asteroid / Planet / Corona**，默认档是 Satellite）
>
> 这一代是**结构性换代**，不是加功能：架构从"纯自研单体"转为**三段式融合链**（自研判断层 → 千问表达层 → 自研复核层），交互重心从终端搬到 **Web 端**，并长出**多模态（图片 / 视频）**与**插件生态**。**Covi 1 的整套自研引擎没有报废**——它整体归档进 `历史版本/Covi1/`，同时其能力被抽出来继续当 Covi 2 的**前后置判断层**。
> v1.7 Flash 把「权重可训练（优化器 + 反向传播）」、**两层嵌套深度思考**、**多轮投稿**、**多行输入**和**全局自动联网**一起补上了；v1.7 Flash又加了 **黄色建议询问（鼠标可点，0~3 条由小方自己定）**、**输入/输出双闸门 + 医疗免责**、**输出前双重自我确认**、**文字画面路由（画一个东西不再回算法）**、**联网结果回灌 Transformer 再整合**、**网络梗与 emoji 判读**、**长期事实记忆与释义抽取加深**，并把**违禁判定放宽 + 输出再送 Transformer 复核合理性**（敏感词邻域属正常技术/科普语境即判误伤，但命中「做炸弹/诈骗教程」这类核心违禁短语不豁免）。随后 v1.7 Flash 再推一轮「精准打击」大改：**主体×焦点双层意图路由（专治牛头不对马嘴）**、**V1.7 Flash 提速档**、**八种文体适配**、**代码素养问答**、**做游戏方法论**、**长线任务持久化**、**口语虚词归一**，并扩了文体/代码素养/做游戏/长线任务/玩法推荐五套数据库。冒烟测试 **299 用例全绿**（`SMOKE_OK`）。等它稳定下来，就会被归档进 `历史版本/`，顶层再腾给下一版。
>
> `v1.8 Alpha`（全系列已归档进 `历史版本/v1.8alpha/`）解决的是同一个老毛病**换算法**而不是继续加特例：新增 **五维任务意图解析 TIR**（`ACT 诉求 × DOM 主体 × ART 产物 × MOD 修饰 × HOR 跨度`，先验与证据解耦打分，只有「产物形态能立刻兑现」时才接手，判不准就反问一句），把「用户到底让我做什么」从关键词匹配升级成多维联合判定；同时新增 **本地文件阅读**（给路径就真读 `.md` 等 46 类文本，先报「文件名 + 类型 + 体量 + 行数」，再按形态给大纲 / 摘要 / 统计 / 预览；二进制不硬读、超预算只读一段并如实说读了多少、说「再读一遍那个文件」能续读），并把六条**做事规范**写进了常驻工作守则（动手前先说一句 / 报告真实结果 / 交付就是用户要的那一份 / 按类型讲文件 / 写给人看的话 / 记得住记得准）。这套工作方法**学自业界优秀编码助手的公开行为规范**——学的是方法，**身份没有跟着变**：守则里立了身份防火墙，小方始终是 AI 小方，不会自称任何别家的产品。随后这一版又把 TIR 的**交付形态**收了口：产物是「名单」时按对象分篮（问工具 / 软件不再掉进游戏电影的兜底句）、点了「对比」却没说清拿谁比就**反问一句要对象**（不再退化成「它是什么」的定义讲解）、只有一侧有资料就**讲清这一侧 + 明说另一侧没查到**（不硬凑一张编出来的对照表）、问「进度怎么样了」按推进程度交付，并且**思考正文永不为空**（采样空手而归就低温重采样、再退到贪心取模型自己的高概率 token，免得下层验算的相似度退化成「自己跟自己比」）。冒烟测试 **339 用例全绿**（`SMOKE_OK`）。随后 v1.8 Alpha 又加了两记重拳：**① 实时天气**——问「今天北京天气」直连 **wttr.in 真实气象接口**（免费无密钥），把 **WW 天气代码自动转中文**（113=晴 / 302=中雨 / 389=强雷阵雨…），命中失败才回落天气资讯站点，从此天气问答给的是真数据而不是背词典；**② 「精准打击」路由地图重排**——把 `XiaoFang.reply` 的拦截顺序按"越具体越靠前"重新排布（场景 / 创作 / 本体 / 工作室 / 站点时间天气 / 长线任务 / 改写 / 情绪梗 / 主体×焦点 / 代码素养 / 做游戏方法论 / 通用兜底），谁先认出用户到底要什么谁负责作答，绝不让通用模板截胡精准请求。
>
> 现在顶层跑的是 **`Covi 2`**（默认 Satellite 档，启动台选 1 / 2 / 3 / 4 即切 Asteroid / Planet / Corona）——把 Covi 1 的自研能力全部保留并前置为**判断层**，中间接上千问的**表达层**，同时沿用了前几代"瘦身 + 提速"的实事：
>
> - **① 冷启动懒加载**：依赖探测改用 `find_spec`（只查"装没装"，不再把模块执行一遍拉进内存），`pyfiglet`（ASCII 大字）、`ddgs`（联网搜索）、鹈鹕引擎全部改成**第一次真用到才 import**，只有 `numpy` + `colorama` 保持即时加载 —— 启动时不再白读一堆模块。
> - **② 文件名去版本化**：记忆统一叫 `xiaofang_memory.json`（旧名进遗留清单自动迁移，**已学内容一条不丢**）、训练成果统一叫 `xiaofang_train_covi2_档位.npz`（**成果按档位各存一份**），代码里的旧文件名同步改掉，顶层不再留任何 `v18` 尾巴，源码文件名也不再带档位后缀（`_lite` 之类会让人误以为三档都是 Lite）。
> - **③ 权重缓存清理**：词表升到 `V12602` 之后，旧的词表缓存全成了死重 —— 删掉 6 份陈旧缓存，`权重缓存/` 从 **≈19.9 GB 降到 ≈7 GB**（只留当前词表的 3 份），冷启动读盘也更快。
> - **④ 目录整理**：训练相关的脚本（`学习小说.py` / `学习语料.py` / `爬取语料.py` 及配套 bat）整体归档进 `历史版本/_训练脚本存档/`；`__pycache__` / `.crawl_status` / `.xf_status` 里的训练残留一并清掉。
> - **⑤ 启动台 + 首启自举 + 顶层再瘦身**：双击 `启动小方.bat` 由启动台接管，现在它是**两层菜单**——**先选启动方式**（① 命令行 CLI / ② Web 界面），**再选版本档位**（Satellite / Asteroid / Planet / Corona / 4 历史，并标出各档模型是否已就位、缺不缺 mmproj 投影），选完才启动。**第一次**启动它会先把本机环境整个搭好，五步走完才放菜单：**认型号**（CPU 架构 x64 / ARM64 / x86 + Windows 版本）→ **找 Python**（`py` → `where python` 并剔除商店占位）→ **没有就自己装**（按架构从 python.org 下载对应安装包，`xiaofang_bootstrap.ps1` 静默安装，只装当前用户、不弹 UAC）→ **补齐依赖库**（`numpy` / `colorama` / `pyfiglet` / `ddgs` / `psutil` / `requests` / `beautifulsoup4` / `flask`）→ 全部就绪才进菜单。成功后落一枚环境记号 **`.xf_env_ok`**（记着解释器路径 + **一行依赖指纹 `DEP_SIG`**），**之后每次双击只要记号有效就直奔菜单**，这套自检一次都不再跑；依赖指纹对不上（新增了库）会自动补装再放行——当初 `flask` 就是这么漏装的，指纹机制专门堵这个洞。中文界面全部搬进 `xiaofang_launcher.py`，`.bat` 与下载器 `.ps1` 双双退化成**纯 ASCII 薄壳**（cmd 按读取时的活动代码页解码 `.bat`、PowerShell 5.1 按 ANSI 解码无 BOM 的 `.ps1`，里面写中文必乱码，所以只让 Python 出中文）。顶层同时清掉重复的启动脚本、空闲的 `.venv/`，并把纯训练用的 `优质语料/` 整体挪进 `历史版本/_训练脚本存档/`——**顶层只留运行必需的东西**。

---

## ❓ 常见问题

**我要不要下那个 19.84 GB 的装机包？**
看你图什么。**图省事就下**——`AI-XiaoFang-Covi2-v0.2-FULL.7z` 一个包把四档模型、运行时、历史版本全带齐，解压完双击 `启动小方.bat` 就能跑，**中间不用再动脚本**。**图省流量就别下**——只要源码的话 GitHub 那边约 92 MB 的包就够，缺的两个大件让 `_下载模型.ps1` 和 `_拉取运行时.ps1` 按需补（也可以只下一两档，不必下全）。顺带提醒：**装机包解压后约 22.9 GB**，加上解压过程的临时占用，磁盘得留够。

**没有 Python 怎么办？**
不用自己装。双击 `启动小方.bat`，它会先认型号（CPU 架构 + Windows 版本），再从 python.org 下载匹配你机器架构的安装包，静默装好（只装当前用户，不需要管理员权限，也不弹 UAC），接着自动补齐所有库，然后才进版本选择页。全程不用你点一下。

**每次都要等它自检，是不是很慢？**
不会。第一次成功之后会在项目里留下环境记号 `.xf_env_ok`，**之后每次双击都直接弹菜单**，不再重复这套检查。只有记号被删掉、或记号里记的那个解释器路径已经不存在了，才会重新自检一遍。想主动重来：`启动小方.bat --reinstall-env`。

**自动装 Python 失败了怎么办？**
通常是没联网、或者防火墙拦了 python.org。`.bat` 会把失败原因打在屏上，并提示你手动装一次（去 python.org 下载 "Windows installer"，安装时勾上 "Add python.exe to PATH"），装完再双击就行。

**电脑没独显能跑吗？**
能。会自动以 CPU 硬算模式运行，功能完全一样，只是思考稍慢一点点。

**小方要在周末才能更新，为什么？**
因为小方的作者是个**学生** 😴——**周末才能摸到电脑**。周一到周五都得上课写作业，只有放假了才能坐下来更新代码。

> 🌏 For foreign friends: The author is a **student**, so updates only happen on **weekends** — that's the only time he can touch his computer. And yes, that Chinese meme about "your computer gets smashed if you slack off in school" is **100% real** 😅 So if a week comes along where the update doesn't happen... it probably means the PC got destroyed. You've been warned.

**小方真的是纯自研吗？**
分两段说清楚：**Covi 1 及之前是纯自研（100%）** ✅——前期只用 **NumPy** 手搓，后期想到显卡能加速才加上 **CuPy**，全程**没有使用任何 Transformer 库，也没有用 PyTorch** 之类的深度学习框架，一行一行都是自己写的。**Covi 2 起是半自研**：自研的判断层（路由 / 检索 / 情绪 / 违禁 / 验算 / 身份 / 复核）原封不动当前后置，中间接进千问 3.5 当**表达层**——补的是"嘴"，不是"脑子"。

**小方未来会有 Agent 框架吗？**
会有的。小方正在朝「能自己思考 + 能动手办事」的方向进化，Agent 能力在计划中——已先在 `_立项/` 里立了 **ML-Routing（真多语言路由）** 和 **Tool-Protocol（工具调用协议）** 两份立项草案，等攒够灵感就开工——敬请期待 🚀（不过按上面的更新节奏……也得等周末。）

**有没有接第三方大模型的计划？**
**Covi 2 已经接了一个——但接的是"本地权重"，不是"云端接口"。** 千问 3.5 的 GGUF 是**下载到你本机、离线跑**的，小方**不调用任何云端大模型 API**，断网照样能用。而且千问只被当作**表达层**：怎么想、该不该答、答完怎么验，仍然由小方自己的判断层说了算；它的 GGUF **一个字节都没改**，身份靠提示词注入 + 输出端净化实现。给它的新能力（如 Web 界面、插件生态）也还是以"自己搓"的方式做。

**未来可以吊打 GPT 吗？**
这个问题得谦虚一点：小方是**本地、单机、i7/R7 单 CPU**就能跑的模型，跟财大气粗的云端大模型拼参数规模肯定是比不了的。但小方主打**自研融合、可离线、有性格**，在"一台普通电脑就能跑起来的 AI"这个赛道里，它绝对是一匹黑马 🐎。

**你又在更，你这个破 AI 游戏还做不做了？**
做！当然做！小方是「小方工作室」的一份子，工作室的主业本来就是**用心做好游戏** 🎮，AI 小方只是搭子之一。想看看工作室的游戏们都出到哪儿了？**详情请看官网** → [fanggame.company](https://fanggame.company)

**设置存在哪？**
`xiaofang_settings.py`。在聊天框输入 `/setting` 修改后会自动写盘，下次启动生效。

---

<div align="center">

**小方工作室 · 用心做好游戏 🎮 · [fanggame.company](https://fanggame.company)**

📧 联系：xiaofangstudio@outlook.com

</div>
