GPT-3.5/4 - обучение на своих данных. Для так себе программистов

Решил попробовать обучить GPT на своих данных. Основное всё гуглится и есть в следующих статьях:

https://toadmin.ru/как-обучить-ии-чат-бота-с-пользователь/

https://beebom.com/how-train-ai-chatbot-custom-knowledge-base-chatgpt-api/

https://habr.com/ru/articles/704600/

Однако во время настройки у меня возникло несколько проблем. Напишу, как я их решил (для тех, кто идёт строго по шагам инструкции и мало в этом всём разбирается).

- Далее возникла проблема при обучении на русском тексте.

- Далее проблема с заканчивающимся триалом на опен-аи

Итак:

1. Вообще, зачем я всё это затеял.

ГПТ в виде веб-интерфейса общается с тобой лишь на основе сформированных когда-то ранее данных и обобщая эти данные. Если ты хочешь, чтобы ГПТ пообщался с тобой на какую-то узкую тему или в рамках конкретной научной теории, бесплатный веб-чат не подойдёт. Поставленная мной изначально цель - выгрузить из интернета необходимые мне страницы и обучить ГПТ на их основе.

2. Если идём по статьям выше, то при запуске питоновского файла пойдут ошибки. Ряд ошибок разобран в комментариях статей, но я свои решил сразу, удалив самый последний питон и поставив конкретную версию со скрина статьи: 3.11.2. Заходим по ссылке и находим внизу интересующее. Например, Windows installer (64-bit).

https://www.python.org/downloads/release/python-3112/

3. В англоязычной версии статьи упоминается конкретная версия gpt_index. Её и устанавливаем.

pip install gpt_index==0.4.24

4. В приведённых статьях в написанном коде при каждом его запуске формируется указанный там файл index.json.

При создании файла, если я правильно понял, проходит дофига запросов к OPEN.AI.

Если вы не меняли данные и после закрытия скрипта просто хотите запустить его же заново, закомментируйте в питоновской коде строчку: "index = construct_index("docs")":

# index = construct_index("docs")

Б) Как показали опыты, если формировать данные на основе txt файлов в UTF-8, index.json хоть и формируется, но ГПТ его не воспринимает. Всё проходит гладко, но чат не в курсе загруженных данных. Хз, почему. Пробовал играть с кодировками - не помогло. Если тот же index.json формируется на основе pdf файлов, ГПТ его понимает. Хотя в обоих случаях конечный файл содержит данные в юникоде.

Если кто-то знает, как это исправить, напишите, пожалуйста. Я ответа не нашёл.

В общем, все файлы потребовалось перегнать в PDF.

Итак.

- Есть ряд статей в интернете. Вы их скачали вручную или написали для этого скрипт. Получили папку с html-файлами.

- Мне по моей изначальной задаче требовалось распарсить эти данные, убрать из них комментарии и прочий шум.

Сначала установите node-js. Затем выполните "npm install pdfkit" для установки пакета работы с pdf.

Назовите файл типа "parse.js" и запустите его из консоли: "node parse.js:". После запуска он перегонит файлы из html в pdf.

const fileSystem = require('fs');

const PDFDocument = require('pdfkit');

async function checkFile(index) {

console.log(files[index]);

if (index>=files.length) {

return;

}

if (files[index].split(".")[1] != "html") {

checkFile(index+1);

return;

}

fileSystem.readFile('./docshtml/'+files[index], 'utf8' ,(err,data) =>{

if(err){

console.error(err);

return;

}

// Здесь обрабатываем и отрезаем в файле всё лишнее. Например, переносы строк оставить, но убрать все html теги:

data = data.split('<br />').join('\n');

data = data.replace(/<[^>]*>?/gm, '');

function createInvoice() {

let doc = new PDFDocument({ margin: 50 });

generateHeader(doc);

doc.end();

doc.pipe(fileSystem.createWriteStream('./docs/'+files[index].split(".")[0] +'.pdf'));

checkFile(index+1);

}

function generateHeader(doc) {

doc

.fillColor("#444444")

.fontSize(14)

.font("./arial.ttf")

.text(data, 110, 57)

.fontSize(10)

.moveDown();

}

createInvoice();

return;

} );

}

var files = fileSystem.readdirSync('./docshtml/');

console.log(files);

checkFile(0);

return;

Одна из проблем, с которой я столкнулся, PDF не хотел формировать текст с русским языком. Поэтому в коде и пришлось указать конкретный шрифт - arial.ttf.

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

Скачать можно, например, здесь (гуглите - да нагуглите):

https://allshrift.ru/font/arial/

Профит.

Наконец-то всё заработало.

Следуя инструкции из статей выше, запускаем питоновский скрипт и ура - ГПТ понимает и помнит данные, загруженные из директории docs.

В) Триальный баланс OPEN.AI быстро заканчивается.

Раза три у меня получилось по изначальной инструкции сгенерить новые почтовые аккаунты, но в какой-то момент GOOGLE отказался регать новые почты без телефона. И перестал принимать номера телефонов, купленные на указанных в статьях выше ресурсах.

Также столкнулся с тем, что OPEN-AI не хочет принимать подозрительные почтовые адреса.

Как решить эту проблему, пока не знаю.

Если кто знает, напишите, пожалуйста.

1) Знает ли кто-то нормальные почтовые ящики, которые быстро и легко регать?

2) Может быть, кто-то знает сервисы по покупке иностранных номеров лучше, чем указан в статьях выше?

3) Может быть, кто-то знает, как платить OPEN.AI и нормально с ним работать? Сейчас оплатить можно только "upgrade" за 20 баксов, но он никак не поможет с баблом на АПИ-запросы. Для нормальной оплаты, нужны реквизиты организации в США.

Г) Есть ещё одна проблема, с которой столкнулся. Ответы на русском языке по АПИ возвращаются обрезанные примерно на пятистах символах. Обрезаются посреди предложения и никакие инструкции, типа "продолжи" или "ты не закончил, продолжи с момента" - не работают.

Вариант "тебе задали вопрос: 'XXX', Был ответ: 'YYY', продолжи его" - кое-как работает, но ГПТ начинается заговариваться и повторяться.