Перейти к содержимому
OmniRoute source

🗜️ Prompt Compression Guide — OmniRoute (Русский)

Сжатие не применяется. Все сообщения передаются без изменений.

Самый безопасный режим — без семантических изменений, только очистка форматирования:

Метод Описание
collapseWhitespace Объединяет последовательные пустые строки и удаляет пробелы в конце строк
dedupSystemPrompt Удаляет дублирующиеся системные сообщения
compressToolResults Сжимает многословный вывод инструментов/функций
removeRedundantContent Удаляет повторяющиеся инструкции
replaceImageUrls Сокращает URI изображений с данными в формате base64

Лучше всего подходит для: Постоянного использования и критически важных с точки зрения безопасности рабочих процессов.

Вдохновлен Caveman — удаляет слова-паразиты и многословные формулировки, сохраняя смысл:

  • Удаляет слова-паразиты (“пожалуйста”, “я думаю”, “в основном”, “на самом деле”)
  • Сокращает многословные фразы (“для того чтобы” → “чтобы”, “в результате того что” → “потому что”)
  • Удаляет излишне вежливые смягчающие обороты (“Не могли бы вы…”, “Если бы вы могли…”)
  • Более 30 правил на основе регулярных выражений, настроенных для промптов, связанных с программированием

Лучше всего подходит для: Повседневной разработки и команд, стремящихся сократить расходы.

Интеллектуальное управление историей для длительных сеансов:

  • Устаревание сообщений — более старые сообщения сжимаются всё сильнее
  • Суммаризация результатов инструментов — длинные результаты работы инструментов заменяются краткими сводками
  • Механизмы сохранения структурной целостности — обеспечивают согласованность пар tool_use + tool_result
  • Учет контекстного окна — соблюдает ограничения количества токенов для каждой модели

Лучше всего подходит для: Длительных сеансов отладки и больших кодовых баз.

Максимальное сжатие для сценариев с критическими ограничениями по количеству токенов:

  • Эвристическое сокращение — удаляет сообщения с релевантностью ниже порогового значения
  • Прореживание блоков кода — сжимает повторяющиеся примеры кода
  • Усечение с помощью двоичного поиска — находит оптимальную точку отсечения для контекстного окна
  • Включает все возможности режима Aggressive

Лучше всего подходит для: Ситуаций, когда вы постоянно достигаете ограничений контекста.

Режим RTK (диапазон 60–90% для вышестоящего провайдера)

Заголовок раздела «Режим RTK (диапазон 60–90% для вышестоящего провайдера)»

Режим RTK оптимизирован для многословного вывода инструментов, встречающегося в сеансах работы агентов программирования:

  • Обнаруживает классы команд/вывода, такие как git status, git diff, git log, средства запуска тестов, сборки TypeScript/Vite/Webpack, ESLint/Biome/Prettier, аудит/установка npm, журналы Docker, вывод инфраструктурных инструментов и стандартный вывод оболочки
  • Применяет наборы JSON-фильтров из open-sse/services/compression/engines/rtk/filters/
  • Импортирует фильтры схемы RTK TOML v1 из файлов filters.toml проекта или глобальных файлов, с проверкой встроенных тестов и контролем доверия для файлов проекта
  • Поставляется с 49 встроенными фильтрами и встроенными примерами проверки
  • Удаляет управляющие последовательности ANSI, индикаторы выполнения, повторяющиеся строки и несущественный шум
  • Сохраняет информацию о сбоях, ошибках, предупреждениях, измененных файлах, сводках и заключительную часть длинного вывода
  • Поддерживает проектные фильтры с контролем доверия, глобальные фильтры и опциональное восстановление отредактированного необработанного вывода

Лучше всего подходит для: Сеансов работы агентов, содержащих протоколы оболочки, сборки, тестов, git, grep и файлового вывода.

Режим Stacked (диапазон 78–95% для подходящего содержимого)

Заголовок раздела «Режим Stacked (диапазон 78–95% для подходящего содержимого)»

Режим Stacked запускает несколько движков сжатия в детерминированном порядке. Конвейер по умолчанию:

RTK -> Caveman

Такой порядок сначала сокращает вывод терминала/инструментов, а затем применяет семантическое сжатие Caveman к оставшейся части промпта на естественном языке. Конвейеры Stacked можно настраивать глобально или через комбинации сжатия, назначенные комбинациям маршрутизации.

Лучше всего подходит для: Смешанного контекста с большими журналами инструментов, а также инструкциями пользователя или сводками ассистента.


Расчёт экономии по данным исходных проектов

Заголовок раздела «Расчёт экономии по данным исходных проектов»

OmniRoute приводит данные об экономии за счёт сжатия из двух источников: бенчмарков исходных проектов и собственной комбинации движков OmniRoute.

Источник Используемые здесь показатели из README исходного проекта
Caveman на ~75% меньше выходных токенов, средняя экономия выходных токенов в бенчмарках — 65%, диапазон — 22-87%, инструмент сжатия входных данных — ~46%
RTK экономия 60-90% на выводе команд; пример сессии: ~118,000 -> ~23,900 токенов, то есть экономия 79.7% (~80%)

Для пересекающихся полезных нагрузок инструментов/контекста комбинация OmniRoute по умолчанию последовательно применяет движки:

RTK -> Caveman

Совокупная экономия рассчитывается мультипликативно, а не аддитивно:

итог = 1 - (1 - экономия RTK) * (1 - экономия Caveman на входных данных)
среднее = 1 - (1 - 0.80) * (1 - 0.46) = 89.2%
диапазон = 1 - (1 - 0.60..0.90) * (1 - 0.46) = 78.4-94.6%

Показатель 78-95% применим, когда и RTK, и Caveman могут сократить одну и ту же полезную нагрузку входных данных/контекста. Режим обработки выходных данных ответа Caveman рассматривается отдельно: когда он включён, используются собственные показатели экономии Caveman для выходных данных (65% в среднем, заявленные ~75%, диапазон 22-87%). Итоговая экономия на оплате зависит от соотношения входных и выходных данных.

Что на самом деле означает «подходит для сжатия»

Заголовок раздела «Что на самом деле означает «подходит для сжатия»»

Заявленный диапазон 15-95% реален, но он применим только к избыточному или многословному содержимому — повторяющимся строкам ошибок, журналу сборки, многократно выводящему одно и то же предупреждение, чрезмерно большому выводу grep/чтения файла. Это не означает, что каждый запрос обеспечивает такую экономию.

Эмпирически подтверждено (tests/unit/compression/stacked-compression-tool-result-savings.test.ts): запуск stacked (RTK + Caveman) для блока tool_result в формате Anthropic, содержащего 300 одинаковых строк ошибок, обеспечил экономию 95.93% токенов / 96.26% символов — точно в заявленном диапазоне. Однако запуск того же конвейера для обычного, неизбыточного вывода инструмента (чистого списка совпадений grep, короткого фрагмента прочитанного файла, обычного диалогового текста) корректно обеспечивает почти нулевую экономию, поскольку в нём нет повторов, которые можно удалить, а validateCompression() (validation.ts) не позволяет отправить переработанный текст, если при этом будут удалены или изменены блоки кода, URL-адреса, заголовки, версии или идентификаторы констант в ВЕРХНЕМ РЕГИСТРЕ.

Это ожидаемое и безопасное поведение, а не ошибка: сеанс программирования, в котором преимущественно читаются чистые файлы или выполняется поиск по ним, покажет умеренную общую экономию даже при полностью включённом сжатии, тогда как сеанс, столкнувшийся с циклом сбоев или многословным линтером, покажет полный диапазон экономии 78-95% для такого трафика. Не воспринимайте низкий совокупный процент экономии отдельного сеанса как доказательство неправильной настройки сжатия — сначала проверьте, был ли исходный вывод инструмента действительно избыточным.


Без сжатия: 47K токенов отправлено в LLM
С Lite: 40K токенов отправлено (экономия 15% — безопасный, всегда включённый режим)
С Standard: 33K токенов отправлено (экономия 30% — правила caveman-speak)
С Aggressive: 24K токенов отправлено (экономия 50% — устаревание + суммаризация)
С Ultra: 12K токенов отправлено (экономия 75% — эвристическое отсечение)
С RTK: 19K-5K токенов отправлено (экономия 60-90% на выводе команд/инструментов)
С Stacked: 10K-2.5K токенов отправлено (диапазон экономии 78-95% для данных, подходящих для RTK+Caveman)

Перейдите в Dashboard → Context & Cache:

  • Caveman — выбор режима, языковые пакеты, предпросмотр и глобальные настройки по умолчанию
  • RTK — предпросмотр фильтров команд, настройки безопасности RTK и каталог фильтров
  • Compression Combos — именованные конвейеры движков, назначенные комбинациям маршрутизации
  • Auto-Trigger Threshold — автоматическое включение сжатия, когда количество токенов превышает порог

Переопределение для конкретной комбинации (Per-Combo Override)

Заголовок раздела «Переопределение для конкретной комбинации (Per-Combo Override)»

В Dashboard → Context & Cache → Compression Combos назначьте комбинацию сжатия для комбинации маршрутизации:

Combo: "free-tier-fallback"
Compression Combo: "coding-agent-stack"
Pipeline: RTK -> Caveman
Targets:
1. if/kimi-k2.7-code
2. if/qwen3.8-max-preview

Это позволяет использовать многоуровневое (stacked) сжатие для бесплатных/кодинговых провайдеров, сохраняя облегченный режим (lite mode) для платных подписок.

Это назначение «Per-Combo Override» является иным элементом управления, отличным от переопределения режима сжатия комбинации маршрутизации (Default/Off/Lite/Standard/Aggressive/Ultra) — это переопределение не выбирает именованный конвейер compression-combo; оно просто устанавливает поле compressionMode, которое учитывается resolveCompressionPlan. Его можно настроить либо в карточке комбинации (Dashboard → Combos), либо, начиная с #6760, для каждой комбинации маршрутизации в списке «Assign to routing» на странице Dashboard → Context & Cache → Compression Combos, прямо рядом с чекбоксом назначения конвейера, описанным выше. Оба интерфейса сохраняют данные через один и тот же эндпоинт PUT /api/combos/{id}.

Переопределение для конкретного запроса (Per-request override)

Заголовок раздела «Переопределение для конкретного запроса (Per-request override)»

Отправьте заголовок запроса x-omniroute-compression, чтобы переопределить план сжатия для одного запроса. Он имеет наивысший приоритет — он перекрывает переопределение комбинации маршрутизации, активный профиль, автотриггер и настройки Default в панели. Неизвестные значения игнорируются (запрос никогда не отклоняется), а глобальный главный переключатель по-прежнему контролирует всё: если сжатие отключено глобально, заголовок не сможет его включить. Значения:

Значение Эффект
off Без сжатия для этого запроса.
default Профиль Default, полученный из панели (игнорирует активный профиль). Движки с потерями (lossy) остаются выключенными.
safe То же самое, что и отсутствие заголовка: только дедупликация и сворачивание пробелов.
allow-lossy Сохранить план оператора для этого запроса, включая суммаризацию, фильтры релевантности и переписывание стиля.
engine:<id> Одиночный движок, если он включен, например engine:rtk. Это ручное включение (opt-in) для конкретного движка.
<combo> Именованная комбинация, сопоставляемая сначала по имени (без учета регистра), затем по id.

Без allow-lossy, engine:<id> или именованной комбинации движки с потерями не применяются. Запрос по-прежнему проходит дедупликацию сессии и сворачивание пробелов, если сжатие включено.

Примененный план возвращается в заголовке ответа X-OmniRoute-Compression: &lt;mode&gt;; source=<source>, где <source> принимает одно из значений: request-header, routing-override, active-profile, auto-trigger, default или off.

Окно терминала
# Получить настройки сжатия
curl http://localhost:20128/api/settings/compression
# Обновить настройки сжатия
curl -X PUT http://localhost:20128/api/settings/compression \
-H "Content-Type: application/json" \
-d '{"defaultMode":"stacked","autoTriggerMode":"stacked","autoTriggerTokens":32000}'
# Предпросмотр конкретной полезной нагрузки RTK/stacked
curl -X POST http://localhost:20128/api/compression/preview \
-H "Content-Type: application/json" \
-d '{"mode":"rtk","messages":[{"role":"tool","content":"npm test output here"}]}'
# Список пакетов фильтров RTK
curl http://localhost:20128/api/context/rtk/filters
# Тестирование RTK напрямую с необязательными метаданными команды
curl -X POST http://localhost:20128/api/context/rtk/test \
-H "Content-Type: application/json" \
-d '{"command":"npm test","text":"FAIL tests/example.test.ts\nError: boom"}'

Механизм сжатия всегда сохраняет:

  • ✅ Блоки кода (ограждённые и встроенные)
  • ✅ URL-адреса и пути к файлам
  • ✅ Структуры JSON и структурированные данные
  • ✅ Идентификаторы и защищённые технические токены
  • ✅ Математические выражения
  • ✅ Определения вызовов инструментов/функций
  • ✅ Системные промпты (в режиме lite)

При восстановлении необработанного вывода RTK распространённые ключи API, bearer-токены, токены Slack, ключи доступа AWS, пароли, токены и секреты скрываются до сохранения каких-либо данных.


Каждый сжатый запрос включает статистику в логах сервера:

{
"originalTokens": 47200,
"compressedTokens": 40120,
"savingsPercent": 15.0,
"techniquesUsed": ["collapseWhitespace", "dedupSystemPrompt"],
"mode": "lite",
"engine": "caveman",
"compressionComboId": "coding-agent-stack",
"durationMs": 0.8,
"rtkRawOutputPointers": []
}

Фаза Режимы Статус
Фаза 1 Выкл., Облегченный ✅ Выпущено
Фаза 2 Стандартный, Агрессивный, Ультра ✅ Выпущено
Фаза 3 RTK, Сложенный, Комбинации сжатия ✅ Выпущено
Фаза 4 Стили вывода, Ультра уровня SLM, тестовый стенд ✅ Выпущено
Фаза 4C Адаптивный контекстный бюджет (“регулятор”) — вычислительный движок + API (contextBudget в PUT /api/settings/compression) + элементы управления режимами/политиками на панели мониторинга ✅ Выпущено

Правила сжатия режима Standard вдохновлены проектом Caveman от JuliusBrussee (⭐ 51K+) — вирусным проектом «зачем использовать много токенов, когда достаточно нескольких». Согласно данным Caveman, проект обеспечивает на ~75% меньше токенов в выводе, среднюю экономию токенов вывода в тестах на уровне 65%, диапазон экономии вывода 22-87% и сжатие ввода на ~46%.

Режим RTK вдохновлён RTK - Rust Token Killer от RTK AI — высокопроизводительным проектом сжатия вывода команд для фильтрации вывода терминала, сборки, тестов, git и инструментов. Согласно данным RTK, экономия составляет 60-90%, а в примере сеанса из README показана экономия ~80%.


Помимо 7 стандартных режимов, OmniRoute включает несколько расширенных систем сжатия, которые работают автоматически в зависимости от контекста.

Некоторые провайдеры (например, Anthropic с кэшированием промптов) поддерживают кэширование промптов, что позволяет им кэшировать части промпта для снижения затрат и задержки. Когда кэширование включено, агрессивное сжатие может фактически ухудшить производительность, поскольку оно изменяет кэшированные токены, делая кэш недействительным.

Модуль cachingAware.ts решает эту проблему, обнаруживая контекст кэширования и корректируя стратегию сжатия соответствующим образом.

  1. Обнаружение контекста кэширования — Сканирует тело запроса на наличие маркеров cache_control.
  2. Идентификация провайдеров кэширования — Проверяет, поддерживает ли целевой провайдер кэширование.
  3. Корректировка стратегии — Понижает режимы aggressive/ultra до standard для провайдеров кэширования.
  4. Пропуск системного промпта — Системные промпты обычно кэшируются, поэтому их не сжимают.
  5. Использование детерминированных преобразований — Используются только преобразования, которые дают согласованный результат.
import {
detectCachingContext,
getCacheAwareStrategy,
} from "@omniroute/open-sse/services/compression/cachingAware";
const body = {
model: "anthropic/claude-sonnet-4.5",
messages: [{ role: "user", content: "Hello" }],
cache_control: { type: "ephemeral" }, // ← Маркер кэша
};
const ctx = detectCachingContext(body, { provider: "anthropic" });
// → { hasCacheControl: true, provider: "anthropic", isCachingProvider: true }
const strategy = getCacheAwareStrategy("aggressive", ctx);
// → { strategy: "standard", skipSystemPrompt: true, deterministicOnly: true }

Сжатие с учетом кэша всегда включено — настройка не требуется. Оно срабатывает только когда:

  • Запрос содержит маркеры cache_control.
  • Целевой провайдер поддерживает кэширование промптов (Anthropic, OpenAI и т.д.).

Длинные беседы накапливают много сообщений, но более старые сообщения становятся менее актуальными. Модуль progressiveAging.ts ухудшает сообщения по расстоянию хода:

  • Недавние ходы (0-3): Сохраняются дословно (полная детализация)
  • Средние ходы (4-8): Легкое сжатие (удаление пробелов, очистка форматирования)
  • Старые ходы (9+): “Пещерное” сжатие (удаление наполнителей, суммаризация)
  • Очень старые ходы (20+): Сильно суммируются или отбрасываются
import { applyAging } from "@omniroute/open-sse/services/compression/progressiveAging";
const messages = [
{ role: "system", content: "You are a helpful assistant" },
{ role: "user", content: "What is 2+2?" },
{ role: "assistant", content: "4" },
// ... еще 50 ходов ...
];
const { messages: aged, saved } = applyAging(messages, {
verbatim: 3, // Первые 3 хода: дословно
light: 8, // Ходы 4-8: легкое сжатие
moderate: 20, // Ходы 9-20: "пещерное" сжатие
// Ходы 21+: сильная суммаризация
});
// saved = количество сохраненных токенов

Прогрессивное старение всегда включено для режимов aggressive и ultra. Оно особенно эффективно для:

  • Длительных сессий кодирования
  • Многодневных бесед
  • Агентских рабочих процессов с большим количеством вызовов инструментов

Модуль outputMode.ts внедряет инструкции системного промпта, чтобы сама модель производила сжатый, лаконичный вывод (в стиле “пещерного человека”).

Вместо сжатия ввода этот режим добавляет системный промпт, например:

“Отвечайте минимальным количеством слов. Пропускайте любезности. Используйте короткие предложения.”

Это особенно хорошо работает для:

  • Генерации кода (более лаконичный вывод = меньше токенов)
  • Быстрых вопросов и ответов (нет необходимости в подробных объяснениях)
  • Пакетной обработки (максимизация пропускной способности)

Режим вывода “Пещерный человек” включается по желанию — установите его через комбинированную конфигурацию:

{
"strategy": "auto",
"config": {
"auto": {
"outputMode": "caveman"
}
}
}

Режим вывода “Пещерный человек” выше — это устаревший путь с одним стилем. Фаза 4 обобщила его в каталог компонуемых стилей вывода: OUTPUT_STYLE_CATALOG в open-sse/services/compression/outputStyles/catalog.ts. Каждый стиль представляет собой инструкцию системного промпта, которая заставляет саму модель производить более дешевый вывод; стили могут быть включены вместе и внедряются в порядке каталога.

Стиль id Что он делает Языки инструкций
Краткая проза terse-prose Отбрасывает лишние слова/артикли/оговорки; сохраняет точное техническое содержание. Тот же текст, что и в устаревшем режиме вывода caveman (ссылка, не перепечатка). en, pt-BR, es, de, fr, it, ru, zh, ja, id, vi
Меньше кода less-code Лестница YAGNI: минимальное рабочее изменение, никаких незапрошенных абстракций. en, pt-BR, es, de, fr, it, ru, zh, ja, id, vi
Ponytail (ленивый старший разработчик) ponytail “Лучший код — это код, который никогда не был написан”: повторное использование > переписывание, первопричина > симптом, кратчайший рабочий diff. en, pt-BR, es, de, fr, it, ru, zh, ja, id, vi
У меня СДВГ (действие-первым) i-have-adhd Сначала действие (команда/путь/фрагмент перед прозой), нумерованные ограниченные шаги, ОДИН конкретный следующий шаг, без преамбулы/резюме/завершений. Адаптировано из ayghri/i-have-adhd (MIT). en, pt-BR, es, de, fr, it, ru, zh, ja, id, vi
Краткий CJK (文言) terse-cjk Ультра-краткий стиль классического китайского языка. zh (ограничено локалью: предлагается только при разрешенном языке zh)

Каждый стиль имеет три уровня интенсивности — lite, full, ultra — и каждый уровень завершается общим пунктом о границах, который сохраняет блоки кода, пути к файлам, команды, строки ошибок, URL-адреса и идентификаторы без изменений.

applyOutputStyles() (open-sse/services/compression/outputStyles/apply.ts) разрешает выбор по каталогу (неизвестные идентификаторы и стили, не соответствующие локали, отбрасываются, это никогда не является ошибкой), объединяет выбранные инструкции в порядке каталога, добавляет пункт о границах один раз и помещает результат в системный промпт за одним маркером идемпотентности ([OmniRoute Output Styles]) — повторное применение не выполняет никаких операций. Когда обнаруженный язык запроса имеет перевод, вместо английской инструкции вставляется локализованная инструкция.

На панели управления: Context → Settings → Compression — одна строка на каждый стиль с переключателем включения/выключения и селектором уровня. Программно конфигурация сжатия сохраняет выбор как:

{
"outputStyles": [
{ "id": "i-have-adhd", "level": "full" },
{ "id": "less-code", "level": "lite" }
]
}

Обратная совместимость: устаревшая комбинированная настройка outputMode: "caveman" по-прежнему работает и сопоставляется с terse-prose, байт-в-байт идентична старой инъекции на каждом устаревшем языке.

Выбор языка: при включенном languageConfig.enabled, autoDetect выбирает язык последнего сообщения пользователя (тот же детектор, что и у входных движков); отключение autoDetect фиксирует defaultLanguage. Выключено → английский.

Матрица стиль × язык закреплена в tests/unit/compression/output-styles-i18n-matrix.test.ts: новый стиль не может быть выпущен без как минимум перевода на pt-BR (или явного отслеживаемого исключения), и существующий стиль не может незаметно потерять локаль. Чтобы добавить стиль, см. EXTENDING_COMPRESSION.md.

Модуль toolResultCompressor.ts предоставляет 5 специализированных стратегий сжатия для результатов инструментов (вызовы функций, выводы агентов, результаты поиска и т.д.):

  1. Сжатие результатов поиска — Удаляет избыточные результаты, сохраняет N лучших
  2. Сжатие чтения файлов — Обрезает большие файлы, сохраняет заголовки/импорты
  3. Сжатие выполнения кода — Сохраняет только существенные stdout/stderr
  4. Сжатие запросов к базе данных — Ограничивает строки, удаляет подробные метаданные
  5. Сжатие ответов API — Удаляет нулевые поля, сжимает массивы

Сжатие результатов инструментов всегда включено, когда присутствуют вызовы инструментов. Настройка не требуется.

Стековый режим запускает несколько движков последовательно — обычно сначала RTK (экономия 60-90% на выводе инструмента), затем Caveman (дополнительная экономия 30% на оставшемся тексте). Это обеспечивает общую экономию 78-95%.

Вход (1000 токенов)
→ RTK (фильтр с учетом команд) → 200 токенов
→ Caveman (удаление лишнего) → 140 токенов
→ Выход (140 токенов, экономия 86%)

Используйте стековый режим для:

  • Рабочих процессов, интенсивно использующих инструменты (агентное кодирование, исследования)
  • Экономичных пакетных обработок
  • Когда вам нужна максимальная экономия токенов

Настройте через комбинацию:

{
"strategy": "auto",
"config": {
"auto": {
"modePack": "stacked"
}
}
}

Вы можете переопределить глобальный режим сжатия для каждой комбинации, чтобы точно настроить поведение для различных сценариев использования:

{
"id": "coding-combo",
"strategy": "priority",
"config": {
"auto": {
"weights": { "taskFit": 0.5 },
"modePack": "quality-first"
}
},
"compressionOverride": {
"mode": "aggressive",
"stackedPipelines": ["rtk", "caveman"],
"preserveToolDefinitions": true
}
}

Это полезно для:

  • Комбинаций для программирования: используйте режим aggressive для длительных сеансов
  • Комбинаций для быстрых вопросов и ответов: используйте режим lite для быстрых ответов
  • Комбинаций с активным использованием инструментов: используйте режим stacked для максимальной экономии
  • Комбинаций для рабочей среды: используйте режим cache-aware для провайдеров, поддерживающих кэширование


Исходный код OmniRoute (a58000c7685f)

HagiCode

HagiCode — агентная среда разработки со структурированными процессами, параллельным выполнением несколькими агентами и интерфейсами Hero Dungeon.

Превращайте идеи в полезное ПО с более умным, быстрым и увлекательным агентным рабочим процессом.

Главный экран HagiCode в светлой теме
  • SmartСтруктурированные процессы превращают намерение в исполнимый путь от идеи до готового изменения.
  • EfficientМультиагентные процессы параллельно продвигают исследование, реализацию и проверку.
  • FunHero Dungeon делает длительную совместную разработку наглядной и увлекательной.
Перейти на HagiCode