ChatGptUtil.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package util
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "errors"
  6. "io/ioutil"
  7. "log"
  8. "net/http"
  9. "net/url"
  10. )
  11. type Message struct {
  12. Role string `json:"role"`
  13. Content string `json:"content"`
  14. }
  15. type RequestBody struct {
  16. Model string `json:"model"`
  17. Messages []Message `json:"messages"`
  18. }
  19. const ChatGptUrl = "https://api.openai.com/v1/chat/completions"
  20. const ApiKey = "sk-proj-gmxWE5taNAc3blthTDOrT3BlbkFJa2ZkQJAoqdjNSRihG4ZY"
  21. func SendOpenAIRequest(Query string) (string, error) {
  22. requestBody := RequestBody{
  23. Model: "gpt-4o-mini",
  24. Messages: []Message{
  25. {
  26. Role: "system",
  27. Content: "下面单词来自方舟ARk,将他们翻译成中文。提问格式为:'item,item2,item3'。要求返回格式为:'物品1,物品2,物品3'",
  28. },
  29. {
  30. Role: "user",
  31. Content: Query,
  32. },
  33. },
  34. }
  35. body, err := json.Marshal(requestBody)
  36. if err != nil {
  37. log.Fatalf("封发请求正文失败: %v", err)
  38. return "", err
  39. }
  40. req, err := http.NewRequest("POST", ChatGptUrl, bytes.NewBuffer(body))
  41. if err != nil {
  42. log.Fatalf("创建请求失败: %v", err)
  43. return "", err
  44. }
  45. req.Header.Set("Content-Type", "application/json")
  46. req.Header.Set("Authorization", "Bearer "+ApiKey)
  47. // Set up proxy
  48. proxy, err := url.Parse(ProxyHost)
  49. if err != nil {
  50. log.Fatalf("Failed to parse proxy URL: %v", err)
  51. return "", err
  52. }
  53. transport := &http.Transport{
  54. Proxy: http.ProxyURL(proxy),
  55. }
  56. client := &http.Client{Transport: transport}
  57. resp, err := client.Do(req)
  58. if err != nil {
  59. log.Fatalf("发送请求失败: %v", err)
  60. return "", err
  61. }
  62. defer resp.Body.Close()
  63. responseBody, err := ioutil.ReadAll(resp.Body)
  64. if err != nil {
  65. log.Fatalf("读取响应正文失败: %v", err)
  66. return "", err
  67. }
  68. if resp.StatusCode != http.StatusOK {
  69. return "", errors.New("web status error")
  70. } else {
  71. return string(responseBody), nil
  72. }
  73. }