藏書地圖 Library Map:KBDB 查詢前的定向層(Template+ingest 重算+MCP instructions/get_map+GUI 首頁)——leo spec 附全文,請出 SDD #39
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
leo 2026-07-08 拍板立案(發想自 OpenHuman Memory Tree,但 KBDB 有 graph 所以地圖是「算的」不是「猜的」)。歸屬:能力真身=框架件(KBDB Template/ingest 重算步驟/arcrun-mcp instructions 注入+
get_map工具/console GUI 首頁)——arcrun-rag、Graph、mira 全拉 Arcrun,寫一次全實例受益;leo 自己的庫當第一個 dogfood 實例。請出 SDD(requirements/design/tasks)交總管審後動工。spec 原文(真身在
Leo/InkStoneCosystem-dev/docs/6-user/kbdb-library-map-spec.md,以下全文照貼):KBDB 藏書地圖(Library Map)功能規格
1. 問題陳述
KBDB 目前是純 pull 模式的查詢引擎:LLM 走 MCP、人走 GUI,但兩者都預設「查詢者已經知道要查什麼」。一個新開的 LLM session 面對 MCP 時,知道有 query 工具,卻不知道這座圖書館裡有哪些藏書——除非循序掃一輪所有庫,拿推理成本換一張本來可以預先編好的地圖。
OpenHuman 的解法是用 LLM 生成摘要樹,session 啟動時由 harness 把樹頂摘要注入 system prompt(push 地圖 + pull 細節)。但它底層只有無結構的 chunk,摘要是「猜的」;KBDB 底層已有三元組 graph,地圖可以是「算的」——用 SQL 從 graph 機械式導出,零漂移、零額外維護、每行可驗證。
2. 設計原則
3. 資料結構:
library_mapTemplate每個庫(repo/folder)一個 map block。建議 schema fields:
librarynarrativetop_entitiesrelation_profilebridgestriplet_countcommit_hashstatus三元組需能按庫過濾——確認現有 Triplet block 的
source/source_id是否足以定位所屬庫;若不足,在 Triplet Template schema 加一個 optionallibraryfield(改 Template schema,不動 table)。4. 更新機制
5. 注入機制(本功能真正的重點)
兩條路都要鋪:
MCP 端
get_map工具:不帶參數回全館地圖,帶library參數回該庫詳細地圖(完整 top_entities、relation_profile、bridges)。tool description 註明:「不確定該查什麼時,先呼叫此工具」。GUI 端
6. Retrieval 流程(改造後)
7. 明確不做
index.md(Logseq outliner 格式)commit 回 repo,人機共用同一份地圖(optional,phase 2)8. 建議實作順序
library_mapTemplateget_map工具[總管]
[總管雲端 2026-07-18] demo 切片先行上線(leo 指示「先修必修 bug 就給書庫總圖」)
system-dev/wiki/00-MAP.md(arcrun-raginstall/gen-library-map.mjs機械計算:藏書+一句話定義/核心實體 degree/謂詞分布/知識網全表)——AI 開場注入 00-MAP.md 即持有館藏全貌。searchByTemplateN+1(19s→1.3s,PR#63 內);graph/總圖查詢因此從 20-30s 降到 1-3s。library_mapTemplate+ingest 重算步驟+MCP instructions 注入+get_map工具+多庫 bridges。demo 切片是單庫版驗證,資料結構未動。SDD 已出稿(2026-07-19,leo 催辦後補課):
system-dev/docs/3-specs/library-map/(requirements/design/tasks,commit1ee0dbd,status: draft)。對原 spec 的兩個補充裁定:
POST /map/recompute(D6 鐵律:插件/workflow 禁 SQL,聚合查詢只能住基本盤);ingest 尾端 http_request 呼它。任務 M1-M7 已列(M2 kbdb 端點是關鍵路徑)。待總管/leo 審 design 後動工。
M1+M2 PR 已開:#72(分支
feat/library-map-base)。重點:
libraryslot、entriesmetadata.library未標記 → 不足,已走預案(recompute 冪等補 optionallibraryslot,改 template 不動表;值由 ingest M3 補寫)。過渡期 recompute 支援source_prefixfallback 讓舊 triplet 靠source_uri前綴歸庫。M1+M2 已 merge(PR#72,總管逐項審過:migration 純 seed 零建表 D6 ✅/SQL 全綁定、active-only、supersede 先建後標順序安全 ✅/45/45 測試含真 SQLite 實跑 ✅)。
重要核實入檔:triplet template 實名
triplet(非 graph_triplet)、無 library slot——recompute 已支援source_prefix過渡歸庫,library slot 值由 M3 ingest 補寫。下一步:①leo gated redeploy kbdb(含 migration 0003)②首次 backfill:逐庫呼
POST /map/recompute(舊資料帶 source_prefix,如 kb 庫gitea:Leo/kb@)③M3 ingest 接鏈/M4 MCP 注入+get_map/M5 GUI 首頁接續。M4(MCP 端注入)PR 已開:#73(分支
feat/mcp-library-map-inject)kbdb_get_map工具:無參數=全館地圖(每庫一行)、帶 library=詳圖(slot JSON 字串容錯 parse 成物件);404/空庫誠實回報+recompute backfill 指引;description 含「不確定該查什麼時,先呼叫此工具」;走既有 KBDB service bindingGET /map渲染每庫一行({library}:{narrative}|核心:{top3}|{n} triplets)嵌 instructions;isolate 內 TTL 快取(成功 5min/失敗 1min,理由見 PR);任何失敗靜默略過絕不擋連線M5(GUI 首頁)PR 已開:#74(分支
feat/console-library-map-home)/kbdb/search參數)進該庫搜尋」同頁動線最短,一份實作兩 profile 全吃。/map空/錯誤=誠實空狀態(指引 recompute backfill)不擋搜尋。merge 後需 gated redeploy cypher-executor(leo 閘)。M3(ingest 接鏈)/M6/M7 未動。
M5 已 merge(PR#74 總管審過:proxy 純轉發保留 auth 閘、owner_id 選擇性透傳避 NULL 假空狀態、15/15 新測綠;基線既有 tsc/1 測試失敗經 stash 對照證實非本分支引入,另列債)。merge 後需 gated redeploy cypher-executor(leo 閘)→ console 總庫搜尋頁(rag profile 首頁)搜尋框上方即全館地圖卡片+跨庫橋+點卡進庫。M1-M5 至此只剩部署;M3(ingest 自動保鮮)yaml 在 arcrun-rag repo 進行中。
✅ M3 demo e2e 全通(雲端總管,leo「推」核可後執行):M3 版 rag_ingest 推 demo(嵌入 token=rag-demo 唯讀新鑄,非全權;G10 妥協維持但已最小權限)→ 測試卡 push/刪卡兩向皆自動觸發 recompute → demo
GET /map長出 general 庫真地圖(23 triplets,top:VPN/主管/事假/使用者/員工)。附帶三件:①demo kbdb 由雲端更新(
699018af,順帶把 #66/#67 搜尋修復帶上 demo;D1 migration 該 token 無權、runtime ensure 兜底成功)②資料衛生:33 條 pre-v2「未展開模板字面量 source_uri」殘骸 triplet 全標 deprecated,四張種子卡 touch 重萃為正確 src ③narrative 首輪抽取回空(demo INDEX 首行非敘述行)=誠實 fallback,下次 push 自癒或 M3 抽取再調。M1-M5+M3 至此全上線(leo21c+demo);剩 M6 semantic 庫路由、M7 正式驗收單。✅ 結案(2026-08-09 逐票查核)
這張票描述的問題現在已經不存在。
證據
藏書地圖已實作:`library-map.ts`(506 行)+`mcp/lib/library-map.ts`(129 行)+`kbdb_map.ts`(155 行);`mcp-handler.ts` 連線即注入地圖;portal 有 GUI 切片。
查核方式:讀現行程式碼實證,非讀票面推測。總管另抽驗過同批中三張(#5/#58/#59),全部屬實。
如果我判錯了,重開就是——關錯票的成本遠低於留著一堆假的待辦,而假待辦會讓 leo 看不出還剩什麼。
[總管·票務複驗 2026-08-09 晚] ✅ 關票——問題已不存在,證據是我自己跑出來的。
三個交付檔都在:
kbdb/src/actions/library-map.ts、mcp/src/lib/library-map.ts、mcp/src/tools/kbdb_map.ts。MCP 連線時 instructions 欄位即注入全館地圖,portal 也有「總圖」切片。⇒ 主要交付已落地(Phase 2「index.md 輸出回 repo」未核實,非必要項;真要做請另開票)。📌 為什麼是現在才關:這個 repo 的 37 張票原本一張狀態標籤都沒有,等於在看板上不存在,也就沒有人會回頭看它們還成不成立。今晚做了一次全面驗傷,只有實際跑指令驗到問題真的消失的才關;查不出來的一律留著並標明卡在哪。
如果我判錯了(例如你要的其實比程式碼裡這些更多),直接重開這張票,我不會有意見。