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_LIMIT = int(os.environ.get("MC2_MEMORY_RECALL_LIMIT", "5"))
|
||||||
RECALL_MIN_SCORE = float(os.environ.get("MC2_MEMORY_RECALL_MIN_SCORE", "0.3"))
|
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
|
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:
|
def _headers() -> dict:
|
||||||
@@ -118,6 +124,9 @@ class MC2MemoryProvider(MemoryProvider):
|
|||||||
u = (user_content or "").strip()
|
u = (user_content or "").strip()
|
||||||
if len(u) < MIN_USER_LEN:
|
if len(u) < MIN_USER_LEN:
|
||||||
return
|
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}]
|
msgs: List[Dict[str, str]] = [{"role": "user", "content": u}]
|
||||||
a = (assistant_content or "").strip()
|
a = (assistant_content or "").strip()
|
||||||
if a:
|
if a:
|
||||||
|
|||||||
Reference in New Issue
Block a user