From cc5de770819ee33e92076bca5a65532755c3feca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AC=E6=98=8E?= <83812544+Ed1s0nZ@users.noreply.github.com> Date: Tue, 25 Feb 2025 14:19:02 +0800 Subject: [PATCH] Create deepseek.go --- AIAPIS/deepseek.go | 115 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 AIAPIS/deepseek.go diff --git a/AIAPIS/deepseek.go b/AIAPIS/deepseek.go new file mode 100644 index 0000000..dca0590 --- /dev/null +++ b/AIAPIS/deepseek.go @@ -0,0 +1,115 @@ +package aiapis + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "time" +) + +const ( + apiURLDeepSeek = "https://api.deepseek.com/v1/chat/completions" // 根据实际 API 地址修改 + apiTimeout = 30 * time.Second +) + +type ChatCompletionRequestDeepSeek struct { + Model string `json:"model"` + Messages []MessageDeepSeek `json:"messages"` + Temperature float64 `json:"temperature,omitempty"` + MaxTokens int `json:"max_tokens,omitempty"` +} + +type MessageDeepSeek struct { + Role string `json:"role"` + Content string `json:"content"` +} + +type ChatCompletionResponseDeepSeek struct { + ID string `json:"id"` + Choices []ChoiceDeepSeek `json:"choices"` + Error struct { + Message string `json:"message"` + } `json:"error"` +} + +type ChoiceDeepSeek struct { + Message MessageDeepSeek `json:"message"` + FinishReason string `json:"finish_reason"` +} + +// CreateChatCompletion 发送请求到 DeepSeek API +func CreateChatCompletion(request ChatCompletionRequestDeepSeek) (*ChatCompletionResponseDeepSeek, error) { + client := &http.Client{Timeout: apiTimeout} + + requestBody, err := json.Marshal(request) + if err != nil { + return nil, fmt.Errorf("marshal request failed: %v", err) + } + + req, err := http.NewRequest("POST", apiURLDeepSeek, bytes.NewBuffer(requestBody)) + if err != nil { + return nil, fmt.Errorf("create request failed: %v", err) + } + + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", "Bearer "+apiKeyDeepSeek) + + resp, err := client.Do(req) + if err != nil { + return nil, fmt.Errorf("API request failed: %v", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + body, _ := io.ReadAll(resp.Body) + return nil, fmt.Errorf("API returned status %d: %s", resp.StatusCode, body) + } + + var response ChatCompletionResponseDeepSeek + if err := json.NewDecoder(resp.Body).Decode(&response); err != nil { + return nil, fmt.Errorf("decode response failed: %v", err) + } + + if response.Error.Message != "" { + return nil, fmt.Errorf("API error: %s", response.Error.Message) + } + + return &response, nil +} + +func DeepSeek(respA, respB string) (string, error) { + // 示例请求 + request := ChatCompletionRequestDeepSeek{ + Model: "deepseek-chat", // 根据实际模型名称修改 + Messages: []MessageDeepSeek{ + { + Role: "system", + Content: prompt, + }, + { + Role: "user", + Content: "A:" + respA + "B:" + respB, + }, + }, + Temperature: 0.7, + MaxTokens: 500, + } + + response, err := CreateChatCompletion(request) + if err != nil { + fmt.Printf("Error: %v\n", err) + return "", err + } + + if len(response.Choices) > 0 { + // fmt.Println("Response:") + // fmt.Println(response.Choices[0].Message.Content) + return response.Choices[0].Message.Content, nil + } else { + fmt.Println("No response received") + return "", errors.New("no response received") + } +}