Vollständiges Multi-Agenten-System für Fact-Checking, Artikelschreiben und Argumentationsanalyse. Zwei Backends: llama.cpp (★ bevorzugt) und Ollama. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
14 KiB
WORKLOG.md — Append-only Arbeitslog
Neueste Einträge oben. Nicht bearbeiten — nur anhängen.
[2026-05-12] llama-logic-editor + Dokumentation vollständig aktualisiert
Erledigt
agenten/llama-logic-editor.ts— Pi-Tool:analyze_logic_llama★ BEVORZUGTlogic-editor.ts→ollama-logic-editor.ts(Naming-Convention)- BEDIENUNGSANLEITUNG.md: Kompletter Rewrite auf llama.cpp-Pipeline
- README.md: logic-editor-Einträge auf ollama/llama-Varianten aktualisiert
- AGENTS.md: logic-editor-Einträge aktualisiert
tsc: fehlerfrei
Getestet
npx tsx agenten/llama-logic-editor.ts "Sokrates-Syllogismus"→ STARK, 13s ✓
[2026-05-12] Vollständige llama.cpp-Pipeline + Writer-Umbenennung
Erledigt
Neue llama.cpp-Agenten (alle: Schema im System-Prompt, /no_think, reasoning_content-Fallback, Retry 3×/15s):
agenten/llama-claim-extractor.ts— Pi-Tool:extract_claims_llamaagenten/llama-verifier.ts— Pi-Tool:verify_claim_llama★ BEVORZUGT,userLanguage-Parameteragenten/llama-verify-article.ts— Pi-Tool:verify_article_llama, Batch-Verdict-Aufrufagenten/llama-writer.ts— Pi-Tool:write_article_llama★ BEVORZUGT
Umbenennungen (Naming-Convention ollama-* / llama-*):
writer.ts→ollama-writer.ts(Pi-Tool bleibtwrite_article)verify-article.ts→ollama-verify-article.ts(Pi-Tool bleibtverify_article)
Deployment:
~/.pi/agent/extensions/fact-checker/package.json: 9 Extensions- Symlinks:
writer.tsentfernt,ollama-writer.ts+llama-writer.tshinzugefügt - Alle anderen llama.cpp-Symlinks angelegt
Dokumentation: AGENTS.md, README.md, HANDOFF.md, TODO.md, WORKLOG.md aktualisiert
tsc: fehlerfrei
Getestet
npx tsx agenten/llama-writer.ts --from-job pipeline-test --style blog→ 253 Wörter, 18.7s ✓- Pipeline-Test:
llama-verify-article→llama-writerkompatibel (gleicheVerificationReport-Struktur) ✓
Probleme und Lösungen
| Problem | Lösung |
|---|---|
writer.ts → "fetch failed" mit qwen3.5:27b + format: |
llama-writer.ts: Schema im System-Prompt, /no_think |
createLogger("name", "debug") — falsige Signatur |
createLogger({ verbose: true }) verwendet |
Verbleibende offene Punkte
- Pi
/reload(manuell) damitwrite_article_llamaaktiv wird - OLLAMA_KEEP_ALIVE via systemd (optional, niedrige Priorität)
[2026-04-17] Standard-Modell auf qwen3.5:9b gesetzt
Erledigt
- claim-extractor.ts — Standardmodell von
qwen3.5:27baufqwen3.5:9bgeändert- Präzision: 8/9 Claims vs. 9/9 (qwen3.5:27b) — fast gleich
- Geschwindigkeit: 2× schneller (96 s vs. 205 s bei Apollo-11-Text)
- VRAM: 6.6 GB statt 17 GB — vollständig in VRAM, kein CPU-Offloading
- Kommentar in Header aktualisiert: Empfehlung qwen3.5:9b (6.6 GB, 1 GPU, fast gleiche Präzision wie 27B, 2× schneller)
- TypeBox-Parameter-Beschreibung ergänzt: "Empfohlene Alternative: qwen3.5:27b für maximale Präzision"
tsc: fehlerfrei
Getestet
npx tsx agenten/claim-extractor.ts --verbose "Test"→ zeigt "Ollama-Modell: qwen3.5:9b"- Apollo-11-Test: 8 Claims extrahiert (qwen3.5:27b: 9 Claims) — akzeptabler Trade-off
[2026-04-16] Job-Speicher implementiert
Erledigt
lib/jobs.ts (neue Datei, ~200 Zeilen) — reines File-I/O, keine Agenten-Abhängigkeiten
createJob(slug, model)→ legt~/.pi/agent/jobs/<datum>_<slug>/+perplexity/-Unterverzeichnis anfindJobDir(slug)→ neuestes Job-Verzeichnis mit diesem SluggetOrCreateJob(slug, model)→ Resume-Logik: vorhandenes wiederverwenden oder neu anlegensaveJobFile/loadJobFile/loadJobText/jobFileExists→ Datei-I/O mit JSON-SerialisierungupdateJobMeta→ shallow merge inmeta.jsonmitupdatedAt-TimestamplistJobs→ alle Jobs sortiert nach Datum (neueste zuerst)formatJobList→ Tabellenausgabe für CLI
verify-article.ts — --job-id <slug>
- Erstlauf: erstellt Job, speichert
input.txt,claims.json,perplexity/<id>.json,report.json - Resume: gecachte
claims.json→ Extraktion übersprungen; gecachteperplexity/<id>.json→ kein API-Aufruf meta.jsonwird bei jedem Schritt aktualisiert (status + step-Metadaten)- Fehler:
meta.jsonaufstatus: "failed"gesetzt
writer.ts — --from-job <slug> + --from-report
--from-job: lädtreport.jsonaus Job, speichertarticle.mdnach Fertigstellung- Fehlerausgabe wenn Job oder report.json nicht gefunden
tsc: fehlerfrei
Verzeichnisstruktur
~/.pi/agent/jobs/<datum>_<slug>/
├── input.txt
├── claims.json
├── perplexity/
│ ├── c001.json
│ └── c002.json ...
├── report.json
├── article.md
└── meta.json
[2026-04-16] Verbose-Modus + lib/logger.ts implementiert
Erledigt
lib/logger.ts (neue Datei, ~90 Zeilen)
Logger-Klasse mitinfo/warn/error/debug-Methoden- Schreibt in
~/.pi/agent/logs/YYYY-MM-DD_HH-MM-SS[_jobId].log(append, FS-Fehler werden ignoriert) verbose=true→ alle Einträge zusätzlich auf stderr;warn/errorimmer auf stderrcreateLogger(opts)— Factory; legt LOG_DIR automatisch annullLogger— Null-Objekt für Pi-Extension-Kontext (keine Seiteneffekte)
claim-extractor.ts — Logging + --verbose
- Alle Chunking-Schritte geloggt: Chunk-Aufteilung, Token-Counts, Laufzeit pro Chunk, Dedup-Stats
- Ollama-Antwort-Details geloggt (promptTokens, outputTokens, rawLength)
- Fehler (API-Fehler, JSON-Parse, 0-Claims) mit Kontext geloggt
--verbose/-vCLI-Flag: erstellt Logger mit verbose=true
verify-article.ts — Logging + --verbose
- Pipeline-Start/Ende geloggt (textLength, model, totalCostUSD, latencyMs)
- Perplexity-Outcomes geloggt (successful/failed Count, Kosten)
--verbose/-vCLI-Flag
verifier.ts — Logging + --verbose
- Perplexity-Aufruf + Urteilssynthese geloggt
--verbose/-vCLI-Flag
tsc: fehlerfrei
Chunking-Test läuft
claim-extractor.ts --verbose "$(cat Umerziehung.md)"gestartet- Logger bestätigt: 7 Chunks (2945–2984 Zeichen), Chunk 1/7 wird verarbeitet
- Alter Fehler (
fetch failed) war temporär (Ollama nicht bereit); kein Code-Bug
[2026-04-16] Phasen 1–3 komplett, Handoff-Dokumentation
Erledigt
Phase 1 — Fundament
- Projektstruktur analysiert, GPU-Setup entschieden (qwen3.5:27b auf 1 GPU)
package.json+tsconfig.jsonerstellt (ESM, tsx, no-build)types/pi-coding-agent.d.ts— Stub für lokale TS-Prüfung ohne Pi-Paketschemas/claim.schema.json— ClaimSet mit 6 Claim-Typen, 3 Checkability-Stufenschemas/source-record.schema.json— Perplexity-Quellenschemas/verification-result.schema.json— 5 Status-Werteagenten/claim-extractor.ts(509 Zeilen) — Pi-Extension + CLI- Getestet: qwen3.5:27b extrahiert korrekt, structured output funktioniert
Phase 2 — Kernpipeline
lib/perplexity.ts(175 Zeilen) — Retry, Kostenberechnung, Deduplizierungagenten/verifier.ts(427 Zeilen) — Perplexity + Ollama-Verdict- Getestet: "Inflationsrate 3,2%" → WIDERLEGT (korrekt: 2,2%, Destatis-Quelle)
- Kosten: ~$0.0054/Claim
agenten/verify-article.ts(600 Zeilen) — OrchestratorrunWithConcurrencyLimit()für max. 5 parallele Perplexity-Calls- Batch-Ollama-Verdict (1 Call für N Claims,
num_ctx: 16384) - End-to-End-Test: 4 falsche Facts erkannt, 2 korrekte bestätigt — $0.0324, 407s
Phase 3 — Produktionsreife
lib/router.ts(232 Zeilen) — TaskType-basiertes Routing, ENV-Overridesschemas/argument-map.schema.json— 12 Fehlschluss-Typenschemas/article-draft.schema.json— 5 Stile, Quellenverzeichnis- Bugfix:
"type": "["string", "null"]"(String) →"type": ["string", "null"](Array)
- Bugfix:
agenten/logic-editor.ts(538 Zeilen) — deepseek-r1:32b, Pi + CLI- Zwei Bugs gefixt (location-Feld, Chinesische Zeichen im Output)
- Retest nach Fix steht noch aus
agenten/writer.ts(522 Zeilen) — Pipe-CLI, 5 Stile, Quellenautomatik- tsc fehlerfrei, End-to-End-Test steht noch aus
Deployment
~/.pi/agent/extensions/fact-checker/mit 5 Symlinks~/.pi/agent/extensions/lib→~/Pi_Agent_Projekts/text_agent/lib- Pi
/reloadnoch nicht getestet
Handoff-Dokumentation
AGENTS.md,SYSTEM.md,HANDOFF.md,TODO.md,WORKLOG.md,docs/ARCHITECTURE.md
Probleme und Lösungen
| Problem | Lösung |
|---|---|
@mariozechner/pi-coding-agent nicht von tsc gefunden |
Lokaler Typ-Stub in types/ |
execute params implicit any in Stub |
Generic entfernt, params: any direkt |
ClaimSet nicht exportiert |
export type zu allen Typen in claim-extractor.ts |
ArticleDraft fehlt schema_version |
Lokaler Typ ergänzt in writer.ts |
article-draft.schema.json type-Bug |
Array-Syntax korrigiert |
| logic-editor zeigt JSON-Keys statt Textzitate | Prompt-Anweisung mit Zitat-Beispiel ergänzt |
| Chinesische Zeichen im Output | "Antworte ausschließlich auf Deutsch." an Prompt-Anfang |
Nutzer will .bashrc nicht von Claude editieren lassen |
Anleitung gegeben: manuell export OLLAMA_KEEP_ALIVE=-1 einfügen |
| Ollama läuft via systemd, nicht direkt | Anleitung: sudo systemctl edit ollama + Environment=... |
Offen nach dieser Session
- logic-editor.ts retest nach Fixes
- writer.ts End-to-End-Test
- Pi
/reloadbestätigen - OLLAMA_KEEP_ALIVE in systemd setzen (Nutzer)
- Testkorpus aufbauen
[2026-04-16] 0-Claims-Bug gefixt, sequential-Guideline ergänzt
Erledigt
claim-extractor.ts — dynamisches num_ctx
- Ursache des 0-Claims-Bugs:
num_ctx=8192für 17964-Zeichen-Essay zu klein (Eingabe ~4491 Tokens + Prompt ~1000 + Output ~3200 = ~8691 → Overflow) - Fix:
estimateNumCtx(textLength, maxClaims)berechnet 8192/16384/32768 dynamisch- Umerziehung.md (17964 Zeichen) → 16384 ✓
- Kurze Texte (<~3000 Zeichen) → bleiben bei 8192
- Fix: 0-Claims wirft jetzt Fehler:
"Ollama hat 0 Claims extrahiert (num_ctx=..., prompt_tokens=...)" - Fix: System-Prompt Duplikat-Unterdrückung: "Extrahiere jeden Sachverhalt nur einmal"
verify-article.ts — Warnung bei 0 prüfbaren Claims
onProgress("⚠ Keine prüfbaren Claims gefunden...")wenn checkableClaims.length === 0
verifier.ts — sequential Guideline
promptGuidelinesergänzt: nie mehrere verify_claim gleichzeitig aufrufen
tsc: fehlerfrei nach allen Änderungen
[2026-04-16] Probelauf analysiert, Status-Dateien aktualisiert
Probelauf-Ergebnisse (Probelauf.md)
- Pi lädt alle 6 Extensions korrekt ✓
extract_claimsauf 2.000-Wort-Essay: 25 Claims (14 prüfbar, 10 teilweise, 1 Meinung) — 285s ✓verify_claimeinzeln: 11/14 bestätigt, 2 widerlegt (41 Mio. Wohnungen veraltet, IW-Zahl nicht belegbar), 1 → deep retry → bestätigt ✓research_web: korrekte Recherche zu Wohnungsbestand ✓- Problem:
verify_articleauf langem Text → 0 Claims extrahiert (173s) — Bug - Problem: parallele
verify_claim-Aufrufe → vielefetch failed— Ollama-Überlastung
Status-Dateien aktualisiert
- HANDOFF.md: Probelauf-Ergebnisse und neue offene Punkte eingetragen
- TODO.md: P1 um Bug-Fix und Prompt-Guidelines ergänzt, erledigte P1-Items abgehakt
[2026-04-16] P2-Features implementiert
Erledigt
verify-article.ts — Fortschrittsanzeige
onProgress-Callback als optionaler Parameter inverifyArticle()- Meldet: "Claims extrahieren...", "N Claims extrahiert — M prüfbar", "[1/3] ✓ ...", "Urteilssynthese..."
- CLI-Modus: Callback schreibt auf
process.stderr→--json-Output auf stdout unberührt - Pi-Extension: kein Callback → keine Seiteneffekte
logic-editor.ts — --only-fallacies Flag
- Neues CLI-Flag
--only-fallacies: gibt nur Fehlschlüsse ohne vollständige ArgumentMap aus - Kombinierbar mit
--json→ liefert JSON-Array der fallacies - Ohne
--json→ formatierter Text mit Icon, Typ, Beschreibung, Zitat
Beide: tsc fehlerfrei, CLI-Tests bestanden
[2026-04-16] P1-Bugs gefixt, alle Agenten getestet
Erledigt
logic-editor.ts — Bugfix + Retest
- Gefunden:
analyzeWithOpenRouter(model, text, signal)— Argumente vertauscht (model/text) - Fix:
analyzeWithOpenRouter(text, model, signal) - Prompt-Fixes aus vorheriger Session (location-Feld, Deutsch-Anweisung) bestätigt
- Retest erfolgreich: 3 Fehlschlüsse korrekt erkannt (Ad Hominem critical, Falsche Dichotomie critical, Autoritätsargument moderate)
- location-Felder zeigen wörtliche Zitate ✓, kein Chinesisch ✓, alles Deutsch ✓
writer.ts — Bugfix + End-to-End-Test
- Gefunden:
routeModel("article_writing")ohne cloud-Flag wählte OpenRouter statt Ollama (weil OPENROUTER_API_KEY gesetzt → medium-Complexity → Cloud-Branch) → OpenRouter-Modell liefertebodyals Array,leadals undefined - Fix in writer.ts: complexity "low" wenn kein --cloud → Router wählt immer Ollama
- End-to-End-Test: 3 Claims → verify-article → writer --style blog
- c001 (Inflationsrate 3,2%) korrekt als
contradictedausgeschlossen - c002 (EZB-Zinssenkung Juni 2024) + c003 (DAX 20.000) als
supportedverwendet - Blog-Artikel mit Quellenverzeichnis, editorial_notes korrekt
- Laufzeit: ~144s, kostenlos (lokal)
- c001 (Inflationsrate 3,2%) korrekt als
- tsc nach allen Fixes: fehlerfrei
Handoff-Dokumentation vervollständigt
- SYSTEM.md, HANDOFF.md, TODO.md, WORKLOG.md, docs/ARCHITECTURE.md geschrieben
- TODO.md: P1-Aufgaben abgehakt
- HANDOFF.md: Offene Punkte aktualisiert
Verbleibende offene Punkte
- Pi
/reloadin Pi-App testen (nur vom Nutzer durchführbar) - OLLAMA_KEEP_ALIVE via systemd setzen (nur vom Nutzer durchführbar)
- Testkorpus (tests/corpus/) — P3, noch nicht begonnen