File size: 4,466 Bytes
e6ae8f8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
"""
Intelligent Knowledge Retrieval System - Minimal Frontend
"""

import streamlit as st
import time

# ============================================
# MOCK BACKEND (wird später ersetzt)
# ============================================

def query_rag_pipeline(user_query: str) -> dict:
    
    mock_response = {
        "answer": f" Das ist eine Test-Antwort auf deine Frage: '{user_query}'\n\n",
        "sources": [
            {"id": 1, "title": "Mock-Dokument 1", "relevance": 0.95},
            {"id": 2, "title": "Mock-Dokument 2", "relevance": 0.87},
            {"id": 3, "title": "Mock-Dokument 3", "relevance": 0.76}
        ],
        "processing_time": 0.5
    }
    
    return mock_response

# ============================================
# HAUPTANWENDUNG
# ============================================

def main():
    st.set_page_config(
        page_title="Knowledge Retrieval System",
        page_icon="🤖",
        layout="centered"
    )
    
    # Header
    st.title("🤖 Intelligent Knowledge Retrieval System")
    st.markdown("Stelle Fragen in natürlicher Sprache - das System durchsucht die Wissensdatenbank und generiert eine Antwort.")
    st.markdown("---")
    
    # Chat-Historie initialisieren
    if "messages" not in st.session_state:
        st.session_state.messages = []
        # Willkommensnachricht
        st.session_state.messages.append({
            "role": "assistant",
            "content": "Hallo! Ich kann dir bei Fragen zu unserer Wissensdatenbank helfen. Was möchtest du wissen?"
        })
    
    # Chat-Historie anzeigen
    for message in st.session_state.messages:
        with st.chat_message(message["role"]):
            st.write(message["content"])
            
            # Zeige Quellen wenn vorhanden
            if message.get("sources"):
                with st.expander("📚 Verwendete Quellen"):
                    for source in message["sources"]:
                        relevance_percent = source["relevance"] * 100
                        st.write(f"• {source['title']} (Relevanz: {relevance_percent:.0f}%)")
    
    # Chat-Eingabe
    if prompt := st.chat_input("Stelle eine Frage..."):
        # Benutzer-Nachricht hinzufügen und anzeigen
        st.session_state.messages.append({"role": "user", "content": prompt})
        with st.chat_message("user"):
            st.write(prompt)
        
        # RAG-Antwort generieren
        with st.chat_message("assistant"):
            with st.spinner("Durchsuche Datenbank und generiere Antwort..."):
                # RAG Pipeline aufrufen
                response = query_rag_pipeline(prompt)
                
                # Antwort anzeigen
                st.write(response["answer"])
                
                # Antwort in Historie speichern
                st.session_state.messages.append({
                    "role": "assistant",
                    "content": response["answer"],
                    "sources": response.get("sources", [])
                })
                
                # Quellen anzeigen wenn vorhanden
                if response.get("sources"):
                    with st.expander("📚 Verwendete Quellen"):
                        for source in response["sources"]:
                            relevance_percent = source["relevance"] * 100
                            st.write(f"• {source['title']} (Relevanz: {relevance_percent:.0f}%)")
    
    # Footer mit Info
    st.markdown("---")
    with st.expander("ℹ️ Für Entwickler"):
        st.markdown("""
        **Integration der Backend-Komponenten:**
        
        Ersetzt die Funktion `query_rag_pipeline()` mit eurer echten Implementation:
        
        ```python
        def query_rag_pipeline(user_query: str) -> dict:
            # 1. Retrieval
            documents = database.search(user_query, top_k=5)
            
            # 2. Context erstellen
            context = format_documents(documents)
            
            # 3. LLM Generation
            answer = llm.generate(user_query, context)
            
            return {
                "answer": answer,
                "sources": documents
            }
        ```
        
        **Erwartete Response-Struktur:**
        - `answer`: String mit der generierten Antwort
        - `sources`: Liste von Dokumenten (optional)
        - `processing_time`: Verarbeitungszeit in Sekunden (optional)
        """)

if __name__ == "__main__":
    main()