Marketing OS

Кейс · Marketing OS

База знаний по исследованиям и ассистент: как устроен RAG в маркетинге

Исследования аудитории лежат в кабинете в Markdown, который читают и люди, и модель. Ассистент отвечает по ним со ссылкой на исследование и слайд. Данные он меняет только с согласия человека.

  1. ЗагрузкаPPTX, PDF, XLSX, CSV, TXT или MD; перед обработкой из текста вычищаются персональные данные.
  2. ВыжимкаМодель пишет конспект по фиксированным разделам, под ним встаёт дословный текст источника.
  3. Проверка человекомИтоговый Markdown виден целиком до того, как документ попадёт в поиск.
  4. ИндексацияДокумент режется по разделам, каждый фрагмент получает вектор и полнотекстовый индекс.
  5. Гибридный поискВекторный и полнотекстовый ранги сводятся в один по формуле RRF.
  6. Ответ ассистентаДо трёх раундов поиска подряд, ответ со ссылкой на исследование и номер слайда.
Содержание ↓
  1. Исследования, которые никто не перечитывает
  2. Как устроено: два контура
  3. Ассистент
  4. Что держит код
  5. Что получает маркетолог
  6. Грабли
  7. С чего начать

Исследования, которые никто не перечитывает

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

Задача, которую я ставил себе: положить исследования туда, где их находит и человек, и модель, а ответ приходит со ссылкой вида «такое-то исследование, слайд 14». Отдельно — чтобы бриф кампании опирался на те же документы, что читает команда.

Как устроено: два контура

В кабинете две базы. Первая кормит бриф кампании, вторую читают люди и ассистент.

База документов для кампаний

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

Поиск берёт до восьми фрагментов с порогом сходства 0,72. Если сильных совпадений меньше трёх, он добирает полнотекстовым поиском: на названиях и цифрах это спасает. Для каждого документа модель один раз пишет конспект, и на этих конспектах стоит бриф в разделе кампаний.

Библиотека исследований

Второй контур я строил под вопросы команды. Файл превращается в канонический Markdown, человек его проверяет, и только потом документ уходит в поиск. Статусы видны в интерфейсе по шагам: извлечение текста, выжимка, готово к проверке, индексация, готово.

Сверху документа модель пишет выжимку из шести обязательных разделов, среди них резюме, методология, сегменты, барьеры и живые цитаты клиентов. Числа — дословно, только из текста. Под выжимкой стоит полный текст источника, тоже дословно. Документ режется по заголовкам второго уровня, и у презентации один слайд становится одним фрагментом.

Поиск гибридный. Векторный ранг и полнотекстовый ранг по-русски сводятся формулой RRF с константой 50 прямо в базе, по умолчанию ассистент получает 8 лучших слайдов. Когда в вопросе термин или цифра, выручает полнотекстовый. Если человек спросил своими словами, находит векторный.

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

Ассистент

Кнопка ассистента есть на страницах кампаний, медиакалендаря, радара рынка и проектов, на главной — полноэкранный чат. Работает он на gpt-4.1-mini с температурой 0,3, в контекст уходят последние 10 сообщений и страницы проектной вики по текущему разделу. Вики читается с диска на каждый запрос, поэтому ассистент знает о разделе то же, что написано в документации сегодня.

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

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

Что держит код

У модели здесь немного дел: выжимка, поисковый запрос и текст ответа. Всё, что под ними, написано кодом.

  • Разбор PPTX — свой, на zip и XML, без распознавания картинок. Порядок слайдов берётся из списка презентации: по именам файлов slide10 встал бы раньше slide2. Из диаграмм достаются сами ряды данных, потому что в исследовательских презентациях большая часть чисел живёт в графиках. Тестовая презентация на 300 слайдов, где группы вложены друг в друга на 40 уровней, разбирается за доли секунды.
  • Персональные данные вычищаются до выжимки и до хранения.
  • Идентификатор документа строится из названия детерминированно. Повторная загрузка обновляет старые фрагменты, дубли не появляются.
  • Индексация, пересборка выжимки и удаление одного документа не идут одновременно: каждая операция сначала занимает документ сменой статуса.
  • Права проверяются внутри серверного действия. Серверное действие — открытый адрес, спрятанной кнопки для защиты мало.

Что получает маркетолог

Главное — библиотека исследований. Каждый документ в ней читается целиком, с оглавлением, и скачивается в Markdown, а бейдж рядом показывает, сколько фрагментов документа лежит в базе ассистента. На вопрос «что мешает сегменту X» ассистент отвечает ссылкой на исследование и слайд. И бриф кампании собирается на тех же документах, что читает команда.

Грабли

Выжимка вместо документа. Первая версия хранила только конспект. Он сжимал исследование примерно до шестой части объёма, и длинный PDF-отчёт превращался в 9 фрагментов. В поиск не доходили ни цифры, ни сегменты, ни цитаты. Выжимка к тому же утверждала, что методология в исследовании не описана. Она там была. После того как под выжимку встал дословный текст, тот же отчёт дал 41 фрагмент.

Текст без заголовков. Нарезка идёт по заголовкам второго уровня, и плоский текст без них выпал бы из индекса целиком. Для таких источников код сам расставляет блоки «Фрагмент N».

Сироты в поиске. Удаление искало фрагменты по фиксированной метке происхождения. Документы, загруженные пакетом, оставляли в поиске фрагменты-сироты, а переиндексация плодила дубли. Помогло поле происхождения у самого документа.

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

Вики отстала от кода. Этот текст я писал по собственной вики проекта и сверял с кодом. Вики обещала фрагменты по 500 знаков и старую модель эмбеддингов, в коде оказались 1 800 знаков и text-embedding-3-small. Про модель эмбеддингов это расхождение однажды уже породило ложное техзадание.

Анонимайзер ловит не всё, поэтому перед индексацией Markdown просматривает человек.

С чего начать

Я бы взял десяток исследований, о которых команда спрашивает чаще всего, и сразу положил под выжимку дословный текст: без него поиск не увидит ни цифр, ни цитат. Из техники хватит Postgres с pgvector, одной модели эмбеддингов, разбора PDF и PPTX и промпта выжимки с фиксированными разделами.

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

  • Next.js
  • Supabase
  • pgvector
  • OpenAI text-embedding-3-small
  • gpt-4.1-mini

Вопросы

Вопросы и ответы

Зачем своя база, если можно загрузить PDF в ChatGPT?

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

Какие файлы можно загрузить?

PPTX, PDF, XLSX, CSV, TXT и MD. Сканы без текстового слоя и DOCX раздел отклоняет, старый PPT просит пересохранить в PPTX.

Может ли ассистент что-то испортить в данных?

Сам — нет. Кампанию, её статус или страницу проектной вики он трогает только после того, как человек нажал «Подтвердить».

Консультация

Разберём вашу задачу

Опишите в Telegram процесс, который хотите отдать ИИ: что на входе, какие данные есть, кто будет пользоваться результатом. Отвечу, с чего начать. Иногда хватает одного созвона, а иногда нужен аудит с письменным отчётом или сопровождение команды на весь пилот.

Дмитрий Щеголяев с микрофоном на Мобильном Форуме