- Pyproject.toml mit FastAPI, Pydantic v2, SQLAlchemy, httpx, asyncio, BeautifulSoup4, selectolax, trafilatura, uvicorn, pytest-asyncio - Multi-stage Dockerfile (Python 3.12-slim, Non-Root-User nsct) - docker-compose.yml (nsct-api + postgres + optional searxng) - .env.example mit allen Config-Parametern - Config-System: AppSettings mit LLMConfig, VisionConfig, AudioConfig, DatabaseConfig — komplett aus Environment, keine Hardcodes - Strukturiertes Logging mit research_id/llm_request_id Tracking - Pydantic v2 Schemas: SearchQuery, Source, Claim, EvidenceRelation, CitationEdge, ResearchReport - SQLAlchemy 2.0 Declarative Models + async Engine Factory - SSRF-Schutz: URL-Validation, IP-Blocklist (RFC1918, Cloud Metadata, file://, ftp://) - Provider-Interfaces: LLMProvider, VisionProvider, AudioProvider, SearchProvider, ContentFetcher als ABCs - Health-Endpoints: /health, /ready (LLM-Connect-Test), /providers - FastAPI App mit CORS, lifespan (LLM Pre-Flight) - CLI-Stub mit Entry-Points: nsct, nsct-core, nsct-api - 6 Test-Cases: /health, /ready, /providers + No-Secrets-Test - Vollständige Dokumentation: README, ARCHITECTURE, SECURITY, METHODOLOGY, API, DEPLOYMENT - .gitignore (Python, Docker, IDE, .env)
3.4 KiB
NSCT — Methodik: Was "neutral" bedeutet
1. Grundverständnis von Neutralität
Neutralität bedeutet nicht: "Alle Meinungen sind gleich." Neutralität bedeutet nicht: "Eine einfache Mehrheit gewinnt." Neutralität bedeutet: "Unsicherheit wird explizit gemacht, Quelle wird immer genannt, und der Bericht spiegelt die tatsächliche Evidenzlage wider — ohne Bewertung."
2. Quellenabhängigkeit
NSCT ist vollständig abhängig von der Qualität und Vielfalt der verfügbaren Quellen. Wenn eine Perspektive in den Quellen fehlt, erscheint sie als "keine Quellen gefunden" — nicht als "widerlegt".
Das bedeutet:
- Keine Quellen → Unklarheit, nicht falsche Aussage
- Wenige Quellen → Niedrige Konfidenz, nicht niedrige Wahrheit
- Viele widersprüchliche Quellen → Disagreements, nicht "irgendwer hat recht"
3. Claim-Vergleich statt Stimmzählung
NSCT durchsucht nicht nach "Anzahl der Quellen für X" und ergibt dann "X ist wahr". Stattdessen:
- Extrahieren: Alle Claims werden aus allen Quellen extrahiert
- Normalisieren: Behauptungen werden in eine neutrale Grundform gebracht (keine wertende Sprache)
- Vergleichen: Claims werden paarweise verglichen
- Kategorisieren:
agrees: Direkte Übereinstimmungdisagrees: Direkter Widerspruchpartially_agrees: Teilweise Übereinstimmungneutral: Keine direkte Relationcontradicts: Starker Widerspruch (stärker als disagreement)
- Berichten: Alle Relationen werden dokumentiert mit Begründung
Niemals wird die Anzahl der zugunsten einer Aussage stehenden Quellen als "Truth-Score" verwendet.
4. Unsicherheit als gültiges Resultat
Ein Bericht, der sagt "Es gibt keine ausreichende Evidenz für eine klare Aussage zu diesem Punkt" ist ein vollständiges und gültiges Ergebnis.
Unsicherheitskategorien:
low_confidence: Nur wenige oder niedrig-qalifizierte Quellencontradictory: Quellen widersprechen sich deutlichmissing_perspective: Eine plausible Perspektive wird nicht durch Quellen vertretentemporal: Quellen sind veraltet oder aktuelle Entwicklungen liegen nicht vor
5. Keine universelle "Truth Score"-Kennzahl
NSCT erzeugt niemals eine einzelne numerische Kennzahl wie "Source Quality Score: 0.87" oder "Claim Truthiness: 92%".
Stattdessen:
- Jeder Claim hat eine extraktionsbezogene
confidence(0-1) - Jede EvidenceRelation hat eine
confidence(0-1) - Die Aggregation erfolgt durch Text (Summary, Findings, Disagreements, Uncertainties), nicht durch Aggregation numerischer Scores.
6. Quellen-Abhängigkeit vs. Quellen-Vertrauen
Ein wichtiger Unterschied:
- Quellen-Abhängigkeit ist eine technische Eigenschaft: "Welche Quellen liegen vor und was sagen sie?"
- Quellen-Vertrauen ist eine bewertende Eigenschaft: "Wie sehr darf man dieser Quelle glauben?"
NSCT macht keine Quellen-Vertrauen-Bewertung. Es dokumentiert nur die Quellen-Abhängigkeit und lässt die Bewertung dem Nutzer.
7. Transparenz der Methodik
Jeder Bericht enthält ein methodology-Feld, das beschreibt:
- Wie viele Quellen durchsucht wurden
- Welche Search-Provider verwendet wurden
- Welche Claims extrahiert wurden
- Welche Relations zwischen Claims gefunden wurden
- Welche Unsicherheiten identifiziert wurden
Der Nutzer kann damit jederzeit nachvollziehen, wie der Bericht zustande kam — und alternative Ansätze ausprobieren.