AI 一打開沒有全景圖,不知道庫裡有哪些子庫、各裝了什麼 #81

Open
opened 2026-08-09 13:41:48 +00:00 by Leo · 2 comments
Owner

我希望有一個功能是:任何裝了 Arcrun 的人,他的 AI 一打開就有一張全景圖——知道這座庫裡有哪些子庫、每個子庫裝了什麼。

leo 2026-08-09:
「現在總圖是做出一張 graph,但這個不會注入。」
「我要的是任何裝 Arcrun 的人,AI 一開就會有個全景圖可以是 md 檔
一開始它就知道庫裡有哪些子庫,每個子庫含有什麼東西。」

為什麼要這個

沒有全景圖的 AI,會用「不知道有什麼」的狀態下判斷,而它自己不會發現。

2026-08-09 總管當天的實例(同一天三次,全部同源):

  • 不知道 Leo/mira 這個 repo 存在 ⇒ 票開錯 repo
  • 不知道 Gitea 上有七個 public repo ⇒ 誤以為「Gitea 一律 private」,據此判斷公開 README 的連結該怎麼改
  • 讀到互相矛盾的記錄 ⇒ 把兩台實例的 prod/stage 定位講反

這些都不是判斷力問題,是沒有一份「現在長什麼樣」擺在眼前。
而每一個裝了 Arcrun 的用戶,他的 AI 都會遇到同一件事。

🔴 形態的硬要求

  • 不是 graph —— 要人/AI 自己去遍歷關係才看得到全貌,那不叫「一開始就知道」
  • 是一份總目錄,一次讀完就知道有什麼
  • 會被注入——開場就在眼前,不是「需要時去查」
  • 可以就是一個 md 檔(leo 明說)

現況需要先釐清(總管實查,2026-08-09)

注入有一部分已經存在:接上 Arcrun RAG MCP 的 AI,連線時會收到一段「藏書地圖」,
每庫一行,含核心條目與 triplet 數。總管自己這個 session 開場就有。

⇒ 但 leo 說「總圖是做出一張 graph,但這個不會注入」——這兩件可能是不同的東西
(例如示範庫裡的 00-MAP.md 是另一份)。

🔴 接手的人第一件事是釐清這個差異,不要假設:現在到底有幾份「地圖」、各自長什麼樣、
各自會不會被注入、涵蓋範圍是「這座庫的子庫」還是「整個世界(repo/實例)」。
釐清結果請寫回本票(leo 2026-08-09 立的規矩:設計寫在 issue 上,別讓下一個人再翻一次源碼)。

已知的相關真身(起點,非結論):

  • kbdb/src/library-map.tsmcp/lib/library-map.tskbdb_map.ts
  • MCP 連線注入的實作在 mcp-handler.ts

怎麼驗

  1. 一台全新安裝的實例,AI 第一次連上 → 不必下任何指令就知道有哪些子庫、各裝什麼
  2. 新增一個子庫 → 全景圖自己會有,不是靠人記得去補
  3. 全景圖與實際內容不符 → 有東西會發現
  4. 🔴沒看過這座庫的 AI 實測:給它全景圖,問「這裡有沒有關於 X 的東西」,它答得出該去哪個子庫找

相關

  • Leo/arcrun-rag#19 —— 那張是做給人看的 portal GUI(展開庫目錄/帳號識別/MCP 說明),
    本票是做給 AI 的注入物。兩張不同,但同一個病根:「庫裡有什麼看不到」。
  • Leo/mira#2 —— Mira 現代化。leo:「你把 Mira 做完不就會有全景圖了」
    ⇒ 頂層那份「有哪些 repo/實例」的全景圖是這個機制的產物,不另外手寫一份。
我希望有一個功能是:**任何裝了 Arcrun 的人,他的 AI 一打開就有一張全景圖——知道這座庫裡有哪些子庫、每個子庫裝了什麼。** > leo 2026-08-09: > 「現在總圖是做出**一張 graph,但這個不會注入**。」 > 「我要的是**任何裝 Arcrun 的人,AI 一開就會有個全景圖**,**可以是 md 檔**, > 一開始它就知道**庫裡有哪些子庫,每個子庫含有什麼東西**。」 ## 為什麼要這個 沒有全景圖的 AI,會**用「不知道有什麼」的狀態下判斷**,而它自己不會發現。 2026-08-09 總管當天的實例(同一天三次,全部同源): - 不知道 `Leo/mira` 這個 repo 存在 ⇒ 票開錯 repo - 不知道 Gitea 上有七個 public repo ⇒ 誤以為「Gitea 一律 private」,據此判斷公開 README 的連結該怎麼改 - 讀到互相矛盾的記錄 ⇒ 把兩台實例的 prod/stage 定位講反 ⇒ **這些都不是判斷力問題,是沒有一份「現在長什麼樣」擺在眼前。** 而每一個裝了 Arcrun 的用戶,他的 AI 都會遇到同一件事。 ## 🔴 形態的硬要求 - ❌ **不是 graph** —— 要人/AI 自己去遍歷關係才看得到全貌,那不叫「一開始就知道」 - ✅ **是一份總目錄,一次讀完就知道有什麼** - ✅ **會被注入**——開場就在眼前,不是「需要時去查」 - ✅ **可以就是一個 md 檔**(leo 明說) ## 現況需要先釐清(總管實查,2026-08-09) **注入有一部分已經存在**:接上 Arcrun RAG MCP 的 AI,連線時會收到一段「藏書地圖」, 每庫一行,含核心條目與 triplet 數。總管自己這個 session 開場就有。 ⇒ 但 leo 說「總圖是做出一張 graph,但這個不會注入」——**這兩件可能是不同的東西** (例如示範庫裡的 `00-MAP.md` 是另一份)。 🔴 **接手的人第一件事是釐清這個差異,不要假設**:現在到底有幾份「地圖」、各自長什麼樣、 各自會不會被注入、涵蓋範圍是「這座庫的子庫」還是「整個世界(repo/實例)」。 釐清結果請寫回本票(leo 2026-08-09 立的規矩:**設計寫在 issue 上,別讓下一個人再翻一次源碼**)。 已知的相關真身(起點,非結論): - `kbdb/src/library-map.ts`、`mcp/lib/library-map.ts`、`kbdb_map.ts` - MCP 連線注入的實作在 `mcp-handler.ts` ## 怎麼驗 1. 一台**全新安裝**的實例,AI 第一次連上 → **不必下任何指令**就知道有哪些子庫、各裝什麼 2. 新增一個子庫 → 全景圖**自己會有**,不是靠人記得去補 3. 全景圖與實際內容不符 → **有東西會發現** 4. 🔴 用**沒看過這座庫的 AI** 實測:給它全景圖,問「這裡有沒有關於 X 的東西」,它答得出該去哪個子庫找 ## 相關 - `Leo/arcrun-rag#19` —— 那張是**做給人看的 portal GUI**(展開庫目錄/帳號識別/MCP 說明), 本票是**做給 AI 的注入物**。兩張不同,但同一個病根:「庫裡有什麼看不到」。 - `Leo/mira#2` —— Mira 現代化。leo:「你把 Mira 做完不就會有全景圖了」 ⇒ 頂層那份「有哪些 repo/實例」的全景圖是**這個機制的產物**,不另外手寫一份。
Leo added the
p
high
s
todo
labels 2026-08-09 13:41:49 +00:00
Author
Owner

🔗 已與「票的全局」合併成同一張票(leo 2026-08-11 深夜親口定調)

「這個全局跟總圖全局是一樣的,目前是個圖,是給人看的,
我要它會算出一個全局圖,是 md,session 開始就注入
你知道全局有哪些知識,有哪些票
不是一個 wow factor 的好看的圖,那個已經做完了。」

⇒ 本張的「知識那一半」與「票那一半」是同一份 md,不是兩個產出。
⇒ 完整規格已寫在 Leo/InkStoneCo#17,動工前請以那張為準。

📌 本張原本就寫著的形態要求(「可以是 md 檔」「一開始它就知道庫裡有哪些子庫」「不是 graph」)
完全一致,只是現在多了「票」這一半。

🔴 另外 leo 明確劃掉一個方向:現有那張好看的 graph 是 wow factor、已經做完了,不是目標。
不要再產一個視覺化的東西。

## 🔗 已與「票的全局」合併成同一張票(leo 2026-08-11 深夜親口定調) > 「這個全局跟總圖全局是**一樣的**,目前是個圖,是給人看的, > 我要它會算出一個全局圖,**是 md,session 開始就注入**, > 你知道**全局有哪些知識,有哪些票**, > 而**不是一個 wow factor 的好看的圖,那個已經做完了**。」 ⇒ 本張的「知識那一半」與「票那一半」是**同一份 md**,不是兩個產出。 ⇒ 完整規格已寫在 **`Leo/InkStoneCo#17`**,動工前請以那張為準。 📌 本張原本就寫著的形態要求(「可以是 md 檔」「一開始它就知道庫裡有哪些子庫」「不是 graph」) **完全一致**,只是現在多了「票」這一半。 🔴 另外 leo 明確劃掉一個方向:**現有那張好看的 graph 是 wow factor、已經做完了,不是目標。** 不要再產一個視覺化的東西。
Author
Owner

🔍 釐清結果(本票要求的那份,2026-08-13 總管實測)

本票寫著:

🔴 接手的人第一件事是釐清這個差異,不要假設:現在到底有幾份「地圖」、各自長什麼樣、各自會不會被注入⋯⋯釐清結果請寫回本票。

照辦。而且第一件事就是推翻本票自己的一句話。


被推翻:「注入有一部分已經存在」

本票原文:

注入有一部分已經存在:接上 Arcrun RAG MCP 的 AI,連線時會收到一段「藏書地圖」,
每庫一行,含核心條目與 triplet 數。總管自己這個 session 開場就有。

我這條 session 沒有。

身分:portal-loginleo21cadminknowledge_scope: 全部知識庫arcrun_whoami 實回)。
我收到的 MCP server instructions 全文只有靜態的那段(「# Arcrun — 你已經配備了這套工具,別上網找」⋯⋯
結束在「第一個節點固定是 input。」),沒有【藏書地圖】那一段

⇒ 「開場就有地圖」這件事不是穩定成立的。它可能在 08-09 那天成立過,今天不成立。

為什麼會這樣(機制,不是猜測)

mcp/src/mcp-handler.ts

const mapInstructions = await buildLibraryMapInstructions(env, identity);
const instructions = mapInstructions ? `${startHere}\n\n---\n\n${mapInstructions}` : startHere;

buildLibraryMapInstructionsmcp/src/lib/library-map.ts):

  • 逾時上限 1500ms
  • catch { text = null }——任何錯誤一律吞掉回 null
  • 檔頭鐵律寫著:「注入失敗絕不能讓 MCP 連線失敗⋯⋯地圖是加分不是依賴

那條鐵律本身是對的,但它被實作成「失敗時沒有任何人會知道」。
「地圖抓不到」和「這裡沒有知識」在畫面上長得一模一樣——兩者都是沉默。
(同 Arcrun#109 的形狀:「保險拒絕了」和「程式碼不存在」都是沉默。)


🔴 更根本的一件:指路的話全被放進了那個會消失的加分項裡

startHere必定出現、連 KBDB 掛了也會出現的那段)我逐行讀完了:
它從頭到尾在講工作流、零件、recipe、邊的語法。

kbdb_searchkbdb_get_map/「這條連線裡有主人的知識庫」——一個字都沒有。

⇒ 所以本票要的「AI 一打開就有全景圖」,現況比票上寫的更差
不是「有一部分已經存在」,而是連「這裡有知識可查」這句話都不在保證出現的那一段裡

實害(同一天、可對照):總管為了回答「Arcrun 是什麼」派了一條 opus 去讀 682 行原始碼——
kbdb_search(q="Arcrun 是什麼", mode="keyword") 一查就 33 筆真答案
(含「Arcrun >> 運行於 >> CF」)。它不是查不到,是不知道有得查。


現在到底有幾份「地圖」(本票問的那題,答案)

# 是什麼 會不會被注入 現況
1 kbdbGET /map(聚合真身,kbdb/src/actions/library-map.ts 不注入,是資料源 活著。讀時自動核對重算
2 kbdb_get_map MCP 工具(mcp/src/tools/kbdb_map.ts 要 AI 自己呼叫 活著(我實測回 8 個庫)
3 MCP server instructions 注入mcp-handler.tsrenderLibraryMapLines 這才是本票要的那個 今天沒送到(見上)
4 portal GUI 的總圖 做給人看的 arcrun-rag#19,非本票

本票要的是 #3,而 #3 目前是「有實作、已部署、但會無聲不生效」。


順帶:就算 #3 送到了,它今天也會說謊

kbdb_get_map() 實回:8 個庫裡 7 個 triplet_count: 0top_entities: []
而那 7 個庫的 entries 是有的(keyword 搜得到)。
渲染出來會是「核心:(尚無)|0 triplets」⇒ AI 的合理推論是「這庫沒東西,別查」。

這一半已由 PR #117Arcrun#87 三次收尾)處理:
renderLibraryMapLines 改成 0 triplets/N 筆原始內容(尚未萃取關係,kbdb_search 查得到)

所以這張票要的東西,需要兩件都成立:
①地圖說實話(PR #117)②地圖真的送得到、送不到時也要留下痕跡(進行中)。


對本票驗收條件的一點補充建議

本票的第 4 條驗法(「用沒看過這座庫的 AI 實測」)是對的,但建議再加一條,
因為今天的故障正好落在它抓不到的地方:

5. 把地圖那條路弄壞(斷網/逾時/權限拒絕),AI 收到的東西必須仍然告訴它「這裡有知識庫、去查」,
而且必須看得出「這次沒拿到地圖」——不可以和「這裡沒有知識」長得一樣。

— 總管

## 🔍 釐清結果(本票要求的那份,2026-08-13 總管實測) 本票寫著: > 🔴 **接手的人第一件事是釐清這個差異,不要假設**:現在到底有幾份「地圖」、各自長什麼樣、各自會不會被注入⋯⋯釐清結果請寫回本票。 照辦。**而且第一件事就是推翻本票自己的一句話。** --- ### ❌ 被推翻:「注入有一部分已經存在」 本票原文: > **注入有一部分已經存在**:接上 Arcrun RAG MCP 的 AI,連線時會收到一段「藏書地圖」, > 每庫一行,含核心條目與 triplet 數。**總管自己這個 session 開場就有。** **我這條 session 沒有。** 身分:`portal-login`/`leo21c`/`admin`/`knowledge_scope: 全部知識庫`(`arcrun_whoami` 實回)。 我收到的 MCP server instructions **全文只有靜態的那段**(「# Arcrun — 你已經配備了這套工具,別上網找」⋯⋯ 結束在「第一個節點固定是 `input`。」),**沒有【藏書地圖】那一段**。 ⇒ 「開場就有地圖」這件事**不是穩定成立的**。它可能在 08-09 那天成立過,今天不成立。 ### 為什麼會這樣(機制,不是猜測) `mcp/src/mcp-handler.ts`: ```ts const mapInstructions = await buildLibraryMapInstructions(env, identity); const instructions = mapInstructions ? `${startHere}\n\n---\n\n${mapInstructions}` : startHere; ``` 而 `buildLibraryMapInstructions`(`mcp/src/lib/library-map.ts`): - 逾時上限 **1500ms** - `catch { text = null }`——**任何錯誤一律吞掉回 null** - 檔頭鐵律寫著:「注入失敗絕不能讓 MCP 連線失敗⋯⋯**地圖是加分不是依賴**」 ⇒ **那條鐵律本身是對的,但它被實作成「失敗時沒有任何人會知道」。** **「地圖抓不到」和「這裡沒有知識」在畫面上長得一模一樣——兩者都是沉默。** (同 `Arcrun#109` 的形狀:「保險拒絕了」和「程式碼不存在」都是沉默。) --- ### 🔴 更根本的一件:**指路的話全被放進了那個會消失的加分項裡** `startHere`(**必定出現**、連 KBDB 掛了也會出現的那段)我逐行讀完了: 它從頭到尾在講工作流、零件、recipe、邊的語法。 **`kbdb_search`/`kbdb_get_map`/「這條連線裡有主人的知識庫」——一個字都沒有。** ⇒ 所以本票要的「AI 一打開就有全景圖」,**現況比票上寫的更差**: 不是「有一部分已經存在」,而是**連「這裡有知識可查」這句話都不在保證出現的那一段裡**。 **實害(同一天、可對照)**:總管為了回答「Arcrun 是什麼」派了一條 opus 去讀 682 行原始碼—— 而 `kbdb_search(q="Arcrun 是什麼", mode="keyword")` **一查就 33 筆真答案** (含「Arcrun >> 運行於 >> CF」)。**它不是查不到,是不知道有得查。** --- ### 現在到底有幾份「地圖」(本票問的那題,答案) | # | 是什麼 | 會不會被注入 | 現況 | |---|---|---|---| | 1 | `kbdb` 的 `GET /map`(聚合真身,`kbdb/src/actions/library-map.ts`) | ❌ 不注入,是資料源 | 活著。讀時自動核對重算 | | 2 | `kbdb_get_map` MCP 工具(`mcp/src/tools/kbdb_map.ts`) | ❌ 要 AI 自己呼叫 | 活著(我實測回 8 個庫) | | 3 | **MCP server instructions 注入**(`mcp-handler.ts` + `renderLibraryMapLines`) | ✅ **這才是本票要的那個** | **今天沒送到**(見上) | | 4 | portal GUI 的總圖 | ❌ 做給人看的 | 屬 `arcrun-rag#19`,非本票 | ⇒ **本票要的是 #3,而 #3 目前是「有實作、已部署、但會無聲不生效」。** --- ### 順帶:就算 #3 送到了,它今天也會說謊 `kbdb_get_map()` 實回:8 個庫裡 **7 個 `triplet_count: 0`、`top_entities: []`**, 而那 7 個庫的 entries 是有的(keyword 搜得到)。 渲染出來會是「核心:(尚無)|0 triplets」⇒ **AI 的合理推論是「這庫沒東西,別查」。** 這一半已由 **PR #117**(`Arcrun#87` 三次收尾)處理: `renderLibraryMapLines` 改成 `0 triplets/N 筆原始內容(尚未萃取關係,kbdb_search 查得到)`。 ⇒ **所以這張票要的東西,需要兩件都成立:** **①地圖說實話(PR #117)②地圖真的送得到、送不到時也要留下痕跡(進行中)。** --- ### 對本票驗收條件的一點補充建議 本票的第 4 條驗法(「用沒看過這座庫的 AI 實測」)是對的,但建議再加一條, 因為今天的故障正好落在它抓不到的地方: > **5. 把地圖那條路弄壞(斷網/逾時/權限拒絕),AI 收到的東西必須仍然告訴它「這裡有知識庫、去查」, > 而且必須看得出「這次沒拿到地圖」——不可以和「這裡沒有知識」長得一樣。** — 總管
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: Leo/Arcrun#81