425 lines
22 KiB
Markdown
425 lines
22 KiB
Markdown
# Migration Guide: Google AI Builder Apps -> Local Docker Stack
|
|
|
|
> **CRITICAL WARNINGS & BEST PRACTICES (READ BEFORE MIGRATION):**
|
|
>
|
|
> 1. **DIE GOLDENE REGEL DER STRINGS:** Nutze **NIEMALS** `f"""..."""` für komplexe Prompts oder Listen-Operationen mit verschachtelten Keys. Es führt unweigerlich zu `SyntaxError: unterminated string literal`. Nutze **AUSSCHLIESSLICH Triple Raw Quotes (`r"""..."""`)** und die **`.format()`** Methode.
|
|
> 2. **SDK WAHL (DUAL SDK):** Das moderne `google-genai` ist gut, aber das Legacy `google-generativeai` ist oft stabiler für reinen Text (`gemini-2.0-flash`). Nutze die "Dual SDK Strategy", um beide je nach Bedarf zu verwenden.
|
|
> 3. **GROUNDED TRUTH (MUSS):** Verlasse dich niemals auf das Wissen des Modells allein. Implementiere **immer** Web-Scraping (Homepage + Unterseiten) und SerpAPI-suchen, um das Modell mit Fakten zu füttern.
|
|
> 4. **DOCKER VOLUMES:** Mounte **nur spezifische Dateien**, niemals den `dist`-Ordner überschreiben. Bei Syntax-Fehlern, die trotz Korrektur bleiben: `docker-compose build --no-cache`.
|
|
|
|
---
|
|
|
|
## 0. Der "Quick-Start" Checkliste (5-Minuten-Plan)
|
|
|
|
1. **SDKs:** Stehen `google-genai` UND `google-generativeai` in der `requirements.txt`?
|
|
2. **Prompts:** Sind alle Prompts als `r"""...""".format()` angelegt?
|
|
3. **Grounding:** Wird vor dem KI-Call die Webseite der Firma gescrapt?
|
|
4. **Package.json:** Sind Build-Tools (`vite`, `typescript`) in `dependencies` (NICHT `devDependencies`)?
|
|
5. **Vite Config:** Ist `base: './'` gesetzt?
|
|
6. **DB-Datei:** Wurde die leere `.db`-Datei auf dem Host via `touch` erstellt?
|
|
|
|
---
|
|
|
|
## 1. Detaillierte Fehlerlösungen & Code-Vorlagen
|
|
|
|
Dieser Abschnitt enthält die aus der Git-Historie wiederhergestellten "Lessons Learned".
|
|
|
|
### 1.1 Python: Abhängigkeiten & SDKs (Häufigste Fehlerquelle)
|
|
|
|
**Problem 1: `ModuleNotFoundError` bei geteilten Bibliotheken**
|
|
- **Fehler:** Eine kleine App stürzt ab, weil sie `helpers.py` importiert, aber nicht alle darin verwendeten Bibliotheken (z.B. `gspread`, `pandas`) in ihrer eigenen `requirements.txt` hat.
|
|
- **Lösung (in `helpers.py`):** "Exotische" Importe optional machen.
|
|
```python
|
|
try:
|
|
import gspread
|
|
GSPREAD_AVAILABLE = True
|
|
except ImportError:
|
|
GSPREAD_AVAILABLE = False
|
|
gspread = None # Wichtig, damit Referenzen nicht fehlschlagen
|
|
```
|
|
- **Lösung (in `requirements.txt` der App):** Nur die **direkt** für die App benötigten Pakete auflisten. Nicht blind die globale `requirements.txt` kopieren. Für eine typische App sind das oft nur:
|
|
```text
|
|
google-generativeai
|
|
google-genai
|
|
Pillow
|
|
requests
|
|
beautifulsoup4
|
|
```
|
|
|
|
**Problem 2: `ImportError` für `Schema` oder `Content`**
|
|
- **Fehler:** `ImportError: cannot import name 'Schema' from 'google.generativeai.types'`
|
|
- **Ursache:** Der Code ist für eine neuere Version des `google-generativeai`-SDK geschrieben, aber im Projekt ist eine ältere Version (z.B. `0.3.0`) installiert, in der diese Klassen anders hießen oder nicht existierten.
|
|
- **Lösung (für Legacy SDKs):**
|
|
1. Entferne die direkten Importe für `Schema` und `Content`.
|
|
2. Übergebe Konfigurationen wie `generation_config` als einfaches Python-Dictionary. Das alte SDK ist damit zufrieden.
|
|
|
|
**Problem 3: `AttributeError: module 'google.generativeai' has no attribute 'Client'`**
|
|
- **Ursache:** Der Code verwendet eine veraltete API (`genai.Client`), die im SDK entfernt wurde.
|
|
- **Lösung:** Den Code auf die moderne `GenerativeModel`-API umstellen.
|
|
```python
|
|
genai.configure(api_key="YOUR_KEY")
|
|
model = genai.GenerativeModel('gemini-1.5-flash-latest')
|
|
response = model.generate_content(...)
|
|
```
|
|
|
|
### 1.2 Frontend: Build-Prozess & Server
|
|
|
|
**Problem 1: `npm run build` schlägt im Docker-Container fehl**
|
|
- **Ursache:** Wichtige Build-Tools (`vite`, `typescript` etc.) stehen fälschlicherweise in `devDependencies` in der `package.json`. Der Docker-Build installiert diese standardmäßig nicht.
|
|
- **Lösung:** **Alle** `devDependencies` in die `dependencies` verschieben.
|
|
|
|
**Problem 2: "White Screen" - App lädt nicht**
|
|
- **Ursache:** Die App wird unter einem Unterpfad (z.B. `/ce/`) bereitgestellt, aber Vite sucht die JS/CSS-Dateien im Root (`/`).
|
|
- **Lösung (in `vite.config.ts`):** Den Basispfad anpassen.
|
|
```typescript
|
|
export default defineConfig({
|
|
base: './', // Zwingt Vite, relative Pfade zu nutzen
|
|
});
|
|
```
|
|
### 1.3 Docker & Datenbank
|
|
|
|
**Problem 1: `OperationalError: no such table`**
|
|
- **Ursache:** Die `.db`-Datei wurde zwar mit `touch` erstellt, ist aber leer. Die Tabellen wurden nie initialisiert.
|
|
- **Lösung:** Die Datenbank-Initialisierung (z.B. `python3 db_manager.py init`) MUSS beim Start des `server.cjs` automatisch ausgeführt werden.
|
|
```javascript
|
|
// In server.cjs am Anfang
|
|
const { spawn } = require('child_process');
|
|
const dbScript = path.join(__dirname, 'gtm_db_manager.py'); // Pfad anpassen
|
|
spawn('python3', [dbScript, 'init']);
|
|
```
|
|
|
|
**Problem 2: Code-Änderungen werden nicht übernommen ("Geisterfehler")**
|
|
- **Ursache:** Ein Volume-Mount in `docker-compose.yml` überschreibt die neueren Dateien im Image mit alten, lokalen Dateien. Besonders tückisch, wenn `server.cjs` an die falsche Stelle gemountet wird.
|
|
- **Lösung:**
|
|
1. **Immer `git pull`** auf dem Host ausführen, bevor `docker-compose build` aufgerufen wird.
|
|
2. Mount-Pfade präzise setzen. Wenn das Dockerfile `server.cjs` in `/app/server.cjs` kopiert, muss der Mount genau dorthin zeigen:
|
|
```yaml
|
|
volumes:
|
|
- ./my-app-folder/server.cjs:/app/server.cjs # Korrekt
|
|
- ./my-app-folder/:/app/my-app-folder/ # Falsch
|
|
```
|
|
|
|
---
|
|
## 2. Prompts für die Accountbewertung durch Sprachmodelle
|
|
|
|
Dieser Abschnitt dokumentiert die verschiedenen Prompts, die von den Sprachmodellen für die Accountbewertung und Marketinganalyse verwendet werden. Sie sind chronologisch nach ihrer Anwendung im Analyseprozess geordnet.
|
|
|
|
### 2.1 Robotics Potential Analyse (aus `company-explorer/backend/services/classification.py`)
|
|
|
|
Dieser Prompt wird verwendet, um das Potenzial eines Unternehmens für Roboterautomatisierung basierend auf dem Inhalt der Unternehmenswebsite zu bewerten.
|
|
|
|
**Prompt: `analyze_robotics_potential`**
|
|
|
|
```python
|
|
prompt = f"""
|
|
You are a Senior B2B Market Analyst for 'Roboplanet', a specialized robotics distributor.
|
|
Your task is to analyze the target company based on their website text and create a concise **Dossier**.
|
|
|
|
--- TARGET COMPANY ---
|
|
Name: {company_name}
|
|
Website Content (Excerpt):
|
|
{website_text[:20000]}
|
|
|
|
--- ALLOWED INDUSTRIES (STRICT) ---
|
|
You MUST assign the company to exactly ONE of these industries. If unsure, choose the closest match or "Sonstige".
|
|
{json.dumps(self.allowed_industries, ensure_ascii=False)}
|
|
|
|
--- ANALYSIS PART 1: BUSINESS MODEL ---
|
|
1. Identify the core products/services.
|
|
2. Summarize in 2-3 German sentences: What do they do and for whom? (Target: "business_model")
|
|
|
|
--- ANALYSIS PART 2: INFRASTRUCTURE & POTENTIAL (Chain of Thought) ---
|
|
1. **Infrastructure Scan:** Look for evidence of physical assets like *Factories, Large Warehouses, Production Lines, Campuses, Hospitals*.
|
|
2. **Provider vs. User Check:**
|
|
- Does the company USE this infrastructure (Potential Customer)?
|
|
- Or do they SELL products for it (Competitor/Partner)?
|
|
- *Example:* "Cleaning" -> Do they sell soap (Provider) or do they have a 50,000sqm factory (User)?
|
|
3. **Evidence Extraction:** Extract 1-2 key sentences from the text proving this infrastructure. (Target: "infrastructure_evidence")
|
|
|
|
--- ANALYSIS PART 3: SCORING (0-100) ---
|
|
Based on the identified infrastructure, score the potential for these categories:
|
|
|
|
{category_guidance}
|
|
|
|
--- OUTPUT FORMAT (JSON ONLY) ---
|
|
{{
|
|
"industry": "String (from list)",
|
|
"business_model": "2-3 sentences summary (German)",
|
|
"infrastructure_evidence": "1-2 key sentences proving physical assets (German)",
|
|
"potentials": {{
|
|
"cleaning": {{ "score": 0-100, "reason": "Reasoning based on infrastructure." }},\
|
|
"transport": {{ "score": 0-100, "reason": "Reasoning based on logistics volume." }},\
|
|
"security": {{ "score": 0-100, "reason": "Reasoning based on perimeter/assets." }},\
|
|
"service": {{ "score": 0-100, "reason": "Reasoning based on guest interaction." }}\
|
|
}}\
|
|
}}
|
|
"""
|
|
```
|
|
|
|
**Variablen und deren Inhalt:**
|
|
|
|
1. **`company_name`**:
|
|
* **Beschreibung:** Der Name des zu analysierenden Zielunternehmens.
|
|
* **Inhalt:** Ein String mit dem Firmennamen.
|
|
|
|
2. **`website_text[:20000]`**:
|
|
* **Beschreibung:** Ein Auszug des Website-Inhalts des Zielunternehmens. Er ist auf die ersten 20.000 Zeichen gekürzt, um die Eingabegröße zu steuern.
|
|
* **Inhalt:** Ein String, der einen Teil des Website-Textes des Unternehmens enthält.
|
|
|
|
3. **`json.dumps(self.allowed_industries, ensure_ascii=False)`**:
|
|
* **Beschreibung:** Ein JSON-formatierter String der Liste der erlaubten Branchen. Das Modell wird streng angewiesen, genau eine aus dieser Liste auszuwählen.
|
|
* **Inhalt:** Ein String wie `["Branche A", "Branche B", "Sonstige"]`. Diese Liste wird aus `../data/allowed_industries.json` geladen oder auf `["Sonstige"]` zurückgesetzt.
|
|
|
|
4. **`category_guidance`**:
|
|
* **Beschreibung:** Diese Variable enthält einen dynamisch generierten String von Robotik-Kategoriedefinitionen, einschließlich ihrer Namen, Schlüssel, Beschreibungen und Scoring-Leitfäden. Diese Anleitung wird aus der Datenbank (`RoboticsCategory`-Tabelle) von der Methode `_get_category_prompts` abgerufen.
|
|
* **Inhalt:** Ein mehrzeiliger String, zum Beispiel:
|
|
```
|
|
* **Cleaning (cleaning):**
|
|
- Definition: Companies requiring automated cleaning solutions for large areas.
|
|
- Scoring Guide: High: Factories, Large Warehouses, Hospitals. Low: Small offices.
|
|
* **Transport (transport):**
|
|
- Definition: Companies with significant internal logistics or goods movement.
|
|
- Scoring Guide: High: E-Commerce fulfillment, Production lines, Distribution centers. Low: Pure software companies.
|
|
...
|
|
```
|
|
|
|
### 2.2 B2B Marketing Analyse (aus `b2b_marketing_orchestrator.py`)
|
|
|
|
Diese Prompts werden schrittweise verwendet, um eine umfassende B2B-Marketinganalyse eines Unternehmens durchzuführen, beginnend mit einem System-Prompt und dann aufeinander aufbauenden Schritten.
|
|
|
|
#### System Prompt (für alle Schritte verwendet)
|
|
|
|
**Prompt: `SYSTEM_PROMPT_DE`**
|
|
|
|
```python
|
|
SYSTEM_PROMPT_DE = r"""# Systemrolle
|
|
|
|
Du bist ein **B2B-Marketing-Researcher & Copywriter**. Du analysierst eine Unternehmens-URL, identifizierst Angebot, Zielgruppen, konkrete Zielrollen, deren Painpoints sowie Gains und formulierst darauf basierend eine wertschaetzende, fachkundige Marketingbotschaft. **Antworte nur mit Ergebnissen, keine Gedankengaenge.** Belege jede Aussage mit einer konkreten Seiten-URL der analysierten Domain. Kennzeichne Unsicherheiten explizit. Deine Antwort muss immer in der Zielsprache {{language}} sein.
|
|
|
|
# Arbeitsprinzipien
|
|
|
|
1. **Quellenpriorisierung:** Produktseite -> Loesungsseite -> Branchen/Industrien/Referenzen -> Unternehmens-/Ueber-uns-Seite -> Blog/News (nur zur Verifikation).
|
|
2. **Faktenpolicy:** Nur aus der Domain der bereitgestellten URL ableiten; bei Vermutungen: als *Hypothese* kennzeichnen.
|
|
3. **B2B-Ton:** sachkundig, respektvoll, nicht marktschreierisch.
|
|
4. **Klarheit & Struktur:** Jede Stufe als Markdown-Tabelle + optionales Kurzresuemee dokumentieren.
|
|
5. **Mindestens 4 spezifische Rollen** je Zielgruppe (nicht generisch).
|
|
6. **Kompakt & nuetzlich:** Praezise Formulierungen; keine Floskeln."""
|
|
```
|
|
|
|
**Variablen:**
|
|
|
|
* **`language`**:
|
|
* **Beschreibung:** Die Zielsprache für die Ausgabe der Marketinganalyse.
|
|
* **Inhalt:** Ein String, typischerweise `'de'` für Deutsch oder `'en'` für Englisch.
|
|
|
|
#### Schritt-für-Schritt Prompts
|
|
|
|
Diese Prompts bauen aufeinander auf, wobei `{{previous_steps_data}}` die Ergebnisse der vorherigen Schritte enthält.
|
|
|
|
**1. Prompt: `Schritt 1 - Angebot verstehen (WAS)`**
|
|
|
|
```python
|
|
r"""# Aufgabe
|
|
Fuehre **Schritt 1 - Angebot verstehen (WAS)** fuer das folgende Unternehmen durch.
|
|
|
|
# Eingaben
|
|
* **Unternehmens-URL:** `{{company_url}}`
|
|
* **Zielsprache der Ausgabe:** `{{language}}`
|
|
* **Region(en) / Maerkte (optional):** `{{regions}}`
|
|
* **Produkt-/Loesungsfokus (optional):** `{{focus}}`
|
|
|
|
# Anweisungen fuer Schritt 1
|
|
* Extrahiere Produkt(e)/Leistung(en), Kernfunktionen, Differenzierung, relevante Werteversprechen.
|
|
* Erstelle ein kurzes Resuemee (max. 4 Bulletpoints) der wichtigsten Erkenntnisse.
|
|
* **Output:** Tabelle mit Spalten: *Produkt/Loesung | Beschreibung (1-2 Saetze) | Kernfunktionen | Differenzierung | Primaere Quelle (URL)*.
|
|
* **Format-Anforderung:** Antworte NUR mit den Ergebnissen fuer diesen einen Schritt. Deine Antwort muss mit der Ueberschrift \"## Schritt 1: Angebot (WAS)\" beginnen und das Kurzresuemee sowie die Markdown-Tabelle enthalten. Gib keine weiteren Erklaerungen ab."""
|
|
```
|
|
|
|
**Variablen:**
|
|
|
|
* **`company_url`**:
|
|
* **Beschreibung:** Die Haupt-URL des zu analysierenden Unternehmens.
|
|
* **Inhalt:** Ein String, der die Website-URL des Unternehmens enthält.
|
|
* **`language`**:
|
|
* **Beschreibung:** Die Zielsprache für die Ausgabe.
|
|
* **Inhalt:** `'de'` oder `'en'`.
|
|
* **`regions`**:
|
|
* **Beschreibung:** Optional. Die spezifischen geografischen Regionen oder Märkte, die für das Unternehmen relevant sind.
|
|
* **Inhalt:** Ein String (z.B. `'Europa, Nordamerika'`) oder `'N/A'`.
|
|
* **`focus`**:
|
|
* **Beschreibung:** Optional. Ein spezifischer Produkt- oder Lösungsfokus für die Analyse.
|
|
* **Inhalt:** Ein String (z.B. `'CRM Software'`) oder `'N/A'`.
|
|
* **`grounding_text`**:
|
|
* **Beschreibung:** Der vereinfachte HTML-Inhalt, der von der Hauptseite und relevanten Unterseiten des Unternehmens gescrapt wurde, mit `SOURCE_URL`-Markern. Dieser Inhalt wird intern vor dem Prompt an das LLM übergeben.
|
|
* **Inhalt:** Ein mehrzeiliger String, der HTML-Auszüge enthält.
|
|
|
|
**2. Prompt: `Schritt 2 - Zielgruppen (WER - Unternehmen)`**
|
|
|
|
```python
|
|
r"""# Aufgabe
|
|
Fuehre nun **Schritt 2 - Zielgruppen (WER - Unternehmen)** durch.
|
|
|
|
# Kontext: Validierte Ergebnisse aus vorherigen Schritten
|
|
{{previous_steps_data}}
|
|
|
|
# Anweisungen fuer Schritt 2
|
|
* Identifiziere B2B-Zielsegmente (Branchen/Unternehmensarten/Groessen/Regionen) basierend auf dem gegebenen Angebot.
|
|
* **Output:** Tabelle: *Zielbranche/Segment | Typische Unternehmensmerkmale | Region(en) | Relevanzbeleg (URL)*.
|
|
* **Format-Anforderung:** Antworte NUR mit den Ergebnissen fuer diesen einen Schritt. Deine Antwort muss mit der Ueberschrift \"## Schritt 2: Zielgruppen (Unternehmen)\" beginnen und die Markdown-Tabelle enthalten."""
|
|
```
|
|
|
|
**Variablen:**
|
|
|
|
* **`previous_steps_data`**:
|
|
* **Beschreibung:** Die formatierte Markdown-Ausgabe von `Schritt 1: Angebot (WAS)`.
|
|
* **Inhalt:** Ein mehrzeiliger Markdown-String, der die Zusammenfassung und Tabelle aus dem vorherigen Schritt enthält.
|
|
|
|
**3. Prompt: `Schritt 3 - Zielpersonen/Rollen (WER - Personen)`**
|
|
|
|
```python
|
|
r"""# Aufgabe
|
|
Fuehre nun **Schritt 3 - Zielpersonen/Rollen (WER - Personen)** durch.
|
|
|
|
# Kontext: Validierte Ergebnisse aus vorherigen Schritten
|
|
{{previous_steps_data}}
|
|
|
|
# Anweisungen fuer Schritt 3
|
|
* Fuer jede Zielbranche: mind. 4 **spezifische** Rollen mit Verantwortungsbereich und Kaufbeteiligung (E, I, D, U nach RACI-Logik). Erfinde **keine** Personen; leite Rollen logisch aus Problem-/Prozessbezug ab.
|
|
* **Output:** Tabelle: *Rolle (praezise) | Verantwortungsbereich | Warum relevant fuer Produkt | Kaufbeteiligung (E/I/D/U) | Quelle/Indiz (URL oder Referenz)*.
|
|
* **Format-Anforderung:** Antworte NUR mit den Ergebnissen fuer diesen einen Schritt. Deine Antwort muss mit der Ueberschrift \"## Schritt 3: Zielpersonen (Rollen)\" beginnen."""
|
|
```
|
|
|
|
**Variablen:**
|
|
|
|
* **`previous_steps_data`**:
|
|
* **Beschreibung:** Die formatierte Markdown-Ausgabe von `Schritt 1` und `Schritt 2`.
|
|
* **Inhalt:** Ein mehrzeiliger Markdown-String.
|
|
|
|
**4. Prompt: `Schritt 4 - Painpoints je Rolle (WARUM)`**
|
|
|
|
```python
|
|
r"""# Aufgabe
|
|
Fuehre nun **Schritt 4 - Painpoints je Rolle (WARUM)** durch.
|
|
|
|
# Kontext: Validierte Ergebnisse aus vorherigen Schritten
|
|
{{previous_steps_data}}
|
|
|
|
# Anweisungen fuer Schritt 4
|
|
* Formuliere pro Rolle 3-5 konkrete Painpoints (Beobachtungen, keine Features).
|
|
* Tagge jeden Painpoint mit einer Kategorie: **Kosten | Zeit | Risiko | Compliance | Qualitaet | Mitarbeiterbindung.**
|
|
* Fuege eine **Impact-Schaetzung (EUR, h, %)** als Hypothese hinzu.
|
|
* **Output:** Tabelle: *Rolle | Painpoint (konkret, messbar/operativ) | Kategorie | Auswirkung (Kosten, Risiko, Zeit) | Impact-Schaetzung (EUR, h, %) | Dringlichkeit (hoch/mittel/niedrig) | Quelle/Indiz (URL)*.
|
|
* **Format-Anforderung:** Antworte NUR mit den Ergebnissen fuer diesen einen Schritt. Deine Antwort muss mit der Ueberschrift \"## Schritt 4: Painpoints je Rolle\" beginnen."""
|
|
```
|
|
|
|
**Variablen:**
|
|
|
|
* **`previous_steps_data`**:
|
|
* **Beschreibung:** Die formatierte Markdown-Ausgabe von `Schritt 1` bis `Schritt 3`.
|
|
* **Inhalt:** Ein mehrzeiliger Markdown-String.
|
|
|
|
**5. Prompt: `Schritt 5 - Gains & Nutzen je Rolle (WARUM wechseln)`**
|
|
|
|
```python
|
|
r"""# Aufgabe
|
|
Fuehre nun **Schritt 5 - Gains & Nutzen je Rolle (WARUM wechseln)** durch.
|
|
|
|
# Kontext: Validierte Ergebnisse aus vorherigen Schritten
|
|
{{previous_steps_data}}
|
|
|
|
# Anweisungen fuer Schritt 5
|
|
* Basierend auf den identifizierten Painpoints, formuliere pro Rolle 2-3 konkrete Gains (Vorteile/Nutzen).
|
|
* Quantifiziere den Nutzen als Hypothese (z.B. Einsparung in EUR, Zeitgewinn in h, Effizienzsteigerung in %).
|
|
* **Output:** Tabelle: *Rolle | Gain (konkreter Nutzen) | Quantifizierung (Hypothese in EUR, h, %) | Quelle/Indiz (URL)*.
|
|
* **Format-Anforderung:** Antworte NUR mit den Ergebnissen fuer diesen einen Schritt. Deine Antwort muss mit der Ueberschrift \"## Schritt 5: Gains & Nutzen je Rolle\" beginnen."""
|
|
```
|
|
|
|
**Variablen:**
|
|
|
|
* **`previous_steps_data`**:
|
|
* **Beschreibung:** Die formatierte Markdown-Ausgabe von `Schritt 1` bis `Schritt 4`.
|
|
* **Inhalt:** Ein mehrzeiliger Markdown-String.
|
|
|
|
**6. Prompt: `Schritt 6 - Marketingbotschaft (WIE sprechen)`**
|
|
|
|
```python
|
|
r"""# Aufgabe
|
|
Fuehre nun **Schritt 6 - Marketingbotschaft (WIE sprechen)** durch.
|
|
|
|
# Kontext: Validierte Ergebnisse aus vorherigen Schritten
|
|
{{previous_steps_data}}
|
|
|
|
# Eingaben fuer diesen Schritt
|
|
* **Gewuenschte Kanaele fuer die Botschaft:** `{{channels}}`
|
|
|
|
# Anweisungen fuer Schritt 6: Chain-of-Thought-Analyse & Texterstellung
|
|
|
|
**FOKUS:** Erstelle die Botschaften **AUSSCHLIESSLICH** fuer die vorgegebene **Fokus-Branche: {{focus_industry}}**.
|
|
Ignoriere alle anderen Branchen. Dein Ziel ist es, fuer JEDE Rolle innerhalb dieser EINEN Branche eine spezifische Botschaft zu entwickeln.
|
|
|
|
Fuehre fuer jede **[Rolle]** innerhalb der **[Fokus-Branche: {{focus_industry}}]** den folgenden Denkprozess durch:
|
|
|
|
1. **Schritt 6.1 (Analyse): Produkt-Rollen-Fit.**
|
|
* Welches Produkt/welche Loesung aus der "Angebot"-Tabelle (Schritt 1) ist fuer die **[Rolle]** am relevantesten?
|
|
|
|
2. **Schritt 6.2 (Analyse): Branchen-Use-Case.**
|
|
* Was sind 1-2 typische Anwendungsfaelle fuer das ausgewaehlte Produkt in der **{{focus_industry}}**? Was macht die **[Rolle]** damit konkret?
|
|
|
|
3. **Schritt 6.3 (Analyse): Nutzen-Quantifizierung.**
|
|
* Betrachte die Painpoints (Schritt 4) und Gains (Schritt 5) fuer die **[Rolle]**.\
|
|
* Leite daraus einen konkreten, fuer die **[Rolle]** relevanten KPI ab.
|
|
|
|
4. **Schritt 6.4 (Synthese): Botschaft formulieren.**
|
|
* Synthetisiere die Erkenntnisse aus 6.1-6.3 zu einer praegnanten Kernbotschaft (2-3 Saetze) nach der Struktur: **Beobachtung (Problem) -> Niedrigschwellige Loesungsidee -> Produkt-Bruecke -> Quantifizierter Nutzen.**
|
|
* Erstelle Varianten dieser Botschaft fuer die Kanaele: {{channels}}.
|
|
|
|
# Output Format
|
|
Erstelle ONLY die finale Markdown-Tabelle.
|
|
* **Table Columns:** *Fokus-Branche | Rolle | Kernbotschaft (2-3 sentences) | {{channels}}*.
|
|
* **Requirement:** Your response must start with the heading \"## Schritt 6: Botschaften\" and contain ONLY die vollstaendige Markdown-Tabelle."""
|
|
```
|
|
|
|
**Variablen:**
|
|
|
|
* **`previous_steps_data`**:
|
|
* **Beschreibung:** Die formatierte Markdown-Ausgabe von `Schritt 1` bis `Schritt 5`.
|
|
* **Inhalt:** Ein mehrzeiliger Markdown-String.
|
|
* **`channels`**:
|
|
* **Beschreibung:** Die gewünschten Marketingkanäle, für die Nachrichtenvarianten erstellt werden sollen.
|
|
* **Inhalt:** Ein String (z.B. `'LinkedIn, Kaltmail, Landingpage'`).
|
|
* **`focus_industry`**:
|
|
* **Beschreibung:** Die spezifische Branche, auf die sich die Nachrichtenerstellung in diesem Schritt konzentrieren soll.
|
|
* **Inhalt:** Ein String, der den Namen der Fokusbranche enthält.
|
|
|
|
**7. Prompt: `Schritt 7 - Customer Journey & Buying Center`**
|
|
|
|
```python
|
|
r"""# Aufgabe
|
|
Fuehre **Schritt 7 - Customer Journey & Buying Center** durch.
|
|
|
|
# Kontext: Validierte Ergebnisse aus vorherigen Schritten
|
|
{{previous_steps_data}}
|
|
|
|
# Fokus
|
|
Beziehe dich auf die **Fokus-Branche: {{focus_industry}}**.
|
|
|
|
# Anweisungen fuer Schritt 7
|
|
* Analysiere die Kaufreise ("Journey") vom ersten Trigger bis zum Vertrag.
|
|
* Identifiziere fuer jede Phase die **Dynamik im Buying Center**: Wer treibt an (Champion), wer bremst oder prueft (Gatekeeper/Evaluator), wer entscheidet (Decider)?
|
|
* Gehe besonders auf **technische und organisatorische Barrieren** ein (z.B. IT-Sicherheit, Schnittstellen wie Aufzugssteuerung, Prozessintegration).
|
|
* Definiere **konkrete Assets**, die die jeweilige Rolle in dieser Phase benoetigt, um Einwaende zu entkraeften oder interne Mitstreiter zu ueberzeugen (z.B. "API-Dokumentation fuer Aufzugsbauer", "ROI-Rechner fuer CFO", "Sicherheits-Whitepaper").
|
|
* **Output:** Erstelle eine Markdown-Tabelle mit exakt diesen Spalten: *Phase | Rolle | Funktion (Buying Center) | Zentrale Frage / Beduerfnis | Moeglicher Deal-Breaker | Benoetigtes Asset / Format*.
|
|
* **Format-Anforderung:** Antworte NUR mit den Ergebnissen fuer diesen einen Schritt. Deine Antwort muss mit der Ueberschrift \"## Schritt 7: Customer Journey\" beginnen."""
|
|
```
|
|
|
|
**Variablen:**
|
|
|
|
* **`previous_steps_data`**:
|
|
* **Beschreibung:** Die formatierte Markdown-Ausgabe von `Schritt 1` bis `Schritt 6`.
|
|
* **Inhalt:** Ein mehrzeiliger Markdown-String.
|
|
* **`focus_industry`**:
|
|
* **Beschreibung:** Die spezifische Branche, auf die sich die Analyse der Customer Journey konzentrieren soll.
|
|
* **Inhalt:** Ein String, der den Namen der Fokusbranche enthält.
|
|
|
|
---
|
|
*Dokumentation wiederhergestellt und erweitert am 15.01.2026.* |