MENU

使用Go语言调用OpenAI进行聊天

March 22, 2023 • GoLang

要使用Go语言调用OpenAI(例如GPT-3)进行聊天,您需要遵循以下步骤:

1安装一个HTTP客户端库,例如net/http(Go标准库中的库)或第三方库(例如github.com/go-resty/resty)。这将帮助您与OpenAI API进行通信。

2获取API密钥:要调用OpenAI的API,您需要获得API密钥。通常,您可以在OpenAI网站上注册并创建一个API密钥。

3编写一个函数,使用HTTP客户端库向OpenAI API发起请求。确保使用API密钥进行身份验证。

以下是一个使用Go标准库net/http和encoding/json的示例:

package main

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

const openAIURL = "https://api.openai.com/v1/engines/davinci-codex/completions"

type Prompt struct {
    Prompt string `json:"prompt"`
    MaxTokens int `json:"max_tokens"`
}

func chatWithOpenAI(apiKey, prompt string) (string, error) {
    client := &http.Client{}

    // 创建请求体
    requestBody := Prompt{
        Prompt:    prompt,
        MaxTokens: 50,
    }

    jsonBody, err := json.Marshal(requestBody)
    if err != nil {
        return "", err
    }

    // 创建请求
    req, err := http.NewRequest("POST", openAIURL, bytes.NewBuffer(jsonBody))
    if err != nil {
        return "", err
    }

    // 设置头信息
    req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", apiKey))
    req.Header.Set("Content-Type", "application/json")

    // 发送请求
    resp, err := client.Do(req)
    if err != nil {
        return "", err
    }
    defer resp.Body.Close()

    // 读取响应
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return "", err
    }

    var result map[string]interface{}
    err = json.Unmarshal(body, &result)
    if err != nil {
        return "", err
    }

    choices := result["choices"].([]interface{})
    text := choices[0].(map[string]interface{})["text"].(string)

    return text, nil
}

func main() {
    apiKey := "your_api_key_here"
    prompt := "What is the capital of France?"

    response, err := chatWithOpenAI(apiKey, prompt)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    fmt.Println("Response:", response)
}

请注意,您需要用您的API密钥替换your_api_key_here。

这个示例程序将创建一个与OpenAI API的HTTP POST请求,并将结果解析为JSON格式。请根据实际情况对示例代码进行修改。注意,由于API限制,GPT-3可能不会一直生成完美的回答。

Archives QR Code
QR Code for this page
Tipping QR Code