""" Intelligent Knowledge Retrieval System - Minimal Frontend """ import streamlit as st import time from guards import input as input_guard, output as output_guard from rag import retriever # ============================================ # BACKEND INTEGRATION # ============================================ def mock_llm(query: str, context: str) -> str: """ Placeholder for the LLM generation. """ return f"Based on the context, the answer to '{query}' is likely found within the retrieved documents:\n\n{context}" def query_rag_pipeline(user_query: str) -> dict: start_time = time.time() # 1. Input Guardrails if not input_guard.is_valid(user_query): return {"answer": "Invalid query. Please try again.", "sources": []} # 2. Retrieval retrieved_docs = retriever.search(user_query) # 3. Context Generation context = "\n".join([str(doc) for doc in retrieved_docs]) # 4. LLM Generation (Mock) raw_answer = mock_llm(query=user_query, context=context) # 5. Output Guardrails clean_answer = output_guard.sanitize(raw_answer) # 6. Final Response end_time = time.time() return { "answer": clean_answer, "sources": [{"title": str(doc), "relevance": 1.0} for doc in retrieved_docs], "processing_time": end_time - start_time } # ============================================ # 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()