В мире развивающегося искусственного интеллекта доступ к таким технологиям, как 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.
