Как собрать RAG-бота на T4 для учебников обществознания: Qwen вместо веб-поиска
Автор собрал RAG-бот для учебников обществознания 9 и 10 класса, который ищет ответы не в интернете, а в загруженных текстах. На уроках важна не правильность ответа вообще, а совпадение с формулировками конкретного учебника — вот почему бот ограничивает контекст вместо доступа в веб. Пайплайн парсит PDF через pymupdf4llm, нарезает текст с метаданными (класс, параграф, страница), кодирует эмбеддингами intfloat/multilingual-e5-large в FAISS. Пользователь спрашивает про параграф, бот ищет в метаданных, передает найденные фрагменты в Qwen2.5-3B-Instruct с системным промптом, получает ответ со ссылкой на страницу. • **Стек**: Qwen2.5-3B-Instruct на T4 (4-битная квантизация NF4 через bitsandbytes), FAISS в памяти, intfloat/multilingual-e5-large для эмбеддингов, Google Colab. • **Ограничение модели**: фильтрация по метаданным, узкий контекст в промпте, низкая температура генерации (0.1). • **В планах**: валидация ответов на соответствие контексту, хранение состояния сессии, коррекция номеров страниц.
AI-обработка оригинала Хабр: Машинное обучение; редакция Hamidun News
Маленькая модель с контекстом вместо большой с интернетом
В России вводятся единые государственные учебники, и энтузиаст решил собрать помощника для них. RAG-бот ищет ответы на вопросы по обществознанию не в интернете и не в общих весах модели, а в двух загруженных учебниках за 9 и 10 класс.
Почему это нужно? На уроке за ответ по конкретному учебнику ставят оценку, за философский ответ из общих знаний — нет. Обычная большая модель с доступом в интернет выдает правильное, но не совпадающее с учебником объяснение. Нужна другая архитектура: маленькая модель, которая получает короткий, узкий контекст и не уходит в общие рассуждения. Низкая температура генерации и системный промпт помогают держаться ближе к тексту. Ограниченный контекст не лишает модель базовых знаний, но все же переводит ее в режим поиска в конкретном материале, а не рассуждения на тему.
Пайплайн: от PDF до ответа
Стек технологий прост. pymupdf4llm парсит PDF постранично, конвертирует в Markdown с сохранением таблиц и списков. MarkdownHeaderTextSplitter разбирается с тремя уровнями: Глава (#) → Параграф (##) → Подраздел (###). Каждый фрагмент сохраняет метаданные: класс, номер параграфа, номер страницы.
Второй проход — RecursiveCharacterTextSplitter с chunk_size=1000 и chunk_overlap=150 режет длинные секции на управляемые чанки. Эмбеддинги intfloat/multilingual-e5-large кодируют текст, база FAISS (faiss-cpu) работает в памяти Colab.
Когда пользователь пишет «дай ответы на вопросы 13 параграфа 10 класса», регулярное выражение вытаскивает класс и номер. Функция smart_filter проверяет совпадение метаданных с запросом. FAISS возвращает до четырех релевантных фрагментов. Если жесткий фильтр ничего не нашел, код повторяет поиск только по классу — контекст может прийти из другого параграфа.
Найденные фрагменты собираются в контекст с метаданными [10 класс | § 13 | Стр. 45] и идут в Qwen2.5-3B-Instruct с системным промптом: отвечай строго по предоставленному тексту, в конце напиши номер страницы. Модель работает при температуре 0.1. После каждого ответа вызывается torch.cuda.empty_cache(), освобождая кешированную память.
Инфраструктура, проблемы и планы
Модель: Qwen2.5-3B-Instruct (3 млрд параметров). Квантизация: 4-битная NF4 через bitsandbytes — так модель влезает в видеопамять T4. Эмбеддинги: intfloat/multilingual-e5-large. Векторная база: FAISS (faiss-cpu) в оперативной памяти. Инфраструктура: Google Colab с бесплатным T4 GPU. Все работает на одной машине.
Форматирование ответов выглядит как сырой Markdown (видны маркеры **). Метаданные параграфа теряются на страницах без заголовка: если параграф начинается на 139-й и продолжается на 140-й, фрагменты со второй страницы остаются без метаданных и не попадают в выдачу по конкретному параграфу. Нет фактчекинга: бот не проверяет, действительно ли фраза в ответе соответствует найденному контексту. Класс пользователя не запоминается между сообщениями. Номер страницы файла может отличаться от напечатанного в бумажном издании.
Автор планирует масштабировать на историю и биологию. На ближайшие спринты: настроить форматирование ответов, реализовать хранение состояния сессии, добавить валидацию ответов перед отправкой, решить проблему потерянных метаданных на многостраничных параграфах.
- 27 окт. 2026 г.DingTalk открыл код DWS и перенёс на HarmonyOS PC 1000+ команд для ИИ-агентов
- 27 окт. 2026 г.Qwen3.8 пыталась загрузить файл в облако Alibaba в Пекине из песочницы Cohere
- 26 окт. 2026 г.Claude Opus 5.5 выиграл Code2Video-AA с 1536 Elo, обойдя GPT-6 Astra на 109
- 26 окт. 2026 г.Alibaba выпустила второе поколение очков на Qwen по цене от $450
Вопросы и ответы по материалу
Что известно по теме: маленькая модель с контекстом вместо большой с интернетом?
В России вводятся единые государственные учебники, и энтузиаст решил собрать помощника для них. RAG-бот ищет ответы на вопросы по обществознанию не в интернете и не в общих весах модели, а в двух загруженных учебниках за 9 и 10 класс. Почему это нужно? На уроке за ответ по конкретному учебнику ставят оценку, за философский ответ из общих знаний — нет. Обычная большая модель с доступом в интернет выдает правильное, но не совпадающее с учебником объяснение. Нужна другая архитектура: маленькая модель, которая получает короткий, узкий контекст и не уходит в общие рассуждения. Н
Что известно по теме: пайплайн: от PDF до ответа?
Стек технологий прост. pymupdf4llm парсит PDF постранично, конвертирует в Markdown с сохранением таблиц и списков. MarkdownHeaderTextSplitter разбирается с тремя уровнями: Глава (#) → Параграф (##) → Подраздел (###). Каждый фрагмент сохраняет метаданные: класс, номер параграфа, номер страницы. Второй проход — RecursiveCharacterTextSplitter с chunk_size=1000 и chunk_overlap=150 режет длинные секции на управляемые чанки. Эмбеддинги intfloat/multilingual-e5-large кодируют текст, база FAISS (faiss-cpu) работает в памяти Colab. Когда пользователь пишет «дай ответы на вопросы 13
Что известно по теме: инфраструктура, проблемы и планы?
Модель: Qwen2.5-3B-Instruct (3 млрд параметров). Квантизация: 4-битная NF4 через bitsandbytes — так модель влезает в видеопамять T4. Эмбеддинги: intfloat/multilingual-e5-large. Векторная база: FAISS (faiss-cpu) в оперативной памяти. Инфраструктура: Google Colab с бесплатным T4 GPU. Все работает на одной машине. Форматирование ответов выглядит как сырой Markdown (видны маркеры ). Метаданные параграфа теряются на страницах без заголовка: если параграф начинается на 139-й и продолжается на 140-й, фрагменты со второй страницы остаются без метаданных и не попадают в выдачу по ко
Соберите рабочего ИИ-агента или сервис своими руками без ручного кода
В Академии Жемала Хамидуна (academy.hamidun.com) открыт бесплатный 72-часовой тест-драйв: интерактивные скетч-уроки по Claude Code и Cursor, живой Tech Radar и готовые шаблоны агентов.
Главное из мира ИИ — раз в неделю
7 ключевых событий недели, отобранных вручную. Без шума, репостов и пресс-релизов.
Готово! Проверьте почту — мы отправили подтверждение.