Когда автономный кодинг-агент начинает решать задачу в большом проекте, его работа обычно напоминает разговор по рации с огромными паузами: агент ищет файл -> ждёт ответа -> читает файл -> ждёт ответа -> запускает тест -> ждёт логов ошибки. Каждый такой шаг порождает новое сообщение в истории диалога, раздувая контекст до сотен тысяч токенов.
В результате разработчик сталкивается с двумя бедами: счетами за API на тысячи долларов и так называемой «усталостью выбора инструментов» (tool-selection fatigue), когда модель начинает путаться в собственных предыдущих шагах.
Команда Reason Machines решила эту проблему на архитектурном уровне, выпустив обновлённый харнес Reason Agent 1.1. В независимом отраслевом рейтинге Coding Agent Index от Artificial Analysis связка Reason Agent 1.1 с базовой моделью GPT-6 Astra набрала 65,1 балла против 62,5 балла у стандартного Codex, одновременно снизив средний чек за решение задачи на 22%.
Давай разберём, как устроен этот механизм изнутри.
Главное оружие: выполнение кода как инструмента (Batch Tool Calling)
Вместо того чтобы совершать десятки одиночных сетевых вызовов инструментов, модель переходит в режим codemode. Она генерирует компактный JavaScript- или Python-скрипт, который локально выполняет всю пачку операций за один раунд инференса: находит файлы, читает нужные строки, запускает тесты и возвращает в контекст лишь отфильтрованный сухой остаток.
Ранее мы уже анализировали, к чему ведёт бесконтрольный расход токенов в агентной разработке, и батчинг инструментов оказывается здесь самым действенным лекарством.
Конфигурация харнеса с кэшированием префиксов
Ниже представлен рабочий конфигурационный файл reason.config.json, включающий кэширование статического контекста и защиту от зацикливания:
{
"harnessVersion": "1.1",
"engine": {
"provider": "openai",
"model": "gpt-6-astra",
"promptCaching": {
"enabled": true,
"cacheStaticPrefix": true,
"minTtlSeconds": 300
}
},
"execution": {
"mode": "code_batch",
"runtime": "node20-isolated",
"maxBatchSteps": 12,
"timeoutMs": 45000
},
"guardrails": {
"loopWatchdog": {
"maxConsecutiveErrors": 3,
"onThreshold": "escalate_strategy"
}
}
}
Пример батчевой операции внутри рантайма
А вот как выглядит сгенерированный агентом скрипт, который за один шаг находит компоненты, читает их и прогоняет тесты:
import { workspace, tester } from "@reason/agent-runtime";
export default async function batchOperation() {
// 1. Быстрый поиск целевых компонентов по маске
const targetFiles = await workspace.glob("src/components/**/*.{tsx,ts}");
// 2. Пакетное считывание без засорения истории диалога
const fileContents = await Promise.all(
targetFiles.map(async (file) => ({
path: file,
content: await workspace.readFile(file)
}))
);
// 3. Запуск тестов и мгновенный возврат только упавших утверждений
const testResults = await tester.runSuite("npm test -- --bail");
return {
scannedCount: targetFiles.length,
failingTests: testResults.failures.map(f => ({ file: f.file, error: f.message })),
recommendationTarget: fileContents.filter(f => f.content.includes("useUserProfile"))
};
}
Модуль Loop Watchdog отслеживает повторяющиеся ошибки компиляции. Если агент три раза подряд спотыкается на одном и том же месте, система принудительно эскалирует стратегию рассуждения вместо бессмысленного сжигания токенов.
Опыт Reason Agent 1.1 доказывает важный тезис: чтобы сделать кодинг-агента умнее и дешевле, не обязательно ждать выхода нового поколения сетей — достаточно навести порядок в среде выполнения инструментов.
