Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AI-First Blog Pipeline

Eine minimale, robuste Pipeline für AI-first Blogartikel mit Web-Recherche, Zwei-Modell-Workflow und deploybaren Artefakten.

Struktur

Blog-Pipeline/
  prompts/
    masterprompt.md
    researchprompt.md
    writerprompt.md
  inputs/
  outputs/
  src/
    __init__.py
    config.py
    utils.py
    research.py
    llm.py
    generate.py
    deploy.py
  requirements.txt
  README.md

Setup

cd /srv/Container/Blog-Pipeline
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

Alternativ ohne Aktivierung der Shell:

cd /srv/Container/Blog-Pipeline
.venv/bin/pip install -r requirements.txt

Konfiguration (/srv/Container/.env)

Die Pipeline lädt Umgebungsvariablen explizit aus /srv/Container/.env via python-dotenv.

Beispielvariablen (keine Secrets committen):

IONOS_SFTP_PASS='***'
IONOS_SFTP_HOST='home436434446.1and1-data.host'
IONOS_SFTP_PORT='22'
IONOS_SFTP_PROTOKOLL='SFTP'
# /the-implementers.de
IONOS_SFTP_USER_THE_IMPLEMENTERS_WEBSEITE='acc571362055'
# /schifferm.de
IONOS_SFTP_USER_THE_IMPLEMENTERS_WEBSEITE='acc210464821'
# LLM / Ollama
OLLAMA_HOST_PORT='http://192.168.5.28:11434'

Zusätzliche optionale Variablen:

  • OPENAI_BASE_URL (überschreibt Ollama URL)
  • OPENAI_API_KEY (auch für OpenAI-kompatible Gateways)
  • RESEARCH_MODEL (default gpt-oss:20b)
  • WRITER_MODEL (default mistral-nemo:12b)
  • IONOS_SFTP_USER (expliziter Deploy-User)
  • IONOS_SFTP_REMOTE_BASE (remote Zielpfad, default /)

Input-Datei

Lege eine YAML-Datei in inputs/*.yaml an.

Pflichtfelder:

  • THEMA
  • ZIELGRUPPE
  • ZIELE
  • SCHWERPUNKTE
  • HALTUNG

Optional:

  • KONTEXT
  • TONALITÄT
  • LANGUAGE (default de)
  • DATE (default: heute)
  • SLUG (sonst aus THEMA generiert)

Siehe inputs/example.yaml.

CLI-Befehle

.venv/bin/python -m src.research --input inputs/example.yaml --k 8
.venv/bin/python -m src.generate --input inputs/example.yaml --with-research --k 8
.venv/bin/python -m src.generate --input inputs/example.yaml --with-research --k 8 --swap-models
.venv/bin/python -m src.deploy --input inputs/example.yaml --deploy --dry-run

Ausgabe-Artefakte

Die Pipeline schreibt nach outputs/<slug>/:

  • research_sources.json
  • research_corpus.md
  • research_summary.txt
  • fact_check_notes.txt
  • canonical_sources.txt
  • key_entities.json
  • draft_outline.md
  • article.md
  • executive_summary.txt
  • key_takeaways.txt
  • seo.json
  • schema.jsonld
  • linkedin.txt
  • image_prompts.txt
  • codex_deploy_prompt.txt

Workflow

  1. Research (src.research)
  • Baut 3-6 Suchanfragen aus Briefing-Feldern.
  • Nutzt Brave Search API, falls BRAVE_API_KEY gesetzt ist; sonst DuckDuckGo HTML-Fallback (bei Anti-Bot-Challenge mit Yahoo HTML als sekundärem Fallback).
  • Dedupliziert Domains (max. 2 pro Domain), extrahiert Inhalte mit trafilatura und Fallback readability-lxml.
  • Verwirft Quellen < 1500 Zeichen.
  • Schreibt research_sources.json und research_corpus.md nach outputs/<slug>/.
  1. Generation (src.generate)
  • Schritt A (gpt-oss:20b default): Research-Summary + Fact-Check aus prompts/researchprompt.md.
  • Schritt B (mistral-nemo:12b default): finaler Artikel + Artefakte aus prompts/writerprompt.md.
  • --swap-models tauscht A/B-Modelle für Tests.
  • Validiert Marker, JSON-LD, Artikelstruktur und SEO-Limits.
  • Normalisiert Bildprompts auf exakt 3, jeweils mit 1.91:1 und no text in image.
  1. Deploy (src.deploy)
  • Optionaler SFTP-Upload der generierten Dateien in outputs/<slug>/.
  • --dry-run zeigt nur Upload-Plan.

Ollama / OpenAI-kompatibler Endpoint

src/config.py verwendet standardmäßig:

  1. OPENAI_BASE_URL, falls gesetzt
  2. sonst OLLAMA_HOST oder OLLAMA_HOST_PORT + /v1
  3. fallback http://127.0.0.1:11434/v1

API-Key kommt aus OPENAI_API_KEY (kann für Ollama ein Platzhalter sein).

Sicherheit

  • Keine Secrets in Git committen.
  • SFTP-User mit Least-Privilege verwenden (nur notwendige Zielpfade).
  • Falls möglich Key-basierte Authentifizierung statt Passwort.
  • Netzwerkseitig Zielhost- und Port-Allowlist einschränken.
  • Deploy nur über dedizierte CI/Runner-Umgebungen mit Secret-Management.

Troubleshooting

  • Fehler python: command not found:
  • Nutze python3 oder direkt .venv/bin/python.
  • Fehler ModuleNotFoundError:
  • Stelle sicher, dass du aus dem Projektroot ausführst und die venv nutzt.
  • Leere Suchergebnisse im DDG-Fallback:
  • Die Pipeline erkennt DDG-Challenges automatisch und nutzt Yahoo als sekundären HTML-Fallback.
  • Lange LLM-Laufzeiten:
  • Über .env steuerbar mit REQUEST_TIMEOUT_RESEARCH_SECONDS, REQUEST_TIMEOUT_WRITER_SECONDS, LLM_RETRIES, LLM_MAX_TOKENS.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages