Block 06 – Conversational AI & Chat Systems¶
Haufe AI Automation Kurs | Tag 2 - Block 2
Zeitbedarf: 45-60 Minuten | Schwierigkeitsgrad: Fortgeschritten
Aufbauend auf: Block 04 (Retrieval) & Block 05 (Embeddings)
🎯 Lernziele¶
Nach diesem Block können Sie: - Unterschied zwischen Q&A-Systemen und Chatbots verstehen - Conversational Memory-Konzepte für Finance-Anwendungen implementieren - Chat-Interfaces für komplexe Finanz- und Risikofragen erstellen - Kontextuellen Dialog bei der Dokumentenanalyse nutzen
📖 Theorie¶
Verstehen Sie Conversational AI, Memory-Strategien und die Unterschiede zu einfachen Q&A-Systemen.
💻 Übung¶
Von grundlegendem Chat-Setup bis zum spezialisierten Finance-Chatbot mit verschiedenen Memory-Strategien.
✅ Lösung¶
Vollständige Chat-Implementierungen mit erweiterten Features und Performance-Optimierungen.
💬 Conversational AI für Finance¶
Warum Chat-Systeme?¶
Iterative Finanzanalysen benötigen Kontext: 1. "Wie hoch ist unser Kreditrisiko?" 2. "Welche Branchen sind am stärksten betroffen?" 3. "Wie können wir das Risiko reduzieren?"
Memory-Strategien¶
Verschiedene Ansätze für unterschiedliche Anforderungen: - ConversationBufferMemory: Vollständiger Verlauf - ConversationSummaryMemory: Zusammengefasster Verlauf - ConversationBufferWindowMemory: Begrenzte Nachrichten
🗂️ Assets¶
- Chat System Notebook - Vollständiges Setup mit Beispielen
- Finance Chatbot Übung - Praktische Finanzanalyse
- LangFlow Chat Config - Vorkonfigurierter Flow
- Finance Chat Worksheet - Custom Prompts
- Requirements - Benötigte Pakete
- Setup Guide - Detaillierte Anweisungen (siehe unten)
🛠️ Hauptübungen¶
1. Grundlegendes Chat-System¶
Ziel: ConversationalRetrievalChain implementieren
Features: Memory, Retrieval, Kontexterhaltung
Output: Funktionsfähiger Finance-Chatbot
2. Spezialisierter Finance-Chatbot¶
Ziel: Custom Prompts für Finanzanalysen
Features: Branchenspezifische Antworten, Fachterminologie
Output: Professioneller Finance-Assistent
3. Memory-Strategien Vergleich¶
Ziel: Verschiedene Memory-Typen testen
Vergleich: Buffer vs. Summary vs. Window Memory
Output: Optimale Memory-Konfiguration für verschiedene Use Cases
💡 Praktische Code-Beispiele¶
Chat-System Setup¶
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationalRetrievalChain
# Memory für Gesprächskontext
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)
# Conversational Chain erstellen
qa = ConversationalRetrievalChain.from_llm(
llm,
retriever=vectordb.as_retriever(),
memory=memory
)
# Chat-Dialog starten
result = qa({"question": "Wie hoch ist unser Kreditrisiko?"})
print(result["answer"])
Memory-Strategien¶
# Buffer Memory (vollständiger Verlauf)
buffer_memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)
# Summary Memory (zusammengefasst)
summary_memory = ConversationSummaryMemory(
llm=llm,
memory_key="chat_history",
return_messages=True
)
# Window Memory (letzte N Nachrichten)
window_memory = ConversationBufferWindowMemory(
k=5, # Letzte 5 Nachrichten behalten
memory_key="chat_history",
return_messages=True
)
⚙️ Setup-Anforderungen¶
Python-Pakete¶
pip install langchain openai chromadb panel
pip install pypdf python-dotenv
API-Keys erforderlich¶
# .env Datei
OPENAI_API_KEY=ihr_api_key_hier
LANGCHAIN_API_KEY=optional_für_langsmith
Beispieldokumente¶
- Quartalsbericht für Chat-Tests
- Risikobewertung Template für Risikoanalyse
- Finance-PDFs für realistische Szenarien
🔧 Troubleshooting¶
Häufige Probleme¶
- Chat verliert Kontext: Memory-Typ anpassen (Window statt Buffer)
- Langsame Antworten: ConversationSummaryMemory oder Memory leeren
- Keine dokumentbasierten Antworten: Retriever-Parameter prüfen (k-Wert)
- API-Rate-Limits: Separate Keys für Dev/Prod verwenden
Performance-Optimierung¶
- Lokale Embeddings: HuggingFace für bessere Performance
- Caching: Für häufige Fragen implementieren
- Chunk-Größen: Experimentieren für optimale Ergebnisse
Debug-Tipps¶
# Source-Dokumente anzeigen
qa = ConversationalRetrievalChain.from_llm(
llm, retriever, memory=memory,
return_source_documents=True
)
result = qa({"question": "Ihre Frage"})
print("Quellen:", result["source_documents"])