Files
Brancheneinstufung2/market_intel_backend_plan.md
Floke 461d9d3bbc feat(market-intel): implement role-based campaign engine and gritty reporting
- Implementierung der rollenbasierten Campaign-Engine mit operativem Fokus (Grit).
- Integration von Social Proof (Referenzkunden) in die E-Mail-Generierung.
- Erweiterung des Deep Tech Audits um gezielte Wettbewerber-Recherche (Technographic Search).
- Fix des Lösch-Bugs in der Target-Liste und Optimierung des Frontend-States.
- Erweiterung des Markdown-Exports um transparente Proof-Links und Evidenz.
- Aktualisierung der Dokumentation in readme.md und market_intel_backend_plan.md.
2025-12-22 15:54:06 +00:00

133 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Plan: Umsetzung des "General Market Intelligence" Backends als Python-Service
Dieses Dokument beschreibt den Plan zur Umsetzung der Backend-Logik für die React-Anwendung unter `/general-market-intelligence` als robusten, faktenbasierten Python-Service. Dieser Ansatz ersetzt die ursprüngliche Idee einer n8n-Migration.
## 1. Zielsetzung & Architektur-Entscheidung
Das primäre Ziel ist die Schaffung eines **transparenten, kontrollierbaren und faktenbasierten Backend-Prozesses**. Die ursprüngliche Implementierung der React-App zeigte Schwankungen in der Ergebnisqualität und mangelnde Nachvollziehbarkeit, da die KI-Aufrufe nicht auf verifizierbaren Daten basierten ("Grounding").
Nach einer Analyse wurde entschieden, von einer n8n-basierten Lösung Abstand zu nehmen und stattdessen einen **dedizierten Python-Service** zu entwickeln.
**Gründe für Python statt n8n:**
- **Maximale Kontrolle & Transparenz:** Ein Python-Skript ermöglicht detailliertes Logging, schrittweises Debugging und die volle Kontrolle über jeden Aspekt der Logik von Web-Scraping bis zu den API-Aufrufen. Dies ist entscheidend, um die Ergebnisqualität sicherzustellen.
- **Nahtlose Projekt-Integration:** Das Python-Skript fügt sich perfekt in die bestehende, Python-basierte Projektstruktur ein und kann auf geteilte Module (`config.py`, `helpers.py`) zugreifen.
- **Robuste Fehlerbehandlung:** Komplexe Fehler- und Wiederholungslogiken lassen sich in Python präziser und robuster implementieren als in einer visuellen Workflow-Engine.
- **Vermeidung von Plattform-Limitierungen:** Wir umgehen technische Hürden wie die eingeschränkte REST-API der selbstgehosteten n8n-Version.
## 2. Architektur: React-Frontend mit Python-Backend
Die Architektur besteht aus drei Kernkomponenten, die in einem Docker-Container gekapselt werden:
1. **React-Frontend (unverändert):** Die bestehende Anwendung in `/general-market-intelligence` bleibt die interaktive Benutzeroberfläche.
2. **Node.js API-Brücke (`server.js`):** Ein minimaler Express.js-Server, der im selben Verzeichnis wie die React-App läuft. Seine einzige Aufgabe ist es, HTTP-Anfragen vom Frontend entgegenzunehmen und sie sicher an das Python-Skript weiterzuleiten.
3. **Python-Orchestrator (`market_intel_orchestrator.py`):** Das Herzstück der Logik. Dieses Kommandozeilen-Skript ist zuständig für:
- Web-Scraping zur Gewinnung von Rohdaten ("Ground Truth").
- Text-Extraktion und -Bereinigung.
- Gezielte und "geerdete" Aufrufe an die Gemini-API.
- Rückgabe der strukturierten Ergebnisse als JSON über die Konsole (stdout).
**Deployment:** Der gesamte Backend-Service (Node.js-Brücke und Python-Skript) wird in einem **Docker-Container** verpackt, um eine konsistente, "immer online" verfügbare Umgebung zu schaffen.
## 3. Kernfunktionen als Python-Module
Die Logik aus `geminiService.ts` wird in Python-Funktionen innerhalb von `market_intel_orchestrator.py` nachgebildet, wobei der Fokus auf Faktenbasiertheit liegt.
---
### Funktion 1: `generate_search_strategy`
- **Trigger:** Aufruf durch die Node.js-Brücke mit `--mode generate_strategy`.
- **Input:** `reference_url` und `context_content` (Strategie-Dokument).
- **Prozess:**
1. **Scraping (Grounding):** Lädt den HTML-Inhalt der `reference_url`.
2. **Text-Extraktion:** Bereinigt das HTML zu sauberem Text.
3. **KI-Analyse:** Ruft die Gemini-API mit einem Prompt auf, der explizit anweist, die digitalen Signale aus dem **bereitgestellten Website-Text** und dem Strategie-Kontext abzuleiten.
- **Output:** Gibt das `SearchStrategy`-JSON auf der Konsole aus.
---
### Funktion 2: `identify_competitors`
- **Trigger:** Aufruf mit `--mode identify_competitors`.
- **Input:** `reference_url` und `target_market`.
- **Prozess:**
1. Ruft die Gemini-API mit einem Google-Search-Tool auf, um ähnliche Unternehmen zu finden.
- **Output:** Gibt eine JSON-Liste der gefundenen Unternehmen aus.
---
### Funktion 3: `run_full_analysis`
- **Trigger:** Aufruf mit `--mode run_analysis`.
- **Input:** Eine Liste von Unternehmensnamen und die zuvor generierte Suchstrategie.
- **Prozess:**
1. Iteriert über die Unternehmensliste.
2. **Für jedes Unternehmen:**
- Sucht die offizielle Website (z.B. über SerpAPI).
- Scrapt die relevanten Seiten basierend auf den `targetPageKeywords` der digitalen Signale.
- Ruft die Gemini-API auf, um die Signale basierend auf dem **gescrapten Inhalt** zu bewerten.
- **Output:** Gibt eine Liste von `AnalysisResult`-Objekten aus.
---
### Funktion 4: `generate_outreach_campaign`
- **Trigger:** Aufruf mit `--mode generate_outreach`.
- **Input:** `company_data` (ein `AnalysisResult`-Objekt), `knowledge_base` (Strategie-Dokument) und `reference_url`.
- **Prozess:**
1. Baut den Prompt für die Erstellung der E-Mail-Kampagne, wobei die **faktenbasierten `dynamicAnalysis`-Ergebnisse** als Kern der Personalisierung dienen.
2. Ruft die Gemini-API auf.
- **Output:** Gibt die `EmailDraft`-Objekte als JSON-Array aus.
## 4. Nächste Schritte (für die nächste Sitzung)
1. Die neuesten Code-Änderungen pullen (`git pull`).
2. Das Docker-Image neu bauen, um die Korrektur zu übernehmen: `docker build -t market-intel-backend .`
3. Den alten Container stoppen/entfernen und den neuen starten: `docker run -p 3001:3001 --name market-intel-backend-instance market-intel-backend`
4. Den React-Dev-Server starten und den End-to-End-Test erneut durchführen.
## 5. Aktueller Status und Debugging-Protokoll (Stand: 2025-12-21 - Abschluss der Sitzung)
### Status: End-to-End System voll funktionsfähig, Grounded & UX-optimiert!
Wir haben heute das gesamte System von einer instabilen n8n-Abhängigkeit zu einem robusten, autarken Python-Service transformiert.
**Wichtigste Errungenschaften:**
- **Präzises Lookalike-Sourcing:** Die Konkurrenten-Identifikation wurde von einer reinen Branchensuche auf eine **ICP-basierte Lookalike-Suche** umgestellt. Die Ergebnisse sind nun hochrelevant und thematisch am Referenzkunden ausgerichtet.
- **Deep Tech Audit mit Beweisführung:** Der Audit-Prozess (Schritt 3) nutzt nun eine kaskadierende Suchstrategie (Homepage-Scrape + gezielte SerpAPI-Suchen). Die KI zitiert konkrete Beweise (z.B. aus Stellenanzeigen) und liefert verifizierbare Links ("Proof").
- **Echtes Terminal-Feedback:** Die UI zeigt nun während des Audits einen **echten Live-Log** des Agenten an (Searching, Scraping, Analyzing), was die Wartezeit transparent macht.
- **Robustes Logging:** Umstellung auf **Tages-Logdateien** (z.B. `2025-12-21_market_intel.log`), die im `/app/Log` Verzeichnis (via Docker Volume) gespeichert werden und den vollständigen Verlauf inkl. Prompts enthalten.
- **Optimierte Infrastruktur:** Schlankes Docker-Image mit Bind Mounts ermöglicht **Hot-Reloading** des Python-Codes und direkten Zugriff auf Logs und Keys (`serpapikey.txt`, `gemini_api_key.txt`).
**Gelöste Probleme heute:**
- **Abhängigkeits-Chaos:** Vollständige Entkopplung von `helpers.py` und `config.py` im Backend-Orchestrator.
- **API-Endpunkt Fehler:** Behebung aller `v1beta` 404 Fehler durch Umstieg auf direkte REST-Calls (Gemini v1).
- **Frontend-Abstürze:** Absicherung des Reports gegen fehlende Datenpunkte.
---
## 6. Status Update (2025-12-22) - Campaign Engine & Reporting
### Erreichte Meilensteine:
1. **Rollenbasierte Campaign-Engine:**
* Die Funktion `generate_outreach_campaign` wurde komplett überarbeitet.
* Sie nutzt nun die volle Tiefe der Knowledge Base (`yamaichi_neu.md`), um **personalisierte Sequenzen für spezifische Rollen** (z.B. "Hardware-Entwickler" vs. "Einkäufer") zu erstellen.
* Die Ansprache erfolgt strikt im "Partner auf Augenhöhe"-Tonfall.
* **Social Proof Integration:** Der Absender (`reference_url`) wird als Beweis der Kompetenz inkl. passender KPIs im Abbinder integriert.
* **"Grit"-Prompting:** Der Prompt wurde massiv geschärft, um operative Schmerzpunkte ("ASNs", "Bandstillstand") statt Marketing-Bla-Bla zu nutzen.
2. **Report Polishing (Frontend):**
* Der Markdown-Export (`StepReport.tsx`) wurde erweitert.
* Er enthält nun die **"Proof-Links"** (Beweise/URLs) direkt in den Tabellenzellen, sauber formatiert. Damit ist die Herleitung der Ergebnisse (z.B. "Warum nutzt der Kunde Ariba?") auch im Export transparent nachvollziehbar.
3. **Frontend UX & Bugfixes:**
* **Kein doppelter Upload:** `StepOutreach.tsx` wurde angepasst, um den Strategie-Kontext aus Schritt 1 direkt zu übernehmen.
* **Lösch-Bug:** `StepReview.tsx` wurde korrigiert, sodass gelöschte Unternehmen sofort aus der UI verschwinden.
* **Crash-Fix:** Die Behandlung der API-Antwort in `geminiService.ts` wurde gehärtet, um die neue verschachtelte Antwortstruktur der Campaign-Engine korrekt zu verarbeiten.
### Nächste Schritte:
* **Stabilitäts-Test:** Ausführung eines Batch-Audits mit >20 Firmen, um Rate-Limits und Fehlerbehandlung unter Last zu prüfen.