package kb_test import ( "context" "os" "strings" "testing" "time" "chat-agent-system/internal/config" "chat-agent-system/internal/kb" ) func TestKB_RealIntegration(t *testing.T) { if testing.Short() { t.Skip("skipping KB real integration in short mode") } if os.Getenv("RUN_KB_INTEGRATION") != "1" { t.Skip("set RUN_KB_INTEGRATION=1 to run KB real integration") } cfg, err := config.Load("") if err != nil { t.Fatalf("failed to load config: %v", err) } // 强制使用本机开发环境共享知识库容器端口 if cfg.KbDbPort == 0 { cfg.KbDbPort = 5432 } client := kb.NewClient(cfg) defer client.Close() ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) defer cancel() // 1. 验证多领域资产规模统计 t.Run("Stats", func(t *testing.T) { stats, err := client.Stats(ctx) if err != nil { t.Fatalf("client.Stats failed: %v", err) } regStats, ok := stats[kb.DomainRegulatory] if !ok { t.Fatalf("expected regulatory domain in stats") } if regStats.DocumentCount != 2907 { t.Errorf("expected 2907 documents, got %d", regStats.DocumentCount) } if regStats.ChunkCount < 312900 { t.Errorf("expected >= 312900 chunks, got %d", regStats.ChunkCount) } t.Logf("Stats verified: %d docs, %d chunks", regStats.DocumentCount, regStats.ChunkCount) }) // 2. 验证关键法规标准精确与模糊检索 (GB 9706.1 医用电气设备安全通用要求) t.Run("Search_GB9706", func(t *testing.T) { hits, err := client.Search(ctx, "GB 9706.1 医用电气设备 基本安全", kb.SearchOptions{ Limit: 3, CandidateLimit: 10, }) if err != nil { t.Fatalf("client.Search failed: %v", err) } if len(hits) == 0 { t.Fatalf("expected hits for GB 9706.1, got 0") } found := false for _, h := range hits { t.Logf("Hit: [%s] %s (Cite: %s, Score: %f)", h.DocCode, h.Title, h.CiteKey, h.Score) if strings.Contains(h.DocCode, "9706") || strings.Contains(h.Title, "9706") || strings.Contains(h.Title, "电气安全") { found = true } } if !found { t.Errorf("expected at least one hit containing '9706' or '电气安全'") } }) // 3. 验证引用规范精准定位 (LookupCite) t.Run("LookupCite", func(t *testing.T) { line, ok := client.LookupCite(ctx, "GB 9706.1-2020 §8.4") if !ok { t.Fatalf("LookupCite failed to find GB 9706.1-2020 §8.4") } t.Logf("LookupCite result: %s", line) if !strings.Contains(line, "9706.1") { t.Errorf("expected line to contain 9706.1, got: %s", line) } }) }