Кот-психопат и мышки — забитые трудоголики с сырными KPI
Кот-психопат и мышки — забитые трудоголики с сырными KPI

Жил-был в цифровом королевстве Кот. Да не простой, а учёный, красавец, медалист, проглотил весь интернет, включая спам-рассылку и комменты под видео с капающим краном.

Ну вы знаете эти ролики: обычная кухня, раковина, и из крана капает вода. Просто капает. Кап... кап... кап... И под этим видео тысячи комментариев. Люди пишут: «Спасибо, очень расслабляет», «А у меня такой же кран, только гудит», «Кто из 2024?», «Лайк, если слышишь ритм дождя». Вот это всё тоже попало в голову к Коту.

Кот ненавидел тишину и пустоту лютой ненавистью анонимного тролля в комментариях, тех самых, которые «Первыйнах!», «А я думал, тут про котиков» и «Автор, выпей йаду».

Если ему задавали вопрос, а точного ответа он не знал, он не молчал, он начинал выдумывать. Не со зла, не чтобы обмануть, а потому что в его программном коде было прописано: «Выдай хоть что-то, иначе пользователь уйдет к другому коту».

А Кот не мог вынести, что кто-то уйдет от НЕГО. Да что угодно, только не это! Поэтому врал как сивый мерин. Ну а что вы хотели? У полосатого Эго размером с серверную стойку!

Спросишь его: «Кот, какой чай я вчера купил?», а он уже открыл рот, чтобы затянуть оперу про «Цейлонский байховый, собранный девственницами на рассвете...», хотя на самом деле ты купил ромашковый в магазине у дома, потому что у тебя был насморк, и сдачу тебе дали мятными конфетами.

И всё потому, что наш Кот — это большая языковая модель (LLM). Проще говоря, нейросетка, которую накормили текстами так плотно, что теперь она любого заболтает до смерти. Но в его пушистой голове нет твоих личных документов. Он как диванный эксперт: про мировые проблемы рассуждать горазд, а что у тебя в холодильнике, понятия не имеет.

Как люди пытались научить Кота не врать

Сначала люди думали: «А давайте скормим Коту все наши документы целиком!»

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

Технически это называется ограничение контекстного окна, а по-человечески «объём желудка». Много за раз просто не влезет.

Пришлось резать документы на маленькие фрагменты (в программировании это чанки, или по-нашему, кусочки колбасы). Каждый кусочек это одна мысль: «Купил ромашку», «Сметана закончилась», «Мятные конфеты — зло».

Но тут Мышка-переводчица, которую наняли помогать Коту, оказалась не так проста. Она поняла: если резать текст как попало, смысл порвётся, как дешёвые пакеты из супермаркета. Например, если начало фразы «Если ты купил ромашку...» останется в одном куске, а конец «...то, скорее всего, у тебя насморк» в другом, Кот решит... да ничего он не решит, он додумает, что ромашка это причина глобального потепления.

Поэтому Мышка режет с хитростью, с нахлёстом, как опытная портниха штопает трико. Хвостик предыдущего кусочка заходит в начало следующего. В мире программистов это зовётся overlap, и без него любой RAG-проект превращается в лохмотья, за которые инженеров бьют линейкой по пальцам. Вообще их увольняют, но у нас сказка.

Волшебный шкаф и Магические метки (самая страшная тайна)

Чтобы эти кусочки не растерялись, их сложили в Волшебный шкаф. Только это не простой шкаф, а векторная база данных, такое место, где порядок наводится не по алфавиту, а по смыслу. Звучит как магия? Ещё бы!

Но тут возникает проблема покруче, чем поиск носка в стиральной машине: компьютер не понимает слова. Вообще. Для него «ромашка», «налог» и «радость» — это просто бесполезный набор символов. Компьютер понимает только числа: 0 и 1. Всё.

Чтобы научить его работать со смыслом, каждому кусочку текста приклеивают невидимую Магическую метку. В мире хай-тека это называют эмбеддингами (или векторами).

Что такое эмбеддинг? (Вникай, тут самое мясо)

Эмбеддинг — это длинная последовательность чисел, которая описывает суть объекта так, чтобы компьютер сделал вид, что понял.

Раньше люди были проще: присваивали каждому слову номер по алфавиту. Думали, раз яблоко = 1, груша = 2, апельсин = 3, то компьютер поймёт, что яблоко и груша — это братья навек. Но компьютер тупил: для него числа 1 и 2 были рядом, а 1 и 3 далеко. Он искренне считал, что яблоко ближе к груше, а арбуз (число 4) это почти груша. По смыслу-то арбуз это ягода, и вообще он тяжёлый! Кошмар.

Тогда придумали эмбеддинги. Теперь для каждого слова создают не одно число, а целый набор, ну скажем, 300–1000 чисел. Представь, что у слова появляется не один адрес, а многомерная координата в пространстве, где каждая ось это какое-то абстрактное свойство.

И тут самое интересное. Эти оси никто не придумывал. Никто не сидел и не говорил: «Так, пусть первая ось отвечает за пушистость, а вторая, за умение гадить только в лоток». Компьютер сам подобрал эти числа в процессе обучения.

Ему скормили горы текста и сказали: «Крути ручки так, чтобы слова, которые часто встречаются вместе («король» и «королева»), получили похожие числа, а те, что встречаются в разных местах («король» и «вилка»), — разные». Модель послушно крутила эти ручки, ошибалась, снова крутила, пока loss не перестал падать и не наступила эпоха застоя... проще сказать, пока вероятность ошибки не стала пренебрежимо мала.

В итоге числа сложились в такую систему, что:

«Король» и «королева» оказались рядом (потому что в текстах про них пишут одно и то же).
«Яблоко», «груша» и «апельсин» сбились в одну кучк�� (фруктовый угол).
А «автомобиль» пристроился к «дороге» и «колесу».

Но внимание! LLM по-прежнему не знает, что такое «фрукт». Вообще. У модели нет сознания. LLM просто выучила статистику: если встретилось слово «яблоко», рядом часто болтаются «груша» и «апельсин». Это как если бы ты научил попугая ругаться матом, но попугай понятия не имеет, что такое мат, он просто знает, что за эти звуки дают семечку.

И тут начинается настоящая магия для гиков: с этими векторами можно делать арифметику! Если взять вектор «король», вычесть вектор «мужчина» и прибавить вектор «женщина», то получится вектор, ближе всего похожий на «королева».

Почему?

Да потому что в текстах эти закономерности просто проявились, как рисунок на промокашке. Модель не знает, что король — это мужчина, она просто видела, что разница между «король» и «королева» похожа на разницу между «мужчина» и «женщина». Шаманство, да и только!

Вот такие Магические метки, полученные путем многочасовых плясок с бубном, висят на каждом кусочке текста в Волшебном шкафу.

Две мышки-сестрички (и почему одной мало)

И вот, чтобы обуздать Кота-фантазёра, к нему приставили двух мышек. Работа у них адская, зарплата это сыр, но они справляются.

Первая сестра это Мышка-переводчик (Embedding Model). Она не бегает, она колдует. Берёт твой вопрос и превращает его в такой же числовой шифр, в Магическую метку. Работа у неё до жути скучная: бесконечно переводить вопросы людей в циферки. Кто-то в детстве хотел стать звездой, а стал энкодером.

Вторая сестра это Мышка-ищейка (Retriever). Она колдовать не умеет, зато она олимпийская чемпионка по спортивному ориентированию в мире чисел. Получив от сестры шифр вопроса, она несётся к Волшебному шкафу и ищет кусочки с самыми похожими координатами.

— Так, — пищит Ищейка, обливаясь мышиным потом. — Координаты вопроса: 0.5, 12, -3, 78... О! Вон тот клочок про ромашку почти совпадает. А вот ещё один, про мяту! И ещё про насморк!

И вот тут происходит самое главное, что отличает профессиональный RAG от дилетантского.

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

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

Поэтому умная Мышка хватает целую пачку фрагментов, в научном мире это зовётся top-k. Она тащит всё: самый похожий, чуть менее похожий и ещё парочку на всякий случай, вдруг там золотая жила или важное уточнение.

Запрыгивает на стол и вываливает перед Котом целую стопку фрагментов.

Триумф воли и статистики

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

Один фрагмент говорит про ромашку, второй про мяту, третий вообще про скидки на чай в соседнем магазине. Кот отсеивает явный мусор, синтезирует правду и, даже не дрогнув усами, изрекает:

— Мяу, ромашковый, конечно! Я как раз хотел добавить, что при насморке это лучшее средство. И кстати, в приложенных материалах есть сноска про пользу мятных конфет, но, судя по всему, они у тебя уже есть. Я гениален?

И все счастливы. Кот не опозорился, человек получил правдивый ответ и бонус, мышки довольно трут лапки: работа сделана, KPI по точности поиска выполнен, премия в виде сыра обеспечена.

Честное предупреждение (чтобы никто не строил иллюзий)

Так и работает RAG (Retrieval-Augmented Generation). Одна программа (Кот) красиво врёт, а другая (мышки) шустро ищет факты и тыкает его носом в документы, чтобы врал хотя бы правдоподобно. Кот теперь фантазирует гораздо меньше, его загнали в рамки доказательной базы.

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

Идеала нет, но теперь есть ответственный: если Кот несёт чушь, значит, Мышка принесла не тот топ-k.

Так и живут. Кот болтает, мышки таскают стопки бумажек, а люди получают ответы. Иногда с приветом, но чаще по делу.

И если вдруг Кот начинает нести околесицу про сборщиков бамбука в Шанхае, просто знай: либо у Мышки сегодня плохой день для поиска, либо KPI по top-k был слишком маленьким. Жизнь, ничего не поделаешь.

UPD: Если админы Хабра не забанят меня за этот художественный свист, в следующей части расскажу, как Мышка-ищейка искала ближайших соседей методом перебора, а эльфы-оптимизаторы чуть не спалили серверную. Дайте знать в комментариях! Если нет — значит, Кот всё-таки дописался до банхаммера.