NocturnusAI
NocturnusAI
라이선스 요약. Business Source License 1.1 (SPDX:
BUSL-1.1). 귀하의 조직 내부에서 사용하는 경우(내부 프로덕션 포함) 무료입니다. NocturnusAI 또는 그 핵심 기능을 제3자에게 제품/호스팅 서비스로 제공하려면 상업용 라이선스(licensing@nocturnus.ai)가 필요합니다. 2030년 2월 19일에 Apache 2.0으로 전환됩니다.

방대한 턴 배열을 입력받아, 간결한 컨텍스트 윈도우를 출력합니다.
에이전트가 모든 모델 호출 시마다 채팅 기록, 도구 출력, CRM 메모, 재시도 및 오래된 요약 정보를 계속해서 다시 보낸다면, NocturnusAI가 이를 먼저 줄여줍니다.
주요 워크플로우는 "술어 학습"이 아닙니다. 다음과 같습니다:
이미 가지고 있는 원시 턴을 보냅니다.
더 작은 작업 세트를 돌려받습니다.
다음 질문을 위해 해당 세트를 좁힙니다.
변경된 내용만 전송되도록 차분(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-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 제공자를 추가하세요 -- 다음 섹션을 참조하세요.
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 | bashCLI 바이너리를 다운로드하고 대화형 설정 마법사를 실행하여 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 AnthropicPython SDK
pip install nocturnusaiTypeScript SDK
npm install nocturnusai-sdkMCP 클라이언트
mcp-configs/에서 설정 중 하나를 복사하세요.
이 저장소에서 (기여자)
make up-ollama
make smokeCLI
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
턴 축소 워크플로우부터 시작하세요 | |
원시 턴 -> 최적화 -> 차분 -> 초기화 | |
REST 엔드포인트 및 응답 형태 | |
Python 및 TypeScript 클라이언트 메서드 | |
LangChain, CrewAI, AutoGen, LangGraph, OpenAI 에이전트, Anthropic, 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으로 전환됩니다. LICENSE 및 DISCLAIMER.md를 참조하세요.
법적 및 안전 고지
NocturnusAI는 결정론적 추론 엔진이지만, 그 출력은 제공된 사실만큼만 신뢰할 수 있습니다.
진실에 대한 보증 없음. "검증됨"은 추론의 논리적 일관성을 의미하며, 실제 세계 주장의 정확성을 의미하지 않습니다.
자율적인 고위험 결정용 아님. 독립적인 인간 검증 단계 없이 의료, 금융, 법률 또는 물리적 안전과 관련된 무감독 결정에 이 엔진을 사용하지 마십시오.
논리 계층 전용. NocturnusAI는 정보와 추론을 제공하며, 행동을 실행하지 않습니다.
책임 없음. DISCLAIMER.md 및 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