Я регулярно использую GLM как рабочую модель — «молотилку», которой можно отдавать большой объём реализации. Смысл понятен: не каждая задача требует самой дорогой frontier-модели. Если архитектура определена, требования собраны, а результат можно проверить, основную работу должна выполнять более дешёвая модель.

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

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

Дешёвая модель, которая несколько часов не может дойти до проходящего результата, уже не такая дешёвая. Она расходует токены, контекст, машинное время и, главное — человеческое внимание.

Когда я читал канал Владимира Иванова AI Projects, у меня появилась гипотеза: GRACE хорошо передаёт модели семантику, но, возможно, в данной конкретной реализации не хватает еще одного постоянного слоя — проверенных примеров реализации. Не добавлять их вручную в каждый промпт, а встроить few-shot в саму методологию.

Мы провели небольшой контролируемый эксперимент. Результат не доказывает, что идея универсальна, но показывает: тема рабочая и заслуживает развития.

Что уже даёт GRACE — и чего может не хватать

В GRACE 4 долговременная модель проекта находится в .grace:

  • context хранит требования, технологии, принципы и ограничения;

  • graph описывает модули, их связи и потоки данных;

  • changes хранит спецификацию и план конкретного изменения;

  • verification связывает утверждения с командами, сценариями и доказательствами проверки.

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

Но знание смысла ещё не гарантирует правильную форму реализации.

Контракт может сказать: «собери React-артефакт из валидированной спецификации, не добавляй новых фактов, сохрани evidence ID и пройди компиляцию». Модель поймёт задачу. Но даже правильно поняв задачу, модель может ошибиться в исполнении: отступить от структуры, пропустить обязательные элементы или оформить результат так, что его нельзя использовать.

Здесь и возникает место для few-shot.

? Хозяйке на заметку Zero-shot — модель получает только инструкцию. One-shot — инструкцию и один готовый пример. Few-shot — несколько примеров того, как должен выглядеть правильный результат. Модель при этом не переобучается: примеры работают только внутри текущего контекста и помогают ей быстрее уловить нужный паттерн.

Во всю ширинуСкопировать как изображениеОткрыть на весь экран

Слой

Что он сообщает агенту

Семантика GRACE

Что меняем, зачем, где границы и какие инварианты нельзя потерять

Few-shot

Как в этом проекте выглядит правильная реализация похожего решения

Верификация

Получился ли допустимый результат на самом деле

Контракт задаёт смысл, пример показывает способ реализации, а пригодность результата подтверждают тесты.

Откуда взялась гипотеза

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

Существует распространённый миф: младшая модель того же вендора якобы лучше работает со старшей только потому, что они принадлежат к одному семейству и производителю. Убедительных подтверждений этому нет. Зато хорошо виден другой эффект: worker-модель быстро подстраивается, когда получает готовый контекст и рабочие примеры — то есть фактически few-shot.

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

Для GRACE отсюда следует интересный вопрос. Если методология уже умеет находить нужный модуль, требования, изменение и проверку, почему бы планирующей модели не подбирать ещё и несколько подходящих примеров?

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

Простая проверка

В полевом тесте локальных моделей Avenex модель должна была превратить валидированную семантическую спецификацию в самостоятельный React-компонент.

Обе группы получали одинаковую спецификацию и одинаковый контракт:

  • вернуть только исполняемый React-код в заданном формате;

  • использовать 4–6 полноэкранных разделов;

  • не подключать внешние библиотеки и ресурсы;

  • не придумывать факты, числа, людей, даты и рекомендации;

  • сохранить идентификаторы доказательств;

  • уложиться в ограничение по размеру программы.

После генерации обычный код проверял результат: разобрался ли формат ответа, компилируется ли JSX, рендерится ли компонент, верно ли число разделов, присутствуют ли evidence ID, не появились ли новые числа и внешние ресурсы.

Разница между условиями была одна. В zero-shot модель видела контракт и спецификацию. В экспериментальном условии она дополнительно получала небольшой рабочий React-компонент с прямой инструкцией: копировать дисциплину реализации, а не его факты.

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

Разница между "с примером" и "без примера" видна невооружённым глазом.
Разница между "с примером" и "без примера" видна невооружённым глазом.

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

Как встроить few-shot в протокол агента

Минимальная конструкция состоит из трёх элементов.

1. Реестр примеров

Каждый проверенный пример получает стабильный идентификатор и краткое описание:

  • какой паттерн он демонстрирует;

  • для каких задач и компонентов подходит;

  • когда его использовать нельзя;

  • какие файлы служат образцом;

  • какими тестами или проверками подтверждена его корректность.

2. Подбор примеров под задачу

Перед началом работы протокол определяет границы изменения, затронутые компоненты, ограничения и критерии приёмки. По этим признакам он подбирает один-два наиболее близких примера и передаёт их агенту вместе с задачей.

Ключевой принцип — минимальность. Большая свалка кода создаёт шум. Нужны только те примеры, которые снимают конкретную неопределённость реализации.

3. Проверка результата, а не сходства

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

ℹ️ Практический пример В GRACE этот подход уже оформлен в PR #63 «few-shot examples from spec to verification». Общие правила дополняются контрастными примерами ожидаемого поведения, а каждый принятый пример связывается с задачей, тестом, командой и доказательством проверки. Так пример становится частью инженерного контракта, а не одноразовой вставкой в промпт.

Ещё одна проверка на коде

После React-эксперимента мы сделали ещё одну проверку: к локальным моделям добавили GLM-5.3 и Claude Haiku 4.5. Задача и примеры были простыми, поэтому заметной разницы я вообще не ждал. Но она появилась.

Небольшая и не у всех моделей, зато в отдельных тестах модели стали проверять то, что раньше пропускали. Это не академический эксперимент: одна задача, мало прогонов. Но сигнал есть. Не знаю, как вы, а я few-shot в своих проектах теперь точно буду активно тестировать.

Почитать:

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


  1. SpiderEkb
    27.10.2026 05:23

    Жестко вшивать примеры получается только на 100% однотипных задачах.

    Увы, но в моей практике такого не встречается. Для типовых задач есть "скелетоны" (шаблоны). Они вшиты жестко. Но все равно часто бывают расхождения (более или мнее значимые), которые приходится отдельно описывать в промпте - "работаем по шаблону ..., отличия от шаблона ...".

    Примеры, если есть что-то похожее, тоже в промпте - "вот этот кусок можно посмотреть тут, а вот этот - там".

    У нас есть свой внутренний провайдер. Н там есть проблема - есть лимиты на сессию, на временное окно... И часто бывает когда задача большая и сразу ее не получается разбить на этапы, он может начать ходить по кругу и упереться в Payload too large так ничего и не сделав. А это все - только новую сессию открывать. А там "наша песня хороша, начинай с начала".

    Придумал обходить это через составление плана.

    ## Общее правило: этапность работы и plan.md
    
    Действует для всех задач по этому навыку, независимо от раздела и сложности.
    
    - **Большую задачу всегда разбивать на этапы** и выполнять каждый этап отдельно,
      внося правки сразу по завершении этапа.
    - **Не пытаться сделать всё разом и идеально с первого раза.** Лучше сделать хоть
      что-то, а затем найти и исправить ошибки, чем долго «думать» и ходить по кругу
      формулировками «Now I have a good understanding», «Now I have a comprehensive
      picture», «I now have a very good picture», так и не дойдя до правок.
    - **Практический предел размышлений — риск упереться в лимит** (`Payload too large`)
      и остаться без результата; тогда всю работу приходится начинать с нуля.
    - **Первым делом составлять план работ** и сразу фиксировать в нём ключевые моменты
      по мере их выяснения. Файл — `plan.md` **рядом с файлом, с которым работаешь**
      (в его каталоге), а не в корне репозитория.
    - **При работе по плану сразу фиксировать изменения в коде по каждому пункту**, не
      дожидаясь формирования полной картины. При необходимости дополнять план нужными
      для работы фактами (найденные имена копичленов, размеры/форматы полей, номера строк,
      открытые вопросы) — чтобы при исчерпании лимитов сессии не начинать с нуля.
    - **Сразу отмечать в `plan.md` выполненные этапы.** Как только этап (или его пункт)
      закончен, немедленно помечать его в плане как выполненный (например, пометкой
      `— ✅ ВЫПОЛНЕНО` в заголовке этапа / отметкой пункта), не откладывая это до конца
      работы. Если требование изменилось по ходу (пункт удалён, процедура снята, добавлено
      примечание), это тоже сразу отражать в плане. В случае переполнения сессии это
      поможет в новой сессии сразу знать, что уже сделано, а что ещё нет.
    - План — рабочий, а не отчётный: краткие пункты-чекбоксы и факты важнее красивого текста;
      `plan.md` рядом с рабочим файлом можно вести в UTF-8 без BOM.

    В плане он сразу пишет свою интеретацию промпта (больше его уже не надо будет повторять)

    ## 0. Вводная для новой сессии (кратко)
    ...
    
    ## 1. Цель
    ...
    
    ## 2. Источники и правила
    ...
    
    ## 3. Инвентаризация: что убираем, что адаптируем, что остаётся
    
    [тут работаем по шаблону адаптируя его к реально поставленной задаче]
    
    ### 3.1 Убираем
    | Что | Где сейчас |
    ...
    
    ### 3.2 Адаптируем
    | Элемент | Как |
    ...
    
    ## 4. Ключевые решения (зафиксировано)
    ...
    
    ### Открытые вопросы (нужно подтверждение владельца; в плане приняты рабочие варианты)
    ...
    
    ## 5. Этапы
    ...
    
    ## 6. Риски
    ...

    Это он составляет сам в реальном времени. Т.е. те же "ключевые решения" пишутся сразу в процессе "хождений по кругу". Аналогично - этапы. Как понял что-то - сразу записал.

    В итоге если сессия уперлась в лимит, новую сессию начинать не с нуля, а с того места где остановились.

    Любая последующая сессия не требует повторения промпта. Он уже интерпретирован и зафиксирован в плане. Дается только план.

    Когда план готов, открываем новую сессию и говорим - давай делай. Изменения по каждому этапу вносятся сразу. Выполненный этап также сразу помечается "Выполнено".

    Если по ходу что-то уточняется - это тоже сразу пишется в план. Исправление ошибок - тоже все фиксируется в плане. Если потом потребуются какие-то доработки - можно опять использовать этот же план.

    В целом самое долгое и ресурсоемкое - составление плана. Когда он готов, дальше уже достаточно бодро все происходит.


  1. InsiderCrush
    27.10.2026 05:23

    Вы ж понимаете что большая часть терминов использованная в статье - локальные? И что бы понять что вы там имели в виду и что тестировали необходимо их шире раскрывать в самом начале статьи. А то приходится угадывать, что именно Вы имели ввиду под этими терминоми. Я понимаю, что Вы опирались сами на термины из чужого проекта. Термины ИИ, ИИ-агенты, ЛЛМ, они всем понятны. А вот дальше, то что Вы описываете, мы, читатели, должны угадывать. Да, термины все знакомы более менее и по контексту можно понять что вы пытаетесь рассказать, но, это всё угадывание Вашей логики, а не следование ей. Вам то кажется что именно Ваша логика четка и безупречная и вы все ясно излагаете. Но для людей впервые открывших статью половина информации - темный лес.