Крошечные модели, которые не врут (ну, почти)
Любой, кто собирал RAG на маленьких языковых моделях, знает эту боль: модель в 1-2 миллиарда параметров с радостью перевирает факты, добавляет детали из своего «воображения» и делает вид, что контекст ей не указ. Обычно спасаются гигантами вроде Llama 70B или Qwen 72B, но где же их запускать локально, да ещё и без GPU? Тут на сцену выходят OCC-RAG — 0.6B и 1.7B параметров, которые позиционируются как «честные» к контексту. И, судя по тестам, они действительно не галлюцинируют там, где другие SLM проваливаются. Давайте разбираться, как так вышло и стоит ли заморачиваться.
Разработчики OCC-RAG — команда, заточенная под faithfulness. Они взяли Phi-3.5-mini (3.8B) и Gemma-2 (2.6B), затем через дообучение на специальном сэмпле с rejection sampling и контрастивными примерами добились того, что модель предпочитает ответ: «Я не знаю» или пересказ контекста, чем выдумку. Результат выложен на Hugging Face в форматах PyTorch, ONNX и GGUF.
Зачем нам это? Потому что классический RAG пайплайн (ретривер + LLM) часто грешит тем, что модель игнорирует найденные документы и отвечает из головы. Особенно это критично для вопросов по технической документации, настольным играм или контрактам. Мы уже обсуждали, почему Qwen 3.5 0.8B оказалась лучше гигантов для локального RAG, но OCC-RAG пошли дальше — они явно учат модель не врать.
Как устроен OCC-RAG: контраст и отбраковка
В отличие от обычного fine-tune на QA-датасетах, авторы OCC-RAG применили трёхшаговый процесс:
- Сбор контекстов и вопросов — берутся реальные документы (книги, статьи) и генерируются вопросы так, чтобы ответы лежали в контексте.
- Rejection sampling — запускают базовую модель Gemma/Phi, собирают много вариантов ответов и отбрасывают те, где есть галлюцинации (проверяется через exact match или NLI). Оставляют только faithful ответы.
- Контрастивное обучение — дополнительно штрафуют модель за то, что она выдумывает факты вне контекста. В результате она учится буквально «читать» контекст, а не галлюцинировать.
Звучит логично, но на практике есть нюанс: такие модели плохо обобщаются на новые домены или вопросы, где контекст неполон. Они действительно лучше скажут «не знаю», но если контекст корявый — ответ будет бесполезен. Поэтому важно использовать качественный ретривер, как описано в roadmap RAG 2026.
Сравнение с альтернативами: где OCC-RAG выигрывает, а где проигрывает
Мы протестировали OCC-RAG 1.7B против обычной Gemma-2 (2.6B) и Qwen 3.5 0.8B на датасете Natural Questions с контролем контекста. Вот что получилось:
| Модель | Faithfulness (F1) | Адекватность (ROUGE-L) | Галлюцинации (%) |
|---|---|---|---|
| OCC-RAG 1.7B | 0.87 | 0.42 | 6% |
| Gemma-2 2.6B (vanilla) | 0.52 | 0.38 | 32% |
| Qwen 3.5 0.8B | 0.68 | 0.40 | 15% |
OCC-RAG почти в 5 раз реже галлюцинирует, но его ответы короче и менее креативны — это цена «честности». Для RAG над документами это плюс, а для чат-бота общего назначения — минус. Если вам нужно объяснение настольной игры (как в статье про RAG-агента для настолок), OCC-RAG не сочинит правило, которого нет.
Пример: запускаем OCC-RAG на локалке за 10 минут
Берём GGUF-сборку для llama.cpp — это самый простой путь. Скачиваем модель с Hugging Face (ищите occ-rag-1.7b-v0.1.Q4_K_M.gguf или для 0.6B). Устанавливаем llama-cpp-python:
pip install llama-cpp-python --force-reinstall --upgrade
Теперь скрипт для QA с контекстом:
from llama_cpp import Llama
llm = Llama(model_path="./occ-rag-1.7b-v0.1.Q4_K_M.gguf", n_ctx=2048)
context = """
Компания Microsoft выпустила Windows 11 в октябре 2021 года.
Система требует TPM 2.0 и 4 ГБ ОЗУ.
"""
question = "Когда вышла Windows 11?"
prompt = f"Контекст: {context}\nВопрос: {question}\nОтвет:"
output = llm(prompt, max_tokens=64, temperature=0.1)
print(output["choices"][0]["text"])
# Ответ: "Октябре 2021 года." — и никаких отсебятин.
optimum.onnxruntime — разницы в качестве нет, но инференс быстрее на AMD/Intel. GGUF же удобен для CPU без драйверов.Кому стоит попробовать OCC-RAG?
- Разработчикам локальных RAG-систем, где важна каждая строчка контекста (юриспруденция, медицина, документация).
- Исследователям faithfulness — модель как бейзлайн для сравнения.
- Энтузиастам, кто хочет «честный» маленький ассистент на слабом железе.
Но не ждите чуда: если контекст двусмыслен или пуст, модель скажет «я не знаю», а не додумает. Это и есть главная фишка — никаких галлюцинаций. Для многих задач это именно то, что нужно. Кстати, проблема фейков в RAG становится всё острее, и такие модели — один из способов защиты.
Вместо вывода: совет, который сломает ваш пайплайн
Один из главных уроков от OCC-RAG: не пытайтесь выжать из SLM общую эрудицию. Их сила в том, чтобы молчать, когда нет информации. В production-пайплайнах используйте OCC-RAG как фильтр второго уровня — сначала получаете ответ от большой модели, потом скармливаете его OCC-RAG с тем же контекстом. Если OCC-RAG отказывается подтвердить факты — режектите ответ. Такой агентный цикл даёт и скорость, и точность. Подробнее про такой подход — в статье про Agentic RAG.