Skip to main content
Glama

NocturnusAI

CI PyPI npm Docker License: BUSL-1.1 MCP

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

NocturnusAI — Сервер контекста для ИИ-агентов

На входе — большие массивы данных. На выходе — компактные контекстные окна.

Если ваш агент постоянно пересылает историю чата, результаты работы инструментов, заметки CRM, повторные попытки и устаревшие сводки в каждый вызов модели, NocturnusAI сначала сокращает этот объем.

Основной рабочий процесс — это не «изучение предикатов». Это:

  1. Отправка уже имеющихся у вас необработанных данных (turns).

  2. Получение уменьшенного рабочего набора.

  3. Сужение этого набора для следующего вопроса.

  4. Повторное использование diff-ов, чтобы последующие запросы содержали только изменения.

Предикаты, правила, логический вывод, поддержка истинности, области видимости и темпоральная логика никуда не делись. Они важны. Просто они находятся «за кулисами», а не на переднем плане.


Рабочий цикл

Для обработки естественного языка требуется 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
  }'

Форма ответа (факты и значения значимости зависят от извлечения LLM):

{
  "facts": [
    {"predicate":"customer_tier","args":["acme_corp","enterprise"],"salience":0.65},
    {"predicate":"contract_value","args":["acme_corp","2000000"],"salience":0.65},
    {"predicate":"issue","args":["acme_corp","sla_credits"],"salience":0.64}
  ],
  "totalFactsInKB": 7,
  "factsReturned": 3,
  "contradictions": 0,
  "newFactsExtracted": 3
}

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"}'

Выберите свой интерфейс

Python SDK

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)

TypeScript SDK

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);

MCP

Добавьте Nocturnus как MCP-сервер:

{
  "mcpServers": {
    "nocturnus": {
      "url": "http://localhost:9300/mcp/sse",
      "transport": "sse"
    }
  }
}

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


Что скрывается за рабочим процессом

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

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

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

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

  • Темпоральные факты с ttl, validFrom и validUntil

  • Мультиарендность (multi-tenancy) через 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

Попробуйте логический движок (работает сразу, LLM не требуется):

curl -X POST http://localhost:9300/tell \
  -H 'Content-Type: application/json' \
  -H 'X-Tenant-ID: default' \
  -d '{"predicate":"customer_tier","args":["acme_corp","enterprise"]}'

curl -X POST http://localhost:9300/tell \
  -H 'Content-Type: application/json' \
  -H 'X-Tenant-ID: default' \
  -d '{"predicate":"contract_value","args":["acme_corp","2000000"]}'

curl -X POST http://localhost:9300/ask \
  -H 'Content-Type: application/json' \
  -H 'X-Tenant-ID: default' \
  -d '{"predicate":"customer_tier","args":["acme_corp","?tier"]}'

Вот и всё. Сервер запущен, сохраняет данные в именованный том Docker и перезапускается автоматически. Для извлечения данных на естественном языке (рабочий цикл выше) добавьте провайдера LLM — см. следующий раздел.

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

Если у вас локально запущен 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

Скрипт установки (CLI + мастер настройки)

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

Загружает бинарный файл CLI и запускает интерактивный мастер настройки, где вы выбираете провайдера LLM (Ollama, Anthropic, OpenAI, Google или пропустить). Создает постоянную установку Docker Compose.

Быстрые команды, если вы уже знаете, что вам нужно:

curl -fsSL ... | bash -s -- --host-ollama    # Reuse local Ollama
curl -fsSL ... | bash -s -- --ollama         # Bundle Ollama in Docker
curl -fsSL ... | bash -s -- --key sk-ant-... # Use Anthropic

Python SDK

pip install nocturnusai

TypeScript SDK

npm install nocturnusai-sdk

MCP-клиент

Скопируйте один из конфигов из mcp-configs/.

Из этого репозитория (для контрибьюторов)

make up-ollama
make smoke

CLI

CLI полезен для интерактивного осмотра и получения окна значимости:

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

Для целевых контекстных окон и diff-ов используйте REST API или SDK вместе с CLI.


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

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

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

Начните с рабочего процесса сокращения данных

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

Необработанные данные -> оптимизация -> diff -> очистка

Справочник API

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

SDK

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

Интеграции

LangChain, CrewAI, AutoGen, LangGraph, OpenAI Agents, Anthropic, MCP

Интеграция MCP

Конфиг MCP плюс использование API контекста

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

Факты, правила, логический вывод, значимость, области видимости

Безопасность и авторизация

API-ключи, RBAC, TLS, шифрование данных


Docker Compose (для продвинутых)

Для постоянной конфигурации, мониторинга или объединения с Ollama:

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 — бесплатно для некоммерческого использования и внутреннего использования в производстве внутри вашей организации. Предложение NocturnusAI третьим лицам в качестве продукта или сервиса требует коммерческой лицензии от licensing@nocturnus.ai. Переходит на Apache 2.0 19 февраля 2030 года. См. LICENSE и DISCLAIMER.md.


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

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

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

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

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

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

Install Server
A
security – no known vulnerabilities
F
license - not found
A
quality - A tier

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Auctalis/nocturnusai'

If you have feedback or need assistance with the MCP directory API, please join our Discord server