- 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)
90 lines
3.4 KiB
Markdown
90 lines
3.4 KiB
Markdown
# 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. |