Skip to main content
Glama

NocturnusAI

CI PyPI npm Docker License: BUSL-1.1 MCP

Движок контекстной инженерии для ИИ-агентов: отправляйте только то, что изменилось.

NocturnusAI — Движок контекстной инженерии для ИИ-агентов


До / После

# ❌ Without NocturnusAI — replay everything, every turn
messages = system_prompt + full_history + tool_outputs   # ~1,259 tokens/turn
response = llm(messages)                                 # $13,600/mo at scale

# ✅ With NocturnusAI — send only what changed
ctx = nocturnus.process_turns(raw_turns)                 # extract → infer → delta
messages = system_prompt + ctx.briefing_delta             # ~221 tokens/turn
response = llm(messages)                                 # $2,400/mo. Same accuracy.

Related MCP server: RelayPlane

Цифры

Измерено на реальных API. 15-шаговый диалог поддержки продукта. Реальный подсчет usage.input_tokens. Запустите сами.

Наивное повторение

RAG-оптимизация

NocturnusAI

Токенов на шаг

~1,259

~800

~221

Стоимость в месяц (1 тыс. запросов/час, Opus 4, $15/1 млн)

$13,600

$12,000

$2,400

Задержка

высокая

средняя

низкая

Сохранение истинности

нет

нет

да

Claude Opus 4: сокращение в 5.7×. Gemini 2.0 Flash: 10.0×. Полные расчеты.


Установка

pip install nocturnusai          # Python
npm install nocturnusai-sdk      # TypeScript
docker run -p 9300:9300 ghcr.io/auctalis/nocturnusai:latest  # Docker

Или используйте мастер настройки:

curl -fsSL https://raw.githubusercontent.com/Auctalis/nocturnusai/main/install.sh | bash

Почему разработчики выбирают этот репозиторий

  • Воспроизводимое сокращение токенов — бенчмарк в репозитории, методология опубликована, запустите его на своей рабочей нагрузке

  • Детерминированный вывод — один и тот же запрос, один и тот же результат каждый раз. Никакого дрейфа эмбеддингов, никакой лотереи с косинусным сходством

  • Поддержание истинности — удалите факт, и все производные выводы автоматически аннулируются. Никакого устаревшего контекста, никаких галлюцинаций о рабочем состоянии

  • Интеграция в существующие стеки — LangChain, LlamaIndex, CrewAI, AutoGen, MCP, Vercel AI SDK, OpenAI Agents SDK, Mastra

  • Возможность сравнения с наивным повторением — цифры получены, а не выдуманы. Каждое утверждение прослеживается до ячейки блокнота


Быстрый старт по фреймворкам

Фреймворк

Интеграция

Ссылка

LangChain / LangGraph

Встраиваемый NocturnusContextProvider, сквозная трассировка LangSmith

Документация

CrewAI

Контекст с областью действия задачи для каждой роли агента

Документация

AutoGen

Контекстный сервер, вызываемый любым агентом

Документация

MCP

Сервер, соответствующий спецификации для Claude Desktop, Cursor, Continue

Конфигурация

OpenAI Agents SDK

Контекстное промежуточное ПО, без модификации инструментов

Документация

Vercel AI SDK

Edge-совместимый адаптер для Next.js, Nuxt, SvelteKit

Документация

Python SDK

pip install nocturnusai

Документация

TypeScript SDK

npm install nocturnusai-sdk

Документация


Как это работает

Три шага. Каждый шаг.

  1. Извлечение — необработанные шаги диалога → структурированные факты через извлечение LLM

  2. Вывод — логический вывод с обратным поиском находит только те факты, которые достижимы из текущей цели агента

  3. Возврат дельты — briefingDelta, содержащий только то, что изменилось с последнего шага

Это не векторный поиск. Это не суммаризация. Это детерминированный вывод на логическом движке — индексация Hexastore, обратный поиск и поддержание истинности.


Рабочий цикл

Для шагов на естественном языке требуется LLM. Примеры ниже отправляют необработанные текстовые шаги через LLM для извлечения структурированных фактов. Если вы запустите сервер без провайдера LLM, шаги на естественном языке вернут ноль фактов. См. Быстрый старт для вариантов настройки или используйте синтаксис предикатов (например, "customer_tier(acme_corp, enterprise)"), который работает без какой-либо LLM.

1. Первое сокращение: POST /context

curl -X POST http://localhost:9300/context \
  -H 'Content-Type: application/json' \
  -H 'X-Tenant-ID: default' \
  -d '{
    "turns": [
      "user: Customer says they are enterprise and blocked on SLA credits.",
      "tool: CRM says account is Acme Corp with a 2M ARR contract.",
      "agent: Last week support promised to review SLA eligibility.",
      "tool: Billing note says renewal is due next month."
    ],
    "maxFacts": 12
  }'

2. Проход на основе целей: POST /memory/context

curl -X POST http://localhost:9300/memory/context \
  -H 'Content-Type: application/json' \
  -H 'X-Tenant-ID: default' \
  -d '{
    "goals": [{"predicate":"eligible_for_sla","args":["acme_corp"]}],
    "maxFacts": 12,
    "sessionId": "ticket-42"
  }'

3. Последующие шаги: POST /context/diff

curl -X POST http://localhost:9300/context/diff \
  -H 'Content-Type: application/json' \
  -H 'X-Tenant-ID: default' \
  -d '{"sessionId": "ticket-42", "maxFacts": 12}'

Возвращает только записи added (добавленные) и removed (удаленные) между снимками состояния.

4. Конец потока: POST /context/session/clear

curl -X POST http://localhost:9300/context/session/clear \
  -H 'Content-Type: application/json' \
  -H 'X-Tenant-ID: default' \
  -d '{"sessionId":"ticket-42"}'

Выберите свою поверхность

from nocturnusai import SyncNocturnusAIClient

with SyncNocturnusAIClient("http://localhost:9300") as client:
    ctx = client.process_turns(
        turns=[
            "user: Customer says they are enterprise and blocked on SLA credits.",
            "tool: CRM says account is Acme Corp with a 2M ARR contract.",
        ],
        scope="ticket-42",
        session_id="ticket-42",
    )

    diff = client.diff_context(session_id="ticket-42", max_facts=12)
    client.clear_context_session("ticket-42")

    print(ctx.briefing_delta)
import { NocturnusAIClient } from 'nocturnusai-sdk';

const client = new NocturnusAIClient({
  baseUrl: 'http://localhost:9300',
  tenantId: 'default',
});

const ctx = await client.processTurns({
  turns: [
    'user: Customer says they are enterprise and blocked on SLA credits.',
    'tool: CRM says account is Acme Corp with a 2M ARR contract.',
  ],
  scope: 'ticket-42',
  sessionId: 'ticket-42',
});

const diff = await client.diffContext({ sessionId: 'ticket-42', maxFacts: 12 });
await client.clearContextSession('ticket-42');
console.log(ctx.briefingDelta);
{
  "mcpServers": {
    "nocturnus": {
      "url": "http://localhost:9300/mcp/sse",
      "transport": "sse"
    }
  }
}

Используйте инструмент context на каждом шаге для получения рабочего набора, ранжированного по значимости. Сочетайте MCP с HTTP-эндпоинтами контекста, когда вам нужна сборка на основе целей и диффы.


Что стоит за рабочим процессом

Когда вам нужны механизмы бэкенда, NocturnusAI предоставляет их:

  • Детерминированное хранилище фактов и правил

  • Вывод с обратным поиском и цепочками доказательств

  • Поддержание истинности и обработка противоречий

  • Временные факты с ttl, validFrom и validUntil

  • Мультиарендность через X-Database и X-Tenant-ID

  • Поверхности MCP, REST, Python SDK, TypeScript SDK и CLI поверх одного и того же движка


Быстрый старт

Docker (самый быстрый)

docker run -d --name nocturnusai -p 9300:9300 \
  --restart unless-stopped \
  -v nocturnusai-data:/data \
  ghcr.io/auctalis/nocturnusai:latest
curl http://localhost:9300/health   # Verify it's running

Docker с Ollama (включает извлечение на естественном языке)

docker run -d --name nocturnusai -p 9300:9300 \
  --add-host=host.docker.internal:host-gateway \
  -e LLM_PROVIDER=ollama \
  -e LLM_MODEL=granite3.3:8b \
  -e LLM_BASE_URL=http://host.docker.internal:11434/v1 \
  -e EXTRACTION_ENABLED=true \
  ghcr.io/auctalis/nocturnusai:latest

Из этого репозитория

make up-ollama && make smoke

CLI

nocturnusai                                # Interactive REPL
nocturnusai -e "context 10"               # Salience-ranked working set
nocturnusai -e "compress"                 # POST /memory/compress
nocturnusai -e "cleanup 0.05"             # POST /memory/cleanup

Документация

Полная документация: nocturnus.ai

Начните здесь

Рабочий процесс сокращения шагов

Контекстный рабочий процесс

Необработанные шаги → оптимизация → диффы → очистка

Справочник API

REST-эндпоинты и формы ответов

SDK

Методы клиентов Python и TypeScript

Интеграции

LangChain, CrewAI, AutoGen, MCP и другие

Бенчмарк

Измеренное сокращение токенов на реальных API

Расчеты

Каждая цифра, выведенная расчетным путем

Как это работает

Конвейер извлечение → вывод → дельта


Docker Compose (продвинутый)

git clone https://github.com/Auctalis/nocturnusai.git && cd nocturnusai

make up                                        # Server using .env.example defaults
make up-ollama                                 # + Ollama (reuses host or starts bundled)
make up-monitoring                             # + Prometheus + Grafana
make smoke                                     # Verify health + context endpoint

Сборка из исходного кода

Требуется JDK 17+.

./gradlew :nocturnusai-server:run              # HTTP server on :9300
./gradlew :nocturnusai-cli:run                 # Interactive REPL (JVM)
./gradlew :nocturnusai-cli:nativeCompile       # Build native binary
./gradlew test                                 # Full test suite

Вклад в проект

См. CONTRIBUTING.md. Проблемы с меткой good first issue — хорошие точки входа.

Безопасность

Сообщайте об уязвимостях конфиденциально через GitHub Security Advisories. См. SECURITY.md.

Лицензия

Business Source License 1.1 (SPDX: BUSL-1.1). Бесплатно для внутреннего использования — включая внутреннее производство — внутри вашей организации. Предложение NocturnusAI или существенной функциональности в качестве продукта/хостинг-сервиса третьим лицам требует коммерческой лицензии (licensing@nocturnus.ai). Преобразуется в Apache 2.0 19 февраля 2030 года. См. LICENSE и DISCLAIMER.md.


ЮРИДИЧЕСКОЕ УВЕДОМЛЕНИЕ И УВЕДОМЛЕНИЕ О БЕЗОПАСНОСТИ

NocturnusAI — это движок детерминированного рассуждения, но его выходные данные надежны лишь настолько, насколько надежны предоставленные ему факты.

  1. Нет гарантии истинности. «Проверенный» относится к логической согласованности вывода, а не к точности утверждений о реальном мире.

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

  3. Только логический уровень. NocturnusAI предоставляет информацию и выводы; он не выполняет действия.

  4. Отсутствие ответственности. См. DISCLAIMER.md и LICENSE.

Available Tools

16 tools
aggregateA

Compute aggregations over matching facts. Supports COUNT, SUM, MIN, MAX, and AVG over a numeric argument at a specified position. Example: COUNT all score(player, ?) facts, or AVG scores at argIndex=1. Side effects: none (read-only). Auth: requires X-Tenant-ID header; FACT_READ permission when auth is enabled. Rate-limited per principal. Errors: VALIDATION_ERROR on unknown operation or missing argIndex for numeric ops.

Inputs: predicate (required), args (required), operation (required), argIndex, +1 more.

askA

Query the knowledge base using multi-step logical reasoning (backward chaining with unification). Finds all provable answers by applying rules and matching facts. Use ?-prefixed variables for unknowns; optionally returns full proof chains. Side effects: none (read-only). Auth: requires X-Tenant-ID header; FACT_READ permission when auth is enabled. Rate-limited per principal. Errors: VALIDATION_ERROR on bad args; result set bounded by INFERENCE_MAX_RESULTS (default 10,000) to prevent OOM.

Inputs: predicate (required), args (required), scope, withProof, +1 more.

bulk_assertA

Assert multiple facts in a single call for efficiency. Non-transactional: each fact is attempted independently — contradictions are reported without aborting the batch. Returns counts of successful and failed assertions. Side effects: mutates state (additive) — partial successes persist even if other facts in the batch fail. Auth: requires X-Tenant-ID header; FACT_WRITE permission when auth is enabled. Rate-limited per principal. Errors: VALIDATION_ERROR on malformed input; per-fact failures returned in the response's errors array.

Inputs: facts (required).

cleanupA

Run memory decay and eviction. Expires facts past their TTL and evicts low-salience facts when memory exceeds capacity. Call periodically in long-running agent sessions to prevent unbounded growth. Side effects: DESTRUCTIVE — permanently removes evicted and expired facts (irreversible). Auth: requires X-Tenant-ID header; FACT_WRITE permission when auth is enabled. Rate-limited per principal. Errors: VALIDATION_ERROR on bad threshold.

Inputs: threshold.

compressA

Run memory consolidation: detects repeated episodic patterns (e.g., 'user asked about X five times') and creates semantic summaries. Reduces memory footprint in long-running sessions while preserving essential knowledge. Side effects: mutates state (additive) — creates new summary facts; original facts remain intact. Auth: requires X-Tenant-ID header; FACT_WRITE permission when auth is enabled. Rate-limited per principal. Errors: VALIDATION_ERROR on bad args.

Inputs: no named parameters.

contextA

Get the most relevant knowledge for the current reasoning step, ranked by composite salience (recency × frequency × priority). Returns a token-optimized context window in 'predicate', 'natural', or 'structured' format. Pass goals for goal-driven selection, sessionId for incremental diffs across turns. Side effects: read-only for stored facts (salience access counters may update internally). Auth: requires X-Tenant-ID header; FACT_READ permission when auth is enabled. Rate-limited per principal. Errors: VALIDATION_ERROR on bad args.

Inputs: maxFacts, minSalience, predicates, scope, +6 more.

delete_scopeA

Delete a named scope and all facts within it. Use to clean up completed or abandoned hypothetical reasoning branches. Side effects: DESTRUCTIVE and IRREVERSIBLE — permanently removes all facts in the scope; cascades TMS retraction for any derived facts. Auth: requires X-Tenant-ID header; FACT_WRITE permission when auth is enabled. Rate-limited per principal. Errors: VALIDATION_ERROR if scope name is blank.

Inputs: scope (required).

forgetA

Retract a fact from the knowledge base. Inverse of 'tell'. Side effects: DESTRUCTIVE — triggers cascading retraction of any knowledge derived from this fact via the Truth Maintenance System (irreversible). Auth: requires X-Tenant-ID header; FACT_WRITE permission when auth is enabled. Rate-limited per principal. Errors: VALIDATION_ERROR on bad args (no error if the fact was not present).

Inputs: predicate (required), args (required), scope.

fork_scopeA

Fork a knowledge base scope — creates an independent copy of all facts in the source scope under a new target scope name. Use for hypothetical reasoning ('What if Alice moves to London?') without modifying the main knowledge base. Similar to git branch for knowledge. Side effects: mutates state (additive) — creates a new scope with copied facts; source scope is unchanged. Auth: requires X-Tenant-ID header; FACT_WRITE permission when auth is enabled. Rate-limited per principal. Errors: VALIDATION_ERROR if targetScope is blank or already exists.

Inputs: targetScope (required), sourceScope.

list_scopesA

List all named scopes in the knowledge base. Shows what hypothetical contexts or reasoning branches exist. The global (unscoped) partition is always present but not listed. Side effects: none (read-only). Auth: requires X-Tenant-ID header; FACT_READ permission when auth is enabled. Rate-limited per principal. Errors: none under normal operation.

Inputs: no named parameters.

merge_scopeA

Merge facts from one scope into another (default: global). Use to commit hypothetical reasoning back into the main knowledge base. Strategy controls conflict handling: SOURCE_WINS overwrites, TARGET_WINS keeps existing, KEEP_BOTH retains both, REJECT aborts on conflict. Side effects: mutates the target scope; may overwrite existing facts depending on strategy (potentially destructive under SOURCE_WINS). Auth: requires X-Tenant-ID header; FACT_WRITE permission when auth is enabled. Rate-limited per principal. Errors: VALIDATION_ERROR on unknown strategy; CONFLICT_ERROR when strategy=REJECT and conflicts are found.

Inputs: sourceScope (required), targetScope, strategy.

predicatesA

Discover the knowledge base schema. Lists all predicates currently stored with arity (argument count), fact count, and whether they have associated rules. Use this before querying to understand what knowledge is available. Side effects: none (read-only). Auth: requires X-Tenant-ID header; FACT_READ permission when auth is enabled. Rate-limited per principal. Errors: none under normal operation.

Inputs: scope.

recallA

Time-travel query: recall what was known at a specific point in time. Returns facts valid at the given timestamp, respecting temporal bounds (validFrom, validUntil, ttl). Useful for debugging agent behavior or reconstructing past state. Side effects: none (read-only). Auth: requires X-Tenant-ID header; FACT_READ permission when auth is enabled. Rate-limited per principal. Errors: VALIDATION_ERROR on bad args or missing timestamp.

Inputs: predicate (required), args (required), timestamp (required), scope.

retract_patternA

Retract all facts matching a pattern in a single call. Use ?-prefixed variables as wildcards to retract multiple facts at once. Returns the count and list of retracted facts. Side effects: DESTRUCTIVE — removes multiple facts and cascades TMS retraction for each removed fact (irreversible). Auth: requires X-Tenant-ID header; FACT_WRITE permission when auth is enabled. Rate-limited per principal. Errors: VALIDATION_ERROR on bad args.

Inputs: predicate (required), args (required), scope.

teachA

Define a logical rule for automatic reasoning. When body conditions hold, head becomes derivable via backward chaining. Use ?-prefixed variables; supports Negation-as-Failure. Example: 'If ?x is human AND NOT god(?x), THEN ?x is mortal'. Side effects: mutates state (additive) — rules remain active until explicitly removed. Auth: requires X-Tenant-ID header; RULE_WRITE permission when auth is enabled. Rate-limited per principal. Errors: VALIDATION_ERROR on malformed rules.

Inputs: head (required), body (required), scope.

tellA

Assert a fact into the knowledge base. Stores knowledge queryable via logical reasoning. Supports TTL expiration, confidence scoring, and configurable conflict resolution. Side effects: mutates state (additive) — stored facts persist until retracted or expired. Auth: requires X-Tenant-ID header for tenant isolation; FACT_WRITE permission when auth is enabled. Rate-limited per principal. Errors: VALIDATION_ERROR on bad args, CONFLICT_ERROR on contradictions when conflictStrategy=REJECT.

Inputs: predicate (required), args (required), scope, negated, +4 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 16 tools

    Disambiguation5/5

    Each tool targets a distinct operation: tell/forget/retract_pattern for facts, teach for rules, ask/aggregate/context/recall for queries, scope management tools, and memory maintenance tools. No two tools have overlapping purposes; clear boundaries between them.

    Naming Consistency3/5

    Naming is mixed: some tools use verb_noun (bulk_assert, delete_scope), others are single verbs (ask, forget), and one is a noun (context). While each name is individually clear, the lack of a consistent pattern reduces predictability.

    Tool Count4/5

    16 tools is slightly above the typical range but justified by the complexity of the knowledge base domain (fact management, rules, queries, scopes, memory). Each tool serves a clear purpose.

    Completeness4/5

    The surface covers core CRUD for facts, queries, scopes, schema discovery, and memory management. A minor gap is the absence of a tool to list or remove defined rules, but the overall coverage is strong.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      An implementation of persistent memory for Claude using a local knowledge graph, allowing the AI to remember information about users across conversations with customizable storage location.
      11
      301 npm
      62
      JavaScript
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Enables efficient AI workflow orchestration by chaining multi-step LLM operations while keeping intermediate results out of the context window, reducing token usage by 90%+ and supporting multiple AI providers.
      7
      41 npm
      1
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      A production-ready reasoning engine that integrates Claude AI with specialized MCP tools for knowledge retrieval, schema validation, and domain-specific rubric evaluation. It enables structured RAG-based analysis across legal, health, and science domains via a RESTful API.
      -
    • A
      license
      A
      quality
      D
      maintenance
      Provides versioned, structured memory for AI agents, allowing them to store facts, detect conflicts, and track knowledge history via a hosted SaaS platform. It enables efficient hierarchical information retrieval and semantic search while keeping token usage constant as memory scales.
      7
      41 npm
      8
      Apache 2.0