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 또는 그 핵심 기능을 제3자에게 제품/호스팅 서비스로 제공하려면 상업용 라이선스(licensing@nocturnus.ai)가 필요합니다. 2030년 2월 19일에 Apache 2.0으로 전환됩니다.

NocturnusAI — AI 에이전트를 위한 컨텍스트 서버

방대한 턴 배열을 입력받아, 간결한 컨텍스트 윈도우를 출력합니다.

에이전트가 모든 모델 호출 시마다 채팅 기록, 도구 출력, CRM 메모, 재시도 및 오래된 요약 정보를 계속해서 다시 보낸다면, NocturnusAI가 이를 먼저 줄여줍니다.

주요 워크플로우는 "술어 학습"이 아닙니다. 다음과 같습니다:

  1. 이미 가지고 있는 원시 턴을 보냅니다.

  2. 더 작은 작업 세트를 돌려받습니다.

  3. 다음 질문을 위해 해당 세트를 좁힙니다.

  4. 변경된 내용만 전송되도록 차분(diff)을 재사용합니다.

술어, 규칙, 추론, 진리 유지, 범위 및 시간 논리는 여전히 존재하며 중요합니다. 단지 그것들은 이야기의 앞부분이 아닌 뒷부분에 위치해야 합니다.


작업 루프

자연어 턴에는 LLM이 필요합니다. 아래 예제는 원시 텍스트 턴을 LLM을 통해 보내 구조화된 사실을 추출합니다. LLM 제공자 없이 서버를 시작하면 자연어 턴은 0개의 사실을 반환합니다. 설정 옵션은 빠른 시작을 참조하거나, LLM 없이 작동하는 술어 구문(예: "customer_tier(acme_corp, enterprise)")을 사용하세요.

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 도구를 사용하세요. 목표 중심의 조립과 차분(diff)이 필요할 때는 MCP와 HTTP 컨텍스트 엔드포인트를 함께 사용하세요.


워크플로우의 이면

백엔드 메커니즘이 필요할 때 NocturnusAI는 다음을 제공합니다:

  • 결정론적 사실 및 규칙 저장소

  • 증명 체인을 통한 역방향 추론

  • 진리 유지 및 모순 처리

  • ttl, validFrom, validUntil을 포함한 시간적 사실

  • X-DatabaseX-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 제공자를 추가하세요 -- 다음 섹션을 참조하세요.

Ollama와 함께 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

설치 스크립트 (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)을 위해서는 CLI와 함께 REST API 또는 SDK를 사용하세요.


문서

전체 문서: nocturnus.ai

여기서 시작

턴 축소 워크플로우부터 시작하세요

컨텍스트 워크플로우

원시 턴 -> 최적화 -> 차분 -> 초기화

API 참조

REST 엔드포인트 및 응답 형태

SDK

Python 및 TypeScript 클라이언트 메서드

통합

LangChain, CrewAI, AutoGen, LangGraph, OpenAI 에이전트, 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를 제품이나 서비스로 제3자에게 제공하려면 licensing@nocturnus.ai로부터 상업용 라이선스를 받아야 합니다. 2030년 2월 19일에 Apache 2.0으로 전환됩니다. LICENSEDISCLAIMER.md를 참조하세요.


법적 및 안전 고지

NocturnusAI는 결정론적 추론 엔진이지만, 그 출력은 제공된 사실만큼만 신뢰할 수 있습니다.

  1. 진실에 대한 보증 없음. "검증됨"은 추론의 논리적 일관성을 의미하며, 실제 세계 주장의 정확성을 의미하지 않습니다.

  2. 자율적인 고위험 결정용 아님. 독립적인 인간 검증 단계 없이 의료, 금융, 법률 또는 물리적 안전과 관련된 무감독 결정에 이 엔진을 사용하지 마십시오.

  3. 논리 계층 전용. NocturnusAI는 정보와 추론을 제공하며, 행동을 실행하지 않습니다.

  4. 책임 없음. DISCLAIMER.mdLICENSE를 참조하십시오.

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