From 0e0c5d742ff06dedd046ca6d0a099dc2ed4b9010 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sat, 11 Jul 2026 13:10:44 +0200 Subject: [PATCH] docs(skill): robustere fast_patterns-Anleitung fuer skill_create/update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ARIA soll Patterns wortstellungs-tolerant + mit Synonymen/Fuellwoertern in EINEM Regex schreiben (z.B. 'pause spotify' UND 'spotify pause' UND 'stopp mal'), statt nur einer Formulierung. Plus der Schluessel-Hinweis: Fast-Paths nur fuer die HAEUFIGSTEN Befehle — den Rest faengt das lokale LLM (hat das Tool) schnell ab, also lieber wenige breite Patterns als viele enge. Damit kriegen kuenftige Skills automatisch robuste Patterns (statt manuellem Nachpatchen). Co-Authored-By: Claude Opus 4.8 --- aria-brain/agent.py | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/aria-brain/agent.py b/aria-brain/agent.py index 14a64e2..7e3a284 100644 --- a/aria-brain/agent.py +++ b/aria-brain/agent.py @@ -198,17 +198,28 @@ META_TOOLS = [ "description": ( "OPTIONAL — fuer 'reines Steuern'-Skills (Licht an/aus, Spotify " "pause/next, Rollade hoch/runter etc.) eine Liste von " - "[{match, args, reply}] eintragen. Wenn ein User-Befehl gegen " - "match (anchored Regex, case-insensitive) matched, ruft das " - "Brain run_skill(name, args) DIREKT auf und gibt reply zurueck — " - "ohne Claude (~5s Latenz gespart). Match wird gegen den " - "normalisierten Text (lowercase, Endsatzzeichen weg) gemacht; " - "schreibe Patterns mit ^...$ damit nur exakte Befehle matchen " - "und nicht Teilstrings (z.B. ^pause$ statt pause). NICHT fuer " - "Skills mit kreativem Output / parametrisierter Logik — die " - "brauchen Claude. Beispiel: " - "[{\"match\":\"^pause$\",\"args\":{\"path\":\"/v1/me/player/pause\",\"method\":\"PUT\"}," - "\"reply\":\"Spotify: pausiert ⏸\"}]" + "[{match, args, reply}]. Bei match (anchored Regex, " + "case-insensitive, gegen den normalisierten Text: lowercase, " + "Endsatzzeichen weg) ruft das Brain run_skill(name, args) DIREKT " + "auf und gibt reply zurueck — ohne LLM (instant).\n\n" + "ROBUST SCHREIBEN (wichtig!):\n" + "- Immer ^...$ (nur ganze Befehle, keine Teilstrings).\n" + "- **Wortstellung + Synonyme + Fuellwoerter abdecken** in EINEM " + "Pattern via Alternativen und optionalen Gruppen. Nicht nur die " + "eine Formulierung! Beispiel Pause: " + "`^(spotify |musik )?(pause|pausier(e|en)?|stop|stopp|halt|" + "anhalten)( mal| bitte| spotify| die musik)?$` faengt 'pause', " + "'pause spotify', 'stopp mal', 'musik anhalten' … alle ab.\n" + "- Optionale Fuellwoerter mit `( bitte| mal| doch)?` zulassen, " + "Artikel/Objekte mit `( das lied| den song| die musik)?`.\n\n" + "Aber KEIN Zwang zur Vollstaendigkeit: Fast-Paths sind nur fuer " + "die HAEUFIGSTEN exakten Befehle (instant). Seltene/ungewoehnliche " + "Formulierungen faengt das lokale LLM ohnehin schnell ab (es hat " + "das Tool) — also lieber ein paar solide, breite Patterns als 30 " + "enge. NICHT fuer Skills mit kreativem/parametrisiertem Output. " + "Beispiel: [{\"match\":\"^(spotify |musik )?(pause|stop|stopp)" + "( mal| bitte)?$\",\"args\":{\"path\":\"/v1/me/player/pause\"," + "\"method\":\"PUT\"},\"reply\":\"Spotify: pausiert ⏸\"}]" ), }, },