Stage 0: Repository und Architekturgrundlage

- 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)
This commit is contained in:
NSCT Agent
2026-08-23 11:33:45 +00:00
commit e9410be941
28 changed files with 4192 additions and 0 deletions

90
METHODOLOGY.md Normal file
View File

@@ -0,0 +1,90 @@
# 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:
1. **Extrahieren:** Alle Claims werden aus allen Quellen extrahiert
2. **Normalisieren:** Behauptungen werden in eine neutrale
Grundform gebracht (keine wertende Sprache)
3. **Vergleichen:** Claims werden paarweise verglichen
4. **Kategorisieren:**
- `agrees`: Direkte Übereinstimmung
- `disagrees`: Direkter Widerspruch
- `partially_agrees`: Teilweise Übereinstimmung
- `neutral`: Keine direkte Relation
- `contradicts`: Starker Widerspruch (stärker als disagreement)
5. **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 Quellen
- `contradictory`: Quellen widersprechen sich deutlich
- `missing_perspective`: Eine plausible Perspektive wird nicht
durch Quellen vertreten
- `temporal`: 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.