Skip to main content
Glama

NocturnusAI

CI PyPI npm Docker License: BUSL-1.1 MCP

Lizenz in Kürze. Business Source License 1.1 (SPDX: BUSL-1.1). Kostenlos für die interne Nutzung – einschließlich interner Produktion – innerhalb Ihrer eigenen Organisation. Das Anbieten von NocturnusAI oder wesentlicher Funktionalität als Produkt/gehosteter Dienst für Dritte erfordert eine kommerzielle Lizenz (licensing@nocturnus.ai). Wandelt sich am 19.02.2030 in Apache 2.0 um.

NocturnusAI — Context Server for AI Agents

Große Mengen an Eingabedaten rein. Schlanke Kontextfenster raus.

Wenn Ihr Agent ständig Chatverläufe, Tool-Ausgaben, CRM-Notizen, Wiederholungsversuche und veraltete Zusammenfassungen in jeden Modellaufruf einspeist, reduziert NocturnusAI dies zuerst.

Der primäre Arbeitsablauf besteht nicht darin, „Prädikate zu lernen“. Er lautet:

  1. Senden Sie die rohen Daten, die Sie bereits haben.

  2. Erhalten Sie einen kleineren Arbeitssatz zurück.

  3. Grenzen Sie diesen Satz für die nächste Frage ein.

  4. Verwenden Sie Diffs wieder, sodass spätere Durchläufe nur das senden, was sich geändert hat.

Prädikate, Regeln, Inferenz, Wahrheitserhaltung, Gültigkeitsbereiche und temporale Logik sind weiterhin vorhanden. Sie sind wichtig. Sie gehören nur hinter die Hauptgeschichte, nicht davor.


Die Arbeitsschleife

LLM für natürlichsprachliche Eingaben erforderlich. Die folgenden Beispiele senden rohe Texteingaben durch ein LLM, um strukturierte Fakten zu extrahieren. Wenn Sie den Server ohne LLM-Anbieter starten, liefern natürlichsprachliche Eingaben null Fakten. Siehe Quick Start für Einrichtungsoptionen oder verwenden Sie die Prädikatsyntax (z. B. "customer_tier(acme_corp, enterprise)"), die auch ohne LLM funktioniert.

1. Erste Reduzierung: 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
  }'

Antwortstruktur (Fakten und Salienzwerte hängen von der LLM-Extraktion ab):

{
  "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. Zielorientierter Durchlauf: 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"
  }'

Verwenden Sie dies, wenn Sie wissen, was der nächste Modellaufruf beantworten soll.

3. Spätere Durchläufe: 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
  }'

Dies gibt nur added und removed Einträge zwischen Snapshots zurück.

4. Ende des Threads: 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"}'

Wählen Sie Ihre Schnittstelle

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

Fügen Sie Nocturnus als MCP-Server hinzu:

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

Verwenden Sie das context-Tool bei jedem Durchlauf für einen nach Salienz sortierten Arbeitssatz. Kombinieren Sie MCP mit den HTTP-Kontext-Endpunkten, wenn Sie zielorientierte Zusammenstellung und Diffs benötigen.


Was hinter dem Arbeitsablauf steckt

Wenn Sie Backend-Mechaniken benötigen, bietet NocturnusAI diese:

  • Deterministische Fakten- und Regelspeicherung

  • Rückwärtsverkettete Inferenz mit Beweisketten

  • Wahrheitserhaltung und Umgang mit Widersprüchen

  • Temporale Fakten mit ttl, validFrom und validUntil

  • Multi-Mandantenfähigkeit über X-Database und X-Tenant-ID

  • MCP-, REST-, Python SDK-, TypeScript SDK- und CLI-Schnittstellen über dieselbe Engine

Das ist das Backend. Die Geschichte an der Produktfront bleibt die Reduzierung der Durchläufe.


Quick Start

Docker (am schnellsten)

docker run -d --name nocturnusai -p 9300:9300 \
  --restart unless-stopped \
  -v nocturnusai-data:/data \
  ghcr.io/auctalis/nocturnusai:latest

Überprüfen Sie, ob es läuft:

curl http://localhost:9300/health

Testen Sie die Logik-Engine (funktioniert sofort, kein LLM erforderlich):

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

Das war's. Der Server läuft, speichert Daten in einem benannten Docker-Volume und startet automatisch neu. Für die Extraktion natürlichsprachlicher Eingaben (die Arbeitsschleife oben) fügen Sie einen LLM-Anbieter hinzu – siehe den nächsten Abschnitt.

Docker mit Ollama (ermöglicht natürlichsprachliche Extraktion)

Wenn Sie Ollama lokal ausführen:

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

Installationsskript (CLI + Einrichtungsassistent)

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

Lädt die CLI-Binärdatei herunter und startet einen interaktiven Einrichtungsassistenten, in dem Sie Ihren LLM-Anbieter wählen (Ollama, Anthropic, OpenAI, Google oder überspringen). Erstellt eine persistente Docker-Compose-Installation.

Abkürzungen, wenn Sie bereits wissen, was Sie wollen:

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-Client

Kopieren Sie eine der Konfigurationen aus mcp-configs/.

Aus diesem Repository (Mitwirkende)

make up-ollama
make smoke

CLI

Die CLI ist nützlich für interaktive Inspektion und das Abrufen von Salienzfenstern:

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

Für zielorientierte Kontextfenster und Diffs verwenden Sie die REST-API oder SDKs zusammen mit der CLI.


Dokumentation

Vollständige Dokumentation: nocturnus.ai

Hier starten

Beginnen Sie mit dem Arbeitsablauf zur Reduzierung von Durchläufen

Kontext-Arbeitsablauf

Rohe Durchläufe -> optimieren -> diff -> löschen

API-Referenz

REST-Endpunkte und Antwortstrukturen

SDKs

Python- und TypeScript-Client-Methoden

Integrationen

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

MCP-Integration

MCP-Konfiguration plus Nutzung der begleitenden Kontext-API

Wie es im Backend funktioniert

Fakten, Regeln, Inferenz, Salienz, Gültigkeitsbereiche

Sicherheit & Auth

API-Schlüssel, RBAC, TLS, Verschlüsselung im Ruhezustand


Docker Compose (fortgeschritten)

Für persistente Konfiguration, Überwachung oder Ollama-Bündelung:

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

Aus Quellcode bauen

Erfordert 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

Mitwirken

Siehe CONTRIBUTING.md. Issues mit dem Label good first issue sind gute Einstiegspunkte.

Sicherheit

Melden Sie Schwachstellen privat über GitHub Security Advisories. Siehe SECURITY.md.

Lizenz

Business Source License 1.1 – kostenlos für die nicht-produktive Nutzung und interne produktive Nutzung innerhalb Ihrer Organisation. Das Anbieten von NocturnusAI für Dritte als Produkt oder Dienstleistung erfordert eine kommerzielle Lizenz von licensing@nocturnus.ai. Wandelt sich am 19.02.2030 in Apache 2.0 um. Siehe LICENSE und DISCLAIMER.md.


RECHTLICHER & SICHERHEITSHINWEIS

NocturnusAI ist eine deterministische Reasoning-Engine, aber ihre Ausgabe ist nur so zuverlässig wie die ihr bereitgestellten Fakten.

  1. Keine Gewähr für Wahrheit. „Verifiziert“ bezieht sich auf die logische Konsistenz der Inferenz, nicht auf die Richtigkeit realer Behauptungen.

  2. Nicht für autonome Entscheidungen mit hohem Risiko. Verwenden Sie diese Engine nicht für unüberwachte medizinische, finanzielle, rechtliche oder sicherheitsrelevante Entscheidungen ohne einen unabhängigen menschlichen Verifizierungsschritt.

  3. Nur Logikschicht. NocturnusAI liefert Informationen und Inferenz; sie führt keine Aktionen aus.

  4. Keine Haftung. Siehe DISCLAIMER.md und 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