昨天拆開了分析管線。今天想講知識庫這一側的設計:一份文件怎麼被切段、一個問題怎麼被路由到候選頁。 這篇不需要連任何系統,我直接拿真實的檔案示範一次。
設計上的四個環節
切段(chunking):以 ## 這個層級當邊界,每個二級標題是一個可檢索片段。同類型的頁面用同一組標題(前面幾天看到的事件頁、情境頁都是固定結構),讓檢索跟答案模板對得上。
metadata 過濾:每頁開頭都有一段 frontmatter,doc_type、category、tags、verification_status 這些欄位用來做結構化篩選,不用每次都整段語意比對。
路由(routing):問題先分類成 8 種 intent 之一,再依 intent 對應到候選的文件分類,不是一開始就對全庫做語意搜尋。
鄰居擴充:靠 related_docs 做一跳擴充——例如從一個攻擊情境頁,擴到它牽涉的事件頁跟技術卡,補齊單一頁面給不出的脈絡。
拿一個真實問題走一次
與其又講一次抽象流程,不如直接示範。 我挑一個問題,是 Day 13 那篇 admin-group-change.md 自己列出來的「使用者可能詢問的問題」之一:
「有沒有人被加進 Administrators?」
第一步,分類 intent
對照 routing 表,這個問題最接近「account-anomaly」這一類(帳號異常、提權情境),對應到候選分類是 04-windows-ad-events 加 05-attack-scenarios。
第二步,讀 index.md 選候選頁
在候選分類裡找摘要對得上的頁面,會挑到 admin-group-change(特權群組異動)跟 add-to-administrators(加入 Administrators 攻擊情境)這兩頁。
第三步,讀候選頁本文
admin-group-change.md 裡面已經寫好一套回答骨架:哪個 Event ID(4732/4728)、對應哪個 MITRE 技術(T1098)、答案範本長什麼樣子。
第四步,一跳鄰居擴充
這頁的 related_docs 帶到 evt-user-creation——也就是說,單看「加入群組」這一頁還不夠,系統設計上會自動把「帳號怎麼被建立」的脈絡也拉進來。
套進真實資料,而不是佔位符號
admin-group-change.md 裡原本的答案範本用的是佔位符號:「<帳號>( 分鐘前由 4720 建立)於 <時間> 被加入本機 Administrators(4732),操作者 。」
metadata 過濾:
id: evt-admin-group-change
title: "管理者群組異動事件"
doc_type: event
category: windows-ad-event
risk_level: high
windows_event_ids: ["4732", "4728", "4756"]
wazuh_sources: ["custom:110130", "custom:110131", "custom:110132"]
related_docs: [evt-group-membership-change, evt-user-creation, scn-add-to-administrators, scn-privilege-escalation-signs]
verification_status: needs-verification
confidence: high
走到這一步,我手上剛好有一組真實資料可以套——就是 Day 4、Day 8 反覆提過的那條鏈。套進去之後,答案會變成:
有一筆測試帳號在建立後約一分半,被加入本機 Administrators(對應 Wazuh 規則 110121 → 110160,關聯規則已將兩者接上),符合 T1136 → T1098 的典型持久化提權型態。此為授權測試情境下的驗證,測試帳號已於驗證後移除。
這個答案沒有一個字是編的——每個具體數字都能回溯到 Day 4 那次真實操作。這也正是 Day 22 那條規矩(結論要能回溯到原始事件)在問答系統這一側的具體樣子。
今天做的是什麼
今天這整個過程,是我自己按照 routing 規則跟 index.md,手動走一遍該有的邏輯——不是一套真的接了 embedding、跑向量搜尋的系統在運作。 rag-knowledge-base-design.md 裡自己也寫著,embedding 模型選型、chunk 大小怎麼微調、檢索要抓 top-k 幾筆,這些都還沒定案。今天示範的是「這套邏輯紙上談兵時該怎麼走」,不是「這套系統已經跑起來了」——這個區分,呼應 Day 3 一開始就講過的:分析層跟呈現層目前偏設計,實作陸續補上。
明天
明天想做這系列裡我一直想做、但一直沒真的動手的事:找一筆資訊不夠完整的告警,實際餵給套用防幻覺規格的 AI,看看它會不會忍不住編一個聽起來合理的答案。
明天見。