Здесь я опишу мои исследования по внутреннему устройству ChatGPT, в том числе:
Любой текст, перед тем, как отправиться в нейросеть, разбивается на токены, а они преобразуются в эмбеддинги - набор числовых характеристик каждого токена, что определяет его “характер”, типа “жёлтости”, “пушистости”, “милости”, “агрессивности” и т.п. В эмбеддинге может быть под 500-1000 таких числовых параметров - но в дальнейшем я буду писать, словно GPT получает сразу токены, для удобства.
Также у GPT есть ряд выходных токенов - по каждой характеристике эмбеддинга. Между входным и выходным слоем нейронов - огромная туча других нейронов, что натренированы на текстах и диалогах. Это то самое место, где происходит вся магия. Используя выход, узнаём какой токен писать дальше. Вот и вся нейросеть. По подробности Артур Шарифов сделал видео - оно скоро выйдет и там будет супер хорошо всё объяснено.
В любом случае, каждый раз, когда отправляется запрос через ChatGPT, чат берёт весь наш диалог, разбивает его на токены и передаёт нейронной сети в входной слой - происходит магия на рабочем среднем слое, в результате которого получается набор характеристик токена, что надо выдать пользователю - подбирается один из наиболее подходящих токенов для ответа (немного случайно, в зависимости от параметра температуры) - и вуаля, ChatGPT получил нужный токен, что должен идти следующим в ответе. После этот процесс повторяется - но уже с дополнительным токеном, что создал GPT, до тех пор, пока нейронка не решит "остановиться" на каком-то моменте.
То есть, технически это происходит вот так:
*<Первый промпт, отправляющийся нейронке>*
****User: Привет! Сколько будет 2 + 2?
ChatGPT:
*<нейронка решила, что наиболее вероятным токеном будет "Дв">
<Второй промпт, отправляющийся нейронке>:*
User: Привет! Сколько будет 2 + 2?
ChatGPT: Дв
*<нейронка решила взять токен "а.">
<Третий промпт, отправляющийся нейронке>:*
User: Привет! Сколько будет 2 + 2?
ChatGPT: Два.
*<нейронка решила, что сейчас будет токен* **"окончание ответа"***>
<итог возвращается пользователю>*
Поэтому в чатике происходит такая прикольная анимация, будто бы бот “набирает” буквы. На самом деле задержка между наборами букв - это задержка между ответом нейронки по запросам (и отправке ответа пользователю от сервера). Собственно, это может привести и к забавным багам - когда GPT решит сделать ответ бесконечным, если просить его перепроверять точный размер ответа, например, и будет писать пока его насильно не отрубит пользователь / сервер.
Перейдём к тому, как же всё работает в чатике.
В инструкциях боту передаются несколько, можно сказать, “Акторов”. Каждый Актор воспринимается GPTшкой как участник диалога. Пользователю показывают текст только от двух Акторов - USER и ASSISTANT, где первый - это весь текст, что писали мы, а ASSISTANT - это ответы бота. Части промпта, что вписаны от остальных Акторов, скрываются от пользователя.
Важный момент, что текст от Акторов считается частью промпта. Всё, что пишут Акторы, всегда содержится в диалоге, и, следовательно, GPT может использовать это в своих ответах. И, главное, Акторы заполняют лимит по токенам, хотя их текст и не показывается пользователям, что тоже можно учитывать. Кстати говоря, внутри промпта Акторы выделяются двойными звёздочками и капсом, как SYSTEM:, или USER:. Если создавать симуляцию из нескольких вымышленных людей между нейросетями, эта информация может пригодиться для более удобного разделения ролей.
Вот так выглядит схематичное описание того, как по-настоящему выглядят промпты ChatGPT:
**SYSTEM:**
<Стандартные промпты от OpenAI>
**USER:**
<Вопрос пользователя, что вошёл в чатик>
**ASSISTANT:**
<Ответ от ChatGPT>
**USER:**
<Пользователь просит нарисовать картинку>
**ASSISTANT TO DALLE.TEXT2IM:**
<ChatGPT имитирует команду для Актора>
**SYSTEM:**
<Актор системы подтверждает, что файл создан>
**ASSISTANT:**
<ChatGPT рассказывает о том, какого красивого котика он нарисовал>
И это всё обрабатывается нейронной сетью GPT-4o. Она всё это переваривает и дописывает такого рода диалоги, делая вид, что она тот или иной Актор. Так что для глубокого исследования всех инструкций, рассмотрим всех Акторов по отдельности.