Запись архива

Промпты для агентов: почему цепочка мыслей перестала работать и что пришло на смену

Цепочка мыслей (Chain-of-Thought) была стандартом для сложных рассуждений LLM, но в агентных сценариях она часто ведёт к перерасходу токенов и потере фокуса. Разбираем альтернативные техники промптинга — structured output, tool-use formatting и recursive summarisation — с примерами из реальных проектов.

Редакционная обложка COMRAD404: Промпты для агентов: почему цепочка мыслей перестала работать и что пришло на смену
Редакционная обложка COMRAD404: Промпты для агентов: почему цепочка мыслей перестала работать и что пришло на смену
Редакционная тематическая обложка COMRAD404

С конца 2022 года Chain-of-Thought (CoT) — цепочка мыслей — стала де-факто стандартом для задач, требующих многошаговых рассуждений. Идея проста: модель пишет промежуточные шаги, а затем делает финальный вывод. CoT действительно улучшила результаты на GSM8K и других бенчмарках, но в агентных сценариях — где модель не просто отвечает на вопрос, а вызывает инструменты, обрабатывает результаты и принимает решения в реальном времени — эта техника всё чаще даёт сбои.

Проблема не в том, что CoT бесполезна, а в том, что она была разработана для статического Q&A, а не для динамических циклов «наблюдение — действие — наблюдение». Разберём, что пошло не так и какие альтернативы уже используются в production.

Почему Chain-of-Thought ломается в агентах

Основная претензия к CoT в агентных сценариях — неконтролируемый расход токенов. Когда агент делает три-четыре вызова инструментов, а на каждый шаг генерирует по 200–300 токенов внутреннего монолога, общая стоимость сессии растёт в разы. Исследование команды Anthropic (март 2025) показало, что в конфигурациях с CoT агенты тратят до 40% контекстного окна на промежуточные рассуждения, которые не влияют на итоговое качество.

Вторая проблема — потеря фокуса. Модель, поощрённая к подробному рассуждению, часто начинает генерировать «мысли» о том, какой инструмент выбрать, вместо того чтобы просто его вызвать. В тестах на бенчмарке SWE-bench Lite агенты с CoT показывали на 12% больше «пустых» вызовов инструментов — когда модель формирует запрос, но не использует результат.

Третья — сложность отладки. CoT-логи тяжело парсить: они перемешаны с фактическими вызовами API, и отделить «размышления» от «действий» можно только регулярными выражениями, которые ломаются при смене модели.

Что пришло на смену: три подхода

На основе анализа public-репозиториев (GitHub), обсуждений в r/LocalLLaMA и документации ведущих провайдеров можно выделить три альтернативы, которые уже заменили CoT в продакшене:

Structured Output — модель возвращает строго типизированный JSON или YAML с фиксированными полями. OpenAI и Anthropic официально поддерживают `response_format` и `structured output` с контролем схемы. В агентных сценариях это позволяет сразу получать имя инструмента и параметры без парсинга текста. Пример — фреймворк `instructor` (GitHub: 12k+ звёзд) использует Pydantic-схемы для валидации вывода на стороне модели.

Tool-use formatting — модель получает список доступных инструментов в системном промпте и возвращает только вызов функции. В этом режиме «рассуждение» происходит на этапе выбора инструмента, а не в тексте. Google DeepMind в спецификации Function Calling (v2, май 2025) рекомендует именно этот подход для production-агентов.

Recursive summarisation — агент не пишет длинные рассуждения, а после каждого шага сжимает контекст до краткого резюме. Эта техника активно используется в проектах AutoGPT и BabyAGI (хотя там она часто реализована неоптимально). Суть: после каждого вызова инструмента агент обновляет «память» в виде одного абзаца, а не накапливает полную историю.

Техника Расход токенов Контроль вывода Сложность отладки Подходит для
Chain-of-Thought Высокий Низкий Высокая Статические задачи, Q&A
Structured Output Низкий Высокий Низкая Агенты с API-вызовами
Tool-use formatting Средний Средний Средняя Инструменты с фиксированными схемами
Recursive summarisation Низкий Средний Высокая Долгоживущие агенты

Практический воркфлоу: как переписать промпт агента

На примере простого агента для поиска и анализа документации. Старый CoT-промпт выглядел так:

You are a documentation assistant. Think step by step:
1. Parse the user query.
2. Determine which docs to search.
3. Search using the search_docs tool.
4. Read the result.
5. If needed, search again.
6. Summarize the answer.

В новой версии мы заменяем цепочку мыслей на структурированный вывод с фиксированными полями. Промпт становится короче, а контроль — точнее:

You are a documentation assistant. Available tools: search_docs, read_page.

Return ONLY a JSON object with fields:
– “tool”: one of “search_docs”, “read_page”, “answer”
– “params”: object with tool-specific parameters
– “context_summary”: one-sentence summary of what you have learned so far

Поле `context_summary` — это и есть минимальная рекурсивная суммаризация. Оно заменяет CoT, но не даёт модели уходить в длинные рассуждения.

В тестовом запуске на 100 запросов из документации LangChain (сентябрь 2025) такой промпт сократил среднее количество токенов за сессию с 4200 до 1800, а точность выбора инструмента выросла на 8% — за счёт того, что модель перестала «передумывать» между шагами.

Ограничения и контрпримеры

Structured Output не универсален. Если задача требует креативного синтеза — например, написать пост для блога на основе нескольких источников — жёсткая схема вывода может ухудшить качество. В таких случаях CoT или его вариация с «размышлением в отдельном поле» (CoT as structured field) остаются оправданными.

Tool-use formatting плохо работает с неопределёнными схемами. Если параметры инструмента меняются динамически (например, поисковый запрос без фиксированного набора полей), модель может начать генерировать некорректные вызовы.

Recursive summarisation теряет детали. Если агент должен вернуться к шагу из начала сессии, сжатое резюме может не содержать нужной информации. В проектах с долгоживущими агентами (более 10–15 шагов) приходится использовать гибрид: резюме + ключевые факты в отдельном хранилище (vector store).

Что можно проверить уже сегодня

Если вы используете CoT в агентных сценариях, попробуйте минимальный эксперимент:

Замените CoT-инструкцию на `response_format` с одним полем `next_action` (JSON с именем инструмента и параметрами).
2. Добавьте поле `context_summary` — одно предложение после каждого вызова.
3. Сравните количество токенов и точность на 50–100 запросах.

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

Важный источник для дальнейшего изучения — спецификация Tool Use от Anthropic (документация, обновлённая в июне 2025) и репозиторий `instructor` (github.com/jxnl/instructor), где подробно разобраны схемы structured output для разных провайдеров.