OpenAI ChatGPT (GPT-3.5) API 错误:“StatusCode:429,ReasonPhrase:‘请求过多’”

问题描述 投票:0回答:1

我正在使用 .net core Web api 将请求传递给 OpenAI API。我收到以下错误作为响应。我的 OpenAI 账户有余额。

我写的代码和响应如下:

public async Task<string> SendPromptAndGetResponse()
    {
        const string requestUri = "https://api.openai.com/v1/chat/completions";
        var requestBody = new
        {
            model = "gpt-3.5-turbo",
            messages = "How are you?",
            temperature = 0,
            max_tokens = 100
        };

        _httpClient.DefaultRequestHeaders.Authorization =
            new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", ApiKey);

        var response = await _httpClient.PostAsync(
            requestUri,
            new StringContent(JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json"));

        response.EnsureSuccessStatusCode();

        var responseBody = JsonConvert.DeserializeObject<ResponseBody>(await response.Content.ReadAsStringAsync());
        return responseBody.Choices[0].Message.Content.Trim();
    }

输出:

StatusCode: 429, ReasonPhrase: 'Too Many Requests'
.net openai-api core chatgpt-api
1个回答
1
投票

问题

您没有正确设置

messages
参数。
role
参数的
content
messages
属性是必需的。

错误:

messages = "How are you?",

请参阅官方 OpenAI 文档


解决方案

正确:

messages = new[] {
  new { role = "system", content =  "You are a helpful assistant." },
  new { role = "user", content =  "Hello!" },
},

工作示例

此外,这篇博客文章可能会对您有所帮助。

免责声明:以下代码和屏幕截图的所有功劳均归博客作者Ricardo Mauro

第1步:安装Standard.AI.OpenAI C#库

dotnet add Standard.AI.OpenAI

第2步:创建OpenAI帐户

第3步:创建OpenAIProxy类

using Standard.AI.OpenAI.Models.Services.Foundations.ChatCompletions;

namespace ConsoleAppOpenAI;

public interface IOpenAIProxy
{
  Task<ChatCompletionMessage[]> SendChatMessage(string message);
}

第4步:创建实现类OpenAIProxy.cs

using Standard.AI.OpenAI.Clients.OpenAIs;
using Standard.AI.OpenAI.Models.Configurations;
using Standard.AI.OpenAI.Models.Services.Foundations.ChatCompletions;

namespace ConsoleAppOpenAI;

public class OpenAIProxy : IOpenAIProxy
{
  readonly OpenAIClient openAIClient;

    //all messages in the conversation
  readonly List<ChatCompletionMessage> _messages;

  public OpenAIProxy(string apiKey, string organizationId)
  {
    //initialize the configuration with api key and sub
    var openAIConfigurations = new OpenAIConfigurations
    {
      ApiKey = apiKey,
      OrganizationId = organizationId
    };

    openAIClient = new OpenAIClient(openAIConfigurations);

    _messages = new();
  }

  void StackMessages(params ChatCompletionMessage[] message)
  {
    _messages.AddRange(message);
  }

  static ChatCompletionMessage[] ToCompletionMessage(
    ChatCompletionChoice[] choices)
    => choices.Select(x => x.Message).ToArray();

  //Public method to Send messages to OpenAI
  public Task<ChatCompletionMessage[]> SendChatMessage(string message)
  {
    var chatMsg = new ChatCompletionMessage() 
    { 
      Content = message, 
      Role = "user" 
    };
    return SendChatMessage(chatMsg);
  }
    
  //Where business happens
  async Task<ChatCompletionMessage[]> SendChatMessage(
    ChatCompletionMessage message)
  {
    //we should send all the messages
    //so we can give Open AI context of conversation
    StackMessages(message);

    var chatCompletion = new ChatCompletion
    {
      Request = new ChatCompletionRequest
      {
        Model = "gpt-3.5-turbo",
        Messages = _messages.ToArray(),
        Temperature = 0.2,
        MaxTokens = 800
      }
    };

    var result = await openAIClient
      .ChatCompletions
      .SendChatCompletionAsync(chatCompletion);

    var choices = result.Response.Choices;

    var messages = ToCompletionMessage(choices);

    //stack the response as well - everything is context to Open AI
    StackMessages(messages);

    return messages;
  }
}

第 5 步:设置 API 密钥

IOpenAIProxy chatOpenAI = new OpenAIProxy(
    apiKey: "YOUR-API-KEY",
    organizationId: "YOUR-ORGANIZATION-ID");

第 6 步:在我们的应用程序中使用 Chat GPT 模型

var msg = Console.ReadLine();

do
{
  var results = await chatOpenAI.SendChatMessage(msg);

  foreach (var item in results)
  {
    Console.WriteLine($"{item.Role}: {item.Content}");
  }
  
  Console.WriteLine("Next Prompt:");
  msg = Console.ReadLine();
  
} while (msg != "bye");

截图:

© www.soinside.com 2019 - 2024. All rights reserved.