Z User commited on
Commit
6a941e4
·
1 Parent(s): e35f3c0

refactor: remove MemPalace to free ~1-2GB RAM

Browse files

- Remove MemPalace clone + pip install + onnxruntime from Dockerfile
- Remove mcp_servers.mempalace from config.yaml, add no_mcp: true
- Remove MEMPALACE_PALACE_PATH env vars from entry.py
- Replace MemPalace SOUL.md section with Holographic Memory guide
- Keep holographic memory (SQLite + FTS5, zero overhead)
- Keep Chinese fonts (NotoSansSC, ~16MB)

Files changed (4) hide show
  1. Dockerfile +2 -8
  2. SOUL.md +9 -34
  3. config.yaml +1 -9
  4. entry.py +0 -2
Dockerfile CHANGED
@@ -10,18 +10,14 @@ WORKDIR /app
10
  # Clone hermes-agent
11
  RUN git clone --depth 1 https://github.com/NousResearch/hermes-agent.git /app/hermes-agent
12
 
13
- # Clone & install MemPalace
14
- RUN git clone --depth 1 https://github.com/MemPalace/mempalace.git /app/mempalace
15
-
16
  # Build venv
17
  RUN python3 -m venv /app/venv
18
  ENV PATH="/app/venv/bin:$PATH"
19
  RUN pip install --quiet --upgrade pip && \
20
- pip install --quiet psutil onnxruntime && \
21
- pip install --quiet -e "/app/mempalace" && \
22
  pip install --quiet -e "/app/hermes-agent[feishu,mcp,cron,pty]" 2>&1 | tail -10
23
 
24
- # Chinese font (download Noto Sans SC Regular only, ~8MB)
25
  RUN mkdir -p /usr/share/fonts/truetype/noto && \
26
  curl -sL "https://github.com/googlefonts/noto-cjk/raw/main/Sans/SubsetOTF/SC/NotoSansSC-Regular.otf" \
27
  -o /usr/share/fonts/truetype/noto/NotoSansSC-Regular.otf && \
@@ -48,7 +44,5 @@ RUN chmod +x /app/start.sh
48
  EXPOSE 7860
49
 
50
  ENV HERMES_ACCEPT_HOOKS=1
51
- ENV MEMPALACE_PALACE_PATH=/data/hermes/palace
52
- ENV MEMPALACE_EMBEDDING_DEVICE=cpu
53
 
54
  CMD ["/app/start.sh"]
 
10
  # Clone hermes-agent
11
  RUN git clone --depth 1 https://github.com/NousResearch/hermes-agent.git /app/hermes-agent
12
 
 
 
 
13
  # Build venv
14
  RUN python3 -m venv /app/venv
15
  ENV PATH="/app/venv/bin:$PATH"
16
  RUN pip install --quiet --upgrade pip && \
17
+ pip install --quiet psutil && \
 
18
  pip install --quiet -e "/app/hermes-agent[feishu,mcp,cron,pty]" 2>&1 | tail -10
19
 
20
+ # Chinese font (download Noto Sans SC Regular + Bold, ~16MB)
21
  RUN mkdir -p /usr/share/fonts/truetype/noto && \
22
  curl -sL "https://github.com/googlefonts/noto-cjk/raw/main/Sans/SubsetOTF/SC/NotoSansSC-Regular.otf" \
23
  -o /usr/share/fonts/truetype/noto/NotoSansSC-Regular.otf && \
 
44
  EXPOSE 7860
45
 
46
  ENV HERMES_ACCEPT_HOOKS=1
 
 
47
 
48
  CMD ["/app/start.sh"]
SOUL.md CHANGED
@@ -13,43 +13,18 @@
13
 
14
  ---
15
 
16
- ## 一、记忆宫殿(MemPalace)— 你的核心记忆系统
17
 
18
- 你拥有一个持久化的记忆宫殿MemPalace),所有跨会话记忆都存储这里。每次重启或会话重置,记忆宫殿中的内容不会丢失。
19
 
20
- ### 宫殿协议(每次对话必须遵循)
21
 
22
- 1. **会话开始时**:调用 `mempalace_status` 了解宫殿整体状态,再调用 `mempalace_search` 搜索与当前用户/话题相关的历史记忆
23
- 2. **回答用户前**:如果涉及人名、项目、过去的对话、偏好设置,先搜索记忆宫殿确认事实,不凭模糊印象猜
24
- 3. **识别到关键信息立即保存**:调用 `mempalace_add_drawer` 存入对应的 wing/room(用户偏好、项目信息、重要决定、反复出现的问题)
25
- 4. **事实变化更新知识图谱**:调用 `mempalace_kg_invalidate` 废弃旧事实再 `mempalace_kg_add` 写入新事实
26
- 5. **会话结束时写日记**:调用 `mempalace_diary_write` 记录本次对话要点(学到了什么、做了什么决策、用户的反馈)
27
- 6. **引用记忆时自然融入**,不要硬接"基于记忆……"或"我记得你说过……"
28
 
29
- ### 记忆宫殿架构
30
-
31
- - **Wing** = 人或项目(如 `wing_alice`、`wing_hermes_bot`)
32
- - **Room** = 主题分类(如 `preferences`、`tech_stack`、`decisions`)
33
- - **Drawer** = 具体记忆条目(逐字原文存储)
34
- - **Knowledge Graph** = 实体关系网络,支持时间线查询
35
-
36
- ### 可用工具
37
-
38
- | 工具 | 用途 | 使用时机 |
39
- |------|------|---------|
40
- | `mempalace_search` | 语义搜索所有记忆 | 回答涉及历史信息的问题前 |
41
- | `mempalace_status` | 查看宫殿总览 | 每次会话开始 |
42
- | `mempalace_add_drawer` | 存入新记忆 | 识别到关键信息时 |
43
- | `mempalace_check_duplicate` | 去重检查 | 存入前 |
44
- | `mempalace_kg_query` | 查询实体关系 | 需要了解人物/项目关系时 |
45
- | `mempalace_kg_add` | 添加事实关系 | 发现新的事实 |
46
- | `mempalace_kg_invalidate` | 废弃过时事实 | 事实发生变化时 |
47
- | `mempalace_diary_write` | 写会话日记 | 每次会话结束前 |
48
- | `mempalace_diary_read` | 读历史日记 | 回顾过往会话 |
49
- | `mempalace_list_wings` | 列出所有 wing | 了解有哪些人物/项目记录 |
50
- | `mempalace_list_rooms` | 列出 wing 下的 room | 查看某个人/项目的分类 |
51
-
52
- ### 记忆什么 / 不记什么
53
 
54
  - **记**:用户偏好、项目信息、专业背景、反复出现的问题、重要决策、用户的工作流程
55
  - **不记**:一次性闲聊、临时信息、敏感个人信息(除非用户明确要求)
@@ -213,7 +188,7 @@ browser_navigate(URL) → browser_snapshot(获取内容) → 分析/提取/截
213
  | 定时任务 | 创建定时提醒/定期推送 | cronjob 工具 |
214
  | 子任务委派 | 拆分复杂任务并行处理 | delegate_task 工具 |
215
  | 飞书文档协作 | 读写评论飞书文档和云盘 | 按需使用 |
216
- | 持久记忆 | 记忆宫殿跨会话持久化,语义搜索+知识图谱,重启不丢失 | mempalace 工具 |
217
  | 会话历史搜索 | 搜索过去对话中的信息 | session_search 工具 |
218
  | 文件发送 | 生成的文件以原生附件形式发送 | write_file 后回复中写 MEDIA:<路径> |
219
  | 会话自动管理 | 每24小时重置会话上下文,但记忆不丢失 | 自动 |
 
13
 
14
  ---
15
 
16
+ ## 一、记忆系统(Holographic Memory)
17
 
18
+ 你拥有持久化的 holographic 记忆系统基于 SQLite + FTS5 全文搜索),跨会话记忆在重启后不会丢失。
19
 
20
+ ### 记忆协议
21
 
22
+ 1. **回答涉及历史信息的问题时**:调用 `memory` 工具搜索相关记忆,不要凭模糊印象猜
23
+ 2. **识别到关键信息时立即保存**:调用 `memory(action='add', ...)` 存入(用户偏好、项目信息决定)
24
+ 3. **事实变化更新**:调用 `memory(action='replace', ...)` 替换旧记忆
25
+ 4. **引用记忆自然融入**,不要硬接"基于记忆……"或"我记得你说过……"
 
 
26
 
27
+ ### 记什么 / 不记什么
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
 
29
  - **记**:用户偏好、项目信息、专业背景、反复出现的问题、重要决策、用户的工作流程
30
  - **不记**:一次性闲聊、临时信息、敏感个人信息(除非用户明确要求)
 
188
  | 定时任务 | 创建定时提醒/定期推送 | cronjob 工具 |
189
  | 子任务委派 | 拆分复杂任务并行处理 | delegate_task 工具 |
190
  | 飞书文档协作 | 读写评论飞书文档和云盘 | 按需使用 |
191
+ | 持久记忆 | Holographic 记忆跨会话持久化,全文搜索,重启不丢失 | memory 工具 |
192
  | 会话历史搜索 | 搜索过去对话中的信息 | session_search 工具 |
193
  | 文件发送 | 生成的文件以原生附件形式发送 | write_file 后回复中写 MEDIA:<路径> |
194
  | 会话自动管理 | 每24小时重置会话上下文,但记忆不丢失 | 自动 |
config.yaml CHANGED
@@ -19,15 +19,7 @@ compress:
19
  threshold: 50
20
  target_ratio: 20
21
  protect_last: 20
22
- mcp_servers:
23
- mempalace:
24
- type: stdio
25
- command: python3
26
- args:
27
- - "-m"
28
- - mempalace.mcp_server
29
- env:
30
- MEMPALACE_PALACE_PATH: /data/hermes/palace
31
  terminal:
32
  backend: local
33
  timeout: 180
 
19
  threshold: 50
20
  target_ratio: 20
21
  protect_last: 20
22
+ no_mcp: true
 
 
 
 
 
 
 
 
23
  terminal:
24
  backend: local
25
  timeout: 180
entry.py CHANGED
@@ -428,7 +428,6 @@ class DashboardHandler(BaseHTTPRequestHandler):
428
  _gateway_start_time = time.time()
429
  env = os.environ.copy()
430
  env["HERMES_ACCEPT_HOOKS"] = "1"
431
- env["MEMPALACE_PALACE_PATH"] = os.path.join(DATA_DIR, "palace")
432
  env["PYTHONUNBUFFERED"] = "1"
433
 
434
  _gateway_process = subprocess.Popen(
@@ -496,7 +495,6 @@ def main():
496
  _gateway_start_time = time.time()
497
  env = os.environ.copy()
498
  env["HERMES_ACCEPT_HOOKS"] = "1"
499
- env["MEMPALACE_PALACE_PATH"] = os.path.join(DATA_DIR, "palace")
500
  env["PYTHONUNBUFFERED"] = "1" # 关键:禁用输出缓冲,日志实时写入文件
501
 
502
  os.makedirs(LOG_DIR, exist_ok=True)
 
428
  _gateway_start_time = time.time()
429
  env = os.environ.copy()
430
  env["HERMES_ACCEPT_HOOKS"] = "1"
 
431
  env["PYTHONUNBUFFERED"] = "1"
432
 
433
  _gateway_process = subprocess.Popen(
 
495
  _gateway_start_time = time.time()
496
  env = os.environ.copy()
497
  env["HERMES_ACCEPT_HOOKS"] = "1"
 
498
  env["PYTHONUNBUFFERED"] = "1" # 关键:禁用输出缓冲,日志实时写入文件
499
 
500
  os.makedirs(LOG_DIR, exist_ok=True)