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

Chimera — архитектура

Этот документ сопоставляет кодовую базу с замыслом и с исследованиями, на которые она опирается. О том, «зачем», смотрите в VISION.md.

Ядро рассуждения: LLM-Fusion

chimera/fusion/

Движок слияния прогоняет задачу через панель моделей, поручает судье составить структурированный разбор (согласие / противоречия / частичный охват / уникальные наблюдения / слепые пятна), а затем синтезатор пишет итоговый ответ, опираясь на этот разбор (FusionEngine). Он реализует протокол SupportsComplete, поэтому подставляется как движок рассуждения всюду, где ожидается модель, — в том числе внутри цикла агента.

Маршрутизатор, знающий цену (RoutedBackend + RoutingPolicy), держит слияние выборочным: ходы с вызовами инструментов идут к одной модели (слияние не вызывает инструменты), и сливаются только глубокие ходы с высокой ценой ошибки. Идея взята у OpenRouter Fusion (подъём даёт шаг синтеза, а не только разнообразие моделей) и AURORA-AI (подстраиваемый бюджет по разнородным моделям).

Цикл агента и самостоятельность второго уровня

chimera/core/

  • Agent — минимальный цикл ReAct с вызовом инструментов и явной стенограммой (состояние живёт вне модели). Зависит только от SupportsComplete и ToolRegistry.
  • AutonomousAgent — второй уровень: собрать контекст Spine, ограниченный владением → план → снимок → выполнение → разбор управляющим (кто делает, тот не проверяет) → проверить или откатить → повтор с обратной связью, записывая каждую попытку в буфер опыта.
  • WorkspaceGuard — снимок и восстановление текстовых файлов, механизм за «проверить или откатить».
  • CommandVerifier — «исполняемое свидетельство» (код выхода 0 означает успех).

Борьба с деградацией при непрерывной эволюции

Открытая задача (по Agentic Software, 2606.05608): качество падает с более чем 80% на отдельных задачах примерно до 38% при непрерывной эволюции — из-за длинного контекста и накопления ошибок. Меры Chimera, каждая со своим основанием в литературе:

Мера Где Основание
Вынести состояние наружу (стенограмма и рабочая папка, а не контекст модели) core, WorkspaceGuard HORIZON 2606.28279
Контекст, ограниченный владением (Spine) core/spine.py Spec Growth Engine 2606.27045
Разделение «сделать» и «проверить» core/supervisor.py AdvancedShelLM 2606.27990
Проверить или откатить core/autonomous.py autoresearch / AutoMegaKernel 2606.09682
Буфер опыта (провалы как отрицательные примеры) evolution/experience.py HORIZON 2606.28279
Сведение сообщений в командах orchestration/comms.py MOC 2606.02359
Замер непрерывной эволюции eval/continuous.py постановка задачи EvoClaw

Память и самоэволюция

chimera/memory/, chimera/evolution/

  • Управляющий памятью — иерархические записи (рабочие / эпизодические / смысловые / о личности) с операциями ADD / UPDATE / DELETE / NOOP (remember) и слиянием повторов через merge (Memory-R1, 2606.14502).
  • Эволюция навыковSkillEvolver предлагает переиспользуемый LearnedSkill по итогам успеха, проверяет его и оставляет, только если он проходит (предложить → проверить → оставить или выбросить). Усвоенные навыки — это шаблоны промптов, а не исполняемый код: их безопасно сочинять самостоятельно ещё до самомодификации на уровне кода. Доработка улучшает шаблон по его же провалам (VIBEMed 2606.15504).
  • Самостоятельно усвоенные заданияCronLearner замечает повторяющиеся задачи и предлагает задания по расписанию (created_by=agent, выключенные до одобрения человеком).
  • Замер непрерывной эволюции — прогоняет цепочку задач через решатель и сообщает деградацию (общая доля прохождения, первая половина против второй, самая длинная серия).

Управление и безопасность

chimera/governance/

Самосовершенствующееся ядро доверия (AgentTrust v2, 2606.08539):

  • TrustKernel.evaluate(action)разрешить / предупредить / заблокировать / разобрать. Лексический RuleSet детерминированно разбирается с угрозами фиксированной формы; необязательный смысловой судья разбирается с намерением; выведенные правила со временем удешевляют работу. Неизменное условие: никогда не блокировать наглухо безобидное действие.
  • SkillValidator / ScheduleValidatorограниченная, статически проверяемая поверхность правок для самомодификации (AutoMegaKernel 2606.09682): небезопасные предложения отвергаются ещё до запуска.
  • AuditLog — JSONL только на дозапись, с решениями и изменениями эволюции.
  • GovernedTool / govern_registry — обёртка вокруг любого инструмента, ставящая его выполнение под контроль; складывается с существующим циклом агента без изменений (chimera ... --guard).

Слой заражения (сдерживание внедрения в промпт)

Лежит поверх ядра — эвристический, честный и никогда не являющийся жёсткой границей (граница — это песочница):

  • TaintLedger + LedgeredTool (ledger.py, ledger_tool.py) — журнал полномочий на запуск. Загрузка заражает своё содержимое; запись или выполнение, поглощающие заражённое содержимое, поднимаются до разбора (assess_action). Недоверенное загруженное содержимое возвращается обособленным как данные и с вырезанными управляющими токенами шаблона чата (sanitize.py), а долговечные артефакты заражённого запуска сохраняют происхождение tainted, чтобы отрава не могла отмыться в «чистую» память или навык.
  • AggregateMonitor (aggregate_monitor.py) — монитор уровнем выше: получая события полномочий каждого подагента, он ловит разделённые потоки, которых монитор одного агента не видит (агент A забирает недоверенное содержимое, агент B его выполняет или отправляет наружу).
  • check_drift (drift.py) — Spec из исполняемых требований (defines/contains/absent/command), который заодно служит эталоном для solve --verify и единственной инстанцией, решающей «готово» для оркестратора проектов (ниже). Отрицательные проверки на файлах, которые не удалось прочитать, срабатывают в сторону отказа.
  • QuarantineTool + подстраивающийся список разрешений (quarantine.py, allowlist.py) — изолированный читатель по приёму двух моделей (CaMeL) и список разрешённых инструментов, который сужается, как только запуск заражён.

Команды агентов (третий уровень)

chimera/orchestration/

  • Role + RoleAgent — специализация по ролям (в духе CrewAI).
  • SequentialCrew — роли по очереди, каждая видит сведённые предыдущие результаты и может писать в общую память.
  • SupervisorCrew — работники берутся за задачу параллельно, результаты сводятся, а руководитель синтезирует (parallel_review в духе CAPRA, 2606.18976).
  • consolidate — слияние сообщений по MOC держит контекст команды лёгким (2606.02359).

Самоэволюционирующая экосистема (четвёртый уровень)

chimera/ecosystem/

  • MetaAgent — проектирует, собирает и оценивает специализированных агентов (агенты, строящие агентов). Две меры предосторожности из Meta-Agent Challenge (2606.04455): изоляция инструментов (инструменты спроектированного агента фильтруются по разрешённому списку) и отделение скрытых тестов (видимые прошли, скрытые провалились ⇒ подозрение на подгонку под награду, успехом не засчитывается).
  • ChangeQueue — управляет темпом изменений (очередь слияния FIFO и ограничения на пакет), а не численностью («Govern the Repository», 2606.28235).
  • TrajectoryCollector — записывает тройки (промпт, ответ, исход) и выгружает наборы для SFT и DPO. Само дообучение включается по желанию и делается снаружи — Chimera собирает, но не обучает.

Экономика стоимости и иерархия делегирования

chimera/orchestration/ (иерархия, каскад, бюджет, расписки, envelope_verify)

Делегирование окупается, только когда оно дешевле, чем сделать работу на месте, и это утверждение измерено, а не заявлено:

  • HierarchicalOrchestrator — разложить → разослать работникам с бюджетом → проверить каждый результат → синтезировать. Веерная работа, похожая на чтение, делегируется; совсем мелкую подзадачу доверенная верхняя модель отвечает сама.
  • CascadeBackend — слабая → проверка → средняя → проверка → слияние, поднимаясь по ступеням, только когда ответ ступени не проходит дешёвую приёмку. Журнал маршрута записывает каждый переход, поэтому стоимость — это сумма по всем испробованным переходам, а не только по принятому: за подъёмы платят.
  • TokenBudget / BudgetedBackend / EffortPolicy — жёсткий потолок по токенам, соблюдаемый на уровне движка, для каждого работника.
  • EnvelopeVerifier — схема → критерии приёмки → вероятностная выборочная проверка (оценить добросовестность пересказа против исходного артефакта); повторный запрос, вызванный неудачной выборочной проверкой, проверяется заново.
  • Расписки делегирования (receipts.py) — каждое делегирование записывает измеренные токены и стоимость и тут же, в той же строке, встречный вариант «сделать на месте», посчитанный по тарифу каждой модели (неизвестная модель → None, никогда не выдуманное число). Собственные накладные расходы оркестратора на разложение и синтез тоже учитываются, поэтому summarize_delegations (chimera delegations) сообщает проверяемую чистую экономию, а cascade-bench сообщает хвост стоимости (p50/p95/p99), а не только среднее.

Маховик самоэволюции

chimera/evolution/

«Обучение», которое никогда не трогает веса, — с сигналом пригодности, без градиентов и обратимое:

  • EvolutionContext — общая сборка (опыт, траектории, память, автоэволюция, карточки навыков, сборник приёмов), благодаря которой обучение становится свойством всего стека агента, а не только команды solve.
  • Карточки навыков и доработка GEPA, сборник приёмов ACE и SkillLifecyclePolicy, который повышает и понижает навык по измеренной статистике применений и удач (новый навык рождается provisional).
  • Проверка разницы — «пустой успех» (проверяющий прошёл, но разница в рабочей папке пуста) не чеканит ни навык, ни память: маховик учится только на работе, которая действительно была сделана.
  • Проверка переноса (eval/transfer.py) — доработанный артефакт повышается, только если держится и на отложенной выборке, что защищает от отрицательного переноса. Цель задаёт maturity.Scorecard.weakest(): цикл бьёт по самой слабой способности. Откат при ухудшении происходит автоматически только при статистически значимом падении (по интервалу, а не по одной точке).

Каждая смена значения по умолчанию проходит через заранее объявленный парный A/B (bench/), публикуемый независимо от того, выигран он или проигран, — без перезапусков ради значимости.

Самостоятельность на уровне проекта (от начала до конца)

chimera/orchestration/project.py

ProjectOrchestrator ведёт целый проект по Spec: граф задач (ориентированный ациклический граф Kanban с depends_on) → каждая готовая карточка решается (с описанным выше контекстом эволюции) → принимается по Spec через check_drift (единственная инстанция, решающая «готово») → невыполненные требования порождают следующие карточки, и так по кругу, пока Spec не сойдётся или пока не остановят бюджет, предел итераций или контрольная точка человека. Рискованные шаги (risk: high — развёртывание, миграция, удаление) встают на одобрение человеком; запуск долговечен и возобновляем.

Сквозные части

  • Поставщики (providers/) — один шлюз поверх LiteLLM, не зависящий от поставщика; ключи могут жить в .env и экспортируются в окружение, чтобы LiteLLM их видел.
  • Инструменты (tools/) — родные примитивы; метаданные инструмента являются атрибутами экземпляра, поэтому динамически создаваемые инструменты (OpenAPI, MCP) работают.
  • Интеграции (integrations/) — клиент MCP (необязательное дополнение mcp), импортёр OpenAPI → инструмент и реестр соединителей.
  • Планировщик (scheduler/) — задания по расписанию и по событиям; время подаётся снаружи ради детерминированных тестов.
  • Перенос (migration/) — импорт конфигурации и навыков плюс слияние долговременной памяти из Hermes и OpenClaw, без повторов и без разрушения.

Подход к тестированию

Каждая подсистема покрыта модульными тестами с поддельными движками — детерминированно, без сети и без ключей. Команды, которые действительно обращаются к модели, проверяются дымовым тестом на путь отказа без ключа. Заслон качества (ruff + mypy --strict + pytest) работает в CI на Python 3.11 и 3.12.

Изменить эту страницу на GitHub