refactor(brain): local wieder tool-los (B1a) — 8B nur noch Reden
B1b hatte dem 8B run_*/web_search-Tools gegeben. Das war die Wurzel von
BEIDEM: (1) ein 8B ist ein unzuverlaessiger Tool-Caller und erfindet lieber
eine plausible Antwort ('der Song ist X') statt das Tool zu rufen → halo;
(2) das zwang zu per-Skill-Guards (skaliert nicht).
Fix ohne eine einzige per-Skill-Zeile:
- Local: tools=[] — kann kein Skill-Ergebnis mehr faelschen.
- Router: _LIVE_HINTS schickt alles mit aktueller Grundwahrheit
(Wetter/News/Uhrzeit/Musik/Preise/Timer/…) VORAB an Claude, nicht erst
nach einem gescheiterten Local-Versuch (kein Doppel-Zahlen). Topic-Ebene,
nicht per-Skill — ein neuer Skill braucht hier keine Zeile.
- Prompt: _AWARENESS sagt local explizit, dass es tool-los ist und fuer
Live/Aktion eskaliert.
Arbeitsteilung: Fast-Path (Regex→Skill, deterministisch, 0 halo) fuer
Befehle · Local (tool-los) fuers Reden · Claude fuer alles mit Tool/Fakt/
Gedaechtnis/Urteil.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+31
-3
@@ -75,6 +75,26 @@ _TOOL_HINTS = re.compile(
|
||||
re.IGNORECASE,
|
||||
)
|
||||
|
||||
# LIVE-/DYNAMISCH-Marker → Claude. Seit dem B1a-Rueckbau ist local TOOL-LOS
|
||||
# (nur Reden), kann also nichts nachschlagen. Alles was aktuelle Grundwahrheit
|
||||
# braucht — Wetter, News, Uhrzeit/Datum, Musik-/Spotify-Zustand, Preise/Kurse,
|
||||
# Verkehr, Oeffnungszeiten — kann ein 8B nicht wissen und wuerde es erfinden.
|
||||
# Darum vorab an Claude (der ruft das Tool). Das ist TOPIC-Ebene, nicht per-Skill:
|
||||
# ein neuer Skill braucht hier keine Zeile — er faellt unter „braucht Grundwahrheit".
|
||||
_LIVE_HINTS = re.compile(
|
||||
r"\b(wetter|temperatur|regne\w*|schneit|grad draussen|"
|
||||
r"news|nachrichten|schlagzeile\w*|"
|
||||
r"uhrzeit|wie spaet|wie spät|welcher tag|welches datum|wochentag|"
|
||||
r"spotify|musik|lied|song|playlist|lautstaerke|lautstärke|"
|
||||
r"laeuft gerade|läuft gerade|spiele? (ab|weiter|die|den|das)|naechst\w*|nächst\w*|"
|
||||
r"ueberspring\w*|überspring\w*|skip\w*|pausier\w*|"
|
||||
r"timer|wecker|weck mich|erinner\w*|"
|
||||
r"preis|kurs|aktie|wechselkurs|bitcoin|"
|
||||
r"stau|verkehr|zugverbindung|bahn|abfahrt|"
|
||||
r"oeffnungszeit\w*|öffnungszeit\w*|geoeffnet|geöffnet|hat .* auf)\b",
|
||||
re.IGNORECASE,
|
||||
)
|
||||
|
||||
# Technik-/Tiefe-Marker → Claude (lokales 8B soll das nicht raten).
|
||||
_HARD_HINTS = re.compile(
|
||||
r"```|" # Codeblock
|
||||
@@ -126,6 +146,8 @@ def should_try_local(user_message: str, cfg: dict) -> bool:
|
||||
return False
|
||||
if _TOOL_HINTS.search(msg):
|
||||
return False
|
||||
if _LIVE_HINTS.search(msg):
|
||||
return False
|
||||
if _HARD_HINTS.search(msg):
|
||||
return False
|
||||
return True
|
||||
@@ -138,10 +160,16 @@ def should_try_local(user_message: str, cfg: dict) -> bool:
|
||||
# kein volles Memory (B1a).
|
||||
|
||||
# Was das lokale Tier NICHT selbst kann → dafuer eskaliert es an Claude.
|
||||
# Seit dem B1a-Rueckbau hat local KEINE Werkzeuge mehr: es kann nichts
|
||||
# nachschlagen und nichts steuern. Alles was aktuelle Grundwahrheit oder eine
|
||||
# Aktion braucht, gehoert ans grosse Modell.
|
||||
_AWARENESS = (
|
||||
"Nur das grosse Modell (nicht du im Schnell-Modus) kann: Bilder generieren, "
|
||||
"Skills bauen/aendern, Projekte & OAuth verwalten, ins Gedaechtnis SCHREIBEN, "
|
||||
"sowie tiefe/technische Analysen und langen Code."
|
||||
"Du hast im Schnell-Modus KEINE Werkzeuge — du kannst nichts nachschlagen und "
|
||||
"nichts steuern. Nur das grosse Modell kann: aktuelle Infos holen (Wetter, "
|
||||
"News, Uhrzeit, Preise), Musik/Spotify steuern oder den laufenden Song "
|
||||
"nennen, Timer setzen, Bilder generieren, Skills bauen/aendern, Projekte & "
|
||||
"OAuth verwalten, ins Gedaechtnis schreiben, sowie tiefe/technische Analysen "
|
||||
"und langen Code. Fuer ALL das eskalierst du."
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user