Wiki 知识库
Myrm 提供编译型知识库(Wiki)——不是让 Agent 解读的一堆 markdown 技能。专用引擎负责编译、索引、检索、审核与维护。同一工作流适用于本地 WebUI、Tauri 桌面与 SaaS 云端。按智能体隔离的 Wiki
每个智能体可有独立 Wiki 库。在 设置 → Wiki 使用 智能体范围 下拉(或从智能体横幅打开/settings/wiki?agentId=<id>)。统计、编译、维护与导入均作用于所选智能体。
诚实边界(Agent Scope SSOT v2 落地前): 队列 Tab 与 ingest SSE 会随所选智能体立即切换;若在 待审 或 词条 Tab 内切换下拉,在 scope 全链路重载完成前请刷新页面或切 Tab,避免误把 A 库草稿批准进 B 库——这是下一版 scope 硬化要闭合的 P0 风险。
工件 存入 Wiki 与聊天入库会使用当前会话的 agent id,避免误写入默认库。
记忆 + Wiki 统一检索
智能体配置中同时启用 Wiki 与 Memory 时,Myrm 挂载knowledge_recall_tool(corpus=all)— 一次工具调用同时检索长期记忆与该智能体 Wiki。记忆命中会写入 citedMemoryIds 供 UI 展示;Wiki 命中在工具结果文本中返回。
默认智能体已开启 Memory;在 智能体配置 → 内置工具 中打开 Wiki 即可走统一检索路径。
Memory 引用按钮(刷新不丢)
当助手召回语义/情节记忆时,已完成消息的操作栏会显示 Memory N 按钮。打开 Sheet 可查看影响回答的记忆(类型、分数、命名空间、跳回来源会话)。 引用会写入数据库,刷新页面后仍在 — 不依赖仅 SSE 的临时状态。打开 Wiki 设置
- 进入 设置 → Wiki 知识库 (Wiki)。
- 使用标签页:
- 概览 — 用途、统计、编译/维护操作、即席查询。
- 词条管理 (Concepts) — 文件夹树、CRUD、拖放。
- 待审编辑 — LLM 草稿的人工审批/驳回。
- 队列 — 文档摄取流水线状态。
编译过程实时可见(需打开 Settings Wiki 页)
在浏览器或桌面端 设置 → Wiki 页面保持打开时:实时推送仅在 Settings Wiki 页 EventSource 连接期间生效;关闭设置页即停止 SSE——这是 GUI 范围内的可见性设计,不是后台守护进程。Hermes SKILL / OpenClaw 纯 MD 文件夹等竞品无等价 Queue 面板 + compile 中树 badge live。
外部来源同步(Settings 概览)
设置 → 知识库 → 概览 → 外部来源 可将收藏邮件与 RSS 定时或手动拉入wiki/raw/:
零 LLM pull: 拉取 Gmail/RSS 不调用对话模型。仅当配置了模型且开启 同步后自动编译 时才会消耗 LLM。
定时任务: 稍后读知识内化 蓝图每日运行(第二大脑预设常搭配 知识库晨间摘要)。Router 任务
__wiki_source_sync__ 在服务端执行,不挂载 Agent 工具 — 安全、确定性自动化。
可观测性: 卡片展示上次同步时间、新增/跳过/失败计数,以及首条错误(如 Gmail label not found)。
诚实边界: Gmail 标签与 Drive 文件夹 ID 均需手动输入,无标签下拉或 Drive Picker。请在 Gmail 中创建同名标签(预设默认
ReadLater)。若已连接 Google 但缺少 Drive 只读 scope,卡片会显示重连提示(google_drive_authorized: false)。不支持 OneDrive(无 Microsoft OAuth 基建)。配错会在同步结果中显示,不会静默忽略。编译期演变合成(CCSP)
编译 Wiki 时,Step 2.5 会在常规文章生成之后运行 编译期矛盾合成(CCSP):
实时计数: ingest SSE 推送
synthesis_pending_count;保持 Settings → Wiki 打开时 Overview 可静默刷新。
相对 OpenClaw 的差异化: OpenClaw 写 reports/contradictions.md 并依赖 CLI 跟进。Myrm 把同等 intelligence 放在 Settings 待审队列 + GUI 筛选 + 双向 Timeline — 更贴合 Article 8「请你决定哪条定义优先」。
诚实边界: 仅 cross-concept(同 batch 同名 merge 跳过)。这是 Wiki 编译合成,与 Memory ConflictCard 通知是不同链路。
测试(2026-07-29): Harness 8 + 12 + Server 2 = 22 passed。本轮未跑浏览器 MCP E2E。
在树中管理词条
在 词条管理:- 新建文件夹 — 选择可选父文件夹(根或嵌套),命名。
- 重命名 / 删除 — 悬停行;删除显示完整路径及将移除的条目数。
- 拖放 — 在父级间移动文件夹或词条(服务端更新链接引用)。
- 详情面板 — 选中词条查看富渲染内容(Mermaid 图表、KaTeX 数学公式、GFM 表格、代码语法高亮、暗色模式),或切换到原始 Markdown 编辑。
- 四 Tab 编辑(Edit) — 经
POST /wiki/apply窄写(非整页 PUT):- Compiled Truth — 仅 patch
## Compiled Truth区块。 - Timeline — 只追加条目;重复行会 toast 跳过。
- Metadata — Settings 路径下 replace tags/aliases(Agent merge 走不同 caller 门禁)。
- Advanced — 整页 replace;仅 Settings(
caller=settings)。Agent/聊天不可用此 op。
- Compiled Truth — 仅 patch
if_match = 上次 content_hash)。若其他 Tab/客户端已先改页,会 toast 页冲突 — 请刷新后重试。
受控写入面(POST /wiki/apply)
所有 Wiki 变更统一走 POST /wiki/apply?caller=(settings | agent | chat)。
写时去重:
canonical_id 与 alias 索引在创建时拒绝近义重复页(HTTP 409 canonical_conflict)。存入 Wiki 时若同主题笔记已存在,会友好 toast 而非静默重复建页。
诚实边界: Agent wiki_apply_tool 仍为 CSV 形参、不自动 if_match;Settings GUI 与 Save to Wiki 路径已完整。
Raw 证据层闸门(导入与 ingest)
稳定路径写入wiki/raw/ 经 harness publish_raw 闸门 — 与 concept 层 POST /wiki/apply(#12+#13)互补。
诚实边界: timestamp/uuid 路径(research、artifact、会话归档)故意不 gate;无专用 Raw 审计页,可读
wiki/log.md。
归档安全治理(敏感内容)
所有 durable Wiki 写入共享 harness 持久化扫描 SSOT(core/security/persistence/content_scan.py):
诚实边界: 尚无安全统计面板;Settings/chat 导入 injection 仅 warn;agent
wiki_ingest 拦截高置信 injection。Agent 被拦路径以工具错误呈现,无 Settings 弹窗。
Wiki 文件在磁盘上仍为纯 Markdown。Obsidian 等编辑器可打开同一库;Myrm 在其上增加索引、检索与 GUI 管理。
知识消费闭环
Wiki 不是「写完就忘」的死水。Myrm 用 12 条代码级路径 把知识库和 Agent 连起来(无需像 OpenWiki 那样手工维护 AGENTS.md):- 四工具自动挂载 — 在智能体配置中启用 Wiki 后,ingest / compile / query / maintain 随对话可用。
- 大文件上传引导 — 上传 PDF 等大文档时,系统自动注入「先 wiki_ingest 再 wiki_query」指令,避免整文件塞进 prompt。
- Deep Research 入库 — 深度研究报告经共享 archiver 写入同一 Wiki 库并触发编译。
- 聊天一键保存 — 任意助手消息可「存入 Wiki」,带来源 frontmatter。
- 压缩后会话笔记归档 — 上下文压缩完成时,会话笔记自动归档到 Wiki(在摘要持久化之后触发,而非每次 note 保存)。
- 设置页即席查询 — 概览标签直接问 Wiki、编译、维护,并展示库健康状态。
Memory → Wiki 自动桥接
在智能体配置中启用 Wiki 后,四条自动入库路径经统一publish_raw 写入同一 vault(Roadmap #16 — 无独立 per-source 开关):
安全与门控: 全部路径经 #15 归档安全(凭证拒收/脱敏)与 #14 raw gate(稳定路径禁止 silent overwrite)。
enable_wiki 为智能体级总开关 — Settings 无 per-source 开关。
召回方向: Wiki 内容通过 knowledge_recall_tool(corpus=wiki|all) 按需 pull 进对话(Wiki+Memory 双开时)— 非 OpenClaw 式每轮 push digest。
测试: 37 项定向 pytest(Harness 18 + Server 19,2026-07)。
Wiki 与 Memory 写入边界
智能体同时启用 Wiki 与 Memory 时,Myrm 防止长文污染紧凑记忆:
对比 Hermes: 扁平 MEMORY.md 2200 字符上限 — 无编译型 Wiki 与
corpus=all 统一检索。
测试: 25 项定向 pytest(Harness wiki boundary 模块,2026-07)。
Karpathy 认知地图三件套(index / log / hot)
编译、维护、导入或审批后,引擎确定性维护 vault 根目录三文件(零额外 LLM 成本):
与竞品差异(诚实):
- 强于 Molio:hot 仅在 wiki 查询路径使用,不注入 agent 全局 system prompt → prompt cache 更安全
- 强于 Hippocampus:事件驱动刷新,非每会话盲注 hot
- 不做:Molio 式 LLM 重写 hot(token/幻觉成本);全局 middleware hot(破坏 cache)
统一 Vault 路径
所有 Wiki 数据位于同一工作区下的单一库目录。设置页、REST API、Agent 工具、存入 Wiki、Deep Research 与压缩归档共用该路径;启动时自动迁移旧路径。 在 设置 → Wiki → 概览 中,统计信息随页面打开自动加载,并显示:- 知识库已就绪 — Wiki 目录存在且可写。
- 旧库已迁移 — 历史路径已合并到当前库。
- 知识目录 / 活动日志 / 近期上下文 — Karpathy 式三件套(
index.md、log.md、hot.md)是否在编译、导入或审阅后已构建并保持新鲜。
Project 工作区(file-centric SSOT)vs Wiki 导入
两条路径,按场景选择:
竞品迁移完成后,用 Migration Result vault 绑定卡片,首条对话即指向真实 vault,无需手动建 Project。
单次任务 scope(不建 Project):消息输入框 文件夹图标(
WorkspaceDirPicker)绑定本会话目录。
在对话中引用 Wiki(@wiki:)
在聊天输入框中键入@wiki: 即可实时搜索 Wiki 词条并自动补全。选择词条后,其编译内容将注入当前消息上下文:
@wiki:关键词— 下拉列表仅显示匹配的 Wiki 词条(模糊匹配词条名)。- 选择词条 — 输入框变为
@wiki:词条名加可移除标签,与@staged、@diff操作方式一致。 - Agent 接收 词条内容在
<mentioned_files>XML 块中,确保回答精确引用知识库。 - 组合引用 —
@wiki:项目架构 @staged同时发送 Wiki 文章和 Git 暂存变更。 - 普通
@搜索 — 输入@关键词(不带wiki:前缀)显示 Agent、Wiki 词条和文件的混合列表。
将聊天消息存入 Wiki
任意已完成的助手消息,在消息操作栏用 存入 Wiki(书本图标):- 在树选择器中选文件名与可选目标文件夹。
- 确认保存 — 经
POST /wiki/apply的create_note写入(受管 Compiled Truth + Timeline 骨架)。 - 每次保存添加 YAML frontmatter:
source_chat、source_message、saved_at便于追溯。 - 若同 canonical 主题 的笔记已存在,会 toast canonical 冲突,而非静默重复建页。
页面类型契约(frontmatter type)
每条 Wiki 页面必须在 YAML frontmatter 中声明 页面类型。在编译、待审批准、以及 Linter 维护时代码级强制,而非仅靠 prompt 建议。
允许值: source、entity、concept、comparison、overview、question、session(与 Google OKF 兼容的子集)。
诚实边界: 聊天「Save to Wiki」当前仅写溯源字段;可对这类笔记运行 Repair Page Types 或 Maintain 补全
type。Settings Advanced 整页 replace 未硬拦截 frontmatter — 下次 Maintain 时 Linter 自愈。
闭环:对话 → 一键归档 → 可检索知识。
检索与维护
- 查询 Wiki(概览标签)— 自然语言问答走 零 LLM 检索路径:从认知 index、sidecar 摘要、FTS5 与关键词种子出发,经有预算的 best-first 图扩展收敛后,组装 L0/L1/L2 片段与声明/证据卡片。
- 检索模式(概览 → 查询 Wiki)— 可选 综合检索(索引、目录与文章均衡召回)或 声明优先(优先含 frontmatter claims 与关联证据的概念;无匹配时自动回退综合检索)。OpenClaw 有类似
raw-claim但仅 CLI;Myrm 在 Settings 下拉即可切换。 - 引用可信度 — 回答卡片展示 claim 文本、evidence 路径与
snapshot_status,便于判断引用内容是否仍与 vault 磁盘一致。 - 证据引用 Drawer(Closure v2) — Chat 或 Settings 点 citation chip:展示 claim 状态 badge(仅 contested/unsupported 降噪)、编译置信度百分比(显式设置时)与 raw 摘录;检索侧 fresh supported claim 优先于 stale contested。
- Settings 检索路径 trace — Query 结果下方卡片展示 index 命中、seeds、sidecar 目录与最终概念,便于排障「为何命中这条」。
- 编译 / 维护 — 增量编译、并发批量摄入(Semaphore 限流并行处理,多文档编译提速约40%)、视觉化指导(编译器自动引导 LLM 在合适位置产出 Mermaid 图表、GFM 表格和代码块,提升信息密度)与 linter 驱动健康修复(断链、漂移、孤立概念/桥接节点知识盲区检测等)。
- 结构健康 Stats(Overview 页)— 零 LLM 扫描:markdown 断链、Obsidian
[[wikilink]]断链(路径 + 唯一 title 别名)、缺 frontmattertype;amber badge 在编译、导入、词条编辑、待审审批、文件夹删除后即时刷新;Harness CI 跑 4 case 检索回归门。无需 CLIwiki lint。 - 图书馆 / Brain 视图 — 3D 知识图谱与词条探索(因部署而异)。
- 知识图谱 — 编译器自动抽取概念及其关联关系,构建加权边图谱(直接链接 + 来源重叠 + 共同邻居三维权重)。LPA 社区检测自动将相关概念分组;盲区分析高亮孤立节点和跨领域桥接概念。
- 智能上下文回忆 — 开始新对话时,Agent 自动根据当前话题检索相关记忆和知识,无需手动指引文档。
- 矛盾检测 — Claim Graph 追踪
contradiction_status和CONTRADICTED_BY关系。巩固流程自动标记冲突事实,交由人工审核而非静默覆盖。 - 联邦检索 — 当存在多个 Wiki 命名空间或发布目录时,查询自动跨源检索并以 RRF 排序合并结果,确保全面覆盖无需手动切换范围。
从 Obsidian 导入
Myrm 提供专用 Obsidian Vault 导入器,完整保留笔记、标签和图片:- 在 设置 → Wiki 中滚动到导入区域。
- Tauri 桌面端:点击 导入 Obsidian Vault 并选择本地 vault 目录。
- WebUI / 云端:点击 上传 Obsidian ZIP 并上传 vault 压缩包。
- YAML frontmatter — 行内数组(
tags: [a, b])与 YAML 缩进列表(tags:\n - a\n - b)双格式,含aliases、created、updated。 - 图片嵌入 —
![[image.png]]语法自动改写为标准 Markdown 并将图片复制至 wiki 资产目录。 .canvas文件 — 空板或无可用文本时跳过;含 text 节点的白板按 JSON Canvas 1.0 提取为 Markdown(文本内容及 file/link 标签)。- 编码容错 — UTF-8 解码失败的文件会报告但不阻塞整体导入。
- 冲突安全 re-import — raw 已存在且内容不同时默认跳过;弹窗可填 reason 覆盖(记入
wiki/log.md)。
在 Obsidian 中打开与导出(#22 + #22b)
Settings → Wiki → Overview 的 Obsidian Vault 卡片提供反向打开与导出(与上方「导入」互补):
解压后:Obsidian → 打开文件夹作为库 → 打开 Graph 视图即可看到按页面类型着色的节点。
回归测试(2026-07-29): 14 项定向 pytest(跨平台启动 + reveal + 导出 · 无 Chrome MCP E2E)。
与 Project 挂载的分工: 若你在 自有磁盘 用 Obsidian/Typora 双向编辑,请用 设置 → 项目 → 挂载同步目录。#22 针对 Myrm 托管的编译库 一键打开或快照导出。
诚实边界: Cloud 无法本地 reveal;未安装 Obsidian 时隐藏「在 Obsidian 中打开」(「在文件夹中显示」+ 下载包仍可用);Windows 尚未探测
%ProgramFiles%\Obsidian\Obsidian.exe;不提供 obsidian:// 深链。Vault 本地 git 快照(#23)
开启 版本控制 后(Local/Tauri 在 session archive 等路径会默认开启),Myrm 在 vault 内维护 真实.git 目录(非 shadow-git 插件):
回归测试(2026-07-29): 5 项 #23 定向 pytest(
test_wiki_vault_git_mutation 2 + Harness test_vault_git 3 · 无 Chrome MCP E2E)。
诚实边界: Settings 无提交列表 UI — 深度历史请用
git log 或 Obsidian Git。下载 Obsidian 包 ZIP 不含 .git。Cloud 不承诺 vault git。搜索已导入图片(Obsidian assets)
在 设置 → 模型 中配置 Vision Fallback Model 后,Myrm 会用视觉模型为wiki/assets/ 下的图片生成 caption 并建立索引(FTS5 + 可选向量混合检索)。无需单独的 image search 工具即可找图:
wiki_query/knowledge_recall(corpus=wiki|all)— 用自然语言问「架构图在哪」可返回 asset 命中,Chat Sources 带缩略图 citation。- 设置 → Wiki → Overview —
asset_indexbadge 显示已索引/待处理/失败数量;有图但未配 vision 时显示 amber 提示并引导至模型设置。 - 导入链路 — Obsidian 导入会后台调度 asset 索引;compile/maintain 也会刷新 asset 索引。
诚实边界: 这是 文字找图(caption 检索),不是 以图搜图(multimodal embed)。OpenViking 有后者;OpenClaw/Hermes 等普遍 没有 Obsidian asset caption 索引管线。未配 vision 时图片会导入但 不可搜索 — Overview 提示已覆盖;Chat 不会出现「有缩略图但 caption 为空」的误导路径。
URL 入库与视频字幕提取
向 Wiki 导入 URL 时,Myrm 通过 CrawlEngine 统一处理所有链接:- YouTube 视频 — 自动提取字幕文本(支持 10+ 种语言),存入的是可搜索的文字内容而非 HTML 页面代码。
- Bilibili 视频 — API 直连提取字幕,无需 DOM 解析。
- 公众号文章 — 多层 fetcher 自动应对微信反爬(HTTP → 浏览器 → 隐身模式逐级降级)。
- 普通网页 — CrawlEngine 自适应选择最优抓取策略,JS 渲染页面自动升级到浏览器引擎。
- 高可用降级 — CrawlEngine 故障时自动 fallback 到
secure_get+ Markdown 转换,保证入库不中断。
文档解析与 OCR
向 Wiki 导入文档时,Myrm 自动选择最优解析策略:- 文字型 PDF — pdfplumber 并行提取 + 书签注入 + 字体标题检测。
- 扫描型 PDF — 文字稀少时(< 200 字符)自动识别,整页渲染为 PNG 交由视觉大模型(VLM)理解。
- 混合型 PDF — 文字正常提取,同时捕获内嵌图表/照片,经智能图像过滤器去噪(去除 UI 噪声、Logo、装饰元素)。
- 图片 — 本地 PaddleOCR 引擎支持中日韩英文,无需云端依赖,结果含置信度和定位框。
- Office 文件 — DOCX / XLSX / PPTX 原生解析器,无需安装 MarkItDown 等外部依赖。
安全防护
Wiki 入库受 路径遍历防御 与 持久化层内容扫描 保护:- 文件名清理 — 剥离 LLM 提供文件名中的目录组件(
Path(filename).name),防止注入攻击写入../../../etc/cron.d/evil.md等任意路径。 - 边界校验 —
safe_join_path()验证解析后路径始终位于 Wiki raw 目录内,阻断绝对路径、空字节注入、符号链接逃逸和../遍历。 - 写前扫描 —
publish_raw与编译发布在落盘前执行凭证/注入检查(见上文 归档安全治理)。