從零實作、可訓練、可觀察、可擴充的本機開源 AI 工作台
不需要 API Key · 資料預設留在本機 · Windows / Linux / macOS
快速開始 · Python API · 訓練指南 · 原生核心 · Mod 開發 · 架構 · Releases
Important
Momo-LM 不是雲端模型的 API 包裝。內建文字與圖像模型都在專案中從零實作,使用隨附權重在使用者裝置上推論與繼續訓練。這是適合學習、實驗和建立垂直領域原型的小型基礎模型,不宣稱具有大型商用模型的通用能力或寫實圖像品質。
Momo-LM 把「模型、訓練、知識庫、對話、圖像、語音與擴充模組」放在同一個易用的本機工作台。安裝後即可使用隨附的基礎權重對話;再把教材、文件、問答或網站內容餵給它,逐步建立個人助理、公司內部知識模型或特定領域專家。
它刻意保持模型結構透明:文字核心是 184,131 參數的 UTF-8 位元組神經語言模型,使用 gated mixed-activation 神經元組、殘差上下文路徑、softmax、完整反向傳播、梯度裁剪與 mini-batch SGD。矩陣密集工作可由 Rust 或 C/C++ 原生核心執行,沒有可用編譯器時則安全退回 NumPy。權重使用不執行任意程式碼的壓縮 .npz 格式保存。
| 功能 | 實作方式 | 是否需要網路 |
|---|---|---|
| 基本對話與反問 | 本機神經文字模型 + 本機檢索記憶 + 釐清問題策略 | 否 |
| 原生矩陣與推理 | Rust safe kernels、C 分塊張量核心、C++ 融合神經元組 | 否 |
| 自主增量學習 | 每次允許的對話可更新權重並保存新檢查點 | 否 |
| 餵入文字與領域資料 | 切塊寫入 SQLite,選擇是否同步訓練 | 否 |
| 網頁學習 | 由使用者提供起始網址,遵守 robots.txt、同網域、頁數與大小限制 |
僅此功能 |
| 圖像生成 | 內建 TinyCanvas 提示詞條件座標神經網路,輸出 128–1024 px PNG | 否 |
| 文字轉語音 | Windows SAPI、Linux eSpeak 或內建波形後備引擎 | 否 |
| 聊天與訓練介面 | 零前端框架、由本機 HTTP 服務提供 | 否 |
| 權重觀察 | 顯示層形狀、參數量、均值、標準差、範圍、稀疏率與訓練統計 | 否 |
| Mods 擴充 | 將可信任的 Python 檔放入 ~/.momo-lm/mods/ 後重新載入 |
否 |
| CLI 自動化 | chat、train、ingest、crawl、image、tts、inspect |
視命令而定 |
| Python 嵌入 | import momo_lm 或相容入口 import MomoLM |
否 |
- 前往 Releases 下載最新版。
- Windows 執行
Momo-LM-Setup-Windows-x64.exe;Linux 執行Momo-LM-Setup-Linux-x64.run。 - 啟動
Momo-LM,瀏覽器會自動開啟http://127.0.0.1:7860。
安裝程式由每個 v* 標籤的 GitHub Actions 從相同原始碼重新建置,並自動附加到該 GitHub Release。
需求:Python 3.10 以上、Git。
git clone https://github.com/YanagiKH/Momo-LM.git
cd Momo-LM
python -m venv .venvWindows PowerShell:
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e .
momo init
momo serveLinux / macOS:
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e .
momo init
momo serve# Windows PowerShell
.\scripts\install.ps1# Linux / macOS
./scripts/install.sh套件發行名稱可使用連字號 Momo-LM,但 Python 的 import 文法不允許模組名稱包含 -。因此正式匯入名稱是 momo_lm,另提供大小寫相容入口 MomoLM:
import momo_lm
with momo_lm.load_model(home="./momo-data") as model:
reply = model.chat("你好,請介紹 Momo-LM", learn=False)
print(reply)
model.ingest("產品代號 Peach 是本機推理引擎。", source="product-manual")
model.train("User: 產品代號 Peach 是什麼?\nMomo: 它是本機推理引擎。", epochs=3)
model.generate_image("pink neural city", "momo.png", width=512, height=512, seed=42)偏好類別式名稱時可使用完全相同的 API:
import MomoLM
model = MomoLM.MomoLM.from_pretrained("./momo-data")
try:
print(model("Momo 現在使用哪個運算核心?", learn=False))
print(model.inspect()["compute_backend"])
finally:
model.close()公開介面包含 chat、chat_result、train、ingest、generate_image、speak、inspect 與 context manager。模型不會呼叫雲端 API,也不需要 API Key。
執行 momo serve 後可使用六個頁面:
- 對話:檢索已學習資料後回答,可隨時關閉「自我學習」。
- 學習資料:貼入文字或輸入網站起始網址,選擇只加入檢索記憶或同時更新權重。
- 圖像生成:輸入提示詞、尺寸與選用 seed,完全在本機產生 PNG。
- 文字轉語音:輸入內容與語速,輸出可下載的 WAV。
- 權重觀察:查看文字模型和圖像模型參數、訓練步數與知識庫數量。
- Mods:查看已載入模組、命令與隔離的載入錯誤,並可重新載入。
只想使用終端也可以:
momo chat
momo chat "什麼是本機優先 AI?"
momo inspect使用 UTF-8 純文字。建議每個樣本具有明確上下文與答案,並保留來源、授權和版本。對話資料可採用:
User: 什麼是領域中的術語 A?
Momo: 術語 A 是……
User: 它適用在哪些情況?
Momo: ……
開始前應移除:重複段落、密碼與個資、沒有授權的內容、互相矛盾且未標記來源的答案。把 10–20% 高品質樣本保留為驗證集,不要拿去訓練。
cp ~/.momo-lm/weights/momo-text-base.npz checkpoints/before-domain-training.npzWindows 可使用:
Copy-Item "$HOME\.momo-lm\weights\momo-text-base.npz" "checkpoints\before-domain-training.npz"這一步速度快,適合文件知識,且不會因訓練破壞既有語言能力:
momo ingest data/domain-notes.txt在 UI 中取消「同時訓練」可得到相同效果。
momo train data/domain-dialogues.txt --epochs 5 --learning-rate 0.02從 3–5 epochs 與 0.01–0.03 學習率開始。資料很少時不要盲目增加 epochs;損失下降不代表答案一定更好。每次只加入一個可辨識的資料版本,完成後用固定問題集比較。
momo chat "驗證問題一"
momo chat "驗證問題二"
momo inspect至少檢查:已知答案、未知問題是否誠實、原有基本對話、不同語言輸入、敏感資料是否被意外學入。如果結果退步,停止服務後把先前檢查點複製回 ~/.momo-lm/weights/momo-text-base.npz。
更完整的資料切分、課程式訓練、垂直專家策略、指標與除錯方式請見 docs/TRAINING.md。
momo crawl https://example.com/docs --max-pages 8
momo crawl https://example.com/docs --max-pages 8 --train安全邊界:
- 只有使用者明確執行後才會連網,不會在背景任意瀏覽。
- 只追蹤起始網址的同網域 HTTP/HTTPS 連結。
- 尊重網站
robots.txt,單頁最多讀取 2 MB,預設最多 8 頁。 - 預設只加入本機知識庫;加上
--train才更新權重。 - 使用者必須自行確認資料的著作權、服務條款與隱私要求。
momo image "pink moon above a quiet cyber city" --output moon.png --width 768 --height 768 --seed 42TinyCanvas 是輕量、可觀察的提示詞條件座標網路,適合背景、色彩概念、紋理與抽象圖像。它不是大型擴散模型。需要寫實能力時,可透過 Mod 掛接使用者自行下載、完全在本機執行的 diffusion checkpoint,而不需 API Key。
momo tts "你好,我是 Momo。" --output momo.wav --rate 170- Windows:使用內建 SAPI 聲音。
- Linux:優先使用
espeak-ng或espeak;例如 Ubuntu 可執行sudo apt install espeak-ng。 - 若未找到系統語音,仍會輸出可用來驗證流程的 Momo 波形,但不具自然人聲品質。
將可信任的 .py 檔放入 ~/.momo-lm/mods/。把安裝時產生的 example_tools.py.example 重新命名為 example_tools.py,然後在 UI 按「重新載入」即可使用 /time。
from momo_lm.mods import ModSpec
def register():
return ModSpec(
name="My Mod",
version="1.0.0",
commands={"/hello": lambda name: f"Hello, {name or 'Momo user'}!"},
)Mods 是本機 Python 程式碼,擁有與 Momo-LM 相同的使用者權限,只能安裝自己撰寫或已審查的模組。完整介面、鉤子與測試方式請見 docs/MODS.md。
flowchart TD
A["文字或網站資料"] --> B["清理與重疊切塊"]
B --> C["SQLite 本機知識庫"]
B --> D["UTF-8 Byte Tokenizer"]
D --> E["Gated 神經元組"]
E --> J["Rust / C++ / NumPy 後端"]
C --> F["檢索與來源"]
E --> G["下一 Token 生成"]
F --> H["Momo Runtime"]
G --> H
H --> I["CLI / Web UI / Mods"]
| 元件 | 基礎規格 |
|---|---|
| Tokenizer | 259 token:PAD、BOS、EOS、256 個 UTF-8 bytes |
| 上下文 | 24 tokens,保留位置順序的 embedding 串接 |
| 文字模型 | 32 維 embedding、96 維 gated mixed-activation neuron groups、殘差路徑、softmax output |
| 文字參數 | 184,131,可在權重頁直接驗證 |
| 原生核心 | Rust memory-safe kernels、C blocked matmul/softmax/layer norm、C++ fused inference |
| 後端順序 | rust → cpp → numpy,可用 MOMO_BACKEND 固定 |
| 圖像模型 | 64 維提示特徵、24 維 latent、64 維 coordinate hidden |
| 權重格式 | numpy.savez_compressed;讀取時 allow_pickle=False |
| 記憶 | SQLite 文件片段與最近 1,000 輪對話 |
更多設計取捨與資料流請見 docs/ARCHITECTURE.md。
momo serve [--host HOST] [--port PORT] [--no-browser]
momo chat [MESSAGE]
momo train FILE [--epochs N] [--learning-rate RATE]
momo ingest FILE [--train]
momo crawl URL [--max-pages N] [--train]
momo image PROMPT [--output FILE] [--width N] [--height N] [--seed N]
momo tts TEXT [--output FILE] [--rate N]
momo inspect
momo backend
momo benchmark [--size N] [--rounds N]
momo init [--force]
所有命令可用 --home PATH 指向獨立實驗目錄,例如:
momo --home ./experiments/legal-expert init
momo --home ./experiments/legal-expert train legal.txt --epochs 5
momo --home ./experiments/legal-expert servemomo_lm/
├── api.py # 可嵌入其他專案的穩定 MomoLM API
├── backend.py # Rust / C++ / NumPy 後端選擇與張量介面
├── model.py # 從零實作的文字神經模型與反向傳播
├── image_model.py # TinyCanvas 本機圖像網路
├── runtime.py # 對話、檢索、學習與工具協調
├── learner.py # 文字切塊與受控網站讀取
├── knowledge.py # SQLite 本機記憶
├── mods.py # 動態 Mod 介面與錯誤隔離
├── server.py # 本機 JSON API 與工作台服務
├── speech.py # 離線 TTS 後端
├── web/ # 響應式聊天與訓練介面
└── assets/weights/ # 可直接使用和繼續訓練的基礎權重
native/
├── include/ # 穩定 C ABI
├── src/ # C 張量核心與 C++ 推理框架
├── python/ # CPython 原生擴充
└── rust/ # 無外部 crate 的 memory-safe kernels
python -m pip install -e ".[dev]"
python scripts/build_native.py --release
python -m compileall -q momo_lm scripts tests
ruff check .
python -m unittest discover -s tests -v
python -m buildGitHub Actions 會在 Windows 與 Linux 上分別編譯 C、C++、Rust 與 CPython 擴充,執行 Rust Clippy、CMake/CTest、原生數值一致性、Python/HTTP 整合測試、wheel/sdist 與安裝後 smoke test。CI 和 Release 設定 MOMO_REQUIRE_NATIVE=1,任何原生後端缺失都會直接失敗;建立 v* 標籤時才會產生兩套可直接安裝的資產。
- 目前基礎文字模型仍小,gated 神經元組與原生核心提升了表達能力、可擴充性與效率,但不等同大型商用 Transformer 的知識量。
- TinyCanvas 產生抽象圖像,不是寫實擴散模型。
- 增量 SGD 適合小批資料;大型資料集預計加入 mini-batch dataset streaming、AdamW 與驗證儀表板。
- 規劃中的相容 Mod:本機 GGUF 推論、本機 diffusion checkpoint、更多離線 TTS 引擎與版本化評估套件。
請勿把密碼、API Token、未授權個資或機密文件放入訓練資料。對外開放 --host 0.0.0.0 前應自行加入反向代理、驗證與防火牆;預設僅監聽 127.0.0.1。漏洞回報方式與完整威脅邊界請見 SECURITY.md。
歡迎提交可重現的錯誤、測試、文件、模型改良與安全的 Mod 範例。請先閱讀 CONTRIBUTING.md。
Momo-LM 以 MIT License 授權。
