EnglishРусский Map

ActiveGraph

title
ActiveGraph
type
toolbox
summary
Event-sourced среда выполнения Python-агентов, где граф - воспроизводимая свёртка append-only лога
tags
python, ai-agents, event-sourcing, architecture, watchlist
language
Python
license
Apache-2.0
created
2026-07-23
updated
2026-07-23
lang
ru
translation_of
activegraph
source_updated
2026-07-23
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

Среда выполнения, лежащая в основе статьи Накадзимы log-is-the-agent, выпущенная под лицензией Apache-2.0. Вы пишете поведения (behaviors), которые подписываются на паттерны типизированного графа; среда выполнения сворачивает append-only лог событий в этот граф, запускает подходящие поведения и записывает всё, что они делают - включая каждый запрос и ответ модели, - обратно в лог. В обмен на отказ от скрипта оркестрации вы получаете воспроизведение (replay), ветвление (forking) и историю происхождения (provenance) для каждого объекта.

pip install activegraph
activegraph quickstart

Quickstart запускает встроенный пакет инвестиционного дью-дилидженса на записанных фикстурах: три компании, без API-ключа, офлайн, быстрее тридцати секунд, побайтово идентичные логи при повторных запусках. Как заявляется, он генерирует 671 событие, 93 объекта и 76 связей из 103 вызовов моделей и 48 вызовов инструментов без какого-либо оркестрационного кода. В каталоге examples/ собраны небольшие демо, проверяющие разные части среды выполнения, - запуски с реальным API, разбор ветвления, извлечение утверждений одним поведением.

Компоненты, которые вы пишете

Pack (пакет) - единица упаковки доменной логики: типы объектов, поведения, инструменты, промпты и политики, собранные воедино. Поставляемый в комплекте diligence pack объявляет такие типы, как company, document, question и claim, а также поведения вроде diligence.company_planner и diligence.question_generator.

Behavior (поведение) - это подписка плюс тело. Подписка представляет собой тип события с опциональным предикатом и паттерном структуры графа на подмножестве Cypher; именно это позволяет поведению срабатывать по топологическому условию (например, "утверждение, отвечающее на неотвеченный вопрос"), а не только по типу события. Тела бывают четырёх видов: простая функция, класс (если поведению нужна конфигурация), LLM-процедура, чьи запрос и ответ логируются как события, и relation-behavior, прикреплённый к типизированному ребру, благодаря чему связывание двух объектов может запускать собственные вычисления.

Всё, что делает среда выполнения, сохраняется в логе в формате JSON. Событие создания объекта содержит историю происхождения прямо в себе:

{
  "id": "evt_004",
  "type": "object.created",
  "actor": "diligence.company_planner",
  "caused_by": "evt_002",
  "payload": {
    "object": {
      "id": "company#1",
      "type": "company",
      "provenance": {
        "created_by": "diligence.company_planner",
        "caused_by_event": "evt_002"
      }
    }
  }
}

Ограничения и правила

Тела поведений не должны напрямую читать генераторы случайных чисел, системное время или генерировать свежие UUID, не должны выполнять ввод-вывод в обход примитивов инструментов и моделей фреймворка, а также зависеть от мутабельного глобального состояния, меняющегося между запусками. Временные метки берутся из запустившего событие триггера, а идентификаторы - из детерминированного генератора среды выполнения.

Во время написания кода ничего из этого не проверяется. Поведение с нарушениями без проблем отработает при первом запуске и сломается позже во время строгого воспроизведения (strict replay) с ошибкой расхождения (divergence error), указывающей на первое событие, которое не удалось воспроизвести. Мягкое воспроизведение (permissive replay), включённое по умолчанию при загрузке прогона, этого не заметит. Закладывайте время на отладку, когда поведение, тихо вызвавшее datetime.now() полгода назад, не даёт воспроизвести ветку (fork).

Недетерминированность моделей решается записью, а не игнорированием проблемы. Ответы попадают в контентно-адресуемый кэш, ключом которого служит хеш всего запроса: системного промпта, сообщений пользователя, идентификатора модели, определений инструментов и схемы вывода. Поэтому повторный прогон или ветвление берут их из лога, а не обращаются к API заново. Если изменить промпт, хеш перестанет совпадать, вызовы выполнятся повторно и будут тарифицированы.

Ограничения

Создания контрольных точек (checkpointing) и сжатия (compaction) пока нет, а стоимость воспроизведения растёт линейно с длиной лога: прогон на миллион событий сегодня воспроизводится целиком. Объём хранилища пропорционален размеру прогона, поскольку суть в том, что ничего не выбрасывается. Эволюция схемы, когда события старого формата уже лежат на диске, снабжена инструментами миграции, но остаётся рутиной эксплуатации. Инструменты с побочными эффектами в реальном мире безопасны для воспроизведения лишь в том смысле, что воспроизводится запись: первое выполнение всё равно отправило письмо. Конкурентная или распределённая запись, а также конкуренция нескольких агентов за один граф явно не решены; порядок строго определён только внутри лога одного прогона. Бесконечные каскады поведений ограничены бюджетом на прогон по событиям, вызовам поведений, вызовам моделей, патчам, глубине рекурсии, астрономическому времени и стоимости - в самой статье этот механизм называют грубым решением, а не гарантией завершения.

Отслеживается на watchlist: исследовательский проект одного автора, опубликованный вместе со статьёй; сжатие, конкурентность и любые замеры производительности на задачах отнесены к будущей работе.

Связанные страницы

В log-is-the-agent аргументация и архитектура изложены полностью. Системы, которым противопоставляется данный подход, описаны в agent-memory-anatomy и agent-memory-components - Mem0, Graphiti/Zep, Letta. Разница в том, что они рассматривают память как производное состояние, наложенное поверх агента, чьё настоящее представление находится в другом месте. behavior-tree использует паттерн координации через доску объявлений (blackboard) в гораздо меньшем масштабе. Продукты для памяти агентов в этом vault'е, построенные по принципам, которые критикует ActiveGraph, описаны в agentmemory, hippo-memory, stash и mempalace; об эмпирических свидетельствах того, что в задачах написания кода всё это не помогает, - в memorizing-session-transcripts.

Репозиторий: yoheinakajima/activegraph, Apache-2.0, документация на docs.activegraph.ai. Количество звёзд на момент ingest'а не зафиксировано.