- 字體:Syne (標題) + DM Mono (內文) + VT323 (品牌點陣),替換 Inter - Tailwind: fontFamily 更新 + 5 層文字色彩 token (primary→disabled) - Sidebar: NemoClaw 白瓷龍蝦爪 SVG + AWOOOI 用 VT323 放大 - OpenClaw Panel: 還原 NemoClaw 3D 白瓷龍蝦爪 (替換 NemoNodeAnimation) - Knowledge Base 設計文件 (B分離/A K8s Job/Phase1跳過向量搜尋) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
5.6 KiB
5.6 KiB
Knowledge Base 設計文件
版本: v1.0 日期: 2026-04-02 作者: ogt + Claude Code 狀態: 已批准,待實作
背景與目標
打造 AWOOOI 知識庫系統,讓工程師與 AI 管理人員可查閱 SRE 知識,同時作為 OpenClaw 決策的 Context 來源。
已確認決策:
- 使用者:工程師 + AI 管理人員
- 知識來源:AI 自動萃取為主,人工審核補充
- 用途:人工查閱 + AI 自動引用(兩者兼備)
- 資料結構:兩層架構(底層知識條目 + Playbook 為特殊關聯)
- UI:左側分類導航 + 頂部搜尋 + 右側詳情
架構決策
| 項目 | 決策 | 理由 |
|---|---|---|
| Playbook 邊界 | 分離,用 related_playbook_id 關聯 |
執行語意 ≠ 查閱知識,職責不同 |
| Migration | K8s Job(沿用現有方式) | 4 個 table,Alembic 是過度工程 |
| Vector Search | Phase 1 跳過,關鍵字 + tag | Phase 2 再評估 pgvector |
資料模型
KnowledgeEntry(新 PostgreSQL table)
CREATE TABLE knowledge_entries (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL, -- Markdown
entry_type VARCHAR(50) NOT NULL, -- 'incident_case' | 'runbook' | 'best_practice' | 'postmortem'
category VARCHAR(100) NOT NULL, -- 對應左側分類樹
tags JSONB DEFAULT '[]', -- string[]
source VARCHAR(20) NOT NULL, -- 'ai_extracted' | 'human'
status VARCHAR(20) NOT NULL DEFAULT 'draft', -- 'draft' | 'review' | 'approved'
related_incident_id UUID REFERENCES incidents(id) ON DELETE SET NULL,
related_playbook_id VARCHAR(255), -- Playbook Redis key(非 FK)
view_count INTEGER DEFAULT 0,
created_by VARCHAR(100),
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_knowledge_entries_type ON knowledge_entries(entry_type);
CREATE INDEX idx_knowledge_entries_category ON knowledge_entries(category);
CREATE INDEX idx_knowledge_entries_status ON knowledge_entries(status);
entry_type 分類
| type | 說明 |
|---|---|
incident_case |
AI 從 Incident 萃取的案例分析 |
runbook |
手動建立的操作手冊 |
best_practice |
最佳實踐文章 |
postmortem |
事後分析報告 |
category 分類樹(左側導航)
全部
├── 基礎設施
│ ├── K8s / K3s
│ ├── 資料庫
│ └── 網路
├── 應用層
│ ├── API 服務
│ └── 前端
├── AI 系統
│ ├── OpenClaw
│ └── Playbook
└── 安全 / 合規
API 設計
Base path: /api/v1/knowledge
| Method | Path | 說明 |
|---|---|---|
| GET | / |
列表(支援 category, type, status, q 搜尋, tags 篩選) |
| GET | /{id} |
單筆(同時 view_count +1) |
| POST | / |
建立新條目 |
| PATCH | /{id} |
更新(含狀態流轉) |
| POST | /{id}/approve |
審核通過(status: draft/review → approved) |
| DELETE | /{id} |
軟刪除(status → archived) |
| GET | /categories |
取得分類樹(含各類數量) |
| GET | /search |
關鍵字搜尋(title + content + tags) |
後端分層架構
遵循 leWOOOgo 積木化原則:
apps/api/src/
├── db/models.py # 新增 KnowledgeEntry ORM class
├── models/knowledge.py # Pydantic Schema (Request/Response)
├── repositories/
│ ├── interfaces.py # 新增 IKnowledgeRepository Protocol
│ └── knowledge_repository.py # PostgreSQL CRUD 實作
├── services/
│ └── knowledge_service.py # 業務邏輯(搜尋、狀態流轉、view_count)
└── api/v1/
└── knowledge.py # Router,prefix /knowledge
前端設計
頁面結構
/knowledge-base
├── 左側分類導航 (w-52, 固定)
│ ├── 全部 (N)
│ ├── 基礎設施 (N)
│ ├── 應用層 (N)
│ ├── AI 系統 (N)
│ └── 安全/合規 (N)
├── 主區域
│ ├── 頂部搜尋欄 + 篩選 (type / source / status)
│ ├── 結果列表
│ │ └── KnowledgeCard (title, type badge, tags, view_count, 相關 Playbook)
│ └── 空態
└── 右側詳情 Panel (抽屜式,點擊條目開啟)
├── 標題 + meta
├── Markdown 渲染
├── 相關 Playbook 連結
└── 審核操作(approve / 回 review)
KnowledgeCard
┌─────────────────────────────────────────┐
│ [type badge] 標題文字 👁 12 │
│ category · source · 2026-04-01 │
│ [tag] [tag] [tag] │
│ 🔗 相關 Playbook: restart-api-server │
└─────────────────────────────────────────┘
狀態標示
| status | 顯示 | 顏色 |
|---|---|---|
draft |
草稿 | gray |
review |
審核中 | warning(黃) |
approved |
已批准 | healthy(綠) |
Migration K8s Job
參考 k8s/jobs/migrate-phase18-audit-logs.yaml,建立:
k8s/jobs/migrate-knowledge-entries.yaml
執行 CREATE TABLE knowledge_entries ... + index。
Phase 2(未來)
- pgvector 語意搜尋
- OpenClaw 在評估 Incident 時自動 RAG 查詢 Knowledge Base
- Embedding 自動化(建立 entry 時觸發)