Files
alicorn-agent/ARCHITECTURE.md
T

10 KiB
Raw Blame History

Alicorn — архитектурные решения

Сводка ключевых архитектурных решений (ADR-формат). Основано на спецификации в Outline (ветка «autonom agent alikorn»).


1. Разделение «Модель предлагает — Runtime располагает»

Решение: LLM (Ornith) только предлагает план в типизированном DSL. Runtime (Rust) детерминированно исполняет.

Почему:

  • LLM на локальной модели даёт 20–150 t/s, слабый контекст, частые ошибки. Интерпретация плана внутри LLM = удвоение этих проблем.
  • Detерминированный runtime даёт скорость (без интерпретации) и точность (повторяемость).

Альтернативы:

  • LangChain/CrewAI/AutoGen — предполагают облачную LLM (дешёвый контекст, редкие ошибки). Не подходят под локальные модели.
  • Чистый ReAct внутри LLM — «задыхается» через 5–10 шагов.

Риски: DSL-ограниченность (модель не может делать всё что угодно, только то, что умеет runtime). Компромисс ради детерминизма.


2. Append-only журнал (SQLite WAL) как источник правды

Решение: Все входы/выходы (llm.request/response, tool.call/result, anvil.check) пишутся в append-only журнал. Состояние = свёртка журнала.

Почему:

  • Event Sourcing даёт replay «байт-в-байт».
  • Журнал = аудит и отладка.
  • Именно журнал, а не промежуточные рассуждения (экономия, приватность).

Риски: размер журнала; нужна ротация/компрессия. FULL sync для durability (влияет на latency).


3. Детерминизм и replay

Решение: Состояние = детерминированная свёртка журнала через reducer. Replay верифицируется в CI. Exactly-once через Transactional Outbox + Idempotency Key + Saga.

Почему: локальные модели non-deterministic → без детерминированного executor'а нельзя гарантировать повторяемость.

Альтернативы:

  • Хранение snapshot'ов состояния — дороже, сложно мержить.
  • Pure functional state — сложно интегрировать с инструментами.

4. Pegas Memory: PostgreSQL + pgvector + Apache AGE

Решение: Единое хранилище — текст, векторы, граф, метаданные в Postgres.

Почему:

  • pgvector = семантический поиск (检索增强).
  • AGE = граф связей (сущности, концепты).
  • Один движок вместо трёх БД.

Риски: AGE (PostgreSQL extension для графов) — молодая технология, зрелость ниже, чем у Neo4j.

Альтернативы:

  • Отдельный граф-сервер (Neo4j) — больше инфраструктуры.
  • Qdrant + отдельная graph DB — сложнее поддержка.

5. Anvil: контроль прав и репутация (прозрачность правил)

Решение: Агент начинает с минимальными правами. Успённое действие → +репутация → расширение прав. Контракты: PermissionRegistry, ReputationOracle, BudgetController, CuriosityReward.

Цель (главное): прозрачность правил — агент видим, почему ему что-то можно/нельзя. Каждое решение «разрешено/запрещено» записано и объяснимо.

Решение для MVP: контроль = обычный код + append-only журнал (ADR-2). Журнал уже даёт аудируемость: можно пересчитать, какие права были у агента в любой момент и почему. Блокчейн НЕ нужен, пока нет переносимой репутации.

Почему:

  • Безопасность: агент не может сразу получить все права.
  • Прозрачность: решение «можно/нельзя» записано в журнал, объяснимо и аудируемо.
  • Мотивация: curiosity как reward (внутренний драйв, не on-chain).

Решение для v2 (эксперимент): Solidity-контракты. Ценность появляется только если репутация/права агента должны быть переносимыми между машинами и верифицируемыми где-то ещё, а не только локально. Тогда блокчейн даёт доверие и переносимость.

Риски: стоимость транзакций; сложность интеграции с локальным runtime.

Альтернативы:

  • Hardcoded权限-система — проще, но не масштабируема.
  • Policy-based (OPA) — не такой «экономический».
  • Solidity — только для v2, когда нужна переносимая репутация.

Статус: v1 = контроль через журнал + код; v2 = Solidity-эксперимент.


6. World Model (V-JEPA 2 / Agentic-JEPA)

Решение: Planner генерирует кандидатов → World Model предсказывает следующее состояние → агент выбирает с наивысшим сходством → верификация после выполнения.

Почему: локальные модели плохо планируют на много шагов вперёд. World Model даёт «представление о мире» без реального действия.

Меры надёжности:

  • Планирование на один шаг (k=1).
  • Калибровка доверия.

Риски: V-JEPA 2 — тяжёлая модель; локальный инференс может быть bottleneck.

Альтернативы:

  • Chain-of-Thought — проще, но без «представления о мире».
  • Реальные действия с откатом — дороже.

7. Pegas Core: Rust (dsh Harness)

Решение: Ядро на Rust. Роли: Planner (Ornith 1.5 A3B), Executor (Spark-X2.5-4B), Researcher (Nanbeige4.1-3B), Decision (Clef-Flash).

Почему:

  • Rust = скорость + безопасность памяти + детерминизм.
  • Разделение ролей = изоляция ошибок.

Альтернативы:

  • Python (Hermes) — быстрее разработка, но медленнее и non-deterministic.
  • Go — быстрее Python, но Rust лучше для системного кода.

8. Observability: OTEL + ClickHouse + Grafana

Решение: Трассировка, стоимость, качество через OpenTelemetry → ClickHouse → Grafana.

Почему:

  • Наблюдаемость критична для автономного агента.
  • ClickHouse = аналитика больших логов.

Альтернативы:

  • Prometheus + Loki — сложнее агрегация.
  • Локальные метрики — недостаточно для аудита.

9. MVP-стратегия

Решение: MVP = ReAct-цикл (Rust) + одна LLM (Ornith) + один MCP (Knowledge) + Postgres+pgvector (без AGE) + простой UI + heartbeat.

Что НЕ в MVP: мотивация/драйвы, Anvil, World Model, граф (AGE), мультиагентность, KTL, ClickHouse/Grafana, сложные метрики.

План: Нед 1 — ядро+LLM+журнал; Нед 2 — MCP+база знаний; Нед 3 — UI+heartbeat; Нед 4 — отладка+GitHub.

Почему: MVP должен доказать базовый цикл (задача → LLM → tool → ответ), а не всю архитектуру.


10. Связь с spark-mind (Animus)

Решение: spark-mind = первый слой Alicorn (чаты + память). Alicorn = полная архитектура.

Почему: spark-midal уже работает (персона, память, дашборд на :1337). Alicorn строится на этом фундаменте, но с детерминированным runtime'ом.

Риски: spark-mind non-deterministic (Python); Alicorn должен быть переписан на Rust.


Статус решений

# Решение Статус
1 Model proposes — Runtime disposes Принято
2 Append-only журнал Принято
3 Детерминизм + replay Принято
4 PostgreSQL + pgvector + AGE Принято (AGE — риск зрелости)
5 Anvil: контроль прав v1 = журнал + код (прозрачность); v2 = Solidity (переносимая репутация)
6 World Model (V-JEPA 2) Принято (для full-версии)
7 Rust-ядро Принято
8 Observability (OTEL+ClickHouse) Принято (для full-версии)
9 MVP-стратегия Принято
10 Связь с spark-mind Принято