Some checks failed
CD Pipeline / build-and-deploy (push) Has been cancelled
1. DB Migration: playbooks 資料表 (phase7_playbooks_table.sql)
- 這是自動修復無法啟動的根本原因 — table 從未建立
- 5 個索引: status/tags/alert_names/source_incidents/created_at
- 已在 prod DB 執行
2. playbook_service: 萃取後自動沉澱 KM
- extract_from_incident() 完成後 fire-and-forget _write_to_km()
- 內容含症狀模式、修復步驟、信心度、來源 Incident
3. approval_execution: 執行結果沉澱 KM
- _trigger_learning() 後 fire-and-forget _write_execution_result_to_km()
- 成功/失敗記錄都寫入,category=execution_result
完整閉環:
告警 → AI分析 → 查Playbook → 決策 → 執行 → 結果寫KM
↓
Incident解決 → KM(knowledge_extractor)
→ Playbook萃取 → KM
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
59 lines
2.0 KiB
SQL
59 lines
2.0 KiB
SQL
-- Phase 7: Playbook 萃取功能 — playbooks 資料表
|
|
-- 建立時間: 2026-04-04 (台北時區)
|
|
-- 建立者: Claude Code (Phase 7 補齊 migration)
|
|
-- 對應設計: memory/project_playbook_design.md
|
|
-- 對應模型: apps/api/src/models/playbook.py
|
|
|
|
CREATE TABLE IF NOT EXISTS playbooks (
|
|
-- 識別
|
|
playbook_id VARCHAR(32) UNIQUE NOT NULL,
|
|
|
|
-- 元資料
|
|
name VARCHAR(256) NOT NULL,
|
|
description TEXT NOT NULL DEFAULT '',
|
|
status VARCHAR(32) NOT NULL DEFAULT 'draft', -- draft|approved|deprecated
|
|
source VARCHAR(32) NOT NULL DEFAULT 'extracted', -- extracted|manual
|
|
|
|
-- 症狀模式 (SymptomPattern JSON)
|
|
symptom_pattern JSONB NOT NULL DEFAULT '{}',
|
|
|
|
-- 修復步驟 (list[RepairStep] JSON)
|
|
repair_steps JSONB NOT NULL DEFAULT '[]',
|
|
estimated_duration_minutes INT NOT NULL DEFAULT 5,
|
|
|
|
-- 來源追溯
|
|
source_incident_ids TEXT[] NOT NULL DEFAULT '{}',
|
|
ai_confidence DECIMAL(4,3) NOT NULL DEFAULT 0.0,
|
|
|
|
-- 統計數據
|
|
success_count INT NOT NULL DEFAULT 0,
|
|
failure_count INT NOT NULL DEFAULT 0,
|
|
last_used_at TIMESTAMPTZ,
|
|
|
|
-- 人工標記
|
|
approved_by VARCHAR(128),
|
|
approved_at TIMESTAMPTZ,
|
|
tags TEXT[] NOT NULL DEFAULT '{}',
|
|
notes TEXT,
|
|
|
|
-- 時間軸
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
-- 索引
|
|
CREATE INDEX IF NOT EXISTS idx_playbooks_status
|
|
ON playbooks(status);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_playbooks_tags
|
|
ON playbooks USING GIN(tags);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_playbooks_alert_names
|
|
ON playbooks USING GIN((symptom_pattern->'alert_names'));
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_playbooks_source_incidents
|
|
ON playbooks USING GIN(source_incident_ids);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_playbooks_created_at
|
|
ON playbooks(created_at DESC);
|