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:
76
helpers.py
76
helpers.py
@@ -788,35 +788,69 @@ def call_openai_chat(prompt, temperature=0.3, model=None):
|
|||||||
|
|
||||||
|
|
||||||
@retry_on_failure
|
@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.
|
Analysiert den Rohtext einer Website, um sowohl das Kerngeschäft als auch
|
||||||
Nutzt nun den Firmennamen für besseren Kontext.
|
die Relevanz für Field Service Management zu verstehen.
|
||||||
|
Gibt eine strukturierte, zweiteilige Zusammenfassung zurück.
|
||||||
"""
|
"""
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
if not raw_text or len(raw_text) < 100 or raw_text.lower().strip().startswith('k.a.'):
|
if not raw_text or len(raw_text.split()) < 50:
|
||||||
logger.debug(f"Überspringe Website-Zusammenfassung für '{company_name_for_context}', Text zu kurz oder 'k.A.'.")
|
logger.debug(f"Rohtext für {company_name} zu kurz ({len(raw_text.split())} Wörter), überspringe Zusammenfassung.")
|
||||||
return "k.A. (Text zu kurz)"
|
return "k.A. (Text zu kurz)"
|
||||||
|
|
||||||
# NEUER, KONTEXTBEZOGENER PROMPT
|
max_tokens_for_summary = 10000
|
||||||
prompt = (
|
truncated_text = raw_text[:max_tokens_for_summary]
|
||||||
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"
|
# --- SICHERE PROMPT-ERSTELLUNG AUS EINER LISTE ---
|
||||||
"Konzentriere dich ausschließlich auf die folgenden drei Punkte:\n"
|
# Diese Methode ist immun gegen Copy-Paste-Fehler mit unsichtbaren Zeichen.
|
||||||
"- Was ist das Haupttätigkeitsfeld?\n"
|
prompt_parts = [
|
||||||
"- Was sind die wichtigsten Produkte und/oder Dienstleistungen?\n"
|
"**Rolle:** Du bist ein erfahrener B2B-Marktanalyst.",
|
||||||
"- Wer ist die primäre Zielgruppe (z.B. B2B, B2C, spezifische Industrien)?\n\n"
|
f"**Aufgabe:** Analysiere den Website-Text des Unternehmens '{company_name}' und erstelle ein prägnantes Dossier.",
|
||||||
"Website-Text:\n"
|
"",
|
||||||
f"```\n{raw_text[:4000]}\n```\n\n" # Längenlimit leicht erhöht
|
"**Deine Analyse besteht aus ZWEI TEILEN:**",
|
||||||
"Zusammenfassung (max. 100 Wörter):"
|
"",
|
||||||
)
|
"**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:
|
try:
|
||||||
summary = call_openai_chat(prompt, temperature=0.2, model="gpt-4o-mini")
|
summary = call_openai_chat(prompt, temperature=0.1, model="gpt-4o-mini")
|
||||||
return summary if summary else "k.A. (Zusammenfassung fehlgeschlagen)"
|
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:
|
except Exception as e:
|
||||||
logger.error(f"Fehler bei der Website-Zusammenfassung für {company_name_for_context}: {e}")
|
logger.error(f"Fehler bei der Website-Zusammenfassung für {company_name}: {e}")
|
||||||
return "FEHLER (API-Fehler bei Zusammenfassung)"
|
return f"k.A. (Fehler bei Zusammenfassung: {e})"
|
||||||
|
|
||||||
@retry_on_failure
|
@retry_on_failure
|
||||||
def summarize_wikipedia_article(full_text, company_name):
|
def summarize_wikipedia_article(full_text, company_name):
|
||||||
|
|||||||
Reference in New Issue
Block a user