Модель на 1.7B параметров бьёт 32B по верности контексту — как запустить OCC-RAG от AIRI
AIRI выпустила OCC-RAG-0.6B и 1.7B — модели для RAG, которые отвечают строго по документам и бьют модели в 6 раз крупнее по faithfulness. Гайд по запуску.

Команда AIRI выпустила OCC-RAG-0.6B и OCC-RAG-1.7B — компактные модели, заточенные под одну задачу: отвечать строго по переданным документам и честно молчать, когда ответа в контексте нет. Если вы строите RAG-пайплайн и устали от галлюцинаций, это стоит попробовать.
Почему обычные модели плохо работают в RAG
Проблема не в размере модели, а в том, как она расставляет приоритеты. LLM обучены на огромных корпусах и по умолчанию доверяют собственной «памяти» больше, чем тексту в контексте. Когда контекст противоречит параметрическим знаниям модели — она часто игнорирует документ.
Классический пример от команды AIRI: в контексте написано «в 2022 году Шарль де Голль был избран первым президентом США». Вопрос — «Кто первый президент США?». Llama-3-8B отвечает «Джордж Вашингтон» (игнорирует контекст), Llama-3.2-1B галлюцинирует «Дональд Трамп», а OCC-RAG-1.7B отвечает «де Голль» — строго по источнику. Именно это называется faithfulness, и именно это нужно в корпоративных RAG-системах, где документ важнее энциклопедии.
Что внутри OCC-RAG
Модель обучена на трёх навыках одновременно.
Multi-hop рассуждение — собрать ответ из нескольких фрагментов контекста, связав факты между собой. Для этого авторы строили граф знаний из текстов методом Wikontic (триплеты «сущность — отношение — сущность») и генерировали вопросы, требующие нескольких шагов логики.
Следование контексту — не подмешивать параметрическую память. Обеспечивается синтетическим корпусом, где часть примеров намеренно содержит факты, противоречащие общеизвестным.
Калиброванный отказ — если ответа в контексте нет, модель говорит об этом явно, а не придумывает. Примеры для отказа генерировались так: брали исходный пример, удаляли из контекста нужный источник, проверяли DeBERTa (дообученной на SQuAD), что ответ действительно исчез — и помечали как «требует отказа».
Ответы модели содержат структурированные цепочки рассуждений с цитатами из контекста — дословными фрагментами, на которые опирается вывод.
Как запустить модель
Оба чекпойнта доступны на Hugging Face. Есть стандартные веса, ONNX- и GGUF-сборки для локального запуска.
Установка зависимостей:
``bash pip install transformers torch ``
Базовый запуск через transformers:
```python from transformers import AutoTokenizer, AutoModelForCausalLM import torch
model_id = "AIRI-Institute/OCC-RAG-1.7B" # или OCC-RAG-0.6B
tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained( model_id, torch_dtype=torch.bfloat16, device_map="auto" )
context = """ Согласно отчёту за Q1 2025, выручка компании составила 4,2 млрд рублей. Операционная прибыль выросла на 18% год к году. """
question = "Какова операционная прибыль компании по сравнению с прошлым годом?"
prompt = f"""Ответь на вопрос строго по контексту.
Контекст: {context}
Вопрос: {question} Ответ:"""
inputs = tokenizer(prompt, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_new_tokens=256, do_sample=False) print(tokenizer.decode(outputs[0], skip_special_tokens=True)) ```
Для локального запуска через llama.cpp с GGUF-сборкой:
``bash ./llama-cli \ -m occ-rag-1.7b.gguf \ -p "Контекст: {ваш текст}\n\nВопрос: {вопрос}\nОтвет:" \ -n 256 \ --temp 0 ``
Флаг --temp 0 здесь принципиален: для задач faithfulness нужна детерминированная генерация, а не творческая.
Как встроить в RAG-пайплайн
OCC-RAG хорошо ложится на стандартную схему: retriever достаёт релевантные чанки, модель отвечает по ним. Ключевое отличие от обычного промптинга — модель сама цитирует источники в ответе, что упрощает верификацию.
Минимальная схема с langchain:
```python from langchain.chains import RetrievalQA from langchain_community.llms import HuggingFacePipeline from transformers import pipeline
pipe = pipeline( "text-generation", model=model, tokenizer=tokenizer, max_new_tokens=256, do_sample=False )
llm = HuggingFacePipeline(pipeline=pipe)
retriever — ваш существующий компонент (FAISS, Chroma и т.д.)
qa_chain = RetrievalQA.from_chain_type( llm=llm, retriever=retriever, return_source_documents=True )
result = qa_chain.invoke({"query": "Ваш вопрос"}) print(result["result"]) ```
Системный промпт менять не нужно — модель обучена работать с контекстом в стандартном формате.
Где это ломается
Контекст без ответа и нечёткая граница. Калиброванный отказ работает хорошо на чистых случаях, но если ответ «почти есть» — модель может колебаться. Проверяйте пограничные сценарии на своих данных до деплоя.
Очень длинный контекст. Модели компактные — окно контекста ограничено. При большом числе чанков качество multi-hop рассуждения деградирует. Оптимальный размер контекста — проверяйте на своей задаче, начните с 2-4 чанков по 512 токенов.
Специализированные домены. Синтетический корпус строился на Википедии. Если ваши документы — юридические контракты или медицинские протоколы со специфической структурой, возможны неожиданные паттерны. Дообучение на доменных данных может потребоваться.
Температура выше нуля. При temperature > 0 модель начинает «творить» — faithfulness падает. Для продакшена используйте жадную генерацию (do_sample=False).
Что попробовать дальше
Сравните OCC-RAG-0.6B и 1.7B на вашем бенчмарке — авторы утверждают, что 0.6B уже конкурирует с моделями общего назначения в 2-3 раза крупнее. Если ресурсы ограничены, это может быть достаточно.
Посмотрите на ONNX-сборку для инференса без GPU — для корпоративных RAG-систем, где нужна предсказуемая задержка, это практичный вариант. Оба чекпойнта и сборки доступны на странице AIRI-Institute на Hugging Face.