# Beispiel: Rätsel & Agent Der Beispielagent kann Rechenaufgaben lösen, dabei ist das Rätsel eine einfache Aufgabe mit Variablen und in den Daten (Textdateien) werden den Variablen Werte zugewiesen. > Der Beispielagent ist nicht sonderlich *schlau*, sondern funktioniert nur Rätseln, die genau einen bestimmten Aufbau haben. ## Beispiel Rätsel (`AgentMessage`) - Daten (als Dateien in `./data/share`) - `./example/x.txt`: `x = 10` - `./example/y.txt`: `y = 15` - `./example/z.txt`: `z = 20` - Rätsel z.B. - Kontext: "[Taschenrechner]" - Frage: "x * y =" - Eingabe unter möglich - Für die Dateien ist eine Liste vorhandener Dateien hinterlegt, sodass Eingaben vervollständigt werden. - Es wird eine JSON-Vorschau angezeigt und das Rätsel kann an das Management geschickt werden - Beispiel für JSON Darstellung [↓](#json-darstellung) - Nachrichten könnten unter angesehen werden - Nachricht mit `Solution=True` sollte dann die Lösung beinhalten ## Ablauf der Bestimmung der Lösung > Siehe auch [→ Implementierung](./Implement.md#agent-handle) 1. Nachricht mit Rätsel an Management senden 2. Management wertet Nachricht und sendet Nachricht an alle ihm bekannten Extract-Agenten 3. Extract-Agenten extrahieren Daten und senden Ergebnis zurück an Management (`status.extract.finished == True`) 4. Management senden Nachricht (mit Extraktionen) an alle ihm bekannten Solve-Agenten 5. Solve-Agenten versuchen das Rätsel zu lösen - Können Sub-Rätsel erstellen () - Bekommen ein Rätsel evtl. mehrfach (jeweils wenn ein Extract-Agent) fertig geworden ist. (Evtl. Lösen mit Teilen der Infos schon möglich oder auch nicht.) - Können Antworten an das Management stoppen () 6. Management bekommt Ergebnis von Solve-Agenten und sendet dies an Gatekeeper-Agenten 7. Gatekeeper-Agent prüft Lösung und akzeptiert oder lehnt diese ab. Sendet Entscheidung an Management. 8. Management prüft, ob Lösung angenommen. Falls Lösung nicht akzeptiert, so wird Rätsel erneut gestellt (maximal `SOLUTION_MAX_TRIALS` mal) ## Agenten Quellcode 1. Extract [`./src/extract/agent.py`](./src/extract/agent.py) 2. Solve [`./src/solve/agent.py`](./src/solve/agent.py) 3. Validate [`./src/validate/agent.py`](./src/validate/agent.py) ### JSON-Darstellung ```json { "id": "ex1", "sub_ids": [], "riddle": { "context": "[Taschenrechner]", "question": "x * y =", "solutions_before": [] }, "solution": [], "data": [ { "type": "text", "file_plain": "example/x.txt", "file_extracted": null }, { "type": "text", "file_plain": "example/y.txt", "file_extracted": null }, { "type": "text", "file_plain": "example/z.txt", "file_extracted": null } ], "status": { "extract": { "required": true, "finished": false }, "solve": { "required": true, "finished": false }, "validate": { "required": true, "finished": false }, "trial": 0, "solved": false }, "contacts": 0 } ```