Spaces:
Sleeping
Sleeping
File size: 2,951 Bytes
8ab43a3 | 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 | import os
import sys
import torch
import time
# Ensure the app directory is in the path
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
sys.path.append(project_root)
from app import (
index_files,
answer_with_rag,
get_embedding_function,
get_llm,
clear_index
)
def run_wiki_rag_test():
print("--- Wikipedia Top 10 Multi-Dokument RAG Test ---")
# 1. Testdatenverzeichnis
wiki_dir = os.path.join(project_root, "test", "tests", "test_data", "wiki_top10")
if not os.path.exists(wiki_dir):
print(f"Fehler: Verzeichnis {wiki_dir} nicht gefunden.")
return
all_files = [os.path.join(wiki_dir, f) for f in os.listdir(wiki_dir) if f.endswith(".txt")]
print(f"Gefundene Artikel: {len(all_files)}")
# 2. Modelle laden
print("Lade Modelle...")
get_embedding_function()
get_llm()
# 3. Index vorbereiten
print("Bereite Index vor...")
clear_index()
# 4. Alle Artikel indexieren
print(f"Indexiere {len(all_files)} Artikel...")
status = index_files(all_files, "mongodb://localhost:27017/", "wiki_rag_db", "wiki_chunks", False)
print(f"Status: {status}")
# 5. RAG Abfragen (Cross-Article / Multi-Dokument)
test_queries = [
{
"query": "Erkläre den Zusammenhang zwischen Physik und Chemie. Wie wird Materie und Energie in beiden Disziplinen behandelt?",
"expected_keywords": ["Physik", "Chemie", "Materie", "Energie", "Naturwissenschaft"]
},
{
"query": "Vergleiche die Beiträge von Isaac Newton und Albert Einstein zur modernen Wissenschaft. Inwiefern hat Einstein Newtons Ideen erweitert?",
"expected_keywords": ["Newton", "Einstein", "Gravitation", "Relativität", "Bewegungsgesetze"]
},
{
"query": "Welche Bedeutung haben Wissenschaft und Bildung (wie sie in den Artikeln 'Science' und 'Education' beschrieben werden) für die Entwicklung von Nationen wie den USA, dem Vereinigten Königreich oder Indien?",
"expected_keywords": ["USA", "Indien", "Education", "Science", "Universitäten", "Entwicklung"]
}
]
for i, t in enumerate(test_queries, 1):
print(f"\n[Test {i}] Frage: {t['query']}")
print("Antwort:\n" + "="*20)
full_answer = ""
for token in answer_with_rag(t['query'], []):
full_answer += token
sys.stdout.write(token)
sys.stdout.flush()
print("\n" + "="*20)
# Validierung
found = [kw for kw in t['expected_keywords'] if kw.lower() in full_answer.lower()]
print(f"Gefundene Schlüsselwörter: {found}")
if len(found) >= 2:
print("ERGEBNIS: PASS")
else:
print("ERGEBNIS: FAIL")
print("\n--- Alle Wiki-RAG Tests abgeschlossen ---")
if __name__ == "__main__":
run_wiki_rag_test()
|