斑馬手冊 2.0

你的 AI 同事終於知道公司在幹嘛了

~1 小時 · 全員適用 · Hands-on

← → 或滑動切換

想像一下...

凌晨 3 點,客戶問了一個你沒遇過的問題
你的 AI agent 也答不出來,因為它什麼都不知道

目標

讓每位同事知道:遇到什麼情境、該用哪個 skill
從今天開始就能幫知識庫變好。

不需要技術背景,會用 Claude Code 就行。

系統架構


  ┌─────────────────────────────────────────────────────────────┐
  │  資料來源                                                    │
  │  docs · forum · zebra-manual · blog · changelog · skills    │
  └────────────────────────┬────────────────────────────────────┘
                           │ adapter → chunk → embed
                           ▼
  ┌─────────────────────────────────────────────────────────────┐
  │  pgvector DB            7,400+ chunks · 1536-dim embedding  │
  └────────────────────────┬────────────────────────────────────┘
                           │ query
                           ▼
  ┌─────────────────────────────────────────────────────────────┐
  │  混合搜尋                                                    │
  │  BM25 關鍵字  +  Semantic 向量  →  RRF 合併排序              │
  └────────────────────────┬────────────────────────────────────┘
                           │
                           ▼
  ┌─────────────────────────────────────────────────────────────┐
  │  使用介面                                                    │
  │  Claude Code Skills · Web UI · MCP Server · HTTP API        │
  │  search · learn · report · triage · curate                  │
  └─────────────────────────────────────────────────────────────┘
    

一筆資料的一生

📄

原始內容

markdown / 論壇帖 / ticket

✂️

切成 chunks

整篇太長,AI 吃不下
切成 ~1,500 chars 剛好

🧠

產生 embedding

把文字變成 1,536 個數字
語意相近的文字,數字也相近

💾

存入 DB

pgvector 向量資料庫

🔍

被搜尋到

BM25 + 向量比對

💬

回答問題

AI 用它來生成答案

核心循環

Search
Report
Curate
Learn

知識庫

越轉越好

來裝備你的 AI 同事

3 分鐘安裝,從此它就有完整的 Zeabur 知識

安裝與設定

詳細步驟見 github.com/zeabur/zeabur-rag#skills

Step 1:安裝 plugin

claude plugin marketplace add zeabur/zeabur-rag
claude plugin install zeabur-rag@zeabur-rag

Step 2:設定連線

/zeabur-rag-setup

填入以下連線資訊:

變數
URLhttps://kb.zeabur.com
API Keyrak_e132e5a744f35cc1ab3014c697061baa550705783fcc1a0c3dddc276830d3415
驗證:/zeabur-rag-search hello,有回傳結果就代表成功。

知識庫現況

7,841 chunks · 3,023 次搜尋 · 7 個來源

Source說明Chunks
forum論壇技術問答2,747
docsZeabur 官方文件2,695
blog部落格文章942
changelog更新日誌605
zebra-manual內部維運手冊570
skillsSkill 文件本身249
learned使用者貢獻(就是你!)33
linearLinear tickets(尚未啟用)
???Slack 對話?客戶 onboarding 筆記?內部 wiki?🤔

知識庫不是靜態的 — 每個人都能讓它變好。想想你手邊還有什麼知識可以加進來?

Dashboard 總覽

Dashboard Overview

回到凌晨 3 點

客戶問:「怎麼設定 custom domain?」
這次,你有知識庫了

遇到問題,先搜知識庫

/zeabur-rag-search

什麼時候用?

/zeabur-rag-search 怎麼設定 custom domain

大部分情況直接用自然語言問就好,Claude 會自動搜知識庫。

網頁介面

Search Result

怎麼看結果

每筆結果旁會顯示 score,數字越高越相關:

Score意思
> 0.035高度相關 — 關鍵字和語意都命中
0.015–0.035部分相關,需要自己判斷
< 0.015可能沒有相關知識 — 這是一個 gap
搜完後可以繼續用中文追問,Claude 會保留搜到的內容作為上下文。
結果有用?給個 👍👎 回饋(網頁 UI 或 /zeabur-rag-feedback),幫助我們追蹤搜尋品質。

練習:搜尋

用自己最近遇過的一個真實問題搜看看。

/zeabur-rag-search <你的問題>

觀察:

記下你搜到的問題,等等情境 3 會用到。

問題解決了!

但下次遇到同樣的問題,其他人也要從頭來過嗎?

解決了問題,把知識寫回去

/zeabur-rag-learn

什麼時候用?

/zeabur-rag-learn

Skill 會引導你填寫標題、內容、tags。

網頁介面

Learn Form

什麼是好的貢獻

太模糊好的
「可以設定 health check」 「Zeabur 預設每 10 秒送 GET /。要改路徑的話,設 ZEABUR_HEALTH_CHECK_PATH=/health。」

貢獻後會怎樣

  1. 立即被索引,可搜尋
  2. 降權 ×0.7 直到 admin 驗證
  3. Admin 用 /zeabur-rag-curate/zeabur-rag-edit 審核
  4. 驗證後與其他正式內容平等競爭
不用擔心寫錯 — admin 會 review,不對的會被退回。
審核不限網頁,用 skill 也行,但需要 admin 權限。

練習:貢獻知識

貢獻一條你知道但知識庫裡沒有的知識。

  1. 先搜看看有沒有:/zeabur-rag-search <你的主題>
  2. 沒有的話,貢獻:/zeabur-rag-learn

每人至少貢獻 1 條。

等等,這個答案好像不對...

搜到的文件還在講舊版 UI,但平台早就改了

搜到的結果有問題

/zeabur-rag-report

什麼時候用?

/zeabur-rag-report

網頁介面

Report Form

三種 Report 類型

Type什麼時候用
outdated以前是對的,但平台已經改了
incorrect現在就是錯的
missing這個主題完全沒有被收錄
你不需要知道正確答案也能 report。
「這個 UI 按鈕已經不存在了」就是有用的回報。

練習:回報問題

回頭看情境 1 的搜尋結果,找一個值得回報的問題。

/zeabur-rag-report

每人至少回報 1 個。

大家都在貢獻和回報

但誰來把這些整理好?

維護知識庫品質

Admin Skills

Step 1:看全局

/zeabur-rag-triage

看有多少待處理項目:

類別說明
Open Reports使用者回報的問題
Unverified Learned貢獻的知識還沒驗證
Low Similarity Signals搜不到好結果的 query
Negative Feedback使用者給了負評的搜尋

需要 admin scope

Triage 介面

Triage

Step 2:逐一處理

/zeabur-rag-curate

進入互動式維護流程,一個一個 review:

輔助 Skill

處理過程中可能會用到:

Skill用途
/zeabur-rag-inspect看某個 chunk 的完整內容、report 記錄、編輯歷史
/zeabur-rag-edit直接修改 chunk 的標題、內容、tags、visibility

需要 admin scope

Inspect 介面

Inspect

Edit 介面

Edit

Demo

講師示範處理剛才練習中產生的 report 和 learned chunk。

  1. /zeabur-rag-triage — 看待處理清單
  2. /zeabur-rag-curate — 逐一 review
  3. /zeabur-rag-inspect — 檢查 chunk 細節
  4. /zeabur-rag-edit — 修正內容

Query Signals

Query Signals

All Chunks

All Chunks

Reports

Reports

Learned

Learned

一個循環走完了

搜 → 用 → 寫回 → 回報 → 維護
每轉一次,知識庫就更好一點

Skill 速查表

情境Skill權限
遇到問題,先搜/zeabur-rag-search所有人
解決後寫回知識/zeabur-rag-learn所有人
搜到錯的或缺的/zeabur-rag-report所有人
搜尋結果有用/沒用/zeabur-rag-feedback所有人
看 chunk 詳情/zeabur-rag-inspectAdmin
直接改 chunk/zeabur-rag-editAdmin
看待處理清單/zeabur-rag-triageAdmin
批次維護/zeabur-rag-curateAdmin

日常習慣

1. 處理 ticket 前/zeabur-rag-search

2. 處理 ticket 後/zeabur-rag-learn(如果發現新知識)

3. 搜到怪結果/zeabur-rag-report

4. 每週/zeabur-rag-triage + /zeabur-rag-curate(admin)

想知道底下怎麼運作的?

以下是給好奇的人的技術細節

Pipeline Adapters

資料怎麼進知識庫

資料來源與 Adapter

Adapter來源觸發方式
docszeabur/zeabur 官方文件(en-US)git clone → markdown 解析
forum論壇 MongoDB直接讀 DB,只取已解決的帖子
zebra-manualzebra-manual git repogit clone → markdown + frontmatter
blogszeabur.com/bloggit clone zeabur-com repo
changelogszeabur.com/changeloggit clone zeabur-com repo
skillsClaude Code skill 文件git clone → SKILL.md 解析
learned使用者透過 /learn 貢獻即時寫入,不需 pipeline

Pipeline 可以隨時重跑更新,新的來源也可以持續加入。

Chunking 怎麼切

所有 adapter 共用同一個 chunker(src/pipeline/chunker.ts):

步驟說明
1. 段落分割\n\n 切成段落
2. 合併過小段落小於 200 chars 的段落向下合併
3. 累積到目標大小段落累積到 ~1,500 chars 為一個 chunk
4. 切過大 chunk超過 2,250 chars 的按句子邊界再切
5. 重疊相鄰 chunk 重疊 ~150 chars,避免切斷上下文
6. 麵包屑markdown heading 加在 chunk 前面作為上下文

每個 chunk 產生一個 1536 維的 embedding(text-embedding-3-small)存入 pgvector。

Pipeline 執行

# 更新單一來源
bun run scripts/cli.ts ingest --adapter docs

# 預覽不寫入
bun run scripts/cli.ts ingest --adapter docs --dry-run

# 全量替換(零停機)
bun run scripts/cli.ts ingest --adapter docs --replace

# 所有來源一次更新
bun run scripts/cli.ts ingest --all

每個 adapter 自動處理:取得原始內容 → 切 chunk → 產生 embedding → 上傳到 DB

混合搜尋策略

為什麼搜得到

兩路搜尋

BM25(關鍵字)Semantic(向量)
原理tf-idf 詞頻統計embedding cosine similarity
擅長精確關鍵字、錯誤訊息、ID語意相似、換句話說、跨語言
弱點同義詞搜不到精確字串可能漏掉
分詞中文 Intl.Segmenter、英文 Porter stemmer模型內建 tokenizer

兩路互補 — 關鍵字抓精確匹配,向量抓語意相關。

RRF 合併排序

score = keyword_weight / (K + keyword_rank)
      + semantic_weight / (K + semantic_rank)

預設權重:keyword 0.25, semantic 0.75, K = 20

不直接比分數,而是比排名 — 兩路都排前面的 chunk 分數最高。

參數預設說明
keyword_weight0.25BM25 的權重
semantic_weight0.75語意搜尋的權重
decay180 天時間衰減半衰期,越新的文件排越前

搜尋品質評估

# 跑 eval
bun run scripts/eval.ts --mode hybrid --run-name <name>

# 比較兩次結果
bun run scripts/eval.ts --mode hybrid --run-name <name> \
  --compare data/eval-runs/<baseline>.json
指標說明
Hit@5前 5 筆有沒有命中正確答案
MRR正確答案排第幾名(越前面越好)
nDCG@5排序品質的綜合指標

搜尋策略 Roadmap

策略狀態說明
BM25 + Semantic✓ 上線中關鍵字 + 向量混合搜尋,RRF 合併
Temporal Decay✓ 上線中越新的內容排越前面(半衰期 180 天)
Graph Search已建好待調校7,500+ 實體,透過概念之間的關聯找到更多相關內容
Query Rewrite✓ 已在 Zeabur Agent 實作LLM 改寫查詢,提升召回率
Re-ranking規劃中用 LLM 對 top-K 結果重新排序
Eval 題組擴充持續進行更多真實問題 + 標註,追蹤搜尋品質趨勢

每一項改動都需要跑 eval 驗證,確保搜尋品質只進不退。

相關資源

項目連結
內部專案github.com/zeabur/zeabur-rag
公開專案github.com/zeabur/rag-service
一鍵部署模板zeabur.com/templates/H126IM
知識庫 Web UIkb.zeabur.com
Skill 安裝說明github.com/zeabur/zeabur-rag#skills

後續可以做的事

Recap

開始擴充知識庫吧!

每一次搜尋、回報、貢獻
都讓知識庫對所有人更好。

/zeabur-rag-search   /zeabur-rag-learn   /zeabur-rag-report   /zeabur-rag-triage   /zeabur-rag-curate