使用Golang调用OpenAI GPT的方法与技巧

使用Golang调用OpenAI GPT的方法与技巧 大家好,

我想在我的网站中集成OpenAI GPT-3 API。 请问如何使用Golang来实现,请帮帮我。

1 回复

更多关于使用Golang调用OpenAI GPT的方法与技巧的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang中调用OpenAI GPT-3 API,可以使用官方提供的Go SDK或直接通过HTTP请求实现。以下是两种方法的示例:

方法一:使用官方Go SDK

首先安装OpenAI Go包:

go get github.com/sashabaranov/go-openai

示例代码:

package main

import (
    "context"
    "fmt"
    "log"
    "github.com/sashabaranov/go-openai"
)

func main() {
    client := openai.NewClient("your-api-key-here")
    
    resp, err := client.CreateChatCompletion(
        context.Background(),
        openai.ChatCompletionRequest{
            Model: openai.GPT3Dot5Turbo,
            Messages: []openai.ChatCompletionMessage{
                {
                    Role:    openai.ChatMessageRoleUser,
                    Content: "Hello, GPT!",
                },
            },
        },
    )

    if err != nil {
        log.Fatalf("ChatCompletion error: %v", err)
    }

    fmt.Println(resp.Choices[0].Message.Content)
}

方法二:直接使用HTTP请求

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "net/http"
    "log"
)

type GPTRequest struct {
    Model    string    `json:"model"`
    Messages []Message `json:"messages"`
}

type Message struct {
    Role    string `json:"role"`
    Content string `json:"content"`
}

type GPTResponse struct {
    Choices []struct {
        Message struct {
            Content string `json:"content"`
        } `json:"message"`
    } `json:"choices"`
}

func main() {
    apiKey := "your-api-key-here"
    url := "https://api.openai.com/v1/chat/completions"

    requestBody := GPTRequest{
        Model: "gpt-3.5-turbo",
        Messages: []Message{
            {
                Role:    "user",
                Content: "Hello, GPT!",
            },
        },
    }

    jsonData, err := json.Marshal(requestBody)
    if err != nil {
        log.Fatal(err)
    }

    req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
    if err != nil {
        log.Fatal(err)
    }

    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Authorization", "Bearer "+apiKey)

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }

    var gptResp GPTResponse
    err = json.Unmarshal(body, &gptResp)
    if err != nil {
        log.Fatal(err)
    }

    if len(gptResp.Choices) > 0 {
        fmt.Println(gptResp.Choices[0].Message.Content)
    }
}

关键技巧

  1. 环境变量管理
import "os"

apiKey := os.Getenv("OPENAI_API_KEY")
  1. 错误处理增强
resp, err := client.CreateChatCompletion(ctx, req)
if err != nil {
    var openAIErr *openai.APIError
    if errors.As(err, &openAIErr) {
        log.Printf("OpenAI API error: %v", openAIErr)
    }
    return err
}
  1. 流式响应处理
stream, err := client.CreateChatCompletionStream(ctx, req)
if err != nil {
    return err
}
defer stream.Close()

for {
    response, err := stream.Recv()
    if errors.Is(err, io.EOF) {
        break
    }
    if err != nil {
        return err
    }
    fmt.Print(response.Choices[0].Delta.Content)
}
  1. 请求超时设置
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()

resp, err := client.CreateChatCompletion(ctx, req)

这些示例展示了在Golang中调用OpenAI GPT-3 API的基本实现。根据实际需求调整模型参数、消息结构和错误处理逻辑。

回到顶部