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