ChatGPT API Отвечает самому себе, и генерирует ответы пока не закончатся токены
Пишу бота в TG на c# для небольшой компании. Главная проблема в том, что ИИ несет полную чушь из разных слов и символов. Также он не останавливается после генерации первого ответа, и генерирует ответы "Бесконечно"
Пробовал менять токен, писать вопрос на английском.
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Telegram.Bot;
using Telegram.Bot.Args;
namespace ReengSupport_bot
{
class Program
{
private static TelegramBotClient bot;
private static string gptApiKey = ""; // В будущем желательно убрать все токены из исполняемого файла, ибо это дыра в безопасности
private static string gptEndpoint = "https://api.openai.com/v1/engines/curie/completions"; // Адрес для отправки запросов. Так легче, чем везде его вставлять.
static void Main(string[] args)
{
bot = new TelegramBotClient("");
bot.OnMessage += Bot_OnMessage;
bot.StartReceiving();
Console.WriteLine("Успешный запуск бота...");
Console.ReadKey();
bot.StopReceiving();
}
private static async void Bot_OnMessage(object sender, MessageEventArgs e)
{
var message = e.Message;
if (message.Type == Telegram.Bot.Types.Enums.MessageType.Text)
{
string response = await GenerateResponse(message.Text);
// Проверка, что ответ не пустой и не null
if (!string.IsNullOrEmpty(response))
{
// Отправляем ответ пользователю
await bot.SendTextMessageAsync(message.Chat.Id, response);
}
else
{
// Если ответ пустой или null, отправляем сообщение об ошибке
await bot.SendTextMessageAsync(message.Chat.Id, "Извините, не удалось получить ответ на ваш запрос :(");
}
}
}
private static async Task<string> GenerateResponse(string text)
{
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {gptApiKey}"); // Авторизируемся
var request = new // создаем запрос
{
prompt = text,
max_tokens = 2000 // Если поставить слишком большой объем, то он не будет работать
};
var jsonContent = Newtonsoft.Json.JsonConvert.SerializeObject(request);
var httpContent = new StringContent(jsonContent, Encoding.UTF8, "application/json"); // Создание и перевод в JSON
var response = await httpClient.PostAsync(gptEndpoint, httpContent); // Отправляем POST запрос
if (response.IsSuccessStatusCode)
{
var resultJson = await response.Content.ReadAsStringAsync(); // считываем строку
dynamic result = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson); // десериализации JSON-строки
string generatedText = result.choices[0].text; // GPT может предоставлять нам на выбор несколько ответов. При choices[0] мы выбираем самый первый варинат,
// я не знаю как это работает, надо документацию читать очень плотно
return generatedText;
}
else
{
return null;
}
}
}
}
}