TGViewer
Делай RAG Делай RAG @delay_rag · 1.41K subscribers
Post #50 1.07K
Кто видел предыдущий пост — пардон 😊 вот правильный! Со спокойной душой можно теперь написать про последний этап пайплайна — и пока еще не разойтись, есть несколько общих идей и накопленная за прошедшие месяцы рефлексия о том, какие в воронке минусы, и как её можно менять.

Итак, последний этап #делайRAG — сборка корпуса эмбеддингов. Он делится на 2 основных сущностных шага — подготовку «чанков», то есть текстов, которые и будут превращаться в эмбеддинги, и само превращение в эмбеддинги, то есть векторизацию.

🤩 Чанки
Обычно под чанками понимаются части документов, имеющие определенную длину (в символах или токенах). Но поскольку я делала RAG для бота по наитию, я не знала, что по классике чанкуются именно тексты. Я пошла по пути изготовления (на этапе разметки) резюме решений нейросетью. И именно резюме отправляются на векторизацию (я схлопываю в один текст содержимое двух колонок из волшебной csv-таблицы, но каких именно — не скажу. Ибо близится датасет, и кто захочет повторить, то будет свободен в своих экспериментах).
Я и сейчас думаю, что, учитывая характер исходного материала, это правильный путь: УФАС в решениях пишут много не несущих никакой (для моей задачи) ценности заклинаний, повторяют одно и то же, что просто нарезка текста решения на чанки блага не сделает.
Эту операцию скрипт проделывает моментально без моего особого участия.

🤩 Эмбеддинги
Далее код пайплайна обращается по API к эмбеддинговой модели (сейчас у Gemini она одна - gemini-embedding-001), по очереди векторизует каждый чанк, и все получившиеся координаты собирает в один файл формата NumPy. Кто читал лонгрид про RAG, тот в курсе, что RAGи вполне могут быть реализованы не в виде векторной базы данных, а просто вот таким массивом чисел. Учитывая мой объем (менее 2000 решений, в перспективе не более 3000), этого более, чем достаточно.
Если возникает необходимость корпус эмбеддингов расширить, то имеющиеся векторы не пересчитываются, так как уже обработанные записываются в кэш. Полностью пересчитать пришлось один раз, когда переезжала на другую эбеддинговую модель (на ранее упомянутую, её представили месяц назад).
Я делаю эмбеддинги 768 размерности и использую float64, то есть каждое число в эмбеддинге весит 8 байт: это как бы обеспечивает более высокую точность семантического подбора. Наверное. Я верю на слово всему, что мне говорят нейронки по этому вопросу 🙂

Вот и всё! RAG.csv и корпус эмбеддингов в .npy в паре представляют собой RAG. Коротко напомню, что происходит дальше (или чем занимается код в backend_logic.py):
1️⃣ пользователь вводит в боте запрос или грузит картинку, скрипт обрабатывает текст или описывает текстом картинку;
2️⃣ полученный текст тоже становится эмбеддингом с помощью той же самой эмбеддинговой модели (корпус эмбеддингов и входящие эмбеддинги должны делаться одной и той же моделькой из-за используемых ими таблиц токенизации);
3️⃣ для эмбеддинга запроса косинусным сходством высчитываются топ-10 наиболее похожих эмбеддингов;
4️⃣ топ-10 эмбеддингов откатываются обратно в текст и вставляются в шаблон промпта для нейросети;
5️⃣ нейросеть готовит заключение с учетом того, что нашлось эмбеддинговым поиском, цитирует релевантный кейс в заключении.

И здесь уместно рассказать, что я предпринимаю для повышения точности отбора (a.k.a костыли):
🤩 предобработка креатива — при обработке входящего текста или подготовке описания выкидывается все, что может «зашумить» эмбеддинговый поиск (часы работы, номера телефонов, сайты, всевозможные идентификаторы и т.п.);
🤩 нейросети дается задача критично относиться к тому, что притащено из RAG, и если действительно релевантного кейса нет, то не обращать на них внимания.

Знаю-знаю, не очень впечатляет, и можно и лучше. Техники есть (о них скоро будет новый #rise_of_RAG). И у меня еще с самого начала появилась идея делать привязку к тематическим тегам (о них здесь), то есть этакий гибрид с фильтром по ключевым словам, который активируется не сразу, а после первого эмбеддингового отбора. Очень хочу постараться до Нового года всё таки его реализовать 🎅
  • ❤ 12
  • 🔥 6
  • 👍 4
More from @delay_rag
  1. Sep 22, 2026Ну, наконец! Юбилейный 20-й пост в блоге получился с работой, над которой я давно и долго…
  2. Sep 14, 2026Я хотела перестать сообщать о #RAG_expansion в боте и поисковике, но тут произошло закрыти…
  3. Sep 12, 2026В рамках активностей Лаборатории МГЮА по ИИ провела в четверг занятие по самому элементарн…
  4. Aug 28, 2026В прошедшую среду выступила на прекрасно организованном командами HeadHunter и Moscow Lega…
  5. Aug 21, 2026Важная информация для коллег, использующих поисковик по практике ФАС и коннектор! 🤩 Конне…
  6. Aug 10, 2026Если вы хоть раз пользовались ботом @lastminute_legal_bot, то сегодня вы получили 🎉праздн…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →