Локальное извлечение данных с Qwen 3.5 9B GGUF | Гайд 2026 | AiManual
AiManual Logo Ai / Manual.
01 Апр 2026 Инструмент

Qwen 3.5 9B GGUF: практическое руководство по локальному извлечению данных из документов

Полный гайд по настройке Qwen 3.5 9B GGUF для извлечения структурированных данных из финансовых и юридических документов на своём компьютере. Код, промпты, срав

Зачем в 2026 году вообще возиться с локальными моделями?

Отправлять конфиденциальный договор или отчёт в сторонний API — всё равно что оставлять ключи от квартиры под ковриком. Особенно, если речь о финансовых документах или медицинских историях. К апрелю 2026 года приватность стала не просто модным словом, а жёстким требованием регуляторов. Облачные LLM? Спасибо, но нет.

Локальные модели дают контроль. И вот тут появляется он — Qwen 3.5 9B в формате GGUF. Это не просто очередная маленькая моделька. Это специально заточенный под извлечение данных инструмент, который спокойно живёт на ноутбуке с 16 ГБ ОЗУ. Почему именно он, а не что-то другое? Давайте разбираться.

Qwen 3.5 9B GGUF: Секретное оружие для структурирования хаоса

Qwen 3.5 — семейство моделей от Alibaba Cloud. На апрель 2026 года это всё ещё одна из самых сбалансированных по качеству и размеру серий для локального использования. Версия на 9 миллиардов параметров (9B) — золотая середина: достаточно умная для сложных задач, но достаточно лёгкая для запуска без видеокарты за 2000 долларов.

GGUF — это наследник GGML, формат для llama.cpp. Его главный козырь — эффективное квантование. Модель можно сжать с минимальной потерей качества. Для нашей задачи идеально подходит квантование Q4_K_M — баланс между точностью и размером. Файл весит около 5.5 ГБ. Это меньше, чем многие игры на телефоне.

На заметку: В 2026 году появились более новые квантования, но Q4_K_M для задачи извлечения данных из текста остаётся оптимальным выбором. Более агрессивные сжатия (вроде Q2_K) могут терять важные числовые детали в таблицах.

1 Готовим поле боя: установка llama.cpp

Всё начинается с llama.cpp. Это C++ инференс-движок, который и запускает GGUF-модели. К апрелю 2026 года проект активно развивается, но базовые шаги не поменялись.

# Клонируем репозиторий и собираем
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make -j4

Если `make` завершился без ошибок, у вас появится бинарник `main`. Это наша рабочая лошадка.

2 Находим и загружаем правильную модель

Не все GGUF-файлы одинаково полезны. Ищите проверенные квантования от сообщества. Хорошие источники — Hugging Face и специализированные репозитории. Для нашего гайда возьмём qwen2.5-9b-instruct-q4_k_m.gguf (название может меняться, но суть та же).

# Пример загрузки через huggingface-cli (установите пакет `huggingface-hub`)
huggingface-cli download TheBloke/qwen2.5-9B-Instruct-GGUF qwen2.5-9b-instruct-q4_k_m.gguf --local-dir ./models

Положите файл модели в папку `./models`. Всё, железо готово.

💡
Если хотите поэкспериментировать с другими уровнями сжатия, посмотрите наш обзор скрытых жемчужин квантования Qwen 3.5. Там есть сравнение точности и скорости.

3 Магия начинается: пишем промпт для извлечения

Вот где Qwen 3.5 показывает характер. Модель обучена на инструкциях, поэтому нужно чётко объяснить задачу. Не просите "проанализировать документ". Говорите конкретно: "извлеки следующие поля".

### Инструкция:
Извлеки структурированные данные из текста договора ниже.
Верни ответ в формате JSON со следующими ключами:
- "стороны_договора": [массив имен]
- "сумма_договора": число (только цифры)
- "валюта": код валюты (RUB, USD, EUR)
- "срок_действия": {"начало": "YYYY-MM-DD", "окончание": "YYYY-MM-DD"}
- "ответственное_лицо": ФИО

Если какая-то информация отсутствует, укажи null.

### Текст договора:
{ВСТАВЬТЕ_СЮДА_ТЕКСТ_ВАШЕГО_ДОКУМЕНТА}

### Ответ (только JSON):

Этот промпт — основа. Qwen 3.5 9B отлично справляется с подобными шаблонами и редко начинает "творить" лишний текст.

4 Запускаем пайплайн: от текста к JSON

Допустим, у вас есть PDF. Сначала конвертируем его в текст. Для этого в 2026 году всё ещё отлично работает `pdftotext` (poppler-utils).

# Конвертируем PDF в текст
pdftotext ваш_документ.pdf - | head -c 8000 > document.txt
# Ограничиваем длину, контекстное окно модели не бесконечное

Теперь создаём Python-скрипт, который соберёт промпт и отправит его в модель через llama.cpp.

import subprocess
import json
import sys

model_path = "./models/qwen2.5-9b-instruct-q4_k_m.gguf"
llama_bin = "./llama.cpp/main"

def extract_data_from_text(text: str) -> dict:
    prompt_template = """### Инструкция:
Извлеки структурированные данные из текста договора ниже.
Верни ответ в формате JSON со следующими ключами:
- \"стороны_договора\": [массив имен]
- \"сумма_договора\": число (только цифры)
- \"валюта\": код валюты (RUB, USD, EUR)
- \"срок_действия\": {\"начало\": \"YYYY-MM-DD\", \"окончание\": \"YYYY-MM-DD\"}
- \"ответственное_лицо\": ФИО

Если какая-то информация отсутствует, укажи null.

### Текст договора:
{text}

### Ответ (только JSON):"""
    
    full_prompt = prompt_template.format(text=text[:6000])  # Учитываем контекст
    
    # Запускаем llama.cpp
    cmd = [
        llama_bin,
        "-m", model_path,
        "-p", full_prompt,
        "-n", "512",          # Максимальная длина ответа
        "-t", "6",            # Количество потоков CPU
        "-c", "8192",         # Размер контекста
        "--temp", "0.1",       # Низкая температура для детерминированности
        "--silent-prompt"
    ]
    
    try:
        result = subprocess.run(cmd, capture_output=True, text=True, timeout=120)
        output = result.stdout
        # Пытаемся найти JSON в выводе
        start = output.find('{')
        end = output.rfind('}') + 1
        if start != -1 and end != 0:
            json_str = output[start:end]
            return json.loads(json_str)
        else:
            print("Не удалось найти JSON в ответе модели", file=sys.stderr)
            return {}
    except subprocess.TimeoutExpired:
        print("Таймаут выполнения модели", file=sys.stderr)
        return {}

if __name__ == "__main__":
    with open("document.txt", "r", encoding="utf-8") as f:
        doc_text = f.read()
    extracted = extract_data_from_text(doc_text)
    print(json.dumps(extracted, ensure_ascii=False, indent=2))

Запускаете скрипт и получаете готовый JSON. Всё работает оффлайн. Никаких API-ключей, никаких лимитов на запросы.

А что, если взять не Qwen 3.5? Сравниваем альтернативы

Llama 3.2 3B? Слишком глупая для сложных документов. Command R+? Отличная модель, но её GGUF-квантования на 2026 год могут быть менее стабильными. Claude 3.5 Haiku? Только облако, забыли.

Модель / Инструмент Плюсы для извлечения данных Минусы
Qwen 3.5 9B GGUF + llama.cpp Полный оффлайн контроль, низкие требования к RAM (от 10 ГБ), отличное понимание русского и английского. Требует ручной подготовки пайплайна (PDF -> текст -> промпт). Скорость на CPU: 2-5 токенов/сек.
Ollama с Qwen 3.5 9B Проще установка, есть готовый API. Автоматическое скачивание моделей. Меньше контроля над квантованием. Может занимать больше памяти в фоне.
Платформы вроде LangChain + локальный эмбеддинг Мощнее для больших объёмов документов (см. локальный RAG для миллионов PDF). Чудовищно сложная настройка. Из пушки по воробьям для задачи простого извлечения полей.

Вывод простой: если вам нужно регулярно вытаскивать одни и те же поля из сотен однотипных документов (скажем, суммы из счетов или даты из актов), то связка Qwen 3.5 9B GGUF + простой скрипт — идеальный свайп. Не нужен GraphRAG и не нужен облачный API.

Кому этот инструмент зайдёт, а кому нет?

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

Даже не смотрите в эту сторону, если: Вам нужно обрабатывать тысячи документов в час. Точность должна быть 100% (а она никогда не будет, всегда нужна проверка). Вы боитесь командной строки. Для вас проще заплатить стороннему сервису.

Главный миф: локальные модели работают так же хорошо, как GPT-4 Turbo. Не работают. Qwen 3.5 9B может ошибиться в дате или пропустить пункт. Но его ошибки предсказуемы и их легко отловить. Он не выдумает новую сторону договора, а скорее вернёт null. Это уже лучше, чем полная ручная работа.

Что дальше? Соберите скрипт в исполняемый файл, настройте запуск по папке с PDF-ками и забудьте о рутинном копипасте. А если нужно работать с изображениями документов (сканами), то сначала прогоните их через Qwen2.5-VL для OCR. Но это уже другая история.

Кстати, к концу 2026 года ждите появления Qwen 4.0. Слухи говорят, что её 7B-версия будет умнее текущей 9B. Когда выйдет — первым делом проверьте, не стала ли она ещё жаднее до оперативной памяти.

Подписаться на канал