Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Зачем в DNS-зоне указывать A-записи связанные с почтовым сервером?

Лучший ответ:
MX запись что б почтовые сервера отправителей нашли ваш почтовый сервер.
А записи для клиентских приложений в основном (outlook, thunderbird etc.) - что бы не вбивать айпи адрес подключения, а использовать smtp/pop/imap.

Худший ответ:
А как другой почтовый сервер сделает коннект к вашему MX-у на 25-ый порт, если никому не известен его IP-адрес? Для 64.122.26.185.in-addr.arpa. вам ещё и PTR понадобится!

А smtp. и pop. просто для удобства пользователей, стандартные названия. Достаточно взять доменное имя справа от @, добавить к нему smtp. или pop3. - и вуаля, получаем работающие доменные имена SMTP и POP3 серверов. Не надо никуда бежать, искать в документациях эти доменные имена...
Вопрос: FTP-прокси: что это за зверь и как им пользоваться?

Лучший ответ:
тот же самый прокси, но только для фтп протокола.
используется для того чтобы качественно заходить на недоступный фтп-сервер
не все команды фтп можно прокинуть через хттп-прокси.

Худший ответ:
Есть два совершенно разных типа FTP прокси - FTP over HTTP и "нативный" FTP прокси, 
1. FTP over HTTP раньше использовался исключительно для браузеров, на входе принимал HTTP запрос типа GET ftp://.... и отдавал или оглавление каталога в виде HTML или запрошенный файл, сейчас браузеры FTP не поддерживают и это практически вымерло. Обычно такая функция реализовалась в HTTP-проксях. В 3proxy такая функциональность поддержанва в http proxy (proxy).
2. Нативный FTP прокси - FTP не предусматривает наличие прокси, поэтому такие серверы не стандартны. Обычно с точки зрения клиента работает как FTP сервер, но поддерживает или дополнительную команду OPEN или ищет имя сервера назначения в имени юзера, т.е. чтобы попасть пользователем vasya на сервер example.com  вы подключетесь по FTP к прокси-серверу, но в имени юзера пишется vasya@example.com (прелесть в том, что такой прокси можно использовать даже с клиентами не поддерживающими FTP прокси) или перед прочими FTP-командами дается команда CONNECT example.com (для этого клиент должен поддерживать FTP прокси). В 3proxy такая функцииональность поддержана в ftppr.
Вопрос: Народ, как использовать редис на 2 проекта?

Лучший ответ:
Как вариант - префикс.

Худший ответ:
Как вариант - префикс.
Вопрос: Может ли MySQL глючить?

Лучший ответ:
Все работает в 99% нормально, но иногда проскакивает выдача другой строки, не с таким полем, по которому ищем.Это просто значит 99% проблема в коде. Логируйте в файл запрос, параметры и результат выполнения, скорее всего логика работает не так как вы задумали. Как только словите ошибку - смотрите свой лог, наверняка запрос будет отличаться от ожидаемого.

Худший ответ:
Я встречал смутно похожие проблемы (когда буквально where like %zzz% выдавал строки в которых не было 'zzz' когда скорее всего из-за ранее повисшей машины была некорректно перезагружена операционная система и были порушены данные в индексах, repair и пересоздание индекса для гарантии проблему решили.

Не факт что это твой случае, ты бы хотя бы примеры данных и примеры запроса сюда показал, а то бывает люди надеются на то что порядок в не сортированных данных (или сортировка по не уникальному полю) будет постоянным, а это undefined behavior, именно так это и вылезает в редких неуловимых местах.
Вопрос: Sqlite3 операционная ошибка, как исправить?

Лучший ответ:
Не использовать интерполяцию строк для формирования запросов.

Худший ответ:
c.execute(f"SELECT * from banking_application WHERE name_p IS {pop}")
За такое бьют линейкой по пальцам. Собственно, ты уже наткнулся на одну из причин почему. Вторая тут.
Ну и да, IS используется только как IS NULL или IS NOT NULL. Надо вот так:
c.execute("SELECT * from banking_application WHERE name_p = ?", pop)
Вопрос: Все работающие на заграницу должны продать валюту, полученную за два месяца. Где её взять?

Лучший ответ:
Выскажу мнение очередного парня из интернета:
Закон касается текущих остатков, т.е. не имеет обратной силы. Вы не можете продать то, чего у Вас уже нет. Для подстраховки можете продать всю имеющуюся в данный момент валюту, а в дальнейшем выполнять закон, продавая 80% поступающей валюты. 

Еще рекомендую подписаться на Консультант/Гарант или обратиться к профессиональным аудиторам, в ближайшее время будут разъяснения об исполнении закона как непосредственно от налоговой, так и от профильных юристов.

Худший ответ:
переводите полученные деньги в акции майкрософт или любой другой компании со стабильным ростом и по необходимости продавайте приобретая рубли.
Вопрос: Какая-то проблема с кодом, поможете?

Лучший ответ:
Ну так что написано, то он и делает.

if message.chat.type == 'private':

Если написали в приват, то в зависимости от сообщения будет тот или иной ответ.

А если написали не в приват, то код сразу попадает в блок else.

Прежде чем писать ботов, надо почитать учебник по python. Обязательно! Тогда и не будет таких тривиальных вопросов. Отступы в python очень важны. В этом коде else относится не к if-elif-elif... а к внешнему if.

Худший ответ:
Включить голову. Твой код, по сути, делает ровно то, что ты от него просишь:
1. Если сообщение в личку, то в зависимости от слова, скинуть ту или иную фотку. Если не одно слово не подошло, то ничего не делать.
2. Если сообщение не в личку, ответить, что на групповые сообщения не отвечает.

Т.е. он всегда будет реагировать на не-личные сообщения по else. Не нравится? Убери этот else вместе со всем содержимым.
Ну и да, основные алгоритмические конструкции.
Вопрос: Как передавать данные из одного докер контейнера в другой?

Лучший ответ:
Объедини контейнеры одно виртуальной сетью. Можешь конечно и вручную всё настроить но это не целесообразно.
Воспользуйся docker-compose.

docker-compose.yml может выглядеть, например, так:
version: "3.2"
services:
  my_db:
    image: mysql:8.0.26
    restart: always
    container_name: mysql8
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: superpassword
    ports:
    working_dir: /var/lib/mysql
    volumes:
      - "./mysql:/var/lib/mysql:rw"

  app:
    build: ./app/
    command: >
          python3 app.py
    depends_on:
      - my_db

Обращаться к безе данных из приложения можно по имени сервиса, в данном случае my_db

Худший ответ:
БД с второго контейнера должна быть доступна для внешних подключений
если у вас mysql, то вы сможете подключиться на питоне к mysql например через пользователя root на localhost:3306 и записывать спарсенные данные
Вопрос: Котируется ли на рынке труда gamedev индустрии диплом магистратуры ВШЭ по профилю Гейм-дизайн. Базовый уровень?

Лучший ответ:
Котируютсся знания и опыт, а не диплом. Каким образом Вы получите знания - дело десятое. Поищите описания интересующих вакансий на сайтах поиска работы, соотнесите требования в вакансии с программой обучения. 

И как можно скорее начинайте участвовать в реальных проектах.

Худший ответ:
На рынке труда, в первую очередь, котируется опыт и умения.
Во вторую очередь - знания.
В последнюю очередь - диплом.
Вопрос: Как найти угол между двумя точками?

Лучший ответ:
угол между ДВУМЯ точками всегда 180 градусов, так как они ВСЕГДА находятся на одной прямой.

Худший ответ:
Через скалярное произведение двух векторов.
Вопрос: Где искать ответственных исполнителей работающих с Laravel?

Лучший ответ:
на upwork 50-150$ в час
1000+ часов и отзывы
там почти не будет скамеров

Худший ответ:
Чтобы не попасть на скам, нужно искать верифицированных исполнителей.
Кроме бирж есть ещё самостоятельные конторы, которые занимаются атсорсингом - там обычно дороже, но шанс скама стремится к нулю.
Вопрос: Как интерпретировать JavaScript при запросе requests?

Лучший ответ:
Никак. requests не для этого предназначен. Тебе нужен полноценный браузер, и код для управления им.
Т.е. пакет selenium.

EDIT: AlexBoss ниже правильно заметил - если сайт не слишком старается отсеивать ботов, то можно попробовать идентифицировать запросы, через которые выполняется подгрузка интересующих частей страницы, и выполнить их самому. Это позволит обойтись силами только requests, но это не всегда легко сделать.

Худший ответ:
Не слушай знатока выше. Через селениум будет проще, но можешь посмотреть что за запрос идет и кинуть его отдельно, нужно только зависимость найти в передаваемых данных и сгенерить запрос.
Вопрос: Как изменить имя компьютера показываемое в терминале?

Лучший ответ:
sudo scutil --set HostName mac
Этого достаточно. Переустанавливать систему из-за такого пустяка точно не нужно ))
После перезапуска терминала получим ruslan@mac ~ %

Худший ответ:
MBP-Marina - это имя компьютера, а не имя пользователя

Выполни действия по этому линку, и будет тебе счастье: тыц
Вопрос: Как практиковаться в программировании?

Лучший ответ:
да берешь и делаешь. 
походу разгребаешь возникшие проблемы/вопросы.

волшебных кнопки/рецептов не существует.

Худший ответ:
Я практикуюсь в программировании через github.
Открываю https://github.com/trending и выбираю язык, в котором хочу практиковаться
(Например, Scala или С++ или Nim или lisp или тот же Python).
Получив список проектов, смотрю какой-нибудь интересный, открываю его.
Если интересный проектов нет -- меняю диапазов времени (за день, за неделю, за месяц) или язык. Если же интересный проект есть, то для меня в нём самое главное -- это Issues и Pull Requests. Как открытые так и закрытые. Смотрю как там меняли код. Смотрю что ещё не решено. Пробую собрать у себя. Пробую править код. Практикуюсь. Если оказывается, что я решил какую-то issue то делаю форк, готовлю правку в отдельной ветке и отправляю Pull Request. Если не вмержат -- не расстраиваюсь, а если вмержат, то становлюсь контрибутором.
Вопрос: Платежный агрегатор для самозанятых?

Лучший ответ:
гуглить "облачная онлайн касса" (потому что просто "онлайн касса" это физическое устройство ATM для приема платежей по карточкам налички)

Принимать ты можешь как угодно но онлайн касса быть должна.
Самозанятые могут не покупать онлайн кассу но должны формировать чек в приложении "Мой налог" для каждой продажи, там есть api, только вот получить его нормалтьтное описание можно лично с ними по общавщись или реверсить код, вот статья трехлетней давности

Худший ответ:
1. Да, могут.
2. Если платежи только из РФ ю, то советую посмотреть Юкассу. С самощанятыми работают, интеграция простая.
Вопрос: 1С. Ошибка при создании доп. полей, как исправить?

Лучший ответ:
Да Записать() это был метод расширения документа у формы клиентского приложения. Основной реквизит на форме походу был объект. А когда его не стало - он и не понимает, что значит записать().

Худший ответ:
Решение, может кому поможет: Слетела галочка у реквизита Объект. Галочка - основной реквизит.
Вопрос: Может кто-то посоветовать книги для создания блокчейна?

Лучший ответ:
Хорошие книги:
Андреас Антонопулос - Осваиваем биткойн. Программирование блокчейна.
Имран Башир - Блокчейн архитектура криптовалюты
Калле Розенбаум - Грокаем технологию Биткоин

Худший ответ:
Крипто..экономика сравнительно молодая технология, обучающих книг наверное много написано но больше для пользователя (смартконтракты), создавать же сам блокчейн с нуля вопрос личного профессионализма и умение читать чужой код

Очень многие проекты, кстати позиционирующие себя как децентрализованные, редко раскрывают подноготную именно своего запуска (ведь тогда любой сможет запустить их клон на старте проекта и не тратя денег на маркетинг забрать клиентскую базу себе) и разработка каждого такого проекта тесно централизованно на своих разработчиков.

p.s. по теме вопроса, 
как идёт переключение с одной ветки на другуюв зависимости от консенсуса, например для PoW - количество энергии, которая была затрачена на создание ветки, а у bitcoin это определяется через сложность, которая меняется только раз в 2 тысячи блоков а значит можно просто брать ветвь с наибольшим номером блока (количество), а если одинаковое количество - брать тот блок, что пришел в ноду первым (вообще нода сама может выбирать, какой блок использовать в данном случае)
Вопрос: Как вычислить кто через какое устройство следит за тобой через wifi?

Лучший ответ:
кто-то постоянно включает и выключает wifi
Вероятно, проблема в блоке питания. Замените его.

Худший ответ:
1. Заходим на свой роутер (обычно адрес gateway), сразу меняем туда пароль.
2. Отключаем WPS, и меняем пароль на WPA2 как минимум, чтобы был в 16 символов и содержал буквы и цифры (так вас повторно сломают через несколько лет подбором)
3. Отключаем вебморду для внешней сети только для локалки оставляем.
4. Заходим на телефон в настройки и блокируем ВСЕМ приложением весь функционал, особенно если он связан с WiFi. Не переживайте WiFi не перестанет работать, а вот собирать данные к каким точкам вы подключаетесь приложения перестанут, а значит не смогут следить и отслеживать ваше движение. Этим занимается по полной программе VK.

А если вы думаете, что у вас стоит скрытая камера, то купите специальное устройство которое посылает ИК-лучи (популярно в Корее), можете у них заказать, так же современные смартфоны с ToF датчиком, это умеют делать.
Вопрос: Как улучшить навыки в построении архитектуры БД и проектирования систем?

Лучший ответ:
Здесь можно найти общие моменты.

Если поподробнее, то порекомендовал бы книги (лучше в порядке их следования):
1. Чистая архитектура
2. Высоконагруженные приложения
3. Шаблоны проектирования для облачной среды (если нужно углубиться в микросервисы и немного познакомиться с kubernates)
4. Совершенный софт (тут и про архитектуру и про управление проектами)
5. Проектирование событийно-ориентированных систем (здесь про паттерны работы с kafka, о самой kafka нужно в других книгах искать)

Худший ответ:
Делать софт по проекту и актуализировать проект до изменений в софте.
Вопрос: Как узнать чем занято место на диске?

Лучший ответ:
Я рекомендую WizTree
Наглядно, удобно, быстро и бесплатно. Сканирование раздела C заняло меньше секунды.



Худший ответ:
Тотал коммандер запусти - отображение скрытых файлов  - переключаешься на нужный диск, выделяешь каталог и жмёшь энтер) - полминуты для сканирования  диска хватит - где, чем ,что  забито будет видно
Вопрос: Как получить доступ к микрофону и веб-камере автоматически?

Лучший ответ:
Никак.
Разрешение может дать только пользователь.
И это сделано специально против таких как ты

Худший ответ:
Никак и слава тому, кто это сделал.
Вопрос: Вопрос по user-friendly Web-интерфейсу для MySQL?

Лучший ответ:
MS Access умеет подключатся к mysql через ODBC.  Алгоритм прост переносите свои таблицы на Mysql подключаете к нему MS Access и вот вам привычная морда для работы с данными.

Худший ответ:
PhpMyAdmin они же могут осилить? Если нет, то пишите своё, под задачу. Ну или проведите доп. обучение.
Вопрос: Могу я задать вопрос по коду, как мегаджун JS?

Лучший ответ:
1) Плохой код, который выполняет задачу, лучше чем отсутствие кода
2) Перед работой составьте примерный план, например: "сначала получаем данные, потом с ними делаем это или это, потом выводим..." Это помогает не лепить откровенную фигню по ходу дела и не переписывать все по 10 раз.
3) Смысл рассматривать простыню из кода новичка отсутствует, так как это похоже на оценку походки будущей фотомодели по первым шагам в ходунках. Никто не пишет хороший код сразу, учиться и писать много - лучший путь обучения. 
4) Смотрите на чужие готовые решения, думайте как использовать интересные приемы, именно свои выводы и ошибки делают вас программистом+, а не гов*окодером. Задатки и желание у вас есть, значит все получится.

Худший ответ:
1. Лишние манипуляции над домом.
appendChild нужно делать только после того, как элемент и все его дети будут настроены. Т.е. если в функции showMessage сначала настроить messageWrapper (задать класс; добавить в него message) и только потом сделать document.body.appendChild, то можно выиграть в производительности за счет меньшего количества обращений к DOM-дереву.

Эти строки вызывают вопрос, т.к. не очень понятно, зачем нужно добавлять элементу класс и через 100 миллисекунд его убирать. Выглядит, как что-то ненужное
messageWrapper.classList.add("messageWrapperUnvis");
setTimeout(() => {
  messageWrapper.classList.remove("messageWrapperUnvis");
}, 100);

2. Ивент листенеры нужно удалять за собой.
Нужно убирать отратобавшие event listeners, т.к. их накопление приводит к утечке памяти.
Также желательно пересмотреть подход к определению слушателей вообще, т.к. в функции modalWindow на каждое событие contextmenu устанавливается другое событие contextmenu, назначение которого только лишь в том, чтобы удалить предыдущий currentDiv. Имеет смысл вынести currentDiv в функцию modalWindow, а внутри слушателя делать необходимую проверку. 

3. Нерациональный ранний выход из функции.
В функции modalWindow нет смысла создавать элементы, кроме wrapper, т.к. при срабатывании условия e.target.matches("#input") произойдет return и ранее созданные элементы просто окажутся бесполезными. Т.е. if нужно разместить непосредственно после wrapper.

4. Бесполезные элементы.
Функцию addNewItem я бы вообще переделал, т.к. внутри нее на каждый keypress производится куча действий над элементами, которые в итоге так и не попадут на страницу: nListItem и remove будут добавлены только при e.key === "Enter" && input.value !== "" (кстати, нет смысла плодить вложенные if'ы, когда можно использовать булевы выражения).

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

Когда код небольшой части приложения становится осмысленным для создающего, появляется мотивация упорядочивать его в глобальных масштабах, т.е. решать архитектурные вопросы, что в совокупности с шишками, которые принесет этот процесс, в конечном итоге, сделает тебя более скилованным разработчиком.
Вопрос: Как упорядочить id записей в MySQL?

Лучший ответ:
Если речь об автоинкрементном поле-первичном ключе, то забудь про сию хотелку, и чем скорее, тем лучше.

PRIMARY KEY выполняет в таблице только одну функцию - однозначно идентифицирует запись. В нормальных условиях значение такого поля используется исключительно для связывания данных (установления соответствия), и надобности видеть значение этого поля не существует в принципе.

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

В общем, надо тебе поле-нумератор? создай для этого дела ещё одно поле, просто числовое, не автоинкремент, и заполняй программно. А ещё лучше - организуй односвязный список, и нумеруй прямо в запросе на получение данных.

Худший ответ:
Варианты:
1) Перед удалением записи узнать её id. Вставить новую запись с указанным id.
2) Удаляя запись, записывать её id в другую таблицу - отдельную таблицу для id.
При вставке новой записи, смотреть есть ли в таблице для id айди. 
Если есть - вставлять новую запись с указанным id (и удалить этот id из таблицы для id). Иначе вставлять запись с автоинкрементным айди.

PS
Id обычно первичный ключ. Нельзя вот так просто сдвинуть ключи т.к. одна запись удалилась.
Поэтому и создается новый id, например 4, когда до этого удалили 3.
По идее в бд сейчас айди 1 и 2 и 3 свободен. Но не известно на что ссылался этот ключ, на какие таблицы.
Вопрос: Avast запрещает гугл хром подключаться к стороннему сайту. Это вирус?

Лучший ответ:
У Аваста бывает достаточно много ложных срабатываний, месяца 2 назад похожий вопрос был, в итоге поискав на форумах было выявлено, что ничего зловредного не было и Аваст обманул. 

На самом деле многие антивирусы "находят" вирусы, там где не их нет, чтобы создать видимость работы и полезности. 
Попробуйте поискать похожую проблему в интернете, и, возможно, стоит сменить Антивирус.

Худший ответ:
если 10-ка, то  удалите Аваст, пользуйтесь Виндовс дефендер. Бесплатный антивирус по большей части бесполезен.
Вопрос: Через telnet идет подключение к 25 порту с главного домена и всех поддоменов. Как устранить?

Лучший ответ:
Потому что у Яндекса его почтовый сервер mx.yandex.ru сидит на отдельном его собственном IP, на котором он и отвечает на 25-ом порту.

А у вас IP-адрес один для всего: и для основного домена со всеми его поддоменами, и для mail.domen.ru с его 25-ым портом.

Когда на этот IP на 25-ый порт прилетает запрос на соединение, сетевая подсистема не знает, к какому поддомену или домену создаётся соединение, она знает только IP и порт 25. Поэтому заблокировать "а не тот домен!" не получится.

Выносите почтовый сервер на отдельный IP, к которому будет привязан только mail.domen.ru - и тогда не будут доступны 25-ые порты на других доменах.

Худший ответ:
Вероятно некорректно настроены DNS-записи/BIND/EXIM.
Нет.
telnet должен подключаться. Далее после соединения надо обменятся "приветствиями":  IP адрес, имя …. 
А вот дальше сервер проверяет кому что можно. ACL правила отбрасывают запрещённые соединения.

PS
и смотри комментарий...
Вопрос: Как конвертировать указатель PWSTR в указатель на string (c++)?

Лучший ответ:
std::string down(PWSTR pointer)
{
  std::wstring w(*pointer);
  std::string s(w->c_str());
  return s;
}
Вот только то, что хочет std::string, может предполагать, что текст в ней будет в однобайтной кодировке, и если это элементы UI, например - кириллица после такого "преобразования" пойдет кракозябрами. Да и латинице может поплохеть.
Так что, скорее всего, нужно не типы конвертировать, а кодировки.

Худший ответ:
Ничто не мешает Вам написать PWSTR pwc = L"qwerty";
    string* ps  =  (string*) pwc;
    cout << std::hex << (int)( (*(char*)ps) ) << ' ' << (int) ( (* ((char*)ps + 1)) )  << std::dec << endl;
    //71 0
71 0 - код "широкого" символа q 
Смотрите сами, есть ли в этом какой смысл.
Вопрос: Какая конфигурация RAM лучше для работы в Photoshop?

Лучший ответ:
лучше больше, но медленнее. в плане оперативки
хотя если хватает 8гб и файл подкачки не нагружается - то можно и не менять

Худший ответ:
вот пример бенчмарка с более хардкорными увеличениями частоты не только оперативной памяти но и процессора
увеличение количества оперативной памяти дает больше прирост чем увеличение частот

в твоем случае разницу заметно можно будет на синтетических тестах и может быть очень небольшом количестве задач (и работе с БОЛЬШИМИ изображениями)

НО только при условии что оперативной памяти для твоих задач в принципе не хватает! (мне кажется 8Гб это очень мало)
Вопрос: Как сделать чтоб одинаковые записи не заносились в бд?

Лучший ответ:
Проверить наличие города перед записью
или
обработать ошибку IntegrityError через try except

Худший ответ:
смотря чего добиться хотите. Если город действительно должен быть уникальным - проверить наличие такого города перед записью.   Если в одном городе может жить больше 1 пользователя - убрать уникальность.
Вопрос: Как нейросеть научить понимать текст?

Лучший ответ:
Коротко: никак.
Ты можешь попытаться классифицировать тексты по тематике, используя ключевые слова, и искать те тексты / фрагменты, которые содержат те же ключевые слова, что и заданный вопрос.
Но даже такое определение содержит кучу проблем.
1. Слова могут иметь разные словоформы. Нужен стемминг для выделения корней слов.
2. Какие слова считаются ключевыми? Нужен как минимум частотный анализ слов. Слова с очень высокой частотой будут менее полезны при работе.
3. Порядок слов может менять смысл вопроса. Значит, придётся использовать рекуррентные (seq2seq) сети.
4. Нужно понять, как кодировать подаваемые на вход ключевые слова. Неудачное кодирование может сильно ограничить возможности сети.

И после этого тебе нужно будет найти/создать большую базу (десятки тысяч и более элементов) пар "вопрос-ответ", на которой ты будешь обучать свою сеть. И то, после этого она сможет только отвечать на наиболее похожие вопросы из этой базы (плюс/минус формулировка). Обычно горе-программисты убегают с плачем на этом этапе.

Честно, примитивный частотный анализ (какие слова встречаются в тексте ответа и в тексте вопроса) может дать менее бредовый результат, и будет проще в реализации.


Худший ответ:
Вот пример такой нейросети https://russiannlp.github.io/rugpt-demo/
Там написано как создать