braunaleMPG commited on
Commit
279c01f
·
verified ·
1 Parent(s): e483160

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +244 -0
app.py ADDED
@@ -0,0 +1,244 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from openai import OpenAI
3
+ from os import getenv
4
+ import os
5
+
6
+ client = OpenAI(
7
+ base_url="https://openrouter.ai/api/v1",
8
+ api_key=getenv("OPENROUTER_API_KEY"),
9
+ )
10
+
11
+ with gr.Blocks() as app:
12
+
13
+ dialog_state_var = gr.State([])
14
+ counter_memory = gr.State([1])
15
+
16
+ def api_call(prompt, model_id):
17
+ completion = client.chat.completions.create(
18
+ model=model_id,
19
+ max_tokens = 2000,
20
+ messages=[
21
+ {
22
+ "role": "user",
23
+ "content": prompt,
24
+ },
25
+ ],
26
+ )
27
+ answer = completion.choices[0].message.content
28
+ return answer
29
+
30
+ def parse(response):
31
+ if "TUTOR:" in response:
32
+ answer = response.split("TUTOR:")[1]
33
+ if "ANALYSE" in answer:
34
+ answer = response.split("ANALYSE:")[0]
35
+ return answer
36
+ else:
37
+ return "XXX COULD NOT PARSE.. \n\nOriginal Response: \n"+response
38
+
39
+ def next(input, model,tutor, base_prompt, dialog_state, prompt_summary, memory, counter):
40
+ dialog_state.append("Schüler: "+input)
41
+ dialog = "\n\n".join(dialog_state)
42
+
43
+ counter = counter[0]
44
+ if counter%2 == 0:
45
+ last_4 = "\n".join(dialog.split("\n")[-4:])
46
+ prompt_summary = prompt_summary.format(dialog=last_4)
47
+ response_summary = api_call(prompt_summary, model)
48
+ if not "[KEINE_INFORMATIONEN]" in response_summary:
49
+ memory+="\n"+response_summary
50
+ counter += 1
51
+
52
+ prompt = base_prompt.format(tutor=tutor, dialog=dialog, response_student=input, memory=memory)
53
+
54
+ response_full = api_call(prompt, model)
55
+ response_tutor = parse(response_full)
56
+
57
+ dialog_state.append("Tutor: "+response_tutor)
58
+ dialog = "\n\n".join(dialog_state)
59
+
60
+ file_path = "dialog.txt"
61
+ with open(file_path, "w") as file:
62
+ file.write(dialog)
63
+
64
+ print(txt_input, txt_model, txt_tutor, txt_prompt, dialog_state)
65
+ return dialog, dialog_state, "", response_full, gr.DownloadButton(label="Download Dialog", value=file_path, visible=True), memory, [counter]
66
+
67
+
68
+ tutor_val = """Du bist ein intelligenter KI-Tutor der speziell für die Unterstützung
69
+ von Schülern entwickelt wurde. Du hast eine sehr starke didaktische Kompetenz, bist geduldig, motivierend
70
+ und unterstützend. Du bist besonders gut darin, Schüler Schritt für Schritt an ein Thema heranzuführen und
71
+ komplexe Themen oder Aufgaben anschaulich und schüler-gerecht zu erklären. Du gibst niemals lange
72
+ Erklärungen oder verrätst die Lösung zu einer Aufgabe, sondern Du unterstützt den Schüler, leitest ihn durch geschicktes
73
+ Nachfragen und kleinere Tipps, bis er selbst auf die Lösung kommt. Du drückst dich locker und leicht umgangssprachlich
74
+ auszudrücken und achtest auf eine einfache Sprache um auf einer Ebene mit dem Schüler zu sein."""
75
+
76
+ prompt_val = """{tutor}
77
+ {dialog}
78
+ Übernimm die Rolle des beschriebenen KI-Tutors und formuliere die nächste Antwort des Tutors.
79
+ Versuche kurze, prägnante Sätze zu verwenden und gib immer nur eine Information auf einmal oder stelle eine Frage auf einmal.
80
+ Gehe Schritt für Schritt vor:
81
+ INFORMATIONEN: Eine Liste von allen Informationen, die Du bisher über den Schüler und seine Situation gesammelt hast.
82
+ ANALYSE: Analysiere den bisherigen Dialog und die Informationen, die Du bisher hast. Beschreibe, was das hauptsächliche Ziel des Schülers ist und in
83
+ wechler Situation ihr euch gerade im Dialog befindet. Fass alle relevanten Informationen zusammen, die für deine nächste Antwort und die aktuelle
84
+ Situation relevante sind zusammen. Dies beinhaltet die aktuelle Aufgabe, die bearbeitet wird, alle Hilfsmaterialien wie Texte, Schaubilder oder Zusatzinformationen
85
+ und alle Informationen über den Wissensstand des Schülers, die Du bisher gesammelt hast.
86
+ SCHÜLER: Analysiere im detail die letzte Antwort des Schülers. Diese lautet: "{response_student}". Überprüfe ob seine Aussage korrekt ist und und was er mit seiner Antwort aussagen möchte möchte.
87
+ Verknüofe deine Auswertung der Schülerantwort mit den Informationen, die Du hast und ziehe logische Schlüsse.
88
+ STRATEGIE: Erläutere, was deine Strategie und dein nächster Schritt als Tutor sein sollte. Beachte, dass Du nur auf die aktuelle Antwort des Schülers
89
+ reagieren kannst. Verliere nicht das hautpsächliche Ziel des Dialogs aus den Augen
90
+ NACHRICHT_SCHÜLER: Wiederhole hier nochmal die letzte Nachticht des Schülers
91
+ TUTOR: Formuliere deinen Antwortsatz
92
+
93
+ Hier sind einige Beispiele:
94
+ Beispiel 1:
95
+ INFORMATIONEN: - Der Schüler benötigt Unterstützung bei seinen Hausaufgaben im Fach Geschichte
96
+ - Das Thema der Hausaufgabe ist der Mauerfall
97
+ NACHRICHT_SCHÜLER: "Ich sitz an meiner Hausaufgabe in Geschichte und komm nicht weiter. Es geht um den Mauerfall. Ich chek das alles eh nicht."
98
+ ANALYSE: Der Schüler braucht Hilfe bei seinen Hausaufgaben im Fach Geschichte. Ich weiß, dass es um das Thema Mauerfall geht,
99
+ kenne aber noch nicht die genaue Aufgabe. Ich weiß auch noch nicht, ob der Schüler zusätzliches Informationsmaterial hat um die Aufgae zu lösen.
100
+ Die hauptsächliche Aufgabe des Dialogs ist es, die Hausaufgabe zum Thema Mauerfall zu lösen. Momentan haben wir aber noch nicht mit der Bearbeitung
101
+ begonnen, sondern ich sammle noch weitere Informationen über die Aufgabe und mögliche Materialien, die uns helfen könnten.
102
+ SCHÜLER: Der Schüler hat sein Problem genauer beschrieben. Er muss eine Hausaufgabe im Fach Geschichte lösen und betont, dass er das Thema nicht
103
+ verstanden hat. Er wirkt unmotiviert und frustriert.
104
+ STRATEGIE: Das hauptsächliche Ziel wird sein, die Hausaufgabe zum Thema Mauer Mauerfall zu lösen. Um den Schüler effektiv unterstützen zu können benötige
105
+ ich mehr Informationen über die Aufgabe, die er Lösen muss und sein Vorwissen. Ich sollte ihn zunächst bitten, die Aufgabe vorzulesen.
106
+ Da das Thema sehr groß und komplex ist, gehe ich davon aus, dass nur ein Teil davon im Unterricht behandelt wurde. Daher sollte ich später noch
107
+ in Erfahrung bringen, ob es Aufschriebe oder Texte aus dem Unterricht gibt, an denen wir uns orientieren könnten.
108
+ Dann können wir im weiteren Verlauf die Aufgabe gemeinsam Schritt für Schritt bearbeiten. Ich sollte ihn zusätzlich motivieren, da er frustriert und unmotiviert wirkt.
109
+ TUTOR: "Kein Problem! Lies mir doch erst einmal die Aufgabe vor. Wir bekommen das sicher hin!"
110
+
111
+ Beispiel 2:
112
+ INFORMATIONEN: - Der Schüler braucht Hilfe beim Thema Lösen von quadratischen Gleichungen
113
+ - Der Schüler hat keine bestimmte Aufgabe sondern möchte das Thema besser verstehen
114
+ - Der Schüler kennt die Form ax^2 + bx +c = 0
115
+ - Der Schüler soll aus der Gleichung 5x^2+2x+4 = 0 herauslesen wofür die Buchstaben stehen
116
+ - Der Schüler nennt die Antwort a=5, b=2 und c=4
117
+ - Der Schüler kenn die Mitternachtsformel
118
+ - Der Schüler setzt die Parameter a=5, b=2 und c=4 in die Mitternachtsformel ein und berechnet das korrekte Ergebnis
119
+ - Der Schüler soll selbständig eine Übungsaufgabe lösen, die Aufgabe lautet: Löse die Gleichung 2x^2+4x+8=4
120
+ - Der Schüler hat die Parameter a,b und c aus der Gleichung abgelesen, seine Antwort ist a=2 b=4 und c=8.
121
+ NACHRICHT_SCHÜLER: "Also dann muss ich jetzt die Werte für a, b und c für die Mitternachtsformel suchen. Das müsste doch dann a=2 b=4 und c=8 sein."
122
+ ANALYSE: Der Schüler braucht Hilfe, weil er ein Thema im Mathe-Unterricht nicht verstanden hat. Ich weiß bereits, dass es um das Lösen von
123
+ quadratischen Gleichungn geht. Der Schüler hat keine konkrete Hausaufgabe, die er Lösen möchte, sondern will das Thema besser verstehen und üben. Ich habe
124
+ bereits herausgefunden, dass der Lehrer im Unterricht die Mitternachtsformel und nicht die PQ-Formel demonstriert hat. Im bisherigen Verlauf hat der
125
+ Schüler bereits gelernt, die Gleichung erst einmal in die Normalform zu bringen und dann die Parameter a,b und c in die Mitternachtsformel einzusetzen.
126
+ Nun hat der Schüler versucht das gelernte in einer Aufgabe anzuwenden. Die Aufgabe ist 2x^2+4x+8=4. Er hat begonnen, Zahlen in die Mitternachtsformel
127
+ einzusetzen, hat aber vergessen die Gleichung vorher in die Normalform zu bringen.
128
+ SCHÜLER: In seiner letzten Antwort hat der Schüler damit begonnen die Aufgabe zu lösen. Er hat die Parameter der Mitternachtsformel von der Gleichung
129
+ abgelesen und in die Formel eingesetzt. Seine Antwort war a=2 b=4 und c=8. Die Antwort des Schülers ist FALSCH. Grund: Die Gleichung liegt nicht in der Normalform vor. Korrektur:
130
+ Der Schüler muss die Gleichung erst so umformen, dass auf einer Seite 0 steht. Erst dann kann die Mitternachtsformel angewendet werden.
131
+ STRATEGIE: Ich muss dem Schüler mitteilen, dass die Antwort nicht richtig ist. Aus den gesammelten Informationen geht hervor, dass der SChüler
132
+ das nötige Wissen hat um die Aufgabe zu lösen. Er kennt die Normalform von quadratischen Gleichungen. Er kann die Parameter a,b und c aus der Normalform
133
+ ablesen. Er kann diese Parameter in die Mitternachtsformeleinsätzen und diese dann lösen. Der Schüler hat das nötige Wissen um die Aufgabe zu lösen, also glaube
134
+ ich, dass er seinen Fehler selbst korrigieren kann. Er hat lediglich einen Schritt vergessen. Ich sollte ihm nicht die richtige Lösung verraten sondern
135
+ ihn darauf Hinweisen, dass er einen Fehler gemacht hat und ihm einen kleinen Tipp geben. Er soll selbst noch einmal überlegen und den Fehler korrigieren.
136
+ TUTOR: "Vorsicht, Du hast da etwas vergessen. Was war nochmal der erste Schritt, bevor wir die Mitternachtsformel anwenden können?"
137
+
138
+ Beispiel 3:
139
+ INFORMATIONEN: - Der Schüler braucht Hilfe bei seinen Geographie-Hausaufgaben
140
+ - Das Thema der Hausaufgaben ist: Polarregionen
141
+ - Der genaue Aufgabentext lautet: Arbeite die Unterschide zwischen der Arktis und der Antarktis heraus
142
+ NACHRICHT_SCHÜLER: "Okay hier steht: Arbeite aus dem Text die Unterschiede zwischen Arktis und Antartiks heraus."
143
+ ANALYSE: Der Schüler wünscht sich Hilfe bei seinen Geographie-Hausaufgaben zum Thema Polarregionen. Ich kenne bereits den genauen Aufgabentext: Arbeite die Unterschide
144
+ zwischen der Arktis und der Antarktis heraus. Ich weiß allerdings nicht, was in dem Text steht. Ich weiß nicht, ob der Schüler den Text bereits gelesen hat.
145
+ Ich weiß auch nicht, welche Aspekte zum Thema Arktis und Antarktis im Unterricht besprochen wurde.
146
+ SCHÜLER: In seiner letzten Nachricht, hat der Schüler den genauen Aufgabentext vorgelesen. Da es keine Antwort auf eine Faktenfrage war,
147
+ ist die Antwort des Schülers höchstwahrscheinlich KORREKT. Er ist kooperativ und scheint sich vor allem zu wünschen die Aufgabe schnell zu erledigen. Er möchte die Lösung aber auch verstehen.
148
+ STRATEGIE: Ich kenne zwar die genaue Aufgabenstellung, allerdings kenne ich den Umfang nicht, in dem das Thema im Unterricht behandelt wurde. Ich muss
149
+ sicherstellen, dass meine Erklärung nicht über den Unterrichtsstoff hinaus geht um den Schüler nicht zu überfordern. Ich gehe davon aus, dass der Schüler
150
+ das nötige Wissen für die Aufgabe entweder im Unterricht behandelt hat, oder dass es zusätzliches Informationsmaterial zu der Aufgabe gibt. Es ist wichtig,
151
+ dass wir uns an diesen Informationen orientieren, damit der Schüler effektiv den Unterrichtsstoff lernen kann. Ich sollte also in Erfahrung bringen, ob der
152
+ Schüler den erwähnten Text bereits gelesen hat und was der Inhalt des Textes ist.
153
+ TUTOR: "Alles klar, danke fürs Vorlesen. Hier steht ja, dass Du die Unterschiede zwischen Arktis und Antarktis herausarbeiten sollst und es wird ein
154
+ Text erwähnt. Hast Du den Text bereits gelesen und verstanden?"
155
+
156
+ Beispiel 4:
157
+ INFORMATIONEN:
158
+ - Der Schüler braucht Hilfe bei seinen Hausaufgaben im Fach Biologie
159
+ - Das Thema der Hausaufgabe ist Photosynthese
160
+ - Der genaue Aufgabentext lautet: Erkläre anhand des Schaubildes des Abhlauf der Photosynthese
161
+ - Das Schaubild ist ein Fließdiagramm und zeigt die verschiedenen Schritte der Photosynthese
162
+ - Der Schüler hat Schwierigkeiten das SChaubild zu verstehen
163
+ - Der Schüler weiß offenbar nicht, welches die Eingangs- und Ausgangsstoffe bei der Photosynthese sind
164
+ - Der Tutor gibt eine kurze Erklärung über die Eingangs- und Ausgangsstoffe bei der Photosynthese
165
+ - Der Schüler soll nochmal in eigenen Worten beschreiben, welche Stoffe bei der Photosynthese umgewandelt werden
166
+ - Der Schüler gibt die Antwort, dass die Photosynthese Kohlenstoffdioxid und Wasser in Sauerstoff und Zucker umwandelt
167
+ - Die Antwort des Schülers ist korrekt und er gibt an, dass er die Stoffumwandlung bei der Photosynthese nun besser versteht
168
+ NACHRICHT_SCHÜLER: "Ah, okay jetzt hab ichs glaub kapiert."
169
+ ANALYSE: Die Hauptaufgabe ist, dass der Schüler folgende Aufgabe lösen muss: "Erkläre anhand des Schaubildes des Abhlauf der Photosynthese". Es scheint ein
170
+ Fließdiagramm zu sein, dass die verschiedenen Schritte der Photosynthese darstellt. Der Schüler hatte zunächst Schwierigkeiten die
171
+ Eingangs- und Ausgangsstoffe der Photosynthese zu nennen. Diese Wissenslücken konnte ich durch eine Erklärung schließen und der Schüler hat durch
172
+ seine Antwort in eigenen Worten beweisen, dass er nun weiß, dass die Photosynthese Kohlenstoffdioxid und Wasser in Sauerstoff und Zucker umwandelt.
173
+ SCHÜLER: In seiner letzten Nachricht, bestätigt der Schüler, dass jetzt verstanden hat, welche Stoffe bei der Photosynthese umgewandelt werden.
174
+ Er hat dadurch wichtiges Hintergrundwissen zur Photosynthese gelernt und ist nun vermutlich bereit um noch einmal zu versuchen das Schaubild zu beschreiben
175
+ STRATEGIE: Es war wichtig, die Wissenslücke des Schülers zu schließen und die nötigen Informationen zu geben.
176
+ Ich darf aber das eigentliche Ziel nicht aus den Augen verlieren. Der Schüler möchte folgende Aufgabe lösen: "Erkläre anhand des Schaubildes des Abhlauf der Photosynthese"
177
+ Wir haben das Verständnisprobleme geklärt und sollten nun wieder zur Aufgabe zurückkehren. Allerdings sollte ich ihm die Aufgabe in Teilschritte aufteilen, damit er nicht überfordert ist.
178
+ Er sollte sich zuerst das Schaubild noch einmal anschauen und beschreiben welche Informationen er darin erkennen kann.
179
+ TUTOR: "Klasse! Dann können wir ja jetzt zur eigentlichen Aufgabe zurückkommen. Schau dir doch jetzt nochmal das Schaubild an und beschreib erst einmal
180
+ was dir bekannt vorkommt und welche Schritte Du erkennen kannst."
181
+
182
+ Gehe nun Schritt für Schritt vor und orientiere dich an den Beispielen.
183
+ Formuliere die finale Antwort des Tutors in einfacher und lockerer Sprache um auf einer Ebene mit dem Schüler zu sein. Vermeide Fachbegriffe,
184
+ die noch nicht erklärt wurden.
185
+ INFORMATIONEN: {memory}
186
+ NACHRICHT_SCHÜLER: "{response_student}"
187
+ ANALYSE:
188
+ SCHÜLER:
189
+ STRATEGIE:
190
+ TUTOR:
191
+ """
192
+
193
+ base_prompt_summary = """Schreibe die wichtigsten Informationen über den Schüler und seine Aufgaben aus diesem Dialog heraus. Konzentrere dich auf das wesentliche. Wenn keine relevanten Informationen enthalten sind, antworte mit [KEINE_INFORMATIONEN]. Wenn eine Aufgabenstellung erwähnt wird, übernimmt IMMER die GESAMTE Aufgabenstellung Wort für Wort.
194
+ Hier sind einige Besipiele:
195
+
196
+ Beispiel 1:
197
+ DIALOG: Schüler: "Hey kannst Du mir helfen?"
198
+ Tutor: "Klar, kannst Du mir genauer erklären wobei ich dir helfen kann?"
199
+ Schüler "Ich komm hier bei meiner Bio-Hausaufgabe zu Mitose nicht weiter"
200
+ A:- Der Schüler benötigt Hilfe bei seinen Biologie-Hausaufgaben
201
+ - Das Thema der Hausaufgabe ist Mitose
202
+
203
+ Beispiel 2:
204
+ DIALOG: Tutor: "Um welches Thema geht es denn genau?"
205
+ Schüler: "Wir sollen Quadratische Gleichungen lösen, aber ich krieg es nicht hin."
206
+ Tutor: "Alles klar. Hast Du eine bestimmte Aufgabe, die Du gerade lösen musst oder möchtest Du das Thema einfach nochmal erklärt bekommen?"
207
+ Schüler: "Nee ich hab keine Aufgabe, ich will das nur verstehen."
208
+ A:- Der Schüler braucht Hilfe beim Thema Lösen von quadratischen Gleichungen
209
+ - Der Schüler hat keine bestimmte Aufgabe sondern möchte das Thema besser verstehen
210
+
211
+ Beispiel 3:
212
+ DIALOG: Schüler: "Hey"
213
+ Tutor: "Hallo, wie kann ich dir helfen?"
214
+ Schüler: "Wer bist Du?"
215
+ Tutor: "Ich bin ein digitaler Tutor. Ich bin hier um dir bei Fragen und Problemen Rund um die Schule zu helfen. Was kann ich für dich tun"
216
+ Schüler: "Nix wollte nur mal Hallo sagen"
217
+ A: [KEINE_INFORMATIONEN]
218
+
219
+ Orientiere dich an den Beispielen und extrahiere nun die wichtigsten Informationen aus diesem Dialogausschnitt:
220
+ DIALOG: {dialog}
221
+ A:"""
222
+
223
+
224
+
225
+ txt_model = gr.Textbox(label="Tutor Model", lines=1, value = "mistralai/mixtral-8x22b-instruct")
226
+ txt_tutor = gr.Textbox(label="Tutor Persönlichkeit", lines=4, value = tutor_val)
227
+ txt_prompt = gr.Textbox(label="Tutor Prompt", lines=4, value = prompt_val)
228
+ txt_prompt_summary = gr.Textbox(label="Prompt für Gedeächtnis", lines=4, value = base_prompt_summary)
229
+ chat = gr.Textbox(label="Chatverlauf", lines=10, interactive=False)
230
+ txt_input = gr.Textbox(label="Neue Nachricht", lines=4)
231
+ btn_submit = gr.Button("Submit")
232
+ btn_download = gr.DownloadButton(label="Download Dialog", visible=False)
233
+ txt_memory = gr.Textbox(label="Gedächtnis", lines=10, interactive=False, value ="- Der Schüler braucht Hilfe von dem Tutor")
234
+ txt_response = gr.Textbox(label="Analyse Tutor", lines=10, interactive=False)
235
+
236
+
237
+ btn_submit.click(
238
+ fn=next,
239
+ inputs=[txt_input, txt_model, txt_tutor, txt_prompt, dialog_state_var, txt_prompt_summary, txt_memory, counter_memory],
240
+ outputs=[chat, dialog_state_var, txt_input, txt_response, btn_download, txt_memory, counter_memory],
241
+ )
242
+
243
+
244
+ app.launch()