В мире развивающегося искусственного интеллекта доступ к таким технологиям, как 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.
bambazamba
Есть вот это, хоть и бета:
https://www.nuget.org/packages/Azure.AI.OpenAI
Вот примеры:
https://learn.microsoft.com/en-us/dotnet/api/overview/azure/ai.openai-readme?view=azure-dotnet-preview