Noise to Blog
Aus jeder groben Eingabe (Stichpunkte, Sprachnotizen, Tweet-Dumps oder kurze Entwürfe) wird ein polierter, veröffentlichungsreifer Blogbeitrag. Jede Behauptung geht auf das Ausgangsmaterial oder Tavily-verifizierte Recherchen zurück.
Kritische Regel: ERFINDE KEINE EINZELHEITEN. Jede Behauptung, Kennzahl und jedes Beispiel im Blogbeitrag muss aus der Roheingabe oder einem Tavily-Suchergebnis stammen. Erfinde niemals Daten, Zitate oder Ergebnisse.
Schritt 1: Setup-Prüfung
Bestätige, dass die erforderlichen Umgebungsvariablen gesetzt sind:
echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+gesetzt}"
echo "TAVILY_API_KEY: ${TAVILY_API_KEY:-nicht gesetzt, Tavily-Anreicherung wird übersprungen}"
Wenn GEMINI_API_KEY fehlt: Stopp. Sag dem Benutzer: "GEMINI_API_KEY wird benötigt. Hol dir einen unter aistudio.google.com → API-Schlüssel. Füge ihn deiner .env-Datei hinzu."
Wenn TAVILY_API_KEY fehlt: Fahre fort. Beachte, dass die Tavily-Anreicherung übersprungen wird. Der Blogbeitrag basiert dann ausschließlich auf dem bereitgestellten Inhalt. Das ist in Ordnung für persönliche Geschichten, Tutorials aus eigener Erfahrung oder Meinungsbeiträge.
Bestätige, dass eine Eingabe vorliegt. Der Benutzer muss eines der folgenden Dinge bereitstellen:
- Eingefügten Text (Stichpunkte, grobe Notizen, Transkript, Tweet-Dump, kurzer Entwurf)
- Eine URL zum Abrufen
Liegt keine Eingabe vor, frage: "Teile deine groben Notizen, Stichpunkte oder dein Transkript. Füge sie direkt ein oder gib mir eine URL, um die Quelle abzurufen."
Schritt 2: Eingabe lesen und analysieren
Wenn die Eingabe eine URL ist: Rufe den Seiteninhalt mit WebFetch ab. Extrahiere: Titel, Autor, Veröffentlichungsdatum, gesamten Fließtext, wichtige Statistiken, nummerierte Listen, Zwischenüberschriften, Zitate.
Wenn die Eingabe eingefügter Text ist: Lies ihn direkt. Identifiziere den Eingabetyp:
- Stichpunkte oder grobe Notizen: fragmentierte Ideen, unvollständige Sätze, Bewusstseinsstrom
- Sprachnotiz: gesprächig, wiederholend, Füllwörter (ähm, hm, also, weißt du), abschweifende Sätze
- Tweet-Thread-Dump: kurze Fragmente, @Erwähnungen, Hashtags, Nummerierung "1/8"
- Kurzer Entwurf: strukturiert, aber dünn, braucht Erweiterung und Feinschliff
QA-Kontrollpunkt: Gib vor dem Fortfahren an:
- Erkannten Eingabetyp
- Kernthese oder Hauptargument in einem Satz
- Die 3-5 stärksten Erkenntnisse, Fakten oder Ideen aus dem Rohtext
- Behauptungen, die eine externe Überprüfung benötigen (Benchmarks, Statistiken, Produktvergleiche, Forschungsergebnisse)
Wenn du keine Kernthese identifizieren kannst, frage: "Was ist das Wichtigste, das die Leser aus diesem Beitrag mitnehmen sollen?"
Schritt 3: Blog-Stil wählen
Vier Stile. Automatische Erkennung anhand von Signalen im Inhalt. Benutzereingriff wird immer respektiert.
| Stil | Wann verwenden | Signale |
|---|---|---|
| Technisches Tutorial | Schritt-für-Schritt-Anleitung, How-to, Code-Walkthrough | Nummerierte Schritte, Befehle, Code-Snippets, "So geht's" im Inhalt |
| Fallstudie | Vorher/Nachher-Geschichte, Build-Log, Lessons Learned | Konkrete Ergebnisse, Zeitpläne, Ich-Perspektive |
| Meinungsbeitrag | Meinung, Argument, kontraintuitive Behauptung | "Ich denke", "das Problem mit X", konträre Position, Debatten-Framing |
| Erklärartikel | Was ist X, warum es wichtig ist, wie es funktioniert | Konzept-lastig, vergleichsschwer, "die meisten Leute wissen nicht" |
Erkennungslogik:
- Inhalt hat nummerierte Schritte oder Befehle → Technisches Tutorial
- Inhalt hat Vorher/Nachher, konkrete Metriken oder erzählerischen Bogen → Fallstudie
- Inhalt argumentiert gegen Allgemeinwissen oder vertritt eine starke Meinung → Meinungsbeitrag
- Inhalt erklärt ein Konzept, Tool oder Trend für Unkundige → Erklärartikel
Gib den gewählten Stil und die Begründung an. Bei Mehrdeutigkeit wähle einen und notiere die Entscheidung.
Schritt 4: Mit Tavily-Recherche anreichern
Diesen Schritt still überspringen, wenn TAVILY_API_KEY nicht gesetzt ist.
Suche nach unterstützenden Belegen für Behauptungen im Rohtext, die von einer Verifizierung oder Daten profitieren könnten. Gute Kandidaten:
- Produkt-Benchmarks oder Leistungszahlen
- Marktstatistiken oder Branchentrends
- Technische Vergleiche ("X ist schneller als Y")
- Zahlen, die der Benutzer aus dem Gedächtnis statt aus einer zitierten Quelle genannt hat
Führe eine Tavily-Suche pro Behauptung durch, die überprüft werden muss. Maximal 3 Suchen, um übermäßiges Quellen zu vermeiden:
curl -s -X POST "https://api.tavily.com/search" \
-H "Content-Type: application/json" \
-d '{
"api_key": "'"$TAVILY_API_KEY"'",
"query": "SPEZIFISCHE_BEHAUPTUNG_ODER_THEMA",
"search_depth": "advanced",
"max_results": 5,
"include_answer": true
}'
Behalte Ergebnisse mit score >= 0.65. Extrahiere: Titel, URL, Inhaltsausschnitt.
Regeln für die Verwendung von Tavily-Ergebnissen:
- Verwende sie, um bereits in der Roheingabe vorhandene Behauptungen zu unterstützen oder zu überprüfen. Führe niemals neue Behauptungen aus Suchergebnissen ein.
- Weise Quellen natürlich im Text zu: "laut [Quelle]", "Daten von [X] zeigen"
- Wenn kein Tavily-Ergebnis eine Behauptung bestätigt, lass die Behauptung unbestätigt, anstatt ein unzusammenhängendes Ergebnis zu verwenden
Schritt 5: Blogbeitrag generieren
Lese references/blog-format.md vollständig. Wähle die passende Vorlage aus references/output-template.md. Verinnerliche alle Regeln vor der Generierung.
Schreibe die Gemini-Anfrage in eine temporäre Datei, um Sonderzeichen sicher zu behandeln:
cat > /tmp/noise2blog-request.json << 'ENDJSON'
{
"system_instruction": {
"parts": [{
"text": "Du bist ein Tech-Autor, der wie ein echter Mensch klingt. Regeln: Nur aktive Stimme. Kurze Absätze, maximal 1-3 Zeilen, dann eine Leerzeile. Verwende natürlich Zusammenziehungen (kein, wird nicht, ist, kann nicht, du bist, sie sind). Keine Gedankenstriche – stattdessen ein Komma oder einen Punkt verwenden. Keine Semikolons. Jeder Satz braucht ein konkretes Detail: eine Zahl, einen Toolnamen, einen Dateinamen, einen Befehl, ein Ergebnis. Keine Füllphrasen: kein 'in der sich schnell verändernden Welt von heute', kein 'lasst uns eintauchen', kein 'es ist erwähnenswert', kein 'abschließend', kein 'ich hoffe, das war hilfreich'. Keine verbotenen Wörter: unglaublich, erstaunlich, nutzen, hebeln, Game-Changer, bahnbrechend, revolutionär, Paradigma, hochmodern, nahtlos, robust, beispiellos, eintauchen, nutzbar machen, verwenden, transformativ, disruptiv, freischalten, umfassend, umsetzbar, entscheidend, zentral. Titel darf nicht mit Ich, Mein oder Wir beginnen. Beginne mit einem einleitenden Absatz, der das Thema nicht ankündigt. Schließe mit etwas Handlungsaufforderndem. Erfinde keine Behauptungen, Kennzahlen oder Ergebnisse, die nicht im Quellmaterial vorhanden sind."
}]
},
"contents": [{
"parts": [{
"text": "ROHTEXT_UND_ANWEISUNGEN_HIER"
}]
}],
"generationConfig": {
"temperature": 0.7,
"maxOutputTokens": 4096
}
}
ENDJSON
Ersetze ROHTEXT_UND_ANWEISUNGEN_HIER durch:
- Den Rohtext
- Die Anweisungen zum Blog-Stil und zur Struktur (aus der ausgewählten Vorlage)
- Alle in Schritt 4 gesammelten Tavily-Rechercheergebnisse
- Wortziel: 800-1.800 Wörter
Sende die Anfrage:
curl -s -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d @/tmp/noise2blog-request.json \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"
Erstelle außerdem:
- (B) Eine 1-2-sätzige Meta-Beschreibung für die SEO-Vorschau
- (C) Einen alternativen Titel mit einem anderen Einstiegswinkel
Schritt 6: Selbst-QA
Führe jede Prüfung durch und behebe Verstöße, bevor du das Ergebnis präsentierst:
- Titel beginnt nicht mit "Ich", "Mein" oder "Wir"
- Titel ist spezifisch und gesprächig (nicht "Ein umfassender Leitfaden zu X" oder "Der ultimative Leitfaden zu Y")
- Einleitender Absatz fesselt, ohne das Thema anzukündigen ("In diesem Beitrag werde ich...")
- Keine Gedankenstriche in irgendeiner Zeile
- Keine Semikolons
- Kein Absatz länger als 3 Zeilen vor einer Leerzeile
- Keine verbotenen Wörter: unglaublich, erstaunlich, nutzen, hebeln, Game-Changer, eintauchen, nutzbar machen, freischalten, bahnbrechend, hochmodern, bemerkenswert, Paradigma, revolutionieren, nahtlos, robust, verwenden, beispiellos, umfassend, umsetzbar, entscheidend, zentral
- Keine erfundenen Daten: jede Behauptung geht auf die Roheingabe oder ein Tavily-Ergebnis zurück
- Beitrag endet nicht mit "Abschließend", "Zusammenfassend" oder "Ich hoffe, das hat geholfen"
- 800-1.800 Wörter (gib die Wortanzahl an)
- Logischer Ablauf: Einleitung → Problem/Kontext → Hauptteile → handlungsauffordernder Abschluss
Behebe jeden Verstoß, bevor du das Ergebnis präsentierst. Gib die endgültige Wortanzahl an.
Schritt 7: Ausgabe
Präsentiere den vollständigen Blogbeitrag in einem Code-Block.
Präsentiere die Meta-Beschreibung und den alternativen Titel unterhalb des Hauptbeitrags.
Frage: "Bereit, dies in deinen Editor zu kopieren? Wenn du auf einer bestimmten Plattform veröffentlichst, lass es mich wissen, und ich kann das Frontmatter formatieren."
Auf plattformspezifische Anfrage:
Ghost:
---
title: "BEITRAGSTITEL"
date: YYYY-MM-DD
tags: [tag1, tag2]
status: draft
---
dev.to:
---
title: BEITRAGSTITEL
description: META_BESCHREIBUNG
tags: [tag1, tag2, tag3]
published: false
---
Substack: Als einfaches Markdown präsentieren. Substacks Editor importiert Markdown direkt.
Hashnode:
---
title: BEITRAGSTITEL
subtitle: META_BESCHREIBUNG
tags: [tag1, tag2]
---