feat: 预设提示词的对话调用
This commit is contained in:
@@ -44,5 +44,27 @@ func (c *Client) Chat(ctx context.Context, messages []llms.MessageContent) (stri
|
||||
}
|
||||
log.Printf("[INFO] Chat completed successfully, choice length: %d", len(resp.Choices[0].Content))
|
||||
|
||||
return resp.Choices[0].Content, nil
|
||||
}
|
||||
|
||||
// Client包含系统提示词的调用
|
||||
func (c *Client) ChatWithSystemPrompt(ctx context.Context, systemPrompt string, messages []llms.MessageContent) (string, error) {
|
||||
// 构造系统提示词消息
|
||||
systemMessage := llms.TextParts(llms.ChatMessageTypeSystem, systemPrompt)
|
||||
|
||||
// 将系统提示词插入到消息列表头部
|
||||
allMessages := append([]llms.MessageContent{systemMessage}, messages...)
|
||||
|
||||
resp, err := c.llm.GenerateContent(ctx, allMessages)
|
||||
if err != nil {
|
||||
log.Printf("[ERROR] GenerateContent with system prompt failed: %v", err)
|
||||
return "", fmt.Errorf("generate content error: %w", err)
|
||||
}
|
||||
if resp == nil || len(resp.Choices) == 0 {
|
||||
log.Printf("[WARN] Response with system prompt is empty or has no choices")
|
||||
return "", fmt.Errorf("no content choices returned")
|
||||
}
|
||||
log.Printf("[INFO] Chat with system prompt completed successfully, choice length: %d", len(resp.Choices[0].Content))
|
||||
|
||||
return resp.Choices[0].Content, nil
|
||||
}
|
||||
@@ -91,4 +91,60 @@ func TestClient_Chat(t *testing.T) {
|
||||
}
|
||||
|
||||
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")
|
||||
}
|
||||
Reference in New Issue
Block a user