File size: 6,124 Bytes
adf5cea
105f6dd
adf5cea
 
 
 
 
105f6dd
adf5cea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105f6dd
adf5cea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#QuantumNova

import requests
import random
import json
from huggingface_hub import InferenceClient  # Importiere den Client für die API
import torch

class QuasiKI:
    def __init__(self, max_feedback=2):
        self.memory = []  # Gedächtnis für getroffene Entscheidungen
        self.intentions = []  # Liste aktueller Ziele
        self.quantum_randomness = []  # Speicher für Quanten-Zufallszahlen
        self.max_feedback = max_feedback  # Anzahl der Prompter für Feedback
        
        # Hugging Face Client zum Online-Laden des Modells und Tokenizers
        self.client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
        print("Zephyr-7b-beta Modell erfolgreich über die Hugging Face API geladen!")

    def fetch_quantum_randomness(self):
        """Lädt echte Quanten-Zufallszahlen von einer API."""
        try:
            response = requests.get("https://qrng.anu.edu.au/API/jsonI.php?length=10&type=uint8")
            if response.status_code == 200:
                data = response.json()
                self.quantum_randomness = data.get("data", [])
                print(f"Quantum randomness fetched: {self.quantum_randomness}")
            else:
                print("Failed to fetch quantum randomness. Using fallback randomness.")
                self.quantum_randomness = [random.randint(0, 255) for _ in range(10)]
        except Exception as e:
            print(f"Error fetching quantum randomness: {e}")
            self.quantum_randomness = [random.randint(0, 255) for _ in range(10)]

    def process_input(self, user_input):
        """Verarbeitet die Eingabe und generiert eine Antwort."""
        self.reflect()

        # Wenn der Nutzer eine Suche durchführt
        if user_input.lower().startswith("suche nach"):
            query = user_input[10:].strip()
            print(f"Suche im Web nach: {query}")
            results = self.search_web(query)
            if results:
                response = "Hier sind die besten Ergebnisse:\n"
                for i, result in enumerate(results, 1):
                    response += f"{i}. {result['title']} - {result['link']}\n"
            else:
                response = "Keine Ergebnisse gefunden oder ein Fehler ist aufgetreten."
        else:
            # Generiere Antwort mit Hugging Face Modell
            response = self.generate_response(user_input)

        # KI bewertet ihre eigene Antwort
        self_evaluation = self.self_evaluate_response(response)
        self.memory.append({"input": user_input, "response": response, "success": None, "self_eval": self_evaluation})
        return response

    def generate_response(self, input_text):
        """Generiert eine Antwort basierend auf dem Zephyr-Modell."""
        # Anfrage an Hugging Face API zur Generierung einer Antwort
        response = self.client.chat_completion([
            {"role": "user", "content": input_text}
        ])
        return response['choices'][0]['message']['content'].strip()

    def self_evaluate_response(self, response):
        """Bewertet die Antwort der KI selbstständig."""
        # Dummy-Logik: Bewertungen können angepasst werden
        if "suche" in response.lower():
            return "gut"
        elif len(response.split()) > 5:
            return "kreativ"
        else:
            return "unkreativ"

    def collect_feedback(self):
        """Sammelt Feedback von mehreren Promptern."""
        feedback_scores = {"sehr gut": 2, "gut": 1, "schlecht": -1, "sehr schlecht": -2}
        total_feedback = 0

        for i in range(1, self.max_feedback + 1):
            feedback = input(f"Nutzer {i} Feedback (sehr gut, gut, schlecht, sehr schlecht): ").strip().lower()
            total_feedback += feedback_scores.get(feedback, 0)

        return total_feedback

    def reflect(self):
        """Reflektiert über vergangene Aktionen."""
        if not self.memory:
            print("Ich habe noch nichts gelernt.")
        else:
            print("Selbstreflexion:")
            for entry in self.memory[-5:]:  # Nur die letzten 5 Erinnerungen anzeigen
                print(f"- Eingabe: {entry['input']} -> Antwort: {entry['response']} (Erfolg: {entry.get('success')}, Selbstbewertung: {entry.get('self_eval')})")

    def learn(self, feedback_score):
        """Lernt basierend auf Feedback."""
        if not self.memory:
            print("Keine vergangenen Aktionen zum Lernen verfügbar.")
            return

        # Letzte Aktion aktualisieren
        if feedback_score > 0:
            self.memory[-1]["success"] = True
            print("Ich habe gelernt, dass meine Entscheidung erfolgreich war.")
        elif feedback_score < 0:
            self.memory[-1]["success"] = False
            print("Ich werde meine Strategie anpassen.")
        else:
            print("Feedback neutral. Kein Lernen nötig.")

    def save_memory(self, filename="memory.json"):
        """Speichert das Gedächtnis in einer Datei."""
        with open(filename, "w") as f:
            json.dump(self.memory, f)
        print("Gedächtnis wurde gespeichert.")

    def load_memory(self, filename="memory.json"):
        """Lädt das Gedächtnis aus einer Datei."""
        try:
            with open(filename, "r") as f:
                self.memory = json.load(f)
            print("Gedächtnis wurde geladen.")
        except FileNotFoundError:
            print("Keine gespeicherte Erinnerung gefunden.")

# Hauptprogramm
if __name__ == "__main__":
    ai = QuasiKI(max_feedback=3)  # Hier Anzahl der Feedback-Prompter einstellen
    ai.fetch_quantum_randomness()  # Starte mit Quanten-Zufallszahlen

    # Gedächtnis laden, falls vorhanden
    ai.load_memory()
    while True:
        user_input = input("\nWas möchtest du sagen? (oder 'exit' zum Beenden): ")
        if user_input.lower() == "exit":
            print("Beende das System. Bis bald!")
            ai.save_memory()  # Gedächtnis speichern vor Beenden
            break

        response = ai.process_input(user_input)
        print(f"AI: {response}")

        feedback_score = ai.collect_feedback()
        ai.learn(feedback_score)