""" 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()