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

Для AI-инженеров это системная проблема. Возьмём автоматизацию документооборота: нужно классифицировать договоры, извлекать реквизиты, проверять стандарты. Но модель работает как лотерея — результат не поддаётся логике или меняется при повторном запуске с одинаковыми данными. Как встроить такой результат в бизнес-процесс?

Особенно остро это ощущается с локальными моделями. Они проигрывают облачным гигантам в качестве, но выигрывают в приватности, скорости и цене. Для банков, госструктур и медицинских компаний локальные решения часто единственный вариант — поэтому стабильность LLM становится ключевым требованием.

Для решения этой задачи появился подход Schema-Guided Reasoning (SGR). Его активно продвигает Ринат Абдуллин в материалах по работе с LLM. Идея проста и эффективна: заставить модель мыслить не хаотично, а внутри заданной схемы. 

Схема служит логическим каркасом для каждого рассуждения. Обычный запрос лишь задаёт направление, а SGR выстраивает строгую структуру, в которой модель обязана пройти все поля и пункты. Это не панацея, но SGR серьёзно снижает количество ошибок, делает процесс прозрачнее, а также позволяет тестировать отдельные компоненты рассуждений.

Когда логике нужны рельсы

В SGR схема — это структурированное описание того, как модель должна рассуждать. Обычно её задают через Pydantic-модели или JSON-схемы, где для каждого элемента указаны тип данных и описание.

from pydantic import BaseModel

from typing import List

class MathReasoning(BaseModel):

    problem: str

    steps: List[str] 

    final_answer: float

SGR использует структурированный вывод и ограниченное декодирование. Проще говоря, с помощью такого вывода модель может выдать ответ только в том виде, который заранее определили. Например, если в схеме указано, что final_answer должно быть числом, модель не напишет там «около сорока» или «сложно сказать». Она будет вынуждена предоставить конкретное число в нужном формате.

Схема не «зажимает» модель, а даёт ей понятный алгоритм. Это похоже на чек-лист доктора: сначала собрать симптомы и проверить показатели, потом выдвинуть гипотезы и назначить анализы и лишь затем ставит диагноз. Модель может думать как хочет, но в итоге обязана заполнить все поля.

Что это даёт на практике

Schema-Guided Reasoning быстро показывает эффект, когда попадает в реальные рабочие процессы. Структурированный вывод делает работу модели аккуратнее и предсказуемее — это отражается на нескольких ключевых аспектах.

Предсказуемость и стабильность
Ответы перестают быть лотереей. Модель возвращает JSON с заданными полями, а не текст, который каждый раз приходится разбирать регулярками. Это критично, когда результат встроен в систему, от которой зависят другие процессы.

Повышение точности
Модель не может пропустить обязательные шаги рассуждения, поэтому по опыту точность растёт на 5–10 %. Исчезает неоднозначность, а результат становится воспроизводимым: при одинаковых данных вы получаете одинаковый ответ.

Прозрачность рассуждений
По промежуточным шагам легко понять, как модель пришла к выводу. Если SQL-запрос неверный, можно открыть поле strategy и сразу увидеть, где ошибка — в логике или синтаксисе. Это сокращает время на отладку.

Возможность встраивать экспертные знания
В схему можно заложить доменные правила. Например, в медицине — чёткий порядок: сбор симптомов → дифференциальная диагностика → итоговый вывод. Модель не пропустит важные этапы и сохранит последовательность мышления.

Три паттерна работы

SGR строится на паттернах — готовых схемах, которые организуют рассуждения модели. Люди тоже мыслят по шаблонам, и SGR предлагает привить тот же навык языковым моделям.

Обычно выделяют три основных подхода к структурированному мышлению: каскад, маршрутизация и цикл.

Каскад — последовательные шаги

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

class TextAnalysis(BaseModel):
    summary: str
    quality_rating: int
    final_recommendation: str

Плюсы: модель движется пошагово, что помогает избежать ошибок и делает ход мысли понятным. Каждый этап можно проверить отдельно. Логика рассуждений зашита в структуру данных, которую легко контролировать.

Маршрутизация — выбор подхода под задачу

Маршрутизация нужна, когда заранее неизвестен тип входящей задачи. Например, нужно проанализировать юридические, финансовые или технические документы. Каждому типу нужен свой алгоритм разбора.

class DocumentAnalysis(BaseModel):

    document_type: str  # "legal", "financial", "technical"

    analysis_result: dict

Суть: модель сначала определяет категорию document_type, а затем запускает специализированную под этот тип цепочку действий. Вместо одного сложного алгоритма получается набор «маршрутов», каждый из которых заточен под свою задачу. Это делает систему гибкой.

Цикл — уточнение через повтор

Цикл полезен, когда результат нужно постепенно уточнять. Модель выдвигает гипотезу, затем сама её проверяет — ищет противоречия — и при необходимости пересматривает ответ. Это похоже на процесс редактирования: черновик, правки, готовый вариант.

class ComplianceAnalysis(BaseModel):

    hypothesis: str

    verification_questions: List[str]

    final_verdict: str

Цикл хорошо работает в неоднозначных ситуациях, где критична точность. Например, при проверке текста на соответствие регламенту. Модель строит гипотезу, задаёт себе уточняющие вопросы: «На какие пункты регламента это ссылается? Есть ли исключения?». При неубедительном ответе запускается новый виток. Правда, за это приходится платить — процесс занимает больше времени и ресурсов, поэтому его используют там, где качество важнее скорости ответов.

Важно помнить, что эти подходы не исключают друг друга, а часто работают вместе: маршрутизация определяет тип документа, каскад обрабатывает его по шагам, а цикл помогает улучшить результат.

Три кейса из практики

Schema-Guided Reasoning — это реальный рабочий инструмент. Рассмотрим примеры его использования: от простых учебных до сложных бизнес-кейсов. Главное — вместо хаотичного ответа модель начинает думать структурированно.

Обычная математика, но с системой

Модель, сталкиваясь с нетривиальной математикой, иногда пытается «угадать» решение по аналогии с тренировочными данными, а не выстраивать логическую цепь. Это ведёт к ошибкам.

Схема заставляет модель работать по плану:

# Чёткая структура рассуждений — никаких догадок

class MathReasoning(BaseModel):

    # 1. Сначала записываем саму задачу

    problem: str

    # 2. Затем показываем ход решения по шагам

    steps: List[str]

    # 3. И только в конце даём окончательный ответ

    final_answer: float

Простой пример:

problem = "15 + 27 = ?"

steps = ["15 + 20 = 35", "35 + 7 = 42"]

final_answer = 42.0

Сначала расписываем шаги, потом получаем ответ. Это как показать решение на уроке математики: нужно не просто написать число, а объяснить, как к нему пришли.

Когда нужно превратить вопрос в SQL

Если бизнес-аналитик просит «показать все заказы за последние 30 дней», модель, которая сразу генерирует SQL-код, часто допускает ошибки: пропускает условие или делает неправильный JOIN.

Проблему решает простая схема:

class SQLGeneration(BaseModel):

    # 1. Сначала объясняем, КАК будем решать задачу

    reasoning: str

    # 2. Затем формулируем конкретный план действий 

    strategy: str

    # 3. И только после этого пишем готовый код

    sql_query: str

Модель сначала продумывает стратегию: «Нужно взять таблицу orders, отфильтровать по дате, где date > current_date – 30 дней». Записывает этот план, и только потом пишет запрос. Такой подход повышает точность на 10–15%, потому что модель сначала думает, а потом пишет код. Как опытный разработчик, который не начинает программировать, не поняв задачу.

Разбираем документы по полочкам

В работе с юридическими документами, счетами и отчётами важна точность. Нужно разложить текст по строгим категориям.

Схема для классификации документов задаёт чёткие правила:

class DocumentClassification(BaseModel):

    # 1. Сначала анализируем содержание

    brief_summary: str

    # 2. Выявляем ключевых игроков и объекты

    key_entities: List[str]

    # 3. Определяем основные темы через ключевые слова

    keywords: List[str]

    # 4. И только после анализа делаем итоговый вывод о типе документа

    document_type: Literal["contract", "invoice", "letter", "report"]

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

Развитие SGR в комьюнити

В больших и сложных системах всегда остаётся пространство для оптимизации — особенно там, где предметная область только формируется. Так вокруг идеи упорядочить работу LLM с помощью схем сплотилась группа первопроходцев из российского комьюнити: собственно, сам автор идеи Ринат Абдуллин, Валерий Ковальский, Артём Лысенко, Павел Zloy и другие участники AI-сообщества.

Они начали экспериментировать с открытыми моделями, чтобы сделать их поведение более предсказуемым и результативным. Постепенно стали появляться библиотеки и открытые проекты, демонстрирующие, как схемы помогают агентам планировать действия, анализировать документы и проводить исследования. Эти наработки легли в основу более комплексного решения.

Развитием идеи стал open-source проект SGR Deep Research. На этом этапе к проекту подключились команда R&D by red_mad_robot — она помогает в валидации решений, проверке бенчмарков и разработке компонентов. Сейчас SGR Deep Research объединяет сообщество разработчиков, исследователей и инженеров, которые вместе формируют новый стандарт для работы с LLM-агентами.

От идеи к production-системе

SGR Deep Research предлагает пять различных типов агентов — от чистого SGR до гибридных решений. Каждый оптимизирован под определённый размер модели.

Типы агентов SGR Deep Research
Типы агентов SGR Deep Research

Система построена на модульной архитектуре, где каждый компонент решает конкретную задачу. В основе лежит двухфазная модель: сначала агент рассуждает по схеме, затем выполняет действие. В состав системы входят инструменты: поиск в интернете, извлечение контента страниц, генерация планов исследований и создание отчётов с цитатами. Интеграция с Model Context Protocol (MCP) позволяет подключать внешние инструменты через стандартный протокол.

Особенность системы — потоковые ответы с возможностью прерывания. Агент может остановиться, задать уточняющий вопрос и продолжить поиски после ответа. Система используется для маркетинговых исследований, анализа технологических трендов и конкурентной разведки. Например, при изучении рынка квантовых вычислений агент самостоятельно находит актуальные данные, анализирует их и формирует структурированный отчёт с источниками.

Помимо разных типов агентов, у проекта продуманная архитектура, собранные бенчмарки и набор навыков, которыми можно снабжать агентов. Теперь любой разработчик может взять локальную модель на 8 млрд параметров, например, Mistral или Llama, обернуть её в SGR-агента и получить стабильный, повторяемый результат, который раньше был доступен только на уровне моделей GPT-4.

SGR меняет правила игры. Подход открывает путь к созданию недорогих, приватных и надёжных AI-ассистентов для бизнеса и исследований, не зависящих от закрытых API.

Результаты бенчмарка на датасете SimpleQA 

Это серьезный тест: более 4,3 тыс. вопросов из разных областей, от науки до политики. Система показала точность 86.08% — на уровне крупных облачных моделей.

  • 3,7 тыс. правильных ответов из 4,3 тыс. вопросов 

  • 232 млн токенов обработано

  • 8 тыс. поисковых запросов выполнено 

  • 170$ — общая стоимость тестирования 

Для сравнения: популярные поисковые системы показывают точность в диапазоне 70-85%. SGR Deep Research превзошёл большинство конкурентов, используя относительно небольшую модель gpt-4o-mini.

SGR против Function Calling: что выбрать

Function Calling (FC) отлично работает на больших облачных моделях от OpenAI или Anthropic. Но на локальных моделях менее 32B параметров ситуация меняется.

Реальные цифры по моделям Qwen3

  • Qwen3-8B: всего 15% точности в Agentic Web Search

  • Qwen3-4B: 2%

  • Qwen3-1.7B: 4.5%

Даже при наличии нативной поддержки Function Calling маленькие модели не справляются с главным — понять, когда нужно вызвать инструмент. Проблема в том, что FC заставляет модель делать две сложные вещи одновременно: понять задачу и принять решение о действии. Для небольших моделей это слишком.

SGR разделяет процесс на два чётких этапа:

# Этап 1: Структурированный вывод (гарантированная надёжность)

reasoning = model.generate(format="json_schema")

# {"action": "search", "query": "BMW X6 prices", "reason": "need current data"}

# Этап 2: Детерминированное выполнение (модель не решает)

result = execute_plan(reasoning.actions)

Сначала модель обязана вернуть структурированное решение — какое действие выбрать и почему. Схема гарантирует нужный формат. Затем код выполняет выбранное действие. Модель уже не мучается выбором — решение принято на этапе рассуждения.

Наши рекомендации по выбору подхода

Что выбрать?
Что выбрать?

Практический вывод: не стоит пытаться заставить модели менее 32B параметров работать как GPT-4o в стиле ReAct с tool_mode="auto". Эффективнее задать им структурное мышление через SGR и детерминированное исполнение действий.

Недостатки SGR: с чем можно столкнуться

Schema-Guided Reasoning — инструмент мощный, но подходит не для всех задач. Есть несколько сложностей с его использованием.

Слишком жёсткие рамки могут навредить
Главный риск — перегнуть со структурой. Если схема излишне детализирована, модель будет буквально следовать инструкции, даже когда задача требует гибкости или творческого подхода.т Как метко отметил Ринат Абдуллин, SGR — это не «бесплатный прирост производительности». Да, точность может вырасти, но за этим стоит постоянный поиск баланса: где нужна строгость, а где — свобода манёвра.

Качество схемы = качество результата
Схема не учит модель новому — она лишь направляет мышление по заданному маршруту. Если в этом маршруте есть логическая дыра или пропущен важный шаг, модель честно воспроизведёт ошибку. Эффективность SGR напрямую зависит от экспертизы того, кто проектирует схему. Это полноценная инженерная задача, требующая времени и глубокого понимания предметной области.

Снижение производительности
Структурированный вывод и постоянная валидация через Pydantic — это дополнительные вычислительные затраты. Для GPT-4 в облаке это может быть незаметно, но при работе с локальными моделями сразу ощущается падение скорости ответа. Иногда приходится жертвовать скоростью ради точности.

Метод идеален для задач, где важны проверяемость, прозрачность и воспроизводимость. А вот для креативных задач, например, генерации идей для рекламы, жёсткие схемы, скорее, навредят. Однако SGR может отлично проявить себя в создании раскадровки для AI-мультфильма, где важна не только креативность, но и строгая логика последовательности кадров и сохранения контекста.

Будущее: новый стандарт разработки

Schema-Guided Reasoning — это попытка привнести инженерную дисциплину в мир GenAI. Вместо непредсказуемого «потока сознания» появляется управляемый и прозрачный процесс, где виден каждый шаг. Результату можно доверять, потому что его легко проверить на каждом этапе.

SGR меняет сам подход к оценке работы модели: внимание переносится с финального ответа на ход рассуждений. Если ошибка возникает в середине процесса, сразу видно, где и почему — это даёт более честное представление о возможностях AI.

Пока SGR остаётся инструментом для энтузиастов, но подход стремительно набирает популярность. Работа со схемами может стать таким же стандартом для reasoning-систем, каким модульное тестирование стало для классической разработки. Ближайшее будущее — за удобными фреймворками, сообществом, которое будет делиться готовыми схемами, и инструментами для их тестирования.


Над материалом работали

Текст — Миша Мартьянов
Редактура — Игорь Решетников 
Иллюстрации — Петя Галицкий


Это блог red_mad_robot. Мы запускаем цифровые бизнесы и помогаем компаниям внедрять AI. Здесь наша команда разработки на собственных кейсах рассказывает о том, что происходит с AI сегодня, а стратегические аналитики подсказывают, что будет завтра. Мы бы подписались.

Наш Telegram-канал (там всё другое, а ещё есть анонсы мероприятий): t.me/redmadnews

Комментарии (0)