3,583 papers
arXiv:2510.27080 63 31 окт. 2025 г. FREE

Hybrid RAG для кибербезопасности: комбинация keyword + semantic поиска для точного извлечения контекста

КЛЮЧЕВАЯ СУТЬ
Обнаружено: RAG промахивается не из-за плохого поиска, а из-за шумного контекста — вручную очищенный дал 82.8% точности, автоматический 57.6%. Гибридный RAG позволяет находить документы и по точным терминам (CVE-2024-5022), и по смыслу запроса — решает проблему промахов в техдоменах типа кибербезопасности. Два канала поиска работают параллельно: BM25 ловит точные совпадения слов (приоритет для технических ID), векторный поиск находит смысловую близость. Скоры нормализуются и взвешиваются — лучшее из двух миров.
Адаптировать под запрос

TL;DR

Что это и как работает:

Исследование про RAG-систему для вопросов по кибербезопасности (уязвимости CVE, слабости CWE). Гибридный retriever комбинирует keyword-поиск (BM25 — находит точные совпадения типа "CVE-2024-5022") и семантический поиск (векторные embeddings — находит похожие по смыслу куски). Плюс regex-фильтр для усиления документов с CVE-идентификаторами. Всё это требует векторную базу данных (FAISS), код на Python и инфраструктуру — не работает в обычном чате.

Главная находка:

LLM с вручную отформатированным контекстом выдала 82.8% точности. Та же LLM с автоматическим RAG (который сам находит контекст) — всего 57.6%. Почему? RAG подгрузил правильный документ, но в нём не было границ предложений, слова слиплись ("Focus for iOS < 12.6" превратилось в кашу), модель запуталась и ответила неправильно. Качество форматирования контекста оказалось критичнее чем сам факт его наличия. Вывод: мусор в контексте хуже чем отсутствие контекста.

Суть метода:

Гибридный retriever взвешивает два типа поиска: α × keyword_score + (1-α) × semantic_score. Keyword ловит точные идентификаторы (CVE-2024-1234), semantic ловит смысл ("buffer overflow" найдёт описание переполнения буфера даже без этих слов). Regex добавляет +1.0 к документам с CVE-ID. После поиска — нормализация и ранжирование. Топ-k документов скармливаются LLM как контекст.


📌

Извлекаемые принципы для работы в чате

Сама RAG-инфраструктура требует код, но из исследования можно извлечь принципы для ручной работы:

📌

Принцип 1: Форматируй контекст как для человека

Что показали: Preformatted context (82.8%) >> RAG с сырым текстом (57.6%). Модель ошибалась даже когда правильный ответ БЫЛ в контексте — из-за слипшихся слов, отсутствия границ предложений, шума.

Как применить: Когда копируешь контекст в промпт — не вставляй как есть из PDF/сайта. Потрать 30 секунд: - Раздели на абзацы - Убери повторы заголовков, навигацию, футеры - Оставь только суть: описание, факты, данные - Добавь структуру: "### Описание", "### Затронутые версии"

Пример:

Плохо:

Вот статья: [вставить 5 страниц скопированного текста с сайта]

Ответь на вопрос: ...

Хорошо:

Вот релевантная информация (я отформатировал для ясности):

### Описание уязвимости CVE-2024-5022
Схемы file:// в URL скрывались, что позволяло подделать адрес сайта 
в адресной строке.

### Затронутые версии
Mozilla Focus for iOS < 126

Ответь на вопрос: затронут ли Firefox for iOS < 126?
📌

Принцип 2: Температура = 0 для фактических вопросов

Что показали: При температуре 0.01 точность +4-9% по сравнению с 0.7 (дефолт) во всех конфигурациях. При температуре 1.0 — ещё хуже, рандомные ответы.

Как применить: В ChatGPT/Claude нельзя менять температуру напрямую, но можно попросить:

Отвечай максимально детерминированно, без креативности. 
Только факты из контекста, никаких додумываний.

[Контекст]
[Вопрос]

Или используй Custom Instructions / System Prompt (где доступно):

Режим работы: фактический анализ без креативности. 
При неуверенности — скажи "недостаточно данных", не додумывай.
📌

Принцип 3: Keyword + смысл = надёжность

Что показали: Гибридный поиск (keyword + semantic) лучше каждого по отдельности. Keyword ловит точные идентификаторы, semantic — смысловые связи.

Как применить вручную:

Когда ищешь информацию для промпта — используй ОБА подхода:

Шаг 1 — Keyword: Загугли точные термины: "CVE-2024-5022", "Firefox iOS 126"

Шаг 2 — Semantic: Загугли смысл: "Firefox iOS адресная строка уязвимость 2024"

Шаг 3 — Объедини: Возьми официальный источник (из keyword-поиска) + детальное объяснение (из semantic-поиска). Скормить оба в промпт.

У меня два источника по уязвимости CVE-2024-5022:

**Источник 1 (официальная база CVE):**
[точное описание]

**Источник 2 (статья с разбором):**
[детальное объяснение]

Вопрос: [...]

🚀

Пример применения

Задача: Проверяешь безопасность корпоративных приложений. Пришло уведомление про CVE-2024-5022 в Firefox for iOS. Нужно понять: затронуты ли мобильные сотрудники, какие версии обновить.

Промпт:

Отвечай строго по контексту, без додумываний.

### Официальное описание CVE-2024-5022

Схемы file:// в URL могли использоваться для подделки адреса 
в адресной строке браузера.

Затронуты версии: Mozilla Focus for iOS < 126

### Наш вопрос

1. Затронут ли обычный Firefox for iOS (не Focus)?
2. Если да — какие версии?
3. Если контекст не содержит ответа — так и скажи.

Результат:

Модель либо найдёт в контексте явное упоминание Firefox (и ответит точно), либо скажет "в предоставленном контексте упомянут только Firefox Focus, про обычный Firefox информации нет". Это избежит галлюцинаций.


🧠

Почему это работает

Слабость LLM: Когда контекст зашумлён (слипшиеся слова, обрывки предложений, навигационный мусор) — модель цепляется за случайные фрагменты. В исследовании LLM видела "Focus for iOS < 12.6" и решила что это не про Firefox, хотя Focus — это вариант Firefox. Форматирование убирает шум.

Сильная сторона LLM: Модель отлично извлекает факты из структурированного текста. Когда есть чёткие границы (абзацы, заголовки), модель точно связывает вопрос и ответ.

Как принцип использует сильную сторону: Ты вручную делаешь то, что RAG-система пытается автоматизировать — находишь релевантный контекст (keyword + semantic поиск) и форматируешь его. Минус: тратишь время. Плюс: гарантируешь качество, нет шума из автоматического retrieval.

Температура = рычаг детерминизма: Для фактических задач (CVE, даты, версии) креативность вредит. Низкая температура заставляет модель идти по самому вероятному пути, не отклоняться на случайные варианты.


⚠️

Ограничения

⚠️ Применимость: Принципы работают для фактических задач (кибербезопасность, аналитика, проверка данных). Для креативных задач (писательство, идеи, brainstorming) форматирование менее критично, а низкая температура вредит.

⚠️ Ручной труд: В исследовании всё автоматизировано через код. Эти принципы требуют ручного поиска и форматирования контекста — окей для разовых задач, утомительно для частых.

⚠️ Узкий домен исследования: Тестировали только на CVE/CWE вопросах. В других доменах (медицина, право, финансы) форматирование может быть менее критичным фактором.


🔍

Как исследовали

Команда взяла 466 вопросов про уязвимости (KCV dataset) и 103 вопроса про слабости кода (CWET dataset). Вопросы типа "Уязвимость CVE-2024-5022 затрагивает Firefox for iOS < 126? True/False". Сравнили три подхода: (1) LLM без контекста — 59.2%, постоянно отвечала "False"; (2) LLM с вручную отформатированным контекстом — 82.8%; (3) LLM с автоматическим RAG — 57.6%, хуже чем вообще без контекста!

Почему RAG провалился? Исследователи разобрали ошибки. Пример: Модель получила документ с правильным ответом ("Focus for iOS < 12.6"), но текст был без пробелов между полями, слова слиплись. Модель решила что "Focus" ≠ "Firefox", ответила неправильно. Когда тот же текст отформатировали вручную (разбили на предложения, добавили заголовки) — модель ответила правильно.

Инсайт: Шум в контексте убивает точность. Гибридный retriever (keyword + semantic + regex для CVE) поднял точность до 72.7% — лучше чем baseline RAG, но всё ещё на 10% хуже чем preformatted. Вывод: автоматический retrieval может найти правильный документ, но если он плохо отформатирован — толку ноль.

Протестировали разные embedding-модели: mxbai-embed-large-v1 (335M параметров) vs multi-qa-MiniLM (22.7M параметров) — разница всего 1.94% точности. Огромная модель почти не даёт преимуществ.

Температура: При temp=0.01 точность 76.3%, при temp=0.7 — 72.7%, при temp=1.0 — 67.2%. Креативность = враг для фактических задач.


🔗

Ресурсы

Adapting Large Language Models to Emerging Cybersecurity using Retrieval-Augmented Generation

Arnabh Borah (Georgia Institute of Technology), Md Tanvirul Alam, Nidhi Rastogi (Rochester Institute of Technology)

Датасеты: SECURE benchmark (KCV, CWET)

Модель: Llama-3-8B-Instruct

Внешние источники: CVE база данных, CWE knowledge base


📋 Дайджест исследования

Ключевая суть

Обнаружено: RAG промахивается не из-за плохого поиска, а из-за шумного контекста — вручную очищенный дал 82.8% точности, автоматический 57.6%. Гибридный RAG позволяет находить документы и по точным терминам (CVE-2024-5022), и по смыслу запроса — решает проблему промахов в техдоменах типа кибербезопасности. Два канала поиска работают параллельно: BM25 ловит точные совпадения слов (приоритет для технических ID), векторный поиск находит смысловую близость. Скоры нормализуются и взвешиваются — лучшее из двух миров.

Принцип работы

Двухканальный поиск. BM25 (точный поиск по словам) находит документы где есть конкретный термин — отлично для CVE-2024-5022, buffer overflow, SQL injection. Векторный поиск ловит смысловую близость — "утечка данных" найдёт "несанкционированный доступ". Взвешенная комбинация α × keyword + (1-α) × semantic — точность для терминов, гибкость для синонимов. Температура 0.01 вместо 0.7 убирает случайность — модель выбирает самый вероятный токен.

Почему работает

Keyword-поиск и semantic-поиск дополняют друг друга. BM25 не найдёт документ если в запросе синоним ("шифрование" vs "криптография"), но отсечёт мусор. Векторы найдут близкое по смыслу, но могут вернуть семантически похожий, но нерелевантный результат ("encryption" похоже на "encoding", но это не то). Даже при правильно найденном документе модель ошибается из-за шума: вручную очищенный контекст 82.8%, автоматический RAG 57.6% — разница в 25 пунктов из-за отсутствия точек между предложениями! Низкая температура (0.01) убирает случайность — +8-10% точности vs дефолтной 0.7.

Когда применять

Техдомены с точными идентификаторами → RAG для актуальной информации (CVE, патчи, новые уязвимости), особенно когда в запросе есть и точные термины, и описание проблемы. НЕ подходит если модель уже знает ответ из training data — RAG добавит лишний шум.

Мини-рецепт

Внимание: Полноценный гибридный RAG требует инфры (векторная база, BM25 индекс, Python-код). В чистом чате ChatGPT не реализовать. Но если есть доступ к API:

1. Настрой два канала поиска: BM25 для точных терминов + векторный (FAISS/Pinecone) для семантики
2. Добавь regex-фильтр: Приоритет для CVE-ID, технических названий если они есть в запросе
3. Взвешивай скоры: α=0.5 для баланса, α>0.7 если много точных терминов в запросе
4. Поставь температуру 0.01: Для фактических задач вместо дефолтной 0.7
5. Очищай контекст: Убирай шум, добавляй точки между предложениями — разница до 25%

Примеры

[ПЛОХО] : Найди информацию про CVE-2024-5022 — семантический поиск находит документы про Firefox, но мимо конкретного CVE.
[ХОРОШО] : Гибридный RAG: regex ловит CVE-ID точно, BM25 находит документы с термином "Firefox Focus", векторы добавляют семантически близкие. Температура 0.01 убирает случайность. Очищенный контекст (точки между предложениями) — разница до 25% точности.
Источник: Adapting Large Language Models to Emerging Cybersecurity using Retrieval Augmented Generation
ArXiv ID: 2510.27080 | Сгенерировано: 2026-01-12 00:33

Проблемы LLM

ПроблемаСутьКак обойти
Шум в контексте мешает найти нужное даже когда оно там естьДаёшь модели текст с правильным ответом. Но текст плохо отформатирован: нет точек между предложениями, куски слиплись, есть посторонние детали. Модель находит правильный фрагмент но путается при извлечении ответа. Сбивается на побочные упоминания, теряет границы мысли, не может отделить нужное от шума. Это проблема для любых задач где вставляешь внешний текст: документы, выдержки из базы, результаты поискаОчисти контекст перед вставкой. Добавь точки между предложениями. Убери дубли и нерелевантные абзацы. Разбей длинные куски на параграфы с явными границами. Один чистый абзац с ответом лучше чем три страницы сырого текста
📖 Простыми словами

Hybrid RAG для кибербезопасности: комбинация keyword + semantic поиска для точного извлечения контекста

arXiv: 2510.27080

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

Это как если бы ты попросил друга найти конкретный закон в огромном кодексе, а он притащил тебе стопку макулатуры, где нужная страница заляпана кофе. Формально информация у него есть, но выудить из нее пользу невозможно. Исследование показало, что чистота контекста решает всё: когда данные вылизаны вручную, точность взлетает до 82.8%, а когда их ищет обычный алгоритм — падает до жалких 57.6%. Этот разрыв в 25 пунктов доказывает, что нейронки дико чувствительны к «шуму» вроде отсутствующих точек или лишних деталей.

Чтобы исправить этот облом, авторы внедрили гибридный поиск. Они смешали старый добрый поиск по ключевым словам BM25 (который тупо ищет совпадения букв) и продвинутый семантический поиск через FAISS, который понимает смысл фразы. Для кибербезопасности это критично: если ты ищешь конкретный уязвимый код типа CVE-2024-5022, тебе не нужны «похожие по смыслу» тексты, тебе нужно точное попадание. Поэтому они добавили regex-фильтры, которые выцепляют такие айдишники с абсолютным приоритетом, не давая модели отвлекаться на общие рассуждения.

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

Короче: хватит надеяться, что нейронка сама разберется в твоем бардаке. Главный вывод исследования — качество поиска важнее мощности модели. Если хочешь, чтобы AI не лажал, строй гибридную систему: пусть она ищет и по смыслу, и по жестким ключам, а перед этим — выкинь из базы весь мусор. Иначе получишь 25% потерь точности на ровном месте, просто потому что модель «не разглядела» суть в потоке воды.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с