NocturnusAI
NocturnusAI
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.

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:
Senden Sie die rohen Daten, die Sie bereits haben.
Erhalten Sie einen kleineren Arbeitssatz zurück.
Grenzen Sie diesen Satz für die nächste Frage ein.
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,validFromundvalidUntilMulti-Mandantenfähigkeit über
X-DatabaseundX-Tenant-IDMCP-, 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/healthTesten 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:latestInstallationsskript (CLI + Einrichtungsassistent)
curl -fsSL https://raw.githubusercontent.com/Auctalis/nocturnusai/main/install.sh | bashLä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 AnthropicPython SDK
pip install nocturnusaiTypeScript SDK
npm install nocturnusai-sdkMCP-Client
Kopieren Sie eine der Konfigurationen aus mcp-configs/.
Aus diesem Repository (Mitwirkende)
make up-ollama
make smokeCLI
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/cleanupFür zielorientierte Kontextfenster und Diffs verwenden Sie die REST-API oder SDKs zusammen mit der CLI.
Dokumentation
Vollständige Dokumentation: nocturnus.ai
Beginnen Sie mit dem Arbeitsablauf zur Reduzierung von Durchläufen | |
Rohe Durchläufe -> optimieren -> diff -> löschen | |
REST-Endpunkte und Antwortstrukturen | |
Python- und TypeScript-Client-Methoden | |
LangChain, CrewAI, AutoGen, LangGraph, OpenAI Agents, Anthropic, MCP | |
MCP-Konfiguration plus Nutzung der begleitenden Kontext-API | |
Fakten, Regeln, Inferenz, Salienz, Gültigkeitsbereiche | |
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 endpointAus 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 suiteMitwirken
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.
Keine Gewähr für Wahrheit. „Verifiziert“ bezieht sich auf die logische Konsistenz der Inferenz, nicht auf die Richtigkeit realer Behauptungen.
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.
Nur Logikschicht. NocturnusAI liefert Informationen und Inferenz; sie führt keine Aktionen aus.
Keine Haftung. Siehe DISCLAIMER.md und LICENSE.
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