TL;DR
Когда просишь модель улучшить свой ответ, она часто застревает — повторяет одни и те же правки или предлагает то, что сама не может сделать: "нужно больше данных", "привлеките эксперта", "улучшите исходник". OCR-Agent решает это через два правила: ограничивай модель только тем, что она реально может сделать (убирай "галлюцинации возможностей"), и давай ей историю всех предыдущих попыток (чтобы не ходить по кругу).
Главный инсайт: само-коррекция без памяти — это топтание на месте. Модель в каждой итерации "забывает" что уже пробовала. В следующем раунде она генерирует похожий план исправлений — и снова не попадает. Это не баг конкретной модели, это структурная проблема: у неё нет механизма "запомни, что не сработало, и не повторяй это".
Решение — двухшаговый цикл на каждой итерации. Сначала рефлексия с ограничениями: модель анализирует ошибки и строит план только из действий, которые ей доступны с имеющимся текстом. Затем улучшение с памятью: модель переписывает ответ, видя все предыдущие рефлексии — чтобы не наступать на одни и те же грабли.
Схема метода
Один цикл (повторяется 2-3 раза, каждый раз в отдельном запросе):
ВХОД: {задача} + {предыдущий ответ} + {история рефлексий}
ШАГ 1 — Рефлексия с ограничениями (отдельный запрос):
→ Найди конкретные ошибки в предыдущем ответе
→ Предложи план правок — ТОЛЬКО из того, что можно
сделать с имеющимся текстом прямо сейчас
→ Добавь эту рефлексию в историю
ВЫХОД: план_правок + обновлённая_история_рефлексий
ШАГ 2 — Улучшение с памятью (отдельный запрос):
→ Перепиши ответ по плану правок
→ Используй полную историю рефлексий — не повторяй старые ошибки
ВЫХОД: улучшенный_ответ
→ Повтори цикл 2-3 раза
Итого: 4-6 запросов к модели (по 2 на каждый раунд), история рефлексий — копируешь вручную между запросами.
Пример применения
Задача: Написать описание телеграм-канала про инвестиции для каталога. Первая версия от Claude вышла шаблонной, но каждый раз когда просишь "улучши" — получаешь похожую воду.
Промпт раунда 1, шаг 1 — Рефлексия:
Вот описание телеграм-канала, которое нужно улучшить:
---
[предыдущий ответ модели]
---
Задача: описание для каталога Telegram, чтобы привлечь подписчиков,
которые хотят реально зарабатывать на бирже, а не читать новости.
Проанализируй текст. Найди конкретные слабые места —
что именно мешает читателю понять ценность канала.
Важно: предлагай ТОЛЬКО те правки, которые можно сделать
прямо сейчас с имеющимся текстом. Не предлагай:
- "добавить отзывы подписчиков" (их нет)
- "указать конкретные результаты" (данных нет)
- "улучшить визуал" (это текст, не картинка)
Сформулируй конкретный план правок из того,
что реально изменить в самом тексте.
Промпт раунда 1, шаг 2 — Улучшение:
Вот план правок:
[вставить вывод из шага 1]
Перепиши описание канала по этому плану.
Не повторяй формулировки из предыдущей версии.
Промпт раунда 2, шаг 1 — Рефлексия с памятью:
Вот текущая версия описания:
[вставить результат раунда 1]
История предыдущих попыток улучшения:
[вставить рефлексию из раунда 1]
Проанализируй. Что ещё не работает?
Предлагай ТОЛЬКО правки из имеющегося текста —
не предлагай то, что уже пробовали в предыдущей рефлексии.
Результат:
После раунда 1 модель покажет диагностику — что именно шаблонно, какие фразы ни о чём. В раунде 2, видя историю первой рефлексии, она не повторит "нужно добавить конкретику" (уже пробовали) — придёт к другому подходу: иная структура, другой угол подачи. Описание после двух раундов заметно отличается от стартовой версии по структуре и тону, не просто "отполированный" вариант того же.
Почему это работает
Проблема стандартного "улучши это". Когда просишь модель улучшить ответ без контекста, она генерирует план исправлений из нуля — как будто видит задачу впервые. В следующем раунде история повторяется. Это не "лень" модели — у неё просто нет структуры, которая говорит "вот что уже пробовали, иди в другую сторону".
Проблема галлюцинаций возможностей. Модель в планах исправлений часто предлагает то, что выглядит разумно, но недостижимо в рамках задачи: "добавьте живые примеры", "проверьте у юриста", "улучшите данные". Это не помощь — это перекладывание ответственности. Явный запрет на такие предложения ("только то, что можно сделать с имеющимся текстом") заставляет модель искать решения внутри своих реальных возможностей.
Рычаги управления: - Количество раундов — 2-3 оптимально; для простых задач достаточно 1; больше 3 — убывающая отдача - Список запрещённых предложений в блоке "Не предлагай" — чем конкретнее, тем точнее рефлексия - Детализация истории — можно давать краткое резюме прошлых рефлексий вместо полного текста, если промпт разрастается - Условие остановки — добавь "если текст уже хорош, объясни почему дальнейшие правки не нужны", чтобы избежать правок ради правок
Шаблон промпта
Шаблон рефлексии (повторяется каждый раунд):
Вот {тип_задачи}, которую нужно улучшить:
---
{текущий_вариант}
---
Цель: {что должен делать результат / для кого / зачем}.
История предыдущих попыток улучшения:
{история_рефлексий}
(если это первый раунд — напиши "Первая попытка, истории нет")
Найди конкретные слабые места в текущем варианте.
Предложи план правок — ТОЛЬКО из того, что можно изменить
в самом тексте прямо сейчас. Не предлагай:
- получить дополнительные данные или материалы
- привлечь людей или внешние инструменты
- то, что уже пробовалось в истории выше
Сформулируй 3-5 конкретных правок.
Шаблон улучшения:
Вот план правок:
{план_из_рефлексии}
Полная история предыдущих рефлексий:
{история_рефлексий}
Перепиши {тип_задачи}, применяя план правок.
Не повторяй подходы из истории рефлексий.
Не сохраняй формулировки из предыдущего варианта там,
где план требует изменений.
Плейсхолдеры:
- {тип_задачи} — "описание продукта", "питч для инвестора", "письмо клиенту"
- {текущий_вариант} — последний ответ модели
- {цель} — кто читает, какое действие должен совершить
- {история_рефлексий} — копируешь выводы из предыдущих шагов рефлексии
🚀 Быстрый старт — вставь в чат:
Вот шаблон двухшагового улучшения с памятью.
Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит что именно нужно улучшить, какова цель текста и что нельзя предлагать в качестве правок — потому что без этого она не сможет правильно ограничить свои предложения и запустить первый раунд рефлексии.
Ограничения
⚠️ Ручная работа между раундами: История рефлексий не копируется автоматически — нужно вставлять вывод каждого шага рефлексии в следующий запрос. Для 3 раундов это 6 запросов и 2-3 ручных копирования.
⚠️ Не работает для задач без итерируемого контента: Если задача решается с первого раза или не имеет "ошибок для исправления" (вопрос-ответ, простой перевод) — метод избыточен.
⚠️ Зависимость от базовой компетентности модели: Если модель изначально не понимает задачу или не имеет нужных знаний, рефлексия не поможет — она будет "улучшать" неправильный ответ. Метод усиливает хорошее, но не исправляет фундаментальное непонимание.
⚠️ Убывающая отдача после 3 раундов: Исследование показывает, что большинство улучшений происходит в первые 2-3 раунда — дальнейшие итерации дают незначительный прирост.
Ресурсы
Статья: OCR-Agent: Agentic OCR with Capability and Memory Reflection
Код: github.com/AIGeeksGroup/OCR-Agent
Бенчмарк: OCRBench v2
Авторы: Shimin Wen, Zeyu Zhang, Xingdou Bian, Hongjie Zhu, Lulu He, Layi Shama, Daji Ergu, Ying Cai
Организации: Southwest Minzu University, AI Geeks
