Sec: Mem0 lernt nicht aus Bildschirm-/Web-Turns (Anti-Poisoning)
Der mc2-memory-Provider überspringt das Auto-Lernen (sync_turn), wenn die User-Message den Bildschirm-Sicht-Marker trägt — on-screen-Text könnte Injection-Anweisungen enthalten, die sonst dauerhaft ins Gedächtnis wandern. Per Env MC2_MEMORY_SKIP_UNTRUSTED=0 abschaltbar. Teil von Stufe 0 (Security). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -39,6 +39,12 @@ MC_TOKEN = os.environ.get("MC_TOKEN", "")
|
||||
RECALL_LIMIT = int(os.environ.get("MC2_MEMORY_RECALL_LIMIT", "5"))
|
||||
RECALL_MIN_SCORE = float(os.environ.get("MC2_MEMORY_RECALL_MIN_SCORE", "0.3"))
|
||||
MIN_USER_LEN = int(os.environ.get("MC2_MEMORY_MIN_USER_LEN", "12")) # zu Kurzes nicht lernen
|
||||
# Anti-Memory-Poisoning (Stufe 0 Security): aus Turns mit untrusted Bildschirm-/Web-Inhalt NICHT
|
||||
# auto-lernen. Lucys Bildschirm-Sicht prependet diesen Marker an die User-Message (voice.py); auf dem
|
||||
# Schirm sichtbarer Text könnte Injection-Anweisungen tragen, die sonst DAUERHAFT ins Gedächtnis
|
||||
# wandern und Tage später ungefragt wiederverwendet werden.
|
||||
SKIP_UNTRUSTED = os.environ.get("MC2_MEMORY_SKIP_UNTRUSTED", "1") not in ("0", "false", "False", "no")
|
||||
UNTRUSTED_MARKERS = ("[Bildschirm-Sicht",)
|
||||
|
||||
|
||||
def _headers() -> dict:
|
||||
@@ -118,6 +124,9 @@ class MC2MemoryProvider(MemoryProvider):
|
||||
u = (user_content or "").strip()
|
||||
if len(u) < MIN_USER_LEN:
|
||||
return
|
||||
if SKIP_UNTRUSTED and any(m in u for m in UNTRUSTED_MARKERS):
|
||||
log.debug("mc2-memory: Turn mit untrusted Bildschirm-/Web-Inhalt — Auto-Lernen übersprungen")
|
||||
return
|
||||
msgs: List[Dict[str, str]] = [{"role": "user", "content": u}]
|
||||
a = (assistant_content or "").strip()
|
||||
if a:
|
||||
|
||||
Reference in New Issue
Block a user