knowledge

package
v0.0.0-...-1a39f93 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 20, 2025 License: Apache-2.0 Imports: 11 Imported by: 0

README

Knowledge Provider Plugin

知識庫提供者插件提供了強大的知識管理功能,用於儲存、檢索和搜索事後複盤知識。

功能特性

  • 多種後端支持:Memory Provider(測試用)和 PostgreSQL Provider(生產用)
  • 智能搜索:支持全文搜索和相似性搜索
  • 類型安全:使用 Protocol Buffers 確保跨語言通訊安全
  • 高性能:支持連接池、索引優化和快取
  • 企業級功能:完整的錯誤處理、日誌記錄和健康檢查

核心概念

Provider 介面
type Provider interface {
    Store(ctx context.Context, item *KnowledgeItem) error
    Retrieve(ctx context.Context, id string) (*KnowledgeItem, error)
    Search(ctx context.Context, query *SearchQuery) (*SearchResult, error)
    SimilaritySearch(ctx context.Context, content string, limit int) (*SearchResult, error)
    Delete(ctx context.Context, id string) error
    Close() error
}
知識項目結構
type KnowledgeItem struct {
    ID          string            `json:"id"`
    Title       string            `json:"title"`
    Content     string            `json:"content"`
    Category    string            `json:"category"`
    Tags        []string          `json:"tags"`
    Metadata    map[string]string `json:"metadata"`
    CreatedAt   time.Time         `json:"created_at"`
    UpdatedAt   time.Time         `json:"updated_at"`
    CreatedBy   string            `json:"created_by"`
    Severity    string            `json:"severity,omitempty"`
    Status      string            `json:"status,omitempty"`
    
    // 事後複盤特有欄位
    IncidentID    string       `json:"incident_id,omitempty"`
    RootCause     string       `json:"root_cause,omitempty"`
    Resolution    string       `json:"resolution,omitempty"`
    LessonsLearned []string    `json:"lessons_learned,omitempty"`
    ActionItems   []ActionItem `json:"action_items,omitempty"`
}

支持的操作

1. 儲存知識項目
{
  "method": "store",
  "data": {
    "item": {
      "title": "Database Connection Timeout",
      "content": "Investigation of database connection timeout issues",
      "category": "postmortem",
      "tags": ["database", "timeout", "performance"],
      "created_by": "sre-team",
      "severity": "high",
      "status": "published",
      "incident_id": "INC-DB-001",
      "root_cause": "Connection pool exhaustion",
      "resolution": "Optimized queries and increased pool size",
      "lessons_learned": ["Monitor connection pool metrics", "Set query timeouts"],
      "action_items": [
        {
          "id": "action-001",
          "description": "Implement connection pool monitoring",
          "assignee": "db-team",
          "status": "in-progress",
          "priority": "high"
        }
      ]
    }
  }
}
2. 檢索知識項目
{
  "method": "retrieve",
  "data": {
    "item_id": "test-item-001"
  }
}
3. 搜索知識項目
{
  "method": "search",
  "data": {
    "query": {
      "query": "database timeout",
      "category": "postmortem",
      "tags": ["database", "performance"],
      "filters": {
        "severity": "high",
        "status": "published"
      },
      "sort_by": "updated_at",
      "sort_order": "desc",
      "limit": 10,
      "offset": 0
    }
  }
}
4. 相似性搜索
{
  "method": "similarity_search",
  "data": {
    "content": "connection pool exhaustion timeout",
    "limit": 5
  }
}
5. 刪除知識項目
{
  "method": "delete",
  "data": {
    "item_id": "test-item-001"
  }
}

Provider 配置

Memory Provider(測試用)
provider: "memory"
similarity:
  algorithm: "cosine"
  threshold: 0.3
  max_results: 10
cache:
  enabled: true
  ttl: 300000000000  # 5 minutes (nanoseconds)
  max_entries: 1000
PostgreSQL Provider(生產用)
provider: "postgresql"
database:
  host: "localhost"
  port: 5432
  database: "detectviz_knowledge"
  username: "detectviz"
  password: "secure_password"
  ssl_mode: "prefer"
  max_open_conns: 25
  max_idle_conns: 5
  conn_max_lifetime: 300000000000  # 5 minutes (nanoseconds)
similarity:
  algorithm: "postgresql_ts_rank"
  threshold: 0.1
  max_results: 20
cache:
  enabled: true
  ttl: 600000000000  # 10 minutes (nanoseconds)
  max_entries: 5000

PostgreSQL Schema

插件會自動創建以下資料庫結構:

CREATE TABLE knowledge_items (
    id VARCHAR(255) PRIMARY KEY,
    title TEXT NOT NULL,
    content TEXT NOT NULL,
    category VARCHAR(100) NOT NULL,
    tags TEXT[],
    metadata JSONB,
    created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
    created_by VARCHAR(255) NOT NULL,
    severity VARCHAR(50),
    status VARCHAR(50),
    
    -- 事後複盤特有欄位
    incident_id VARCHAR(255),
    root_cause TEXT,
    resolution TEXT,
    lessons_learned TEXT[],
    action_items JSONB,
    
    -- 全文檢索索引
    content_vector tsvector GENERATED ALWAYS AS (
        setweight(to_tsvector('english', title), 'A') ||
        setweight(to_tsvector('english', content), 'B') ||
        setweight(to_tsvector('english', COALESCE(root_cause, '')), 'C')
    ) STORED
);
索引
  • idx_knowledge_category: 類別索引
  • idx_knowledge_created_at: 創建時間索引
  • idx_knowledge_incident_id: 事故 ID 索引
  • idx_knowledge_severity: 嚴重程度索引
  • idx_knowledge_status: 狀態索引
  • idx_knowledge_tags: 標籤 GIN 索引
  • idx_knowledge_metadata: 元數據 GIN 索引
  • idx_knowledge_content_vector: 全文檢索 GIN 索引

測試

運行單元測試:

go test ./internal/pluginhost/plugins/knowledge/ -v

運行特定測試:

go test ./internal/pluginhost/plugins/knowledge/ -v -run TestKnowledgePlugin_Store

性能考量

Memory Provider
  • 適用於測試和開發環境
  • 數據不持久化
  • 搜索性能隨數據量線性增長
PostgreSQL Provider
  • 適用於生產環境
  • 支持完整的 ACID 特性
  • 使用 PostgreSQL 全文檢索功能
  • 支持連接池和索引優化
  • 推薦配置:
    • 至少 25 個連接池
    • 啟用 shared_preload_libraries
    • 調整 work_mem 以支持複雜查詢

監控和觀察性

插件提供以下指標:

  • plugin_runs_total: 插件執行總數
  • plugin_duration_seconds_bucket: 插件執行時間分布
  • knowledge_provider_queries_total: 查詢總數
  • knowledge_provider_query_duration_seconds: 查詢執行時間
  • knowledge_provider_storage_size_bytes: 存儲大小
  • knowledge_provider_similarity_search_duration_seconds: 相似性搜索時間

故障排除

常見問題
  1. PostgreSQL 連接失敗

    • 檢查資料庫連接參數
    • 確認 PostgreSQL 服務狀態
    • 檢查防火牆設置
  2. 搜索結果為空

    • 確認搜索詞拼寫
    • 檢查類別和標籤篩選條件
    • 驗證數據是否正確儲存
  3. 性能問題

    • 檢查索引是否正確創建
    • 調整連接池大小
    • 監控查詢執行計劃
日誌級別
  • DEBUG: 詳細的操作日誌
  • INFO: 重要操作成功記錄
  • WARN: 非致命錯誤警告
  • ERROR: 操作失敗錯誤

擴展性

添加新的 Provider
  1. 實作 Provider 介面
  2. ProviderFactory 中註冊新的 provider 類型
  3. 添加相應的配置驗證邏輯
  4. 創建單元測試
自定義搜索算法
  1. SimilarityConfig 中添加新算法支持
  2. 在相應的 Provider 中實作算法邏輯
  3. 更新配置驗證器
  4. 添加性能基準測試

安全考量

  • 所有數據庫憑證必須通過環境變數管理
  • 使用 TLS 加密數據庫連接
  • 實施適當的輸入驗證和清理
  • 定期更新依賴套件以修復安全漏洞

Documentation

Overview

Package knowledge 實作知識庫管理插件

Package knowledge 提供知識庫管理能力

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ActionItem

type ActionItem struct {
	ID          string     `json:"id"`
	Description string     `json:"description"`
	Assignee    string     `json:"assignee"`
	Status      string     `json:"status"`
	Priority    string     `json:"priority"`
	DueDate     *time.Time `json:"due_date,omitempty"`
	CompletedAt *time.Time `json:"completed_at,omitempty"`
}

ActionItem 表示行動項目

type CacheConfig

type CacheConfig struct {
	Enabled    bool          `yaml:"enabled" json:"enabled"`
	TTL        time.Duration `yaml:"ttl" json:"ttl"`
	MaxEntries int           `yaml:"max_entries" json:"max_entries"`
}

CacheConfig 快取配置

type Config

type Config struct {
	// Provider 類型 (memory, postgresql, etc.)
	Provider string `yaml:"provider" json:"provider"`

	// 資料庫連接配置
	Database *DatabaseConfig `yaml:"database,omitempty" json:"database,omitempty"`

	// 相似性搜索配置
	Similarity *SimilarityConfig `yaml:"similarity,omitempty" json:"similarity,omitempty"`

	// 快取配置
	Cache *CacheConfig `yaml:"cache,omitempty" json:"cache,omitempty"`
}

Config 表示知識庫配置

type DatabaseConfig

type DatabaseConfig struct {
	Host     string `yaml:"host" json:"host"`
	Port     int    `yaml:"port" json:"port"`
	Database string `yaml:"database" json:"database"`
	Username string `yaml:"username" json:"username"`
	Password string `yaml:"password" json:"password"`
	SSLMode  string `yaml:"ssl_mode" json:"ssl_mode"`

	// 連接池配置
	MaxOpenConns    int           `yaml:"max_open_conns" json:"max_open_conns"`
	MaxIdleConns    int           `yaml:"max_idle_conns" json:"max_idle_conns"`
	ConnMaxLifetime time.Duration `yaml:"conn_max_lifetime" json:"conn_max_lifetime"`
}

DatabaseConfig 資料庫配置

type KnowledgeCategory

type KnowledgeCategory string

KnowledgeCategory 知識類別

const (
	CategoryPostmortem      KnowledgeCategory = "postmortem"
	CategoryRunbook         KnowledgeCategory = "runbook"
	CategoryTroubleshooting KnowledgeCategory = "troubleshooting"
	CategoryBestPractice    KnowledgeCategory = "best_practice"
)

type KnowledgeDeleteRequest

type KnowledgeDeleteRequest struct {
	ItemID string `json:"item_id"`
}

KnowledgeDeleteRequest 知識刪除請求

type KnowledgeDeleteResponse

type KnowledgeDeleteResponse struct {
	Success   bool      `json:"success"`
	ItemID    string    `json:"item_id"`
	Message   string    `json:"message,omitempty"`
	Timestamp time.Time `json:"timestamp"`
}

KnowledgeDeleteResponse 知識刪除回應

type KnowledgeGenericRequest

type KnowledgeGenericRequest struct {
	Method string      `json:"method"`
	Data   interface{} `json:"data"`
}

KnowledgeGenericRequest 通用知識庫請求,包含方法和具體請求

type KnowledgeItem

type KnowledgeItem struct {
	ID        string            `json:"id"`
	Title     string            `json:"title"`
	Content   string            `json:"content"`
	Category  string            `json:"category"`
	Tags      []string          `json:"tags"`
	Metadata  map[string]string `json:"metadata"`
	CreatedAt time.Time         `json:"created_at"`
	UpdatedAt time.Time         `json:"updated_at"`
	CreatedBy string            `json:"created_by"`
	Severity  string            `json:"severity,omitempty"`
	Status    string            `json:"status,omitempty"`

	// 事後複盤特有欄位
	IncidentID     string       `json:"incident_id,omitempty"`
	RootCause      string       `json:"root_cause,omitempty"`
	Resolution     string       `json:"resolution,omitempty"`
	LessonsLearned []string     `json:"lessons_learned,omitempty"`
	ActionItems    []ActionItem `json:"action_items,omitempty"`
}

KnowledgeItem 表示一個知識項目

type KnowledgeRetrieveRequest

type KnowledgeRetrieveRequest struct {
	ItemID string `json:"item_id"`
}

KnowledgeRetrieveRequest 知識檢索請求

type KnowledgeRetrieveResponse

type KnowledgeRetrieveResponse struct {
	Success   bool           `json:"success"`
	Item      *KnowledgeItem `json:"item,omitempty"`
	Message   string         `json:"message,omitempty"`
	Timestamp time.Time      `json:"timestamp"`
}

KnowledgeRetrieveResponse 知識檢索回應

type KnowledgeSearchRequest

type KnowledgeSearchRequest struct {
	Query *SearchQuery `json:"query"`
}

KnowledgeSearchRequest 知識搜索請求

type KnowledgeSearchResponse

type KnowledgeSearchResponse struct {
	Success   bool          `json:"success"`
	Result    *SearchResult `json:"result,omitempty"`
	Message   string        `json:"message,omitempty"`
	Timestamp time.Time     `json:"timestamp"`
}

KnowledgeSearchResponse 知識搜索回應

type KnowledgeSimilaritySearchRequest

type KnowledgeSimilaritySearchRequest struct {
	Content string `json:"content"`
	Limit   int    `json:"limit,omitempty"`
}

KnowledgeSimilaritySearchRequest 相似性搜索請求

type KnowledgeSimilaritySearchResponse

type KnowledgeSimilaritySearchResponse struct {
	Success   bool          `json:"success"`
	Result    *SearchResult `json:"result,omitempty"`
	Message   string        `json:"message,omitempty"`
	Timestamp time.Time     `json:"timestamp"`
}

KnowledgeSimilaritySearchResponse 相似性搜索回應

type KnowledgeStoreRequest

type KnowledgeStoreRequest struct {
	Item *KnowledgeItem `json:"item"`
}

KnowledgeStoreRequest 知識儲存請求

type KnowledgeStoreResponse

type KnowledgeStoreResponse struct {
	Success   bool      `json:"success"`
	ItemID    string    `json:"item_id"`
	Message   string    `json:"message,omitempty"`
	Timestamp time.Time `json:"timestamp"`
}

KnowledgeStoreResponse 知識儲存回應

type MemoryProvider

type MemoryProvider struct {
	// contains filtered or unexported fields
}

MemoryProvider 實作基於記憶體的知識庫提供者(用於測試)

func NewMemoryProvider

func NewMemoryProvider(logger *zap.Logger) *MemoryProvider

NewMemoryProvider 創建新的記憶體知識庫提供者

func (*MemoryProvider) Close

func (m *MemoryProvider) Close() error

Close 關閉提供者(記憶體提供者無需特別清理)

func (*MemoryProvider) Delete

func (m *MemoryProvider) Delete(ctx context.Context, id string) error

Delete 刪除知識項目

func (*MemoryProvider) Retrieve

func (m *MemoryProvider) Retrieve(ctx context.Context, id string) (*KnowledgeItem, error)

Retrieve 根據 ID 檢索知識項目

func (*MemoryProvider) Search

func (m *MemoryProvider) Search(ctx context.Context, query *SearchQuery) (*SearchResult, error)

Search 根據查詢條件搜索知識項目

func (*MemoryProvider) SimilaritySearch

func (m *MemoryProvider) SimilaritySearch(ctx context.Context, content string, limit int) (*SearchResult, error)

SimilaritySearch 根據內容相似性搜索

func (*MemoryProvider) Store

func (m *MemoryProvider) Store(ctx context.Context, item *KnowledgeItem) error

Store 儲存知識項目

type Plugin

type Plugin struct {
	// contains filtered or unexported fields
}

Plugin 實作知識庫管理插件,符合 Handler 介面

func New

func New() *Plugin

New 創建新的知識庫插件

func (*Plugin) Close

func (p *Plugin) Close() error

Close 實作 ClosableHandler 介面 - 清理資源

func (*Plugin) CloseWithContext

func (p *Plugin) CloseWithContext(ctx context.Context) error

CloseWithContext 帶超時控制的關閉方法

func (*Plugin) ConfigureProvider

func (p *Plugin) ConfigureProvider(config *Config) error

ConfigureProvider 配置知識庫提供者

func (*Plugin) HealthCheck

func (p *Plugin) HealthCheck() error

HealthCheck 實作 HealthAwareHandler 介面 - 健康檢查

func (*Plugin) Initialize

func (p *Plugin) Initialize(logger *zap.Logger)

Initialize 初始化插件

func (*Plugin) Invoke

func (p *Plugin) Invoke(ctx context.Context, req *pb.InvokeRequest) (*pb.InvokeResponse, error)

Invoke 實作 Handler 介面 - 處理插件調用

type PostgreSQLProvider

type PostgreSQLProvider struct {
	// contains filtered or unexported fields
}

PostgreSQLProvider 實作基於 PostgreSQL 的知識庫提供者

func NewPostgreSQLProvider

func NewPostgreSQLProvider(config *DatabaseConfig, logger *zap.Logger) (*PostgreSQLProvider, error)

NewPostgreSQLProvider 創建新的 PostgreSQL 知識庫提供者

func (*PostgreSQLProvider) Close

func (p *PostgreSQLProvider) Close() error

Close 關閉資料庫連接

func (*PostgreSQLProvider) Delete

func (p *PostgreSQLProvider) Delete(ctx context.Context, id string) error

Delete 刪除知識項目

func (*PostgreSQLProvider) Retrieve

func (p *PostgreSQLProvider) Retrieve(ctx context.Context, id string) (*KnowledgeItem, error)

Retrieve 根據 ID 檢索知識項目

func (*PostgreSQLProvider) Search

func (p *PostgreSQLProvider) Search(ctx context.Context, query *SearchQuery) (*SearchResult, error)

Search 根據查詢條件搜索知識項目

func (*PostgreSQLProvider) SimilaritySearch

func (p *PostgreSQLProvider) SimilaritySearch(ctx context.Context, content string, limit int) (*SearchResult, error)

SimilaritySearch 根據內容相似性搜索

func (*PostgreSQLProvider) Store

func (p *PostgreSQLProvider) Store(ctx context.Context, item *KnowledgeItem) error

Store 儲存知識項目

type Provider

type Provider interface {
	// Store 儲存知識項目
	Store(ctx context.Context, item *KnowledgeItem) error

	// Retrieve 根據 ID 檢索知識項目
	Retrieve(ctx context.Context, id string) (*KnowledgeItem, error)

	// Search 根據查詢條件搜索知識項目
	Search(ctx context.Context, query *SearchQuery) (*SearchResult, error)

	// SimilaritySearch 根據內容相似性搜索
	SimilaritySearch(ctx context.Context, content string, limit int) (*SearchResult, error)

	// Delete 刪除知識項目
	Delete(ctx context.Context, id string) error

	// Close 關閉提供者連接
	Close() error
}

Provider 定義知識庫提供者接口

type ProviderFactory

type ProviderFactory struct {
	// contains filtered or unexported fields
}

ProviderFactory 知識庫提供者工廠

func NewProviderFactory

func NewProviderFactory(logger *zap.Logger) *ProviderFactory

NewProviderFactory 創建新的提供者工廠

func (*ProviderFactory) CreateDefaultConfig

func (f *ProviderFactory) CreateDefaultConfig() *Config

CreateDefaultConfig 創建默認配置

func (*ProviderFactory) CreatePostgreSQLConfig

func (f *ProviderFactory) CreatePostgreSQLConfig(host string, port int, database, username, password string) *Config

CreatePostgreSQLConfig 創建 PostgreSQL 配置

func (*ProviderFactory) CreateProvider

func (f *ProviderFactory) CreateProvider(config *Config) (Provider, error)

CreateProvider 根據配置創建知識庫提供者

func (*ProviderFactory) ValidateConfig

func (f *ProviderFactory) ValidateConfig(config *Config) error

ValidateConfig 驗證配置

type ProviderType

type ProviderType string

ProviderType 知識庫提供者類型

const (
	ProviderTypeMemory     ProviderType = "memory"
	ProviderTypePostgreSQL ProviderType = "postgresql"
)

type SearchQuery

type SearchQuery struct {
	Query     string            `json:"query"`
	Category  string            `json:"category,omitempty"`
	Tags      []string          `json:"tags,omitempty"`
	Filters   map[string]string `json:"filters,omitempty"`
	SortBy    string            `json:"sort_by,omitempty"`
	SortOrder string            `json:"sort_order,omitempty"`
	Limit     int               `json:"limit,omitempty"`
	Offset    int               `json:"offset,omitempty"`
}

SearchQuery 表示搜索查詢

type SearchResult

type SearchResult struct {
	Items      []*KnowledgeItem `json:"items"`
	Total      int64            `json:"total"`
	Page       int              `json:"page"`
	PageSize   int              `json:"page_size"`
	HasMore    bool             `json:"has_more"`
	Query      string           `json:"query"`
	SearchTime time.Duration    `json:"search_time"`
}

SearchResult 表示搜索結果

type SeverityLevel

type SeverityLevel string

SeverityLevel 嚴重程度

const (
	SeverityLow      SeverityLevel = "low"
	SeverityMedium   SeverityLevel = "medium"
	SeverityHigh     SeverityLevel = "high"
	SeverityCritical SeverityLevel = "critical"
)

type SimilarityConfig

type SimilarityConfig struct {
	Algorithm  string  `yaml:"algorithm" json:"algorithm"` // cosine, jaccard, levenshtein
	Threshold  float64 `yaml:"threshold" json:"threshold"` // 相似度閾值
	MaxResults int     `yaml:"max_results" json:"max_results"`
}

SimilarityConfig 相似性配置

type SimilarityScore

type SimilarityScore struct {
	Item  *KnowledgeItem `json:"item"`
	Score float64        `json:"score"`
}

SimilarityScore 表示相似度評分結果

type StatusType

type StatusType string

StatusType 狀態類型

const (
	StatusDraft     StatusType = "draft"
	StatusReview    StatusType = "review"
	StatusPublished StatusType = "published"
	StatusArchived  StatusType = "archived"
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL