Final Pitch Generation - The Elegance Update
- REFACTOR: Der FSM-Pitch-Prompt wurde final überarbeitet, um der KI maximale stilistische Freiheit für eine elegante, partnerschaftliche Tonalität zu geben. - FIX: Die "FEHLER_DATEN"-Regel wurde entfernt, um sicherzustellen, dass für jedes Unternehmen ein Pitch generiert wird, auch bei dünnerer Datenlage. - Die generierten Pitches sind nun optimal für die direkte Verwendung in der Marketing-Automation, mit einer hohen Erfolgsquote und exzellenter Tonalität.
This commit is contained in:
55
helpers.py
55
helpers.py
@@ -1031,8 +1031,8 @@ def generate_fsm_pitch(
|
||||
techniker_bucket_ml,
|
||||
):
|
||||
"""
|
||||
Generiert einen FSM-Pitch basierend auf dem finalen Master-Prompt (v2.3.3).
|
||||
Liefert einen strategischen, positiv formulierten Satz für die E-Mail-Ansprache.
|
||||
Generiert einen FSM-Pitch mit maximaler stilistischer Qualität und einer hohen
|
||||
Erfolgsquote, basierend auf dem finalen Master-Prompt (v2.3.4).
|
||||
"""
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -1041,7 +1041,7 @@ def generate_fsm_pitch(
|
||||
if website_summary and '**GESCHÄFTSMODELL**' in website_summary:
|
||||
try:
|
||||
summary_text = website_summary.split('Zusammenfassung:')[1].split('**FSM-POTENZIAL**')[0].strip()
|
||||
if summary_text: parts.append(f"Zusammenfassung der Website: {summary_text}")
|
||||
if summary_text: parts.append(f"Website-Zusammenfassung: {summary_text}")
|
||||
except IndexError: pass
|
||||
elif website_summary and 'k.a.' not in website_summary.lower():
|
||||
parts.append(f"Zusammenfassung der Website: {website_summary}")
|
||||
@@ -1052,10 +1052,9 @@ def generate_fsm_pitch(
|
||||
combined = "\n".join(parts)
|
||||
if not combined: return "FEHLER (Mangelnde Daten)"
|
||||
|
||||
# 2. Namenswahl
|
||||
# 2. Namenswahl & 3. Personalinfo
|
||||
display_name = company_short_name if company_short_name and company_short_name.lower() != 'k.a.' else company_name
|
||||
|
||||
# 3. VERBESSERTE Personalinfo-Generierung
|
||||
personal_info = ""
|
||||
try:
|
||||
tech_val = int(anzahl_techniker or 0)
|
||||
@@ -1070,45 +1069,43 @@ def generate_fsm_pitch(
|
||||
personal_info = f"Ihrem Unternehmen mit über {int(round(ma_val, -2))} Mitarbeitern"
|
||||
except (ValueError, TypeError): pass
|
||||
|
||||
# 4. Der finale, polierte MASTER-PROMPT
|
||||
# 4. Der finale, eleganteste Prompt
|
||||
prompt_parts = [
|
||||
"Du bist ein exzellenter B2B-Stratege und Texter. Deine Aufgabe ist es, für ein Unternehmen einen hochpersonalisierten, scharfsinnigen und wertschätzenden Einleitungssatz für eine E-Mail zu formulieren.",
|
||||
"Aufgabe:",
|
||||
"Formuliere EINEN EINZIGEN, flüssig lesbaren Satz (ca. 20–35 Wörter), der eine operative Kernkompetenz des Unternehmens beobachtet und deren Wichtigkeit für den Geschäftserfolg hervorhebt.",
|
||||
"Du bist ein exzellenter B2B-Stratege und Texter mit einem tiefen Verständnis für operative Prozesse im Außendienst. Deine Aufgabe ist es, einen hochpersonalisierten, scharfsinnigen und wertschätzenden Einleitungssatz für eine E-Mail an ein potenzielles Kundenunternehmen zu formulieren.",
|
||||
"",
|
||||
"--- Tonalität & Stil (SEHR WICHTIG) ---",
|
||||
"• Absolut NICHT werblich, sondern partnerschaftlich und beobachtend.",
|
||||
"• Beginne den Satz entweder mit 'Angesichts Ihrer Spezialisierung auf...' oder 'Für ein Unternehmen wie [Kurzname], das...'.",
|
||||
"• Der Satz muss eine positive operative Herausforderung implizieren (z.B. 'ist die Effizienz entscheidend' statt 'ist Ineffizienz ein Problem').",
|
||||
"• Verwende IMMER den bereitgestellten 'Kurznamen', niemals die volle Firmierung.",
|
||||
"--- Denkprozess & Stilvorgaben ---",
|
||||
"1. **Analysiere den Kontext:** Verstehe das Kerngeschäft des Unternehmens aus der Beschreibung. Was ist die spezifischste, physische Service-Tätigkeit, die ihre mobilen Teams durchführen? (z.B. 'Installation von Solaranlagen', 'Wartung von BHKWs', 'Reparatur von Druckmaschinen').",
|
||||
"2. **Identifiziere den Hebel:** Was ist der entscheidende Erfolgsfaktor für diese Tätigkeit? (z.B. 'reibungslose Planung', 'effiziente Koordination', 'schnelle Reaktionszeiten').",
|
||||
"3. **Formuliere den Satz (ca. 20-35 Wörter):**",
|
||||
" - Wähle einen eleganten, aktiven Einstieg wie 'Speziell im Bereich...' oder 'Die reibungslose Koordination...'. Vermeide starre Floskeln.",
|
||||
" - Verbinde die **spezifische Tätigkeit** mit dem **Hebel** und den **geschäftlichen Konsequenzen** (z.B. 'Kundenzufriedenheit', 'Anlagenverfügbarkeit', 'Projekterfolg').",
|
||||
" - Integriere die Personalinfo, wenn sie spezifisch und aussagekräftig ist.",
|
||||
" - **WICHTIG:** Formuliere immer als positive Beobachtung über eine Kernkompetenz. Du implizierst die Herausforderung durch die Betonung der Wichtigkeit der Lösung.",
|
||||
" - Verwende IMMER den bereitgestellten 'Kurznamen'.",
|
||||
"",
|
||||
"--- Denkprozess (Schritt für Schritt) ---",
|
||||
"1. Analysiere die Beschreibung, um die **spezifischste Service-Tätigkeit** zu finden (z.B. 'Installation von Glasfaseranschlüssen', 'Wartung von Produktionsanlagen').",
|
||||
"2. Formuliere den Satz, der diese Tätigkeit mit der Personalinfo und einer positiven geschäftlichen Konsequenz (z.B. 'entscheidend für die Kundenzufriedenheit', 'der Schlüssel zum Projekterfolg') verbindet.",
|
||||
"--- Exzellente Beispiele für die Zielsprache ---",
|
||||
"• Beispiel 1: Für ein Unternehmen wie 2G Energy, das bei über 8.500 installierten Modulen weltweit den Service sicherstellt, ist die effiziente Koordination ihrer 200 Servicetechniker entscheidend für die maximale Anlagenverfügbarkeit.",
|
||||
"• Beispiel 2: Speziell im Bereich der schnellen und effizienten Installation von integrierten Energielösungen ist für 1KOMMA5° die reibungslose Planung ihres wachsenden Serviceteams der Schlüssel zur Sicherstellung der Kundenzufriedenheit.",
|
||||
"• Beispiel 3: Die präzise Projektplanung und -umsetzung ist besonders für einen Hersteller von Highend-Produktionsanlagen wie 3CON entscheidend, um den hohen Qualitätsansprüchen anspruchsvoller Industriekunden gerecht zu werden.",
|
||||
"",
|
||||
"--- Exzellente Beispiele für den Zielsatz ---",
|
||||
"Beispiel 1: Für ein Unternehmen wie 2G Energy, das bei über 8.500 installierten Modulen weltweit den Service sicherstellt, ist die effiziente Koordination Ihrer 200 Servicetechniker entscheidend für die maximale Anlagenverfügbarkeit.",
|
||||
"Beispiel 2: Angesichts der Spezialisierung von 1KOMMA5° auf die schnelle und effiziente Installation von integrierten Energielösungen ist die reibungslose Planung Ihres wachsenden Serviceteams der Schlüssel zur Sicherstellung der Kundenzufriedenheit.",
|
||||
"",
|
||||
"--- Selbstkritik ---",
|
||||
"Wenn die Beschreibung keine konkrete Service-Tätigkeit erkennen lässt (z.B. reiner Handel, Online-Portal), antworte NUR mit: FEHLER_DATEN",
|
||||
"--- Wichtige Regel ---",
|
||||
"**Generiere IMMER einen Satz.** Wenn die Daten unspezifisch sind, formuliere einen etwas allgemeineren, aber immer noch relevanten Satz über die 'Effizienz des Service-Teams bei der Betreuung von Kundenprojekten'.",
|
||||
"",
|
||||
"--- Unternehmenskontext für deine Aufgabe ---",
|
||||
f"Kurzname des Unternehmens: {display_name}",
|
||||
f"Branche: {ki_branche}",
|
||||
f"Beschreibung:\n{combined}",
|
||||
f"Personalinfo für den Satz: {personal_info if personal_info else 'Keine Angabe'}",
|
||||
"",
|
||||
"--- Deine Ausgabe ---",
|
||||
"Gib NUR den finalen, perfekt formulierten Satz aus ODER das Wort 'FEHLER_DATEN'.",
|
||||
"Gib NUR den finalen, perfekt formulierten Satz aus.",
|
||||
]
|
||||
prompt = "\n".join(prompt_parts)
|
||||
|
||||
try:
|
||||
fsm_pitch = call_openai_chat(prompt, temperature=0.6, model="gpt-4o")
|
||||
if not fsm_pitch or "FEHLER_DATEN" in fsm_pitch:
|
||||
logger.warning(f"KI konnte keinen validen FSM-Pitch für {company_name} generieren (Grund: Mangelnde/unspezifische Daten).")
|
||||
return "FEHLER (Mangelnde Daten)"
|
||||
fsm_pitch = call_openai_chat(prompt, temperature=0.7, model="gpt-4o")
|
||||
if not fsm_pitch or len(fsm_pitch.split()) < 7:
|
||||
logger.warning(f"KI konnte keinen validen FSM-Pitch für {company_name} generieren (Antwort zu kurz).")
|
||||
return "FEHLER (KI-Antwort unzureichend)"
|
||||
return fsm_pitch.strip().replace('"', '')
|
||||
except Exception as e:
|
||||
logger.error(f"Fehler bei der Generierung des FSM-Pitches für {company_name}: {e}")
|
||||
|
||||
Reference in New Issue
Block a user