Инжиниринг и harness в Claude Code: как оптимизировать модели
Пока ты читаешь ответ Claude, он уже пишет следующий (это я изучаю сорсы Claude Code). Напомнило популярный трюк Instagram, когда они подгружали фотку на сервак, пока ты выбирал фильтры и вписывал текст.
Готовлюсь к сегодняшнему вебинару и захотелось поделиться/тизернуть. Но сначала история :)
В субботу пили пиво с товарищами в Mountain View и я проиллюстрировал понятие harness: обьяснил, что я выбрал столик со стульями со спинкой вместо скамеек, потому что так, сколько ни выпей, не упадешь с него 🤡 —> вот это настоящий harness 😉
К чему я это? Рассматривая исходники CC очень быстро становится понятно, что инжиниринг - детерминированные проверки, система пермишнов, управление контекстом и памятью, одним словом, обвязки (harness) - это подавляющая часть исходного кода; сам цикл не менее 100 строк. Как кто-то написал: модель это CEO, а claude code со всеми обвязками - это исполнитель + процессы. В ту же тему мой разбор autoresearch Карпатого
И это не просто слова. Стэнфорд буквально на днях опубликовал работу на эту же тему, где наглядно показал, как harness не только повышает точность модели, но и в 4 раза снижает обьем расходуемых токенов. Но вы то это все знаете, в том числе, надеюсь, из моих постов типа этого
Собственно, возвращаюсь к кейсу а-ля инстаграм: оказывается, пока мы читаем ответ Claude - он уже прикидывает наш следующий промпт (помните, фичу когда он советует следующее сообщение)? Ну так вот, он не только прикидывает его, но и "форкает" агента и выполняет до 20 ходов вперед o__O Внутреннее кодовое имя: «tengu_speculation».
// speculation.ts — Claude Code предвычисляет ваш следующий ход
const MAX_SPECULATION_TURNS = 20
const MAX_SPECULATION_MESSAGES = 100
async function startSpeculation(suggestionText, context) {
if (process.env.USER_TYPE !== 'ant') return // пока только для сотрудников
// Создаем изолированную overlay-файловую систему
const overlayPath = join(tmpDir, 'speculation', process.pid, id)
await mkdir(overlayPath, { recursive: true })
// Форкаем агента с предсказанным промптом пользователя
const result = await runForkedAgent({
promptMessages: [createUserMessage({ content: suggestionText })],
canUseTool: async (tool, input) => {
// Записи идут в overlay (copy-on-write), не в реальные файлы
if (WRITE_TOOLS.has(tool.name)) {
await copyFile(join(cwd, rel), join(overlayPath, rel))
input = { ...input, file_path: join(overlayPath, rel) }
}
// Останавливаемся на опасных операциях
if (tool.name === 'Bash' && !isReadOnly(command)) {
abortController.abort()
return deny('Speculation paused: bash boundary')
}
}
})
// Если пользователь ввел то, что мы предсказали — применяем overlay
await copyOverlayToMain(overlayPath, writtenPaths, cwd)
logEvent('tengu_speculation', { timeSavedMs: Date.now() - startTime })
}
Важно: пока это работает только у сотрудников Anthropic. Но архитектура готова - так что скоро увидим, надеюсь. Ну или можно у себя реализовать такое, если токенов не жалко 😉
Собственно, инженеры пока еще нужны (phew) - велком на вебинар с 18 до 20 мск за подробностями:
Подписывайтесь на Telegram EDU.