В мире развивающегося искусственного интеллекта доступ к таким технологиям, как ChatGPT от OpenAI, становится все более востребованным. Для облегчения процесса взаимодействия с этим инструментом я запилил класс AmChat, который предоставляет простой и удобный способ отправки запросов к API ChatGPT и получения ответов. В этой статье мы рассмотрим особенности класса AmChat и его использование для быстрого и эффективного получения ответов от ChatGPT в вашем коде на C#.

Класс AmChat имеет только один публичный метод – GetAnswer, который является статическим и асинхронным. Этот метод принимает вопрос в качестве параметра и возвращает ответ от ChatGPT.

Благодаря тому, что метод GetAnswer является статическим и асинхронным, его использование становится очень простым и удобным. Программист может вызвать этот метод и дождаться ответа с помощью ключевого слова await, что значительно упрощает код и делает его более читаемым.

AmChat обеспечивает надежную обработку возможных ошибок, которые могут возникнуть при взаимодействии с API ChatGPT. Это позволяет повысить стабильность и надежность приложений, использующих этот класс.

Рассмотрим пример использования класса AmChat:

if(txt == null) return;
string ansver = await AmChat.GetAnswer(txt);
await SendMessageToOne(chatId, ansver);

так, например, можно послать ответ нейросети в чат телеграмма. Да, вопрос можно получить в телеге, через бота и выдать ответ человеку в его чат.

Ниже полный код класса AmChat:

using CaSecrets;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;

namespace ChatGPT1;

public class AmChat
{
    static string questionTemplate = @"{
        ""model"": ""gpt-3.5-turbo"",
        ""messages"": [
            {
                ""role"": ""system"",
                ""content"": ""You are a helpful assistant.""
            },
            {
                ""role"": ""user"",
                ""content"": ""{0}""
            }
        ]
    }";

    public static async Task<string> GetAnswer(string question)
    {
        //question = CleanseString(question);
        string jsonContent = questionTemplate.Replace("{0}", question);

        var httpClient = new HttpClient();
        var request = new HttpRequestMessage
        {
            Method = HttpMethod.Post,
            RequestUri = new Uri("https://api.openai.com/v1/chat/completions"),
            Headers =
            {
                { HttpRequestHeader.ContentType.ToString(), "application/json" },
                { HttpRequestHeader.Authorization.ToString(), "Bearer " + Secrets.OPENAI_API_KEY},
            },
            Content = new StringContent(jsonContent, Encoding.UTF8, "application/json")
        };

        var response = await httpClient.SendAsync(request);
        string answer = await GetClearAnswerFromResponse(response);

        Db.SaveQA(question, answer);
        return answer;
    }

    static async Task<string> GetClearAnswerFromResponse(HttpResponseMessage response)
    {
        if (response.IsSuccessStatusCode)
        {
            var responseContent = await response.Content.ReadAsStringAsync();
            var parsedResponse = JObject.Parse(responseContent);

            var choices = parsedResponse["choices"];
            if (choices == null) return "*** 1";
            if (choices.Count() == 0) return "*** 2";
            if (choices[0] == null) return "*** 3";
            var message = choices![0]!["message"];
            if (message == null) return "*** 4";
            if (message["content"] == null) return "*** 5";
            var answer = message["content"]!.ToString();

            return answer;
        }

        var errorContent = await response.Content.ReadAsStringAsync();
        return $"Error: {response.StatusCode}, Content: {errorContent}";
    }
    static string CleanseString(string input)
    {
        return JsonConvert.ToString(input);
    }
}

Заключение

Класс AmChat представляет собой удобный инструмент для взаимодействия с ChatGPT через его API. Обеспечивает простоту использования благодаря своему единственному публичному статическому и асинхронному методу GetAnswer, который упрощает процесс получения ответов от ChatGPT. Надеюсь кому то помог.

PS:

Текст этой статьи помогал писать ChatGPT.

Комментарии (3)



  1. nronnie
    23.04.2024 16:50
    +3

    Текст этой статьи помогал писать ChatGPT.

    Код тоже он писал? Если да, то я за свое будущее пока что спокоен :))


    1. Nicotino Автор
      23.04.2024 16:50

      да, пожалуй соглашусь, и да, он конечно помог