package openai import ( "errors" ) const ( maxTokens = 2000 temperature = 0.7 ) type Messages struct { Role string `json:"role"` Content string `json:"content"` } // ChatGPTResponseBody 请求体 type ChatGPTResponseBody struct { ID string `json:"id"` Object string `json:"object"` Created int `json:"created"` Model string `json:"model"` Choices []ChatGPTChoiceItem `json:"choices"` Usage map[string]interface{} `json:"usage"` } type ChatGPTChoiceItem struct { Message Messages `json:"message"` Index int `json:"index"` FinishReason string `json:"finish_reason"` } // ChatGPTRequestBody 响应体 type ChatGPTRequestBody struct { Model string `json:"model"` Messages []Messages `json:"messages"` MaxTokens int `json:"max_tokens"` Temperature float32 `json:"temperature"` TopP int `json:"top_p"` FrequencyPenalty int `json:"frequency_penalty"` PresencePenalty int `json:"presence_penalty"` Stream bool `json:"stream" default:"false"` } func (gpt *ChatGPT) Completions(msg []Messages) (resp Messages, err error) { requestBody := ChatGPTRequestBody{ Model: gpt.ApiModel, Messages: msg, MaxTokens: maxTokens, Temperature: temperature, TopP: 1, FrequencyPenalty: 0, PresencePenalty: 0, } gptResponseBody := &ChatGPTResponseBody{} url := gpt.FullUrl("chat/completions") //fmt.Println(url) if url == "" { return resp, errors.New("无法获取openai请求地址") } err = gpt.sendRequestWithBodyType(url, "POST", jsonBody, requestBody, gptResponseBody) if err == nil && len(gptResponseBody.Choices) > 0 { resp = gptResponseBody.Choices[0].Message } else { resp = Messages{} err = errors.New("openai 请求失败") } return resp, err }