package llm import ( "context" "knowledge-graph-backend/internal/config" "log" "testing" "github.com/tmc/langchaingo/llms" ) func TestNewClient(t *testing.T) { cfg, err := config.Load() if err != nil { log.Printf("[WARN] config.Load() returned error: %v, using default config", err) } else { log.Printf("[INFO] config loaded successfully, LLM config: %+v", cfg.LLM) } client, err := NewClient(cfg.LLM) if err != nil { t.Fatalf("NewClient() returned unexpected error: %v", err) } log.Printf("[INFO] NewClient() succeeded, client created") // 验证返回的 Client 实例不为 nil if client == nil { t.Fatal("NewClient() returned nil client") } log.Printf("[INFO] client instance is non-nil, validation passed") // 验证 llm 实例被成功创建(不调用,只检查非 nil) if client.llm == nil { t.Error("client.llm is nil, expected a non-nil llms.Model") } else { log.Printf("[INFO] client.llm is non-nil, llms.Model created successfully") } log.Printf("[INFO] TestNewClient completed successfully") } func TestClient_Chat(t *testing.T) { // 1. 加载配置 cfg, err := config.Load() if err != nil { log.Printf("[WARN] config.Load() returned error: %v, using default config", err) } else { log.Printf("[INFO] config loaded successfully, LLM config: %+v", cfg.LLM) } // 2. 创建客户端 client, err := NewClient(cfg.LLM) if err != nil { log.Printf("[ERROR] NewClient() returned unexpected error: %v", err) t.Fatalf("NewClient() returned unexpected error: %v", err) } log.Printf("[INFO] NewClient() succeeded, client created") messages := []llms.MessageContent{ { Role: "human", Parts: []llms.ContentPart{ llms.TextContent{Text: "你好,请介绍一下你自己"}, }, }, } log.Printf("[INFO] preparing chat request, messages count: %d, content: %q", len(messages), messages[0].Parts[0].(llms.TextContent).Text) // 3. 调用被测方法 log.Printf("[INFO] calling client.Chat()...") got, err := client.Chat(context.Background(), messages) // 4. 校验结果 if err != nil { log.Printf("[ERROR] Chat() returned error: %v", err) t.Errorf("Chat() error = %v, want nil", err) return } log.Printf("[INFO] client.Chat() call completed without error") if len(got) == 0 { log.Printf("[ERROR] Chat() returned empty response, got: %v", got) t.Errorf("Chat() returned empty response, want non-empty") } else { // 截取前100个字符打印,防止LLM返回内容过长刷屏,同时方便调试确认内容 preview := got if len(preview) > 100 { preview = preview[:100] + "..." } log.Printf("[INFO] Chat() response validation passed, response preview: %q", preview) } log.Printf("[INFO] TestClient_Chat completed successfully") } func TestClient_ChatWithSystemPrompt(t *testing.T) { // 1. 加载配置 cfg, err := config.Load() if err != nil { log.Printf("[WARN] config.Load() returned error: %v, using default config", err) } else { log.Printf("[INFO] config loaded successfully, LLM config: %+v", cfg.LLM) } // 2. 创建客户端 client, err := NewClient(cfg.LLM) if err != nil { log.Printf("[ERROR] NewClient() returned unexpected error: %v", err) t.Fatalf("NewClient() returned unexpected error: %v", err) } log.Printf("[INFO] NewClient() succeeded, client created") // 3. 构造系统提示词与消息列表 systemPrompt := "你是一个专业的知识图谱助手,请用简洁的中文回答问题。" messages := []llms.MessageContent{ { Role: "human", Parts: []llms.ContentPart{ llms.TextContent{Text: "请简要介绍一下知识图谱的概念"}, }, }, } log.Printf("[INFO] preparing chat with system prompt request, system prompt: %q, messages count: %d, content: %q", systemPrompt, len(messages), messages[0].Parts[0].(llms.TextContent).Text) // 4. 调用被测方法 log.Printf("[INFO] calling client.ChatWithSystemPrompt()...") got, err := client.ChatWithSystemPrompt(context.Background(), systemPrompt, messages) // 5. 校验结果 if err != nil { log.Printf("[ERROR] ChatWithSystemPrompt() returned error: %v", err) t.Errorf("ChatWithSystemPrompt() error = %v, want nil", err) return } log.Printf("[INFO] client.ChatWithSystemPrompt() call completed without error") if len(got) == 0 { log.Printf("[ERROR] ChatWithSystemPrompt() returned empty response, got: %v", got) t.Errorf("ChatWithSystemPrompt() returned empty response, want non-empty") } else { // 截取前100个字符打印,防止LLM返回内容过长刷屏,同时方便调试确认内容 preview := got if len(preview) > 100 { preview = preview[:100] + "..." } log.Printf("[INFO] ChatWithSystemPrompt() response validation passed, response preview: %q", preview) } log.Printf("[INFO] TestClient_ChatWithSystemPrompt completed successfully") }