Unreal Agent: асинхронный harness для экономии токенов
Unreal Agent — это agent harness от Unreal Labs, который перестраивает работу с tool calls вокруг асинхронного выполнения. Идея простая: модель не должна тратить токены и attention на ожидание, polling и heartbeat, пока инструмент работает в фоне. В реальных нагрузках и на coding benchmarks команда заявляет до 40% экономии по сравнению с Codex и до 20% по сравнению с Pi, без заметного ухудшения качества.
Зачем нужен ещё один harness
Универсального способа построить production-ready агента не существует. SDK разных вендоров часто ориентированы на локальные сессии, subprocess и ограниченные ресурсы. Когда такой SDK используют в production, команде приходится самостоятельно решать вопросы завершения, отмены и фоновых задач.
Поддержка других провайдеров добавляет свои сложности. Переключение API mode может сломать работу инструментов или compaction, а обновление SDK — изменить формат сообщений и потребовать переписывания интеграции. Большое дерево зависимостей увеличивает стоимость сопровождения и риск supply chain.
Отдельная проблема — безопасность и approvals. Когда доступ разрешается через hooks и специальные инструменты harness, такой контур сложнее поддерживать и надёжнее ограничивать. Unreal Labs считает более устойчивым подходом детерминированные ограничения окружения и sandbox: списки разрешённых и запрещённых хостов, granular access tokens и proxies с approval gates.
Одновременно harness должен позволять пользователю вмешиваться в работу агента без ожидания текущего tool call. Например, агент может запустить настройку dev environment на несколько минут, а затем параллельно исследовать кодовую базу и искать информацию в интернете.
Асинхронная архитектура tool calls
При каждом вызове инструмента Unreal Agent сразу добавляет в event log запись о том, что tool call находится в состоянии in-progress, и продолжает выполнение в фоне. Когда инструмент завершается, результат добавляется в session log, после чего вызывается LLM.
Такая схема убирает необходимость отдельно управлять ожиданием, polling и heartbeat. Модель может принимать промпты пользователя и продолжать другую полезную работу, пока инструмент ещё выполняется. Количество tool calls между вызовами модели также увеличивается.
В реализации есть важная инженерная деталь: в одном контексте используются два результата tool call — промежуточный in-progress и финальный. По словам Unreal Labs, некоторые inference providers отклоняли такой формат, а поле статуса function_call_output не всегда помогало. В тестах модель понимала переход от сообщения о запуске к финальному результату, когда формат сообщений принимался провайдером.
Почему снижается стоимость
На поверхности Unreal Agent достигает тех же результатов, но делает меньше model turns и использует меньше input tokens. Команда объясняет экономию двумя факторами.
- Минимальный footprint. В harness простые prompts, token-optimized результаты инструментов и отсутствуют sub-agents и workflows. Всё это уменьшает постоянные издержки, которые модель оплачивает на каждом запуске.
- Больше полезной работы на один model turn. Асинхронная модель tool calling понятно объяснена LLM, поэтому агент может выдавать больше тяжёлых tool calls, не тратя токены на polling и ожидание.
Экономия не означает, что из результата убирается качество. В опубликованных тестах pass rate отличается незначительно, и авторы связывают это с variance бенчмарков.
Результаты benchmarks
Команда тестировала GPT-6 Astra с reasoning effort xhigh и сравнивала Unreal Agent с Codex и Pi. В таблице ниже приведены опубликованные значения для основных метрик.
Terminal-Bench 4.0
| Agent | Rate | Total $ | In/trial | Out/trial | Turns | Tools |
|---|---|---|---|---|---|---|
| unreal-agent | 57.9% | 1428 | 1.73M | 32k | 28 | 37 |
| Codex (leaderboard) | 57.9% | 2350 | — | — | — | — |
| Pi | 55.0% | 1827 | 2.83M | 35k | 44 | 57 |
SWE-Atlas Codebase QnA
| Agent | Rate | Total $ | In/trial | Out/trial | Turns | Tools |
|---|---|---|---|---|---|---|
| unreal-agent | 65.8% | 936 | 898k | 15k | 16 | 27 |
| Codex | 63.3% | 1303 | 1.69M | 17k | 22 | 21 |
| Pi | 64.0% | 1033 | 1.29M | 16k | 24 | 60 |
DeepSWE 1.1
| Agent | Rate | Total $ | In/trial | Out/trial | Turns | Tools |
|---|---|---|---|---|---|---|
| unreal-agent | 72.4% | 1367 | 1.60M | 28k | 26 | 38 |
| Codex | 69.0% | 1633 | 2.19M | 30k | 30 | 29 |
| Pi | 69.6% | 1584 | 2.21M | 30k | 40 | 75 |
Agents’ Last Exam · ALE-CLI
| Agent | Full pass | Mean score | Total $ | In/task | Out/task | Turns | Tools |
|---|---|---|---|---|---|---|---|
| unreal-agent | 30.0% | 59.7 | 217 | 0.76M | 18k | 18 | 23 |
| Codex | 29.0% | 58.1 | 292 | 1.59M | 15k | — | 21 |
| Pi | 29.0% | 59.2 | 262 | 1.19M | 19k | 27 | 37 |
Unreal Agent показывает 72.4% на DeepSWE 1.1, 65.8% на SWE-Atlas Codebase QnA и 57.9% на Terminal-Bench 4.0. На последнем benchmark он достигает того же pass rate, что и Codex leaderboard baseline, но с меньшей общей стоимостью и меньшим количеством model turns. В ALE-CLI полный pass rate составляет 30.0%, а mean score — 59.7.
Команда отмечает, что чаще всего запускает coding benchmarks, потому что они доступны на Harbor и их проще воспроизводить и проверять. При этом сам harness позиционируется как domain-agnostic.
Как начать использовать
Unreal Agent SDK сейчас предлагает три способа интеграции:
- Go library для встраивания в существующую кодовую базу;
- runner executable, похожий на
claude -pилиcodex exec; - benchmark runner, совместимый с Harbor.
Для production-агента главный принцип Unreal Agent — не заставлять модель синхронно наблюдать за каждым инструментом. Асинхронный event log, фоновые вызовы и user steering уменьшают tool-management overhead, а минимальный prompt и оптимизированные результаты помогают снизить стоимость без ухудшения результата на проверенных coding workloads.
Источник: https://unreallabs.ai/blog/unreal-agent/