feat: 新增Client简单对话调用

This commit is contained in:
hhs
2026-04-19 15:58:41 +08:00
parent 004a5d685a
commit d7ac8889c0
2 changed files with 76 additions and 0 deletions
+19
View File
@@ -1,8 +1,10 @@
package llm
import (
"context"
"fmt"
"knowledge-graph-backend/internal/config"
"log"
"github.com/tmc/langchaingo/llms"
"github.com/tmc/langchaingo/llms/openai"
@@ -26,4 +28,21 @@ func NewClient(cfg config.LLMConfig) (*Client, error) {
}
return &Client{config: cfg, llm: model}, nil
}
// Client简单对话调用
func (c *Client) Chat(ctx context.Context, messages []llms.MessageContent) (string, error) {
resp, err := c.llm.GenerateContent(ctx, messages)
if err != nil {
log.Printf("[ERROR] GenerateContent failed: %v", err)
return "", fmt.Errorf("generate content error: %w", err)
}
if resp == nil || len(resp.Choices) == 0 {
log.Printf("[WARN] Response is empty or has no choices")
return "", fmt.Errorf("no content choices returned")
}
log.Printf("[INFO] Chat completed successfully, choice length: %d", len(resp.Choices[0].Content))
return resp.Choices[0].Content, nil
}
+57
View File
@@ -1,9 +1,12 @@
package llm
import (
"context"
"knowledge-graph-backend/internal/config"
"log"
"testing"
"github.com/tmc/langchaingo/llms"
)
func TestNewClient(t *testing.T) {
@@ -34,4 +37,58 @@ func TestNewClient(t *testing.T) {
}
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")
}