feat: 织忆+rag-skill深度检索模式 + 07-Wiki全目录索引

Phase 3: Hermes 插件深度检索
- prefetch() 新增 depth='deep' 参数
- depth=deep: 织忆语义搜索后,异步触发本地文件渐进检索
- 结果标记 [rag-skill File — local Wiki evidence]
- 缓存 TTL 60s,支持双轮(第一轮触发,第二轮拿缓存)
- depth='fast' 默认行为完全不变

Phase 4: 07-Wiki 目录索引补全
- docs/07-Wiki-index/: 织忆同步(1039files)、织忆图谱(299files)、经证同步(29files)
- docs/memory-index/: 记忆顶层 + 织忆进度快照
This commit is contained in:
小唯 2026-07-08 12:42:17 +08:00
parent 25a1bb52dc
commit 1970fb4f06
6 changed files with 195 additions and 1 deletions

View File

@ -0,0 +1,28 @@
# 织忆同步 — 索引
## 用途
织忆MemoryWeave从 Obsidian 同步而来的运行时笔记库。这些文件是织忆系统在运行过程中自动记录的操作日志、执行快照、CLI 命令输出、系统状态报告、实验记录和配置调优备忘。共 **1039 个文件**,均为 .md 格式。
## 文件类别
| 类别 | 约计 | 说明 |
|------|------|------|
| 织忆Zhiyi核心 | 150+ | `zhiyi-*`、`zhiyid` 相关 — 服务启停、配置、CLI 命令、consolidation、push、entity extraction、graph 输出等 |
| Hermes / OpenClaw | 80+ | Hermes 网关、Agent、Gateway 配置、providers、cron 响应、memory recall 日志等 |
| ComfyUI | 60+ | ComfyUI 安装、环境、备份、端口、运行日志、master 包等 |
| System / OS | 80+ | systemctl、mkfs.ext4、磁盘空间、home 目录、Deepin、WSL、Arch、sudo 操作、符号链接等 |
| 数据库与存储 | 70+ | LanceDB 配置/类别/双写、SQLite PRAGMA/WAL/backup、A_LiteDB 等 |
| LLM / AI 服务 | 70+ | LLM 端点、vLLM、Ollama、embedder、MiniMax、API key、API 调用等 |
| Go 开发 | 50+ | Go build、ReportJSON、Rust sidecar、consolidation pipeline、dual-master 架构等 |
| Recall 与 Memory | 40+ | recall hit rate、usefulness rate、category、passive recall、flush、OnDistillComplete 等 |
| 网络与远程 | 40+ | Tailscale、SSH、curl 请求、ServerWindows/Linux、端口、derp 节点等 |
| 实验记录E 系列) | 30+ | E1 BFS、E3 em、E5_1 Obsidian 同步、E5_3 Web UI、UI 迭代记录等 |
| Windows | 25+ | Windows 端 server、zhiyid、taskkill、setx、Unix socket、PID 等 |
| Obsidian | 20+ | Obsidian 同步、vault 路径、CORS、PID、安装记录等 |
| 其他 | 200+ | 测试内容、commit 记录、README、日期快照、按内容命名的零散笔记等 |
## 使用提示
- 文件命名源于 Obsidian 同步时的标题,含较多中英文混排和截断 —— 建议以目录浏览 + 关键词搜索方式查找
- 同一条操作(如 E5 系列可能分散在多个文件中可按主题前缀E1、E5、zhiyi、ComfyUI 等)检索
- 本目录为织忆运行日志的持久化存档,承载了大量调试和调优历史,是排查问题和追溯决策的重要来源
- 部分文件含重复/近似内容(如多次 recall、多次 commit 记录),需自行去重参考

View File

@ -0,0 +1,28 @@
# 织忆图谱 — 索引
## 用途
织忆MemoryWeave知识图谱的节点记录库。存储织忆系统中各类概念节点、实体定义、属性标记、关系链接和状态快照是织忆知识网络的基础事实层。共 **299 个文件**,均为 .md 格式。
## 文件类别
| 类别 | 约计 | 说明 |
|------|------|------|
| 硬件与资源 | 30+ | CPU、RAM、VRAM、GPURTX3050、MX450、GA107M、磁盘GB/GiB/MB、显存需求等 |
| 工具与框架 | 25+ | Hermes、OpenClaw、ComfyUI、LanceDB、Ollama、Tailscale、vLLM 等 |
| 织忆内核概念 | 20+ | 记忆迁移、外部记忆、自有记忆、注入机制、异步写入队列、双写、双删、一致性检查、验证回忆等 |
| 项目规划P 系列) | 15+ | P0-P6 迭代计划 — 数据分离、二进制清理、旧版归档、文档清理、日志统一、Hermes 整理等 |
| 操作与状态 | 40+ | 状态标记(活跃/正常/已修复/不可达/残留)、操作指令(创建/删/更新/生成/配置/安装/升级/缓存等) |
| 配置与设置 | 20+ | Settings、Prefs、API、端口、--auth-key、ipv6os、icmpv4、环境变量等 |
| 网页/UI 相关 | 10+ | Web UI、POST、React、curl、登录、客户端等 |
| 启动/运行 | 10+ | 一句话启动、本地启动、服务拓扑、执行顺序、断点续跑等 |
| 网络 | 10+ | Tailscale 配置、derp 节点、SSH、API 端点、unix socket 等 |
| 文本生成/SD | 10+ | SD、SDXL、Flux、n_xl、n_realistic、n_majicmix 等模型相关 |
| 日志与清理 | 10+ | 日志散乱、旧日志、日志统一、冗余二进制、文档清理、旧版归档等 |
| 其他实体 | 100+ | 短命名概念节点(单字/双字标题如"是""和""行""基本""系统""工具"等) |
## 使用提示
- 每个文件对应一个织忆图谱节点,文件名即为节点名称(部分为单字/短语标题)
- 图谱节点间通过内部链接相互关联,`AGENTS_md.md` 和 `AGENTS_md_1910.md` 等文件为 agent 指南
- `_织忆图谱索引.md` 为图谱顶层导航文件
- P 系列P0-P6是织忆系统迭代的五阶段规划建议优先关注
- 大量短命名节点(单字标题如"的""是""到""行""看")是织忆自动生成的片段节点,可作为图谱细节线索但内容可能不完整

View File

@ -0,0 +1,23 @@
# 经证同步 — 索引
## 用途
经证JingZheng模块的同步记录和运行凭证存档。存储经证系统在运行过程中产生的证据快照、API 调试记录、性能指标、配置备忘和测试结果。共 **29 个文件**,均为 .md 格式。
## 文件类别
| 类别 | 文件数 | 说明 |
|------|--------|------|
| API 与端点 | 5 | `_video endpoint`、`v1_1`、`v1_1_0` 相关调试记录;`https://apihub.ag`、`http://localhost` 端点验证 |
| 性能与指标 | 4 | `total_memories: 1239`、`recall_usefulness_rate`、`recall_hit_rate: 93%`、`1_5_2GB` 等指标快照 |
| G8 备份恢复 | 3 | `G8 Restore_ListBackups`、G8 相关操作日志、`g8g9` 相关 |
| E 系列实验 | 4 | `E1 BFS`3 个文件,含不同执行细节)、`E5_1 Obsidian` 同步记录 |
| 织忆内部组件 | 4 | `Forgetter` 遗忘器调试、`Go ReportJSON`、`cron-progress` 集成 |
| 数据库/存储 | 2 | `PRAGMA journal_mode_WAL` SQLite 优化、`CORS` 配置 |
| 实体提取 | 2 | `Chinese entity extraction` 中文实体提取实验、`unused import` 清理 |
| 其他 | 5 | `2026-05-30` 日期快照、rollback 记录、LLM 调用测试、episodes 记录、其他杂项 |
## 使用提示
- 本目录含经证系统运行期间的性能基准数据recall hit rate 93%、total memories 1239 等),可作为评估指标参考
- E1 BFS 相关文件(含不同变体)记录了经证系统的广度优先搜索实现试探
- Forgetter 遗忘器文件记录了织忆记忆衰减/清理机制的调优过程
- 文件数较少29 个),可按主题前缀直接浏览全部内容

View File

@ -0,0 +1,18 @@
# 记忆 — 索引
## 用途
小唯核心记忆系统的顶层目录。汇聚"第二大脑"内存级数据核心身份记忆文件MEMORY.md、织忆进度快照织忆/、MemoryFabric 设计文档MemoryFabric/)。共 **4 个条目**1 文件 + 2 子目录 + 1 全局指引)。
## 文件清单
| 路径 | 类型 | 说明 |
|------|------|------|
| `MEMORY.md` | 文件 | 小唯核心身份记忆 — 身份、环境、服务状态、飞书配置、Obsidian 外脑、重大事件 |
| `织忆/` | 目录 | 织忆进度快照 — cron 进度报告、任务跟踪文件 |
| `MemoryFabric/` | 目录 | MemoryFabric 设计体系 — 设计文档索引、参考项目、技术细节 |
## 使用提示
- `MEMORY.md` 是小唯启动时的核心上下文,包含所有关键环境变量和服务状态
- 织忆/ 目录存储运行态进度快照,反映织忆当前迭代阶段
- MemoryFabric/ 目录包含 MemoryFabric 体系的设计文档和参考项目
- 该目录是记忆系统的最顶层,不直接存放大量文件,所有批量数据分散在子目录中

View File

@ -0,0 +1,17 @@
# 记忆/织忆 — 索引
## 用途
织忆MemoryWeave模块的进度快照目录。存储织忆系统的定期进度报告cron 推送)和阶段性任务跟踪文件。共 **2 个文件**
## 文件清单
| 文件 | 说明 |
|------|------|
| `cron-progress.md` | 织忆 cron 定时进度报告 — 记录系统运行状态、阶段性进展、待办事项 |
| `task-phase1-1-models-queue.md` | Phase 1-1 模型队列任务 — 织忆第一阶段模型调度与队列管理的具体任务分解 |
## 使用提示
- 此目录由织忆的 cron 机制自动维护,文件随进度更新
- `cron-progress.md` 是了解织忆当前运行状态的首选入口
- 任务文件task-*.md按阶段命名反映织忆开发迭代的细粒度任务拆分
- 随着织忆系统推进,新 task 文件会在此追加

View File

@ -452,7 +452,7 @@ class HermesZhiYiMemoryProvider(MemoryProvider):
# ── Read path ────────────────────────────────────────────────────────────
def prefetch(self, query: str, *, session_id: str = "") -> str:
def prefetch(self, query: str, *, session_id: str = "", depth: str = "fast") -> str:
"""每次 API 调用前触发:执行语义搜索 + 图谱导航 Obsidian 笔记,返回最相关记忆。"""
if not self._client or not query or len(query.strip()) < 2:
return ""
@ -523,6 +523,25 @@ class HermesZhiYiMemoryProvider(MemoryProvider):
with self._prefetch_lock:
self._prefetch_cache.update({"sync": text})
# 深度检索模式:本地文件系统渐进检索
if depth == "deep":
# 优先使用缓存的深度检索结果
with self._prefetch_lock:
deep_cached = self._prefetch_cache.get("deep_search", {})
cached_ts = deep_cached.get("timestamp", 0)
cached_query = deep_cached.get("query", "")
cached_block = deep_cached.get("block", "")
if cached_block and (time.time() - cached_ts < 60) and (cached_query == query.strip()):
text += "\n\n" + cached_block
# 后台线程异步刷新深度检索结果(不阻塞主流程)
threading.Thread(
target=self._async_deep_search,
args=(query.strip(),),
daemon=True,
).start()
return text
def queue_prefetch(self, query: str, *, session_id: str = "") -> None:
@ -548,6 +567,67 @@ class HermesZhiYiMemoryProvider(MemoryProvider):
threading.Thread(target=_async_prefetch, daemon=True).start()
def _async_deep_search(self, query: str) -> None:
"""后台线程:本地文件系统渐进检索,补充织忆语义搜索(仅 depth='deep' 触发)。"""
if not query or len(query) < 2:
return
try:
wiki_dir = Path.home() / "mc" / "小唯" / "07-Wiki"
data_struct = wiki_dir / "data_structure.md"
if not data_struct.exists():
return
# grep 搜索关键词
import subprocess
result = subprocess.run(
["grep", "-r", "-l", "-i", query, str(wiki_dir)],
capture_output=True, text=True, timeout=10,
)
matched = [f for f in result.stdout.strip().split("\n") if f.strip()]
if not matched:
return
# 读取匹配段落最多5个文件
blocks = ["[rag-skill File — local Wiki evidence]"]
count = 0
for fpath in matched[:5]:
try:
with open(fpath, "r", encoding="utf-8") as f:
content = f.read()
lines = content.split("\n")
snippets = []
for i, line in enumerate(lines):
if query.lower() in line.lower():
start = max(0, i - 2)
end = min(len(lines), i + 3)
snippet = "\n".join(lines[start:end]).strip()[:200]
if len(snippet) < 50:
snippet = snippet.ljust(50, " ")[:50]
snippets.append(snippet)
if len(snippets) >= 2:
break
if snippets:
filename = Path(fpath).name
blocks.append(f" 📄 {filename}")
for s in snippets:
blocks.append(f" {s}")
count += 1
except Exception:
continue
if count == 0:
return
block_text = "\n".join(blocks)
with self._prefetch_lock:
self._prefetch_cache["deep_search"] = {
"block": block_text,
"query": query,
"timestamp": time.time(),
}
except Exception:
logger.debug("[ZhiYi] _async_deep_search error", exc_info=True)
# ── Tool interface ────────────────────────────────────────────────────────
def get_tool_schemas(self) -> List[Dict[str, Any]]: