diff --git a/aria-brain/agent.py b/aria-brain/agent.py index e451638..c8046d8 100644 --- a/aria-brain/agent.py +++ b/aria-brain/agent.py @@ -280,6 +280,14 @@ def _skill_to_tool(s: dict) -> dict: class Agent: + # Mindest-Score den ein Cold-Memory-Treffer haben muss um in den + # System-Prompt aufgenommen zu werden. Unter dieser Schwelle ist's + # Rauschen — die MiniLM-multilingual Embeddings haben fuer "irgendwas + # vs. irgendwas anderes" gerne mal 0.10-0.20 Score selbst bei voellig + # unverwandten Inhalten. Mit 0.30 als Untergrenze vermeiden wir + # Cross-Talk (z.B. 'hab ich ein flugzeug' triggert die Firmenadresse). + COLD_SCORE_THRESHOLD = 0.30 + def __init__(self, store: VectorStore, embedder: Embedder, conversation: Conversation, proxy: ProxyClient, cold_k: int = 5): @@ -317,10 +325,13 @@ class Agent: # 2. Hot Memory (alle pinned Punkte) hot = self.store.list_pinned() - # 3. Cold Memory (Top-K semantic) + # 3. Cold Memory (Top-K semantic) — mit Score-Threshold gegen Rauschen try: qvec = self.embedder.embed(user_message) - cold = self.store.search(qvec, k=self.cold_k, exclude_pinned=True) + cold = self.store.search( + qvec, k=self.cold_k, exclude_pinned=True, + score_threshold=self.COLD_SCORE_THRESHOLD, + ) except Exception as exc: logger.warning("Cold-Search fehlgeschlagen: %s", exc) cold = []