Balanced Website Analysis Prompt

- REFACTOR: Prompt für Website-Zusammenfassung in `helpers.py` optimiert, um eine ausgewogene Analyse von Geschäftsmodell und Service-Potenzial zu liefern.
- Die KI fasst nun zuerst die Kerntätigkeit des Unternehmens zusammen und bewertet danach gezielt die Relevanz des technischen Außendienstes.
- Das Ergebnis ist nun eine umfassendere und strategisch wertvollere Analyse für die Lead-Qualifizierung.
This commit is contained in:
2025-07-21 06:36:53 +00:00
parent 3872ee292c
commit e891c41039

View File

@@ -788,35 +788,69 @@ def call_openai_chat(prompt, temperature=0.3, model=None):
@retry_on_failure
def summarize_website_content(raw_text, company_name_for_context="einem Unternehmen"):
def summarize_website_content(raw_text, company_name):
"""
Fasst den Rohtext einer Website mit OpenAI zusammen.
Nutzt nun den Firmennamen für besseren Kontext.
Analysiert den Rohtext einer Website, um sowohl das Kerngeschäft als auch
die Relevanz für Field Service Management zu verstehen.
Gibt eine strukturierte, zweiteilige Zusammenfassung zurück.
"""
logger = logging.getLogger(__name__)
if not raw_text or len(raw_text) < 100 or raw_text.lower().strip().startswith('k.a.'):
logger.debug(f"Überspringe Website-Zusammenfassung für '{company_name_for_context}', Text zu kurz oder 'k.A.'.")
if not raw_text or len(raw_text.split()) < 50:
logger.debug(f"Rohtext für {company_name} zu kurz ({len(raw_text.split())} Wörter), überspringe Zusammenfassung.")
return "k.A. (Text zu kurz)"
# NEUER, KONTEXTBEZOGENER PROMPT
prompt = (
f"Du bist ein Wirtschaftsanalyst. Deine Aufgabe ist es, den Kern eines Unternehmens zu erfassen.\n"
f"Fasse den folgenden Rohtext der Website für das Unternehmen '{company_name_for_context}' prägnant zusammen.\n"
"Konzentriere dich ausschließlich auf die folgenden drei Punkte:\n"
"- Was ist das Haupttätigkeitsfeld?\n"
"- Was sind die wichtigsten Produkte und/oder Dienstleistungen?\n"
"- Wer ist die primäre Zielgruppe (z.B. B2B, B2C, spezifische Industrien)?\n\n"
"Website-Text:\n"
f"```\n{raw_text[:4000]}\n```\n\n" # Längenlimit leicht erhöht
"Zusammenfassung (max. 100 Wörter):"
)
max_tokens_for_summary = 10000
truncated_text = raw_text[:max_tokens_for_summary]
# --- SICHERE PROMPT-ERSTELLUNG AUS EINER LISTE ---
# Diese Methode ist immun gegen Copy-Paste-Fehler mit unsichtbaren Zeichen.
prompt_parts = [
"**Rolle:** Du bist ein erfahrener B2B-Marktanalyst.",
f"**Aufgabe:** Analysiere den Website-Text des Unternehmens '{company_name}' und erstelle ein prägnantes Dossier.",
"",
"**Deine Analyse besteht aus ZWEI TEILEN:**",
"",
"**TEIL 1: Geschäftsmodell-Analyse**",
"1. Identifiziere die Kernprodukte und/oder Dienstleistungen des Unternehmens.",
"2. Fasse in 2-3 prägnanten Sätzen zusammen, was das Unternehmen macht und für welche Kunden.",
"",
"**TEIL 2: Field Service Management (FSM) Potenzial-Analyse**",
"1. Scanne den Text gezielt nach Hinweisen auf einen technischen Außendienst (Schlüsselwörter: Service, Wartung, Reparatur, Montage, Installation, Techniker, Kundendienst vor Ort, Instandhaltung).",
"2. Bewerte das Potenzial für einen relevanten Außendienst (mind. 50 Techniker) auf einer Skala.",
"3. Extrahiere die 1-2 wichtigsten Sätze, die diese Service-Tätigkeiten belegen.",
"",
"**Antworte AUSSCHLIESSLICH im folgenden exakten Format:**",
"--- TEIL 1: GESCHAEFTSMODELL ---",
"Zusammenfassung: <Deine 2-3 Sätze über das Kerngeschäft des Unternehmens.>",
"",
"--- TEIL 2: FSM-POTENZIAL ---",
"Service-Potenzial: <Hoch / Mittel / Niedrig / Kein Hinweis>",
"Service-Beweise: <Die 1-2 aussagekräftigsten Sätze als Bullet Points (* Satz 1...)>",
"",
"",
"**Hier ist der Website-Text:**",
"---",
truncated_text,
"---"
]
prompt = "\n".join(prompt_parts)
try:
summary = call_openai_chat(prompt, temperature=0.2, model="gpt-4o-mini")
return summary if summary else "k.A. (Zusammenfassung fehlgeschlagen)"
summary = call_openai_chat(prompt, temperature=0.1, model="gpt-4o-mini")
if not summary:
return "k.A. (API-Antwort leer)"
# Formatierung für bessere Lesbarkeit im Sheet
summary = summary.replace("--- TEIL 1: GESCHAEFTSMODELL ---", "**GESCHÄFTSMODELL**")
summary = summary.replace("Zusammenfassung:", "Zusammenfassung:")
summary = summary.replace("--- TEIL 2: FSM-POTENZIAL ---", "\n\n**FSM-POTENZIAL**")
summary = summary.replace("Service-Potenzial:", "Potenzial:")
summary = summary.replace("Service-Beweise:", "Beweise:")
return summary.strip()
except Exception as e:
logger.error(f"Fehler bei der Website-Zusammenfassung für {company_name_for_context}: {e}")
return "FEHLER (API-Fehler bei Zusammenfassung)"
logger.error(f"Fehler bei der Website-Zusammenfassung für {company_name}: {e}")
return f"k.A. (Fehler bei Zusammenfassung: {e})"
@retry_on_failure
def summarize_wikipedia_article(full_text, company_name):