v0.4.1 · 会遗忘、会联想、会巩固 · MCP + REST + Web UI
盘古是一个本地优先的 AI 记忆服务:把你说过的话、写过的笔记、丢进来的文档, 变成 AI 随时能查的长期记忆 —— 而且像人一样遗忘(不重要的自然淡出)、 联想(相关的被一起唤醒)、巩固(碎片随时间整理成知识)。
任何支持 MCP 的客户端(DeepSeek Harness / Claude Code / 自研 Agent)接上它就能记住你。 不用 DSH 也完全能用。
① 一条命令安装(Linux / macOS · Python ≥ 3.11 · 约 10 分钟)
curl -fsSL https://raw.githubusercontent.com/Mlte0907/pangu/master/install.sh | bash装完会打印一张 「DSH 填写卡」(服务地址 + 凭据),只显示一次,先存下来。
②(可选)接上你的 AI 客户端
| 客户端 | 怎么做 |
|---|---|
| DeepSeek Harness | 装可选插件 dsh-pangu,一条命令(见下方「接入 DeepSeek Harness」) |
| Claude Code / 其它 MCP 客户端 | 见下方「手动安装」里的三种接入方式 |
| 只想先看看界面 | cd ~/pangu && .venv/bin/pangu serve → 浏览器打开 http://127.0.0.1:8866 |
③ 开始用
cd ~/pangu # 默认安装目录
.venv/bin/pangu stats # 装好没、有多少条记忆
.venv/bin/pangu search "关键词" # 搜一条
.venv/bin/pangu --help # 30+ 子命令安装失败 / 网络问题 / 想要更多细节 → 看下方「安装(详细)」。
| 能力 | 说明 |
|---|---|
| 🧠 记忆宫殿 | Wing→Room→Drawer 三级组织,7 种语义殿堂分类(事实/事件/发现/偏好/建议/概念/关系),跨翼 Tunnel 联通 |
| ✍️ 摄入管道 | 标准脱敏 → 可选 Fernet 加密 → 三级去重(精确 / 语义余弦 0.92 / 文本重叠)→ 重复记忆自动 boost |
| 🔍 混合检索 | ONNX 本地向量(paraphrase-multilingual-MiniLM-L12-v2 INT8,384 维,中英都行)+ SQLite FTS5(jieba 中文分词)+ RRF 倒数排名融合(k=60)+ 多维重排 |
| 🌊 神经激活扩散 | top-K 命中做 spreading activation(深度 3、衰减 0.6),把关联记忆一并唤醒 |
| ⏳ 个性化遗忘 | 艾宾浩斯式衰减曲线按记忆类型(情景 0.6 / 语义 0.15 / 程序 0.08 / 情绪 0.3)区分速率;凌晨 3-5 点夜间巩固因子;低于底限自动归档 |
| 📚 四层记忆栈 | L0 身份层 → L1 概要层 → L2 按需层 → L3 深度搜索,动态 token 预算(1000→3000)随记忆规模伸缩 |
| 🔐 安全 | Fernet 记忆级加密、MemorySanitizer 标准脱敏、JWT / API-Key / RBAC / ABAC 四层鉴权 |
| 🕸️ 知识结晶 | LLM 生成 WikiPage 知识页、Wikilink 实体抽取、知识图谱可视化 |
| 🔄 自动沉淀 | MCP 工具调用透明采集(SelfImproveWorker)、会话桥接摘要、git hook、文件监控 |
| 🖥️ 三形态接入 | MCP stdio / MCP streamable-HTTP + REST/WebSocket / 独立 Web 服务 |
| 🧩 多模态(默认关闭) | PDF 正文(pypdf)、音频转写(whisper,需另开语音转写)、图片尺寸(Pillow,无 OCR)—— 在设置页「多模态内容提取」一键打开 |
git clone https://github.com/Mlte0907/pangu.git
cd pangu
./install.sh # 装依赖 + 预下载模型 + 注册 systemd 服务
./install.sh --dsh-plugin # 盘古与 DSH 同机时追加安装结束会打印 DSH 插件填写卡(服务地址 / 盘古凭据,只显示一次)。 填进 DSH 设置页 →「盘古记忆系统」即可——设置页只有一个凭据字段「盘古凭据」, 记忆与管理面板都用它(安装脚本已让服务端两个密钥同值)。
盘古装在云主机、DSH 装在你自己的机器上时,在云主机上执行:
git clone https://github.com/Mlte0907/pangu.git /root/pangu && cd /root/pangu
./install.sh --host 0.0.0.0脚本结束会打印 DSH 插件填写卡(服务地址 / 盘古凭据),只显示一次,请立即保存。
💡 设置页只有一个凭据字段:安装脚本让
~/.pangu/.api_key与~/.pangu/.admin_secret取同一个值,插件在管理面直接复用「盘古凭据」, 所以只需填一处。 (服务端仍是两套独立校验——数据面走X-API-Key、管理面走X-Admin-Key; 共用只是安装期的取值策略。若某台服务端两把确实不同,插件管理面会 401, 安装脚本的填写卡会直接给出「在服务端统一」的那一行命令。)
⚠
--host 0.0.0.0会把端口暴露到公网,必须置于 nginx/TLS 反向代理之后 (参考DEPLOY.md),并在防火墙/安全组只放行反向代理端口。
curl -fsSL https://raw.githubusercontent.com/Mlte0907/pangu/master/install.sh | bash -s -- --host 0.0.0.0⚠ 网络前提:这条命令要先下载
install.sh本身,依赖raw.githubusercontent.com。 中国大陆该域名常被重置(现象:curl: (56) Recv failure或长时间无响应无输出), 此时请改用上面的git clone方式 —— 实测git clone https://github.com/...在国内可直连。若确实只想要单文件脚本,可走第三方 GitHub 加速镜像:curl -fsSL https://ghproxy.net/https://raw.githubusercontent.com/Mlte0907/pangu/master/install.sh | bash -s -- --host 0.0.0.0镜像属第三方服务,可用性与内容完整性不由本项目保证;有顾虑请用
git clone。
脚本会做完整的环境自检,并在 ONNX 模型下载失败时明确报错中止
(而不是让服务静默降级到无语义的 hash 向量,见
docs/OPTIMIZATION.md):
./install.sh --help # 全部选项
./install.sh --no-service # 只装到目录,不注册服务
./install.sh --port 19529 # 自定义端口
./install.sh --offline-model m.onnx,tokenizer.json # 内网/弱网:从本地文件装模型
# 安装(Python ≥ 3.11)
pip install -e .依赖说明
核心依赖不含
torch/sentence-transformers/chromadb/openai-whisper。 这些包会传递引入约 1.3GB 的 CUDA 轮子(nvidia-cudnn620MB、nvidia-cublas517MB、triton216MB 等),而它们的代码路径全部是惰性导入,在无 GPU 的机器上 永不执行:
包 引用位置 是否影响启动 sentence-transformerspangu/search/embedder.py:74(@property model内)否,默认走 ONNX torchpangu/memory/image_engine.py:85,111,139(CLIP 图像向量)否,try/except 降级 openai-whisperpangu/memory/audio_engine.py:34(@property whisper内)否,失败降级 chromadb全库无 import,仅 config.backend默认值否 默认嵌入路径是 ONNX(
onnx_enabled默认为True,见pangu/core/config.py:135), 无需 torch。实测在 aarch64 无 GPU 环境下:核心依赖 56 包 / 223MB; 安装耗时因缓存状态而异——
场景 耗时 uv 全局缓存已存在 约 20 秒 首次安装(冷缓存) 约 8 分 10 秒 加上 ONNX 模型下载(源可达) +约 30 秒 首次安装请预留 10 分钟以上;
onnxruntime(54MB) 与numpy(55MB) 是大头, 中途别中断(中断会导致缓存已下载但包未装好)。 而包含 torch 的完整集会下载 987MB 以上仍难以落盘。需要图像 / 音频 / 备用嵌入能力时(装完依赖还要在 DSH 设置页打开开关才生效: 「多模态内容提取」管 PDF/音频/图片抽取、「语音转写」管音频转写 —— 两者都默认关闭):
# 无 GPU 机器建议先装 CPU-only 轮子,可省下全部 CUDA 负载 pip install torch --index-url https://download.pytorch.org/whl/cpu pip install -e ".[multimodal]"⚠ 注意两个不同的服务——最容易搞混的地方:
端口 应用 启动方式 用途 19529 pangu/api/server.pypangu serve --api/./install.sh/./start.shMCP + REST,DSH 插件连这个 8866 pangu/server/web_server.pypangu serve浏览器仪表盘,不含 MCP 接口
pangu serve(不带--api)启动的是 8866 的界面服务,不能替代 19529。
# 方式一:MCP over HTTP(API + MCP 同端口,生产推荐)
pangu serve --api --host 127.0.0.1 --port 19529
# 方式二:MCP stdio(Claude Code / 其它 MCP 客户端)
pangu mcp
# 方式三:独立 Web 服务(不含 MCP)
pangu serve # http://127.0.0.1:8866
pangu serve --api若未指定--port,会自动用 19529(而不是 8866), 避免与 Web UI 端口冲突。
docker compose up -d不装也能用 —— 盘古本体是独立服务(MCP / REST / Web UI 三种接入都有)。 只有当你想在 DSH 会话里直接读写记忆、并想有个面板看记忆状态时,才需要它。
插件已独立成仓:Mlte0907/dsh-pangu。 装上后它让 DSH 会话自动拥有盘古记忆:
-
记忆注入:
system-prompt/assemblewaterfall 每轮取会话意图检索相关记忆(top-5, 每条 200 字符),以[盘古记忆系统]上下文块注入——异常时静默降级,永不阻塞会话; -
工具暴露:服务端默认收敛为 28 个核心工具的白名单(见下方说明), 经宿主 MCP 客户端直连(streamable-http,60s 超时)。
关于"白名单"的两层含义 —— 容易混淆,这里说清楚:
-
服务端白名单(真实生效):盘古自身有三级工具暴露机制 (
core/optional/experimental,见pangu/server/exposure.py与pangu/core/config.py:39)。缺省即收敛为 28 个核心工具, 其余 100+ 个工具不会出现在/mcp的tools/list中。若要放开, 在~/.pangu/config.json配置:{ "exposure": { "enabled_optional_modules": ["multimodal", "knowledge_graph"], "enabled_core_modules": ["search", "palace"], "enabled_experiments": ["causal", "advanced"] } }可选模块:
multimodal / timeline / analytics / quality / consolidation / embed / knowledge_graph / wiki / llm_tools / session。enabled_core_modules用来展开 core 层的非白名单工具 (pangu_fts_search/pangu_holographic_encode等约 76 个)。 core 层默认启用,但这些工具此前没有任何配置途径可以暴露。enabled_experiments按实验组名启用,advanced是 experimental 层的容器模块(其工具名不带实验前缀)。- 实测规模:默认 28 → 全开 408 个工具。
错误码:
1001= 工具不存在;1002= 工具存在但所在模块未启用 (按提示在exposure段开启即可);5000= handler 抛出异常。 -
客户端白名单(不生效,已移除):本插件早期在
cordis.patch.yml中配置过tools.allow,但@deepseek-ai/dsh-mcp-client的 Config schema 不含tools键,该键会被 schemastery 非严格模式静默忽略 且无告警——工具照样全部注册。因此该配置已删除,以免造成 "看似有保护、实际没有"的错误预期。要限制工具范围,请用上面第 1 种。
-
-
仪表盘:侧栏指标卡 + "盘古"标签页(概览 / 3D 星系记忆图谱 / 知识卡片)+ 设置页配置读写。
-
设置页填写 LLM:DSH 设置 →「盘古记忆系统」,可直接选择提供商(OpenAI / DeepSeek / 智谱 / 通义 / OpenRouter / Ollama)、填模型名、Base URL 与 API Key, 并可用「测试连接」验证该组合是否真的可用。API Key 不回显明文 (只显示
****后4位),保存后写入~/.pangu/.llm_api_key(权限 0600), 不进config.json,重启不丢。因为明文不下发到页面,密钥输入框留空 = 保持原有 Key 不变; 只改模型或 Base URL 时不必重填 Key。想清除 Key 需显式清空
~/.pangu/.llm_api_key。未配置 LLM 时记忆的存入与检索完全正常(走 ONNX 本地嵌入), 仅「知识结晶 / 记忆蒸馏 / 摘要」等需要语言模型的功能会被跳过。
安装插件(一条命令,脚本会自举拉取插件仓 → 装依赖 → 接进 DSH profile):
curl -fsSL https://raw.githubusercontent.com/Mlte0907/dsh-pangu/main/install.sh | bash
./install.sh tui # 换 profile:先 clone 插件仓再 ./install.sh <profile>盘古与 DSH 同机时也可以让盘古的安装脚本顺带拉取安装:
cd ~/pangu && ./install.sh --dsh-plugin # 拉取到 ~/.dsh-pangu 并安装装完重启 DSH,然后 设置 →「盘古记忆系统」填两个字段:盘古服务地址 + 盘古凭据 (都在盘古安装脚本打印的「DSH 填写卡」里)。
注:
cordis.patch.yml的 HMR 在 web 实例不生效,改后需重启 DSH。
# cordis.patch.yml(关键片段)
- insert:
- id: mcp-pangu
name: '@deepseek-ai/dsh-mcp-client'
config:
transport: streamable-http
url: http://127.0.0.1:19529/mcp
- id: pangu-dashboard
name: dsh-pangu检索 → 注入
用户发消息 → 插件 waterfall 取会话意图
→ MCP pangu_search_memories(limit=5)
→ HybridSearch:语义向量(0.65 阈值)+ FTS5 中文全文
→ RRF 融合 + 衰减分/重要性/标签重排 + 神经激活扩散
→ [盘古记忆系统] 上下文块注入 system prompt
写入 → 落盘
Agent 调 pangu_add_memory(或 REST remember())
→ 脱敏 → 加密(可选) → 三级去重 → 融合 → embedding → 索引 → 冲突检测
→ 原子写 ~/.pangu/pangu.db/v2_memories/drawers.json
后台 → 巩固
每 30 分钟:遗忘曲线衰减 + 夜间巩固因子 + 低于底限归档
透明采集:工具调用自动沉淀为 self_improvement 翼记忆
完整内部原理(含全部文件:行号证据链)见 docs/memory-system-internals.md。
配置文件 ~/.pangu/config.json,全部字段可用 PANGU_* 环境变量覆盖:
| 配置 | 默认 | 说明 |
|---|---|---|
port |
19528 |
API 端口(install.sh 部署的服务用 19529) |
onnx_enabled |
true |
本地 ONNX 嵌入(离线可用,模型自动下载) |
embed_api_url |
空 | 外部 embedding API(设置后优先于 ONNX) |
allow_hash_fallback |
false |
是否允许降级为 hash 向量(详见下方"检索结果不对劲") |
similarity_threshold |
0.65 |
向量检索相似度阈值 |
decay_base / decay_floor |
0.95 / 0.15 |
遗忘曲线基数 / 归档底限 |
neural_enabled |
true |
海马体神经激活扩散 |
api_key / jwt_secret |
空 | 为空则不启用鉴权(生产建议开启) |
敏感字段(api_key / jwt_secret 等)在对应
PANGU_*环境变量存在时会从 JSON 中忽略并告警。
嵌入是整个检索链里最贵的一步(约 12–14 ms/条),所以算过的向量会被缓存。
缓存落盘在 ~/.cache/pangu/embedding_cache.json,重启后依然有效:
| 场景 | 重启后首次搜索耗时 |
|---|---|
| 持久缓存生效(默认) | 7.4 ms |
| 关闭持久化 | 696.9 ms |
(真实 41 条抽屉实测;记忆量越大差距越大。)
| 环境变量 | 默认 | 说明 |
|---|---|---|
PANGU_CACHE_DIR |
~/.cache/pangu |
缓存目录,可改到别处 |
PANGU_EMBEDDING_CACHE |
1 |
设 0 关闭持久化(退回纯内存) |
缓存自带指纹校验:换了嵌入模型或维度,旧缓存会自动整体作废, 不会把不同模型的向量混在一起用。缓存文件损坏也只是当作"未命中", 不会影响服务启动。
盘古的嵌入是三级降级:远程 API → ONNX → hash 向量。
⚠ 最后一级的 hash 向量是字符 trigram 哈希,它合法、非零、维度正确,
但没有任何语义能力——相同含义的文本彼此不相近。此时服务照常启动、
检索照常返回结果,只是结果没有意义(实测 cos(猫,dog)=0.0000)。
自查一行命令:
curl -s http://127.0.0.1:19529/health| 返回 | 含义 |
|---|---|
"status":"ok" |
正常,语义检索可用 |
"status":"degraded" + "embedding_backend":"hash" |
已降级,检索质量不可信 |
降级时服务启动日志会打 ERROR 级说明与修复指引。修复方式:
./install.sh --model-only # 预下载 ONNX 模型(最常见原因:模型没下下来)
# 或配置 embed_api_url 使用远程嵌入服务若确实要在无语义能力下运行(如纯离线测试),显式接受:
export PANGU_ALLOW_HASH_FALLBACK=1pytest tests/ -v # 全量
pytest tests/ -v -m "not slow" # 跳过慢用例CI:Python 3.10/3.11/3.12 矩阵 + 覆盖率门禁(.github/workflows/test.yml)。
- 记忆系统内部原理 — 数据模型 / 存储格式 / 检索打分公式 / 衰减曲线,全链路文件行号级证据
- AGENTS.md — Agent 行为规范(写入即记 / 动手先查 / 状态外置 / 修复留痕)
- English overview: README_EN.md
见仓库许可文件。