Files
awoooi/apps/api/migrations/flywheel_playbook_embeddings.sql
OG T c6edfb5614
Some checks failed
CD Pipeline / build-and-deploy (push) Has been cancelled
fix(flywheel): 四階段系統性修復 AUTO_REPAIR NO_MATCH 斷層
Phase 1 — affected_services 污染根治
  - webhooks.py: _extract_affected_services() 從 labels 精準萃取服務名
    (component > job > pod deployment name > clean target_resource > [])
  - create_incident_for_approval: alert_labels 完整保留進 Signal
  - alert_name 從 alertname 取,不再用 "custom"

Phase 2 — Playbook alertname 變體擴充
  - alert_rules.yaml: 5 條規則新增 HostHighCpuLoad、KubePodCrashLooping 等變體
  - scripts/update_playbook_alert_variants.py: Redis index 已執行更新 

Phase 3 — Jaccard 通用型 Playbook 豁免
  - similarity.py: affected_services=[] → 1.0 豁免(基礎設施 Playbook 不針對特定服務)
  - severity_range=[] → 1.0 豁免(適用所有嚴重度)

Phase 4 — Playbook Embedding 持久化(冷啟動修復)
  - migrations/flywheel_playbook_embeddings.sql: pgvector 持久化表
  - services/playbook_embedding_service.py: 啟動時重建 Redis 向量快取 + 同步 DB
  - main.py: lifespan 啟動時 asyncio.create_task 非阻塞執行

2026-04-10 Asia/Taipei — Claude Sonnet 4.6
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 11:04:56 +08:00

28 lines
1.2 KiB
SQL

-- Phase 4 飛輪修復 (ADR-067 延伸): Playbook Embeddings 持久化表
-- 2026-04-10 Claude Sonnet 4.6 Asia/Taipei
-- 目的: 解決冷啟動飛輪斷層 — Playbook 語義相似度查詢
--
-- 前置: pgvector extension 已安裝 (phase28_rag_pgvector.sql)
-- 向量模型: nomic-embed-text (Ollama 192.168.0.188:11434) → 768 維
--
-- 索引策略:
-- < 100 筆: 線性掃描 (無需索引)
-- > 100 筆: 執行 CREATE INDEX ivfflat (phase35 已示範)
CREATE TABLE IF NOT EXISTS playbook_embeddings (
playbook_id TEXT PRIMARY KEY,
embedding vector(768), -- nomic-embed-text 768 維
alert_names TEXT[] NOT NULL DEFAULT '{}', -- 索引時的 alert_names 快照
keywords TEXT[] NOT NULL DEFAULT '{}', -- 索引時的 keywords 快照
indexed_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
COMMENT ON TABLE playbook_embeddings IS
'Playbook 向量索引 — Phase 4 飛輪修復 (2026-04-10) — nomic-embed-text 768 維';
-- 向量近鄰索引 (超過 100 筆後解開)
-- CREATE INDEX IF NOT EXISTS ix_playbook_embeddings_vec
-- ON playbook_embeddings USING ivfflat (embedding vector_cosine_ops)
-- WITH (lists = 10);