Strategic Observation Pitch (Final)
- REFACTOR: Der FSM-Pitch-Prompt wurde final optimiert. Er kombiniert nun die strategische "Pain Point"-Analyse mit einer positiven, beobachtenden Tonalität für die E-Mail-Ansprache. - Die KI fokussiert sich auf die Implikationen von Service-Prozessen (z.B. Uptime, Qualität), ohne das Unternehmen direkt zu kritisieren. - Dies stellt den finalen, qualitativ hochwertigsten Stand für die automatische Pitch-Generierung dar.
This commit is contained in:
43
helpers.py
43
helpers.py
@@ -1031,8 +1031,8 @@ def generate_fsm_pitch(
|
||||
techniker_bucket_ml,
|
||||
):
|
||||
"""
|
||||
Generiert einen maßgeschneiderten, positiv formulierten Satz, der eine operative
|
||||
Service-Herausforderung impliziert und für die Kundenansprache geeignet ist (v2.2.6).
|
||||
Generiert einen maßgeschneiderten, strategischen Satz, der eine operative
|
||||
Herausforderung impliziert und für die E-Mail-Ansprache geeignet ist (v2.2.7).
|
||||
"""
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -1043,8 +1043,7 @@ def generate_fsm_pitch(
|
||||
summary_text = website_summary.split('Zusammenfassung:')[1].split('**FSM-POTENZIAL**')[0].strip()
|
||||
if summary_text:
|
||||
beschreibung_kombiniert.append(f"Website-Zusammenfassung: {summary_text}")
|
||||
except IndexError:
|
||||
pass # Ignoriere Formatierungsfehler, fahre mit anderen Daten fort
|
||||
except IndexError: pass
|
||||
|
||||
if wiki_absatz and 'k.a.' not in wiki_absatz.lower():
|
||||
beschreibung_kombiniert.append(f"Wikipedia-Einleitung: {wiki_absatz}")
|
||||
@@ -1055,16 +1054,15 @@ def generate_fsm_pitch(
|
||||
logger.warning(f"Zu wenige Informationen für FSM-Pitch bei {company_name}.")
|
||||
return "FEHLER (Mangelnde Daten)"
|
||||
|
||||
# 2. Namenswahl
|
||||
# 2. Namenswahl und 3. Personalinfo (bleibt unverändert)
|
||||
display_name = company_short_name if company_short_name and company_short_name.lower() != 'k.a.' else company_name
|
||||
|
||||
# 3. Personalinfo
|
||||
|
||||
def round_number(n):
|
||||
if n < 100: return n
|
||||
if n < 1000: return int(round(n / 50.0)) * 50
|
||||
return int(round(n / 100.0)) * 100
|
||||
|
||||
personal_info = "in einem Unternehmen Ihrer Größe"
|
||||
personal_info = "" # Wir machen es optional
|
||||
try:
|
||||
tech = int(anzahl_techniker or 0)
|
||||
ma = int(anzahl_ma or 0)
|
||||
@@ -1075,41 +1073,42 @@ def generate_fsm_pitch(
|
||||
elif ma > 0:
|
||||
personal_info = f"bei über {round_number(ma)} Mitarbeitern"
|
||||
except (ValueError, TypeError):
|
||||
logger.debug("Keine validen MA/Techniker-Zahlen für Pitch.")
|
||||
pass
|
||||
|
||||
# 4. Der finale, positiv formulierte Prompt
|
||||
# 4. Der finale, strategische und positiv formulierte Prompt
|
||||
prompt_parts = [
|
||||
"Du bist ein B2B-Stratege, der die operativen Hebel eines Unternehmens im technischen Außendienst versteht.",
|
||||
"Aufgabe: Formuliere EINEN EINZIGEN, positiv-beobachtenden Satz (ca. 20-35 Wörter), der die zentrale operative Herausforderung im Service subtil andeutet, indem er die Wichtigkeit ihrer Lösung betont.",
|
||||
"Aufgabe: Formuliere EINEN EINZIGEN, positiv-beobachtenden Satz (ca. 20-35 Wörter), der die zentrale operative Herausforderung im Service subtil andeutet, indem er die Wichtigkeit der Lösung betont.",
|
||||
"",
|
||||
"--- Tonalität & Stil ---",
|
||||
"- Formuliere als scharfsinnige Beobachtung, nicht als Problem.",
|
||||
"- Formuliere als scharfsinnige Beobachtung, nicht als Problem ('Für ein Unternehmen wie X ist Y entscheidend, um Z zu erreichen').",
|
||||
"- Der Satz muss direkt als erster Absatz in einer E-Mail an das Unternehmen funktionieren.",
|
||||
"- Fokus auf die geschäftlichen Konsequenzen (z.B. 'entscheidend für den Projekterfolg', 'unerlässlich für die Kundenzufriedenheit').",
|
||||
"- Beziehe die Personalinfo (falls vorhanden) elegant in den Satz ein.",
|
||||
"",
|
||||
"--- Inferenz-Regeln (um die Kernaussage zu finden) ---",
|
||||
"1. **Hersteller von Anlagen/Maschinen:** Betone die Wichtigkeit der **'effizienten Inbetriebnahme'** oder der **'maximalen Anlagenverfügbarkeit (Uptime)'**.",
|
||||
"2. **Installateur/Dienstleister mit vielen Standorten/Partnern:** Betone die Wichtigkeit der **'Standardisierung der Servicequalität'** über alle Standorte hinweg.",
|
||||
"3. **Reiner Reparaturservice:** Betone die Wichtigkeit der **'schnellen Reaktionszeiten'** und der **'Einhaltung von Service-Levels'**.",
|
||||
"4. **Wenn unspezifisch:** Formuliere einen etwas allgemeineren, aber immer noch relevanten Satz über die 'Effizienz des Service-Teams'.",
|
||||
"2. **Installateur/Dienstleister (viele Standorte/Partner):** Betone die Wichtigkeit der **'gleichbleibend hohen Servicequalität'** über alle Standorte hinweg.",
|
||||
"3. **Reparaturservice:** Betone die Wichtigkeit der **'schnellen Reaktionszeiten'** und der **'Einhaltung von Service-Levels'**.",
|
||||
"",
|
||||
"--- Selbstkritik-Regel (WICHTIG) ---",
|
||||
"Wenn die Beschreibung so allgemein ist, dass keine der Inferenz-Regeln spezifisch angewendet werden kann (z.B. reiner Handel, Online-Portal), antworte NUR mit dem Wort 'FEHLER_DATEN'.",
|
||||
"",
|
||||
"--- Unternehmenskontext ---",
|
||||
f"Kurzname des Unternehmens: {display_name}",
|
||||
f"KI-validierte Branche: {ki_branche}",
|
||||
f"Beschreibung: {final_beschreibung}",
|
||||
f"Personalinfo für den Satz: {personal_info}",
|
||||
f"Personalinfo: {personal_info if personal_info else 'Keine Angabe'}",
|
||||
"",
|
||||
"--- Deine Aufgabe ---",
|
||||
"Gib NUR den finalen, positiv formulierten Satz aus.",
|
||||
"Gib NUR den finalen, positiv formulierten Satz aus ODER das Wort 'FEHLER_DATEN'.",
|
||||
]
|
||||
prompt = "\n".join(prompt_parts)
|
||||
|
||||
try:
|
||||
fsm_pitch = call_openai_chat(prompt, temperature=0.6, model="gpt-4o")
|
||||
# Wir entfernen die "FEHLER_DATEN"-Prüfung, um die Trefferquote zu erhöhen
|
||||
if not fsm_pitch:
|
||||
logger.warning(f"KI konnte keinen FSM-Pitch für {company_name} generieren (leere Antwort).")
|
||||
return "FEHLER (API-Antwort leer)"
|
||||
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)"
|
||||
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