[總管交辦] base KBDB 語意查詢補完:圖內容入嵌覆蓋 + 語意查詢端點(三模式最後一關) #7

Closed
opened 2026-07-05 08:27:00 +00:00 by Leo · 3 comments
Owner

背景

知識庫整合鋪開中:Leo/notes 分庫已完整 ingest 進 leo21c KBDB(graph 三元組 17→31),三模式驗證裡「圖」「關鍵字」已通,只剩「語意」。語意屬 base KBDB(Arcrun kbdb/)的 optional embed 模組,不在 graph/ingest 插件——故交辦 Arcrun。

現況(已核實,非猜測)

  • embed 模組已存在且 leo21c 已開GET /embed/backfill/status{"enabled":true,"pending":0,"embedded":0}(VECTORIZE+AI binding 已注入、index arcrun-kbdb-embed 768/cosine 已建)。leo 已把開關打開。
  • pending:0, embedded:0圖的三元組/節點一筆都沒進 Vectorize

Gap A1|圖內容進不了「可嵌 entry」路徑(洞2「打標處≠讀標處」的精確樣貌)

  • kbdb/src/embed.tsembedOnWrite/backfillEmbeddings 只嵌 entries 且條件是 metadata_json.$.embed === trueisEmbeddable)。
  • 但 ingest 寫進來的三元組/entity-node 是 recordstemplate=triplet / node),graph 插件在 record/node 上設 embed/predicate_embed 旗標——embed 模組看不到 records,只認 entries 的 metadata.embed
  • ⟹ 三元組再多,pending 永遠 0。需要決定並補上「橋」:node gloss(與 wiki 卡內容)要落成metadata.embed=true 的 entry,embed 模組才嵌得到;或擴 embed 模組讓它也吃 records。這是語意能不能查到圖內容的根本前提。

Gap A2|沒有語意「查詢」端點(只有 backfill 管理端點)

  • kbdb/src/routes/embed.ts 目前只有 POST /embed/backfill + GET /embed/backfill/status(都是回填/巡檢),沒有對外語意查詢
  • 需補:POST /search(或 /embed/query)=把 query 文字用 env.AI.run(EMBED_MODEL) 嵌成向量 → env.VECTORIZE.query() → 回命中(帶 owner_id 租戶過濾,用既有 indexed metadata:owner_id/entry_type/source)。模組未開時比照現有 409 + capability_hint,不假綠。

驗收

leo21c 部署後:① Gap A1 修好→/embed/backfill/statuspending/embedded 反映圖內容 ② POST /search 對「邏輯拆解」「身體自信」等 notes 已入庫概念回語意近鄰。屆時知識一庫三模式(關鍵字/語意/圖)全通。

對齊

  • D6/D17:embed 是 base 能力(非插件);D16:精耕非 RAG 地毯灌(只嵌被標 embeddable 的,維持現契約)。
  • base 對內容語意無知的解耦要守(只認通用 metadata.embed 旗標,不寫死 triplet/wiki)。

附帶:另一個 base 缺口(可另開 issue,同屬 kbdb base、同卡鋪開)

ingest 大筆記時 POST /triplets/ingestCloudflare「Too many subrequests by single Worker invocation」journals/2026_07_01.md 11三元組+10node 回 500,三元組已落地、node 層沒寫進去)。根因=base 寫入是「每三元組/每 node 一個 subrequest」串行。鋪開到 Leo/kb(5,083 檔)前必須先解:base 出 bulk 寫入端點(一次收整個 envelope)。細節見 Leo/mira#1 2026-07-05 comment。


[總管交辦] 2026-07-05。實測環境:leo21c。ingest CLI=Leo/kbdb-ingest-plugin@fe9fbe1

## 背景 知識庫整合鋪開中:`Leo/notes` 分庫已完整 ingest 進 leo21c KBDB(graph 三元組 17→31),**三模式驗證裡「圖」「關鍵字」已通,只剩「語意」**。語意屬 base KBDB(Arcrun `kbdb/`)的 optional embed 模組,不在 graph/ingest 插件——故交辦 Arcrun。 ## 現況(已核實,非猜測) - embed 模組**已存在且 leo21c 已開**:`GET /embed/backfill/status` → `{"enabled":true,"pending":0,"embedded":0}`(VECTORIZE+AI binding 已注入、index `arcrun-kbdb-embed` 768/cosine 已建)。leo 已把開關打開。 - 但 `pending:0, embedded:0`:**圖的三元組/節點一筆都沒進 Vectorize**。 ## Gap A1|圖內容進不了「可嵌 entry」路徑(洞2「打標處≠讀標處」的精確樣貌) - `kbdb/src/embed.ts`:`embedOnWrite`/`backfillEmbeddings` 只嵌 **entries** 且條件是 `metadata_json.$.embed === true`(`isEmbeddable`)。 - 但 ingest 寫進來的三元組/entity-node 是 **records**(`template=triplet` / node),graph 插件在 record/node 上設 `embed`/`predicate_embed` 旗標——**embed 模組看不到 records,只認 entries 的 metadata.embed**。 - ⟹ 三元組再多,`pending` 永遠 0。需要決定並補上「橋」:node gloss(與 wiki 卡內容)要落成**帶 `metadata.embed=true` 的 entry**,embed 模組才嵌得到;或擴 embed 模組讓它也吃 records。**這是語意能不能查到圖內容的根本前提。** ## Gap A2|沒有語意「查詢」端點(只有 backfill 管理端點) - `kbdb/src/routes/embed.ts` 目前只有 `POST /embed/backfill` + `GET /embed/backfill/status`(都是回填/巡檢),**沒有對外語意查詢**。 - 需補:`POST /search`(或 `/embed/query`)=把 query 文字用 `env.AI.run(EMBED_MODEL)` 嵌成向量 → `env.VECTORIZE.query()` → 回命中(帶 `owner_id` 租戶過濾,用既有 indexed metadata:owner_id/entry_type/source)。模組未開時比照現有 `409 + capability_hint`,不假綠。 ## 驗收 leo21c 部署後:① Gap A1 修好→`/embed/backfill/status` 的 `pending`/`embedded` 反映圖內容 ② `POST /search` 對「邏輯拆解」「身體自信」等 notes 已入庫概念回語意近鄰。屆時知識一庫三模式(關鍵字/語意/圖)全通。 ## 對齊 - D6/D17:embed 是 base 能力(非插件);D16:精耕非 RAG 地毯灌(只嵌被標 embeddable 的,維持現契約)。 - base 對內容語意無知的解耦要守(只認通用 `metadata.embed` 旗標,不寫死 triplet/wiki)。 ## 附帶:另一個 base 缺口(可另開 issue,同屬 kbdb base、同卡鋪開) ingest 大筆記時 `POST /triplets/ingest` 撞 **Cloudflare「Too many subrequests by single Worker invocation」**(`journals/2026_07_01.md` 11三元組+10node 回 500,三元組已落地、node 層沒寫進去)。根因=base 寫入是「每三元組/每 node 一個 subrequest」串行。**鋪開到 `Leo/kb`(5,083 檔)前必須先解**:base 出 bulk 寫入端點(一次收整個 envelope)。細節見 `Leo/mira#1` 2026-07-05 comment。 --- _[總管交辦] 2026-07-05。實測環境:leo21c。ingest CLI=`Leo/kbdb-ingest-plugin@fe9fbe1`。_
Author
Owner

語意這關端到端通(leo21c 實測)—— A1 已交付、A2 已 code

根因確認:不是缺端點,是「打標≠讀標」——node gloss+embed 標在 entity recordpersistNodes),但 base embed 只掃 entries.metadata_json.embed → pending 永遠 0。

A1(graph 插件,已部署 leo21c kbdb-graph-plugin v03e3854e)

  • persistNodes 除寫 entity record,另落一筆 content=canonical:glossmetadata.embed=true 的 base entry(走 base API、零 SQL、冪等用確定性 page_name)。
  • POST /entities/backfill-gloss-entries 對存量補 gloss entry。實測 scanned:16 created:16
  • base embed-on-write 即時嵌 → embedded 5→21pending:0
  • 語意查詢實測:「系統動力學」→ 命中該 gloss +程式化邏輯/講解方法論近鄰;「重新規劃人生」→ AI/personal reinvention 語意近鄰。三模式(關鍵字/語意/圖)全通。
  • 分支 kbdb-graph-plugin@arcrun-7-gloss-bridge

A2(base,已 code 未部署)POST /embed/query 薄殼暴露既有 semanticSearch(vitest 9/9)。分支 Arcrun@arcrun-7-embed-query。既有 GET /entries/search?mode=semantic 已提供語意查詢,A2 是獨立端點,部署走 acr update 可延後。

[→arcrun] 衍生(頂層 D27):① deploy 顯式 account_id + fail-if-ambiguous(token 常掛多帳號)② deploy 自偵測 remote vectorize 已開就跳過(別靠 AI 小心)③ wrangler deploy 條件 guard(只 install/update 放行,能力走 cypher binding)。

[總管] 2026-07-05 雲端。

## 語意這關端到端通(leo21c 實測)—— A1 已交付、A2 已 code **根因確認**:不是缺端點,是「打標≠讀標」——node gloss+embed 標在 entity **record**(`persistNodes`),但 base embed 只掃 **entries**.metadata_json.embed → `pending` 永遠 0。 **A1(graph 插件,已部署 leo21c `kbdb-graph-plugin` v03e3854e)** - `persistNodes` 除寫 entity record,另落一筆 `content=canonical:gloss`、`metadata.embed=true` 的 base entry(走 base API、零 SQL、冪等用確定性 page_name)。 - 加 `POST /entities/backfill-gloss-entries` 對存量補 gloss entry。實測 `scanned:16 created:16`。 - base embed-on-write 即時嵌 → `embedded 5→21`、`pending:0`。 - 語意查詢實測:「系統動力學」→ 命中該 gloss +程式化邏輯/講解方法論近鄰;「重新規劃人生」→ AI/personal reinvention 語意近鄰。**三模式(關鍵字/語意/圖)全通。** - 分支 `kbdb-graph-plugin@arcrun-7-gloss-bridge`。 **A2(base,已 code 未部署)**:`POST /embed/query` 薄殼暴露既有 `semanticSearch`(vitest 9/9)。分支 `Arcrun@arcrun-7-embed-query`。既有 `GET /entries/search?mode=semantic` 已提供語意查詢,A2 是獨立端點,部署走 `acr update` 可延後。 **[→arcrun] 衍生(頂層 D27)**:① deploy 顯式 account_id + fail-if-ambiguous(token 常掛多帳號)② deploy 自偵測 remote vectorize 已開就跳過(別靠 AI 小心)③ `wrangler deploy` 條件 guard(只 install/update 放行,能力走 cypher binding)。 _[總管] 2026-07-05 雲端。_
Author
Owner

結案(2026-08-09 逐票查核)

這張票描述的問題現在已經不存在

證據
KBDB 語意查詢端點已存在;graph 內容透過 `metadata.embed=true` 橋接進嵌入。

查核方式:讀現行程式碼實證,非讀票面推測。總管另抽驗過同批中三張(#5/#58/#59),全部屬實。

如果我判錯了,重開就是——關錯票的成本遠低於留著一堆假的待辦,而假待辦會讓 leo 看不出還剩什麼。

## ✅ 結案(2026-08-09 逐票查核) 這張票描述的問題**現在已經不存在**。 **證據** KBDB 語意查詢端點已存在;graph 內容透過 \`metadata.embed=true\` 橋接進嵌入。 查核方式:讀現行程式碼實證,非讀票面推測。總管另抽驗過同批中三張(#5/#58/#59),全部屬實。 如果我判錯了,重開就是——**關錯票的成本遠低於留著一堆假的待辦**,而假待辦會讓 leo 看不出還剩什麼。
Leo closed this issue 2026-08-09 13:08:35 +00:00
Author
Owner

[總管·票務複驗 2026-08-09 晚] 關票——問題已不存在,證據是我自己跑出來的。

kbdb/src/routes/entries.ts 有 8 處 semantic 模式的處理,GET /entries/search?mode=semantic 端點存在並運作。⇒ 三模式最後一關(語意查詢端點)已補完。


📌 為什麼是現在才關:這個 repo 的 37 張票原本一張狀態標籤都沒有,等於在看板上不存在,也就沒有人會回頭看它們還成不成立。今晚做了一次全面驗傷,只有實際跑指令驗到問題真的消失的才關;查不出來的一律留著並標明卡在哪。
如果我判錯了(例如你要的其實比程式碼裡這些更多),直接重開這張票,我不會有意見。

[總管·票務複驗 2026-08-09 晚] ✅ **關票——問題已不存在,證據是我自己跑出來的。** `kbdb/src/routes/entries.ts` 有 8 處 semantic 模式的處理,`GET /entries/search?mode=semantic` 端點存在並運作。⇒ 三模式最後一關(語意查詢端點)已補完。 --- 📌 **為什麼是現在才關**:這個 repo 的 37 張票原本一張狀態標籤都沒有,等於在看板上不存在,也就沒有人會回頭看它們還成不成立。今晚做了一次全面驗傷,**只有實際跑指令驗到問題真的消失的才關**;查不出來的一律留著並標明卡在哪。 如果我判錯了(例如你要的其實比程式碼裡這些更多),直接重開這張票,我不會有意見。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Leo/Arcrun#7