95 lines
2.3 KiB
Go
95 lines
2.3 KiB
Go
package utils
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/go-resty/resty/v2"
|
|
)
|
|
|
|
type AiReqeust struct{}
|
|
|
|
type DeepseekResponse struct {
|
|
ID string `json:"id"`
|
|
Object string `json:"object"`
|
|
Created int64 `json:"created"`
|
|
Model string `json:"model"`
|
|
Choices []struct {
|
|
Index int `json:"index"`
|
|
Message struct {
|
|
Role string `json:"role"`
|
|
Content string `json:"content"`
|
|
} `json:"message"`
|
|
Logprobs interface{} `json:"logprobs"` // 可能是null或复杂结构
|
|
FinishReason string `json:"finish_reason"`
|
|
} `json:"choices"`
|
|
Usage struct {
|
|
PromptTokens int `json:"prompt_tokens"`
|
|
CompletionTokens int `json:"completion_tokens"`
|
|
TotalTokens int `json:"total_tokens"`
|
|
PromptTokensDetails struct {
|
|
CachedTokens int `json:"cached_tokens"`
|
|
} `json:"prompt_tokens_details"`
|
|
PromptCacheHitTokens int `json:"prompt_cache_hit_tokens"`
|
|
PromptCacheMissTokens int `json:"prompt_cache_miss_tokens"`
|
|
} `json:"usage"`
|
|
SystemFingerprint string `json:"system_fingerprint"`
|
|
}
|
|
|
|
func (*AiReqeust) Deepseek(text string) string {
|
|
// 定义结构体
|
|
type Message struct {
|
|
Role string `json:"role"`
|
|
Content string `json:"content"`
|
|
}
|
|
|
|
type ChatRequest struct {
|
|
Model string `json:"model"`
|
|
Messages []Message `json:"messages"`
|
|
}
|
|
// 创建 resty 客户端
|
|
client := resty.New()
|
|
|
|
// 目标URL
|
|
url := "https://api.deepseek.com/v1/chat/completions"
|
|
|
|
request := ChatRequest{
|
|
Model: "deepseek-chat",
|
|
Messages: []Message{
|
|
{
|
|
Role: "user",
|
|
Content: text,
|
|
},
|
|
},
|
|
}
|
|
|
|
// 发送 POST 请求
|
|
resp, err := client.R().
|
|
SetHeader("Content-Type", "application/json"). // 必填头
|
|
SetHeader("Authorization", "Bearer sk-9ca769cb45c249559276b979a2e1a2cd"). // 认证头
|
|
SetBody(request). // 设置JSON体
|
|
Post(url)
|
|
|
|
if err != nil {
|
|
fmt.Println("请求失败:", err)
|
|
return ""
|
|
}
|
|
|
|
// 解析响应
|
|
var response DeepseekResponse
|
|
if err := json.Unmarshal(resp.Body(), &response); err != nil {
|
|
fmt.Println("解析失败:", err)
|
|
return ""
|
|
}
|
|
|
|
// 提取关键信息
|
|
if len(response.Choices) > 0 {
|
|
firstChoice := response.Choices[0]
|
|
// fmt.Printf("\nAI回复 (%s):\n%s\n",
|
|
// firstChoice.Message.Role,
|
|
// firstChoice.Message.Content)
|
|
return firstChoice.Message.Content
|
|
}
|
|
return ""
|
|
}
|