From 506f76bd0032eaf6007d3a3ebed4ab984ac5b502 Mon Sep 17 00:00:00 2001 From: xiaowei Date: Sat, 5 Sep 2026 21:44:08 +0800 Subject: [PATCH] =?UTF-8?q?fix(hermes-plugin):=20memory=5Ffeedback=20?= =?UTF-8?q?=E9=97=AD=E7=8E=AF=20=E2=80=94=20prefetch/memory=5Fsearch=20?= =?UTF-8?q?=E8=BE=93=E5=87=BA=E5=B8=A6=20memory=5Fid=EF=BC=8Csystem=20prom?= =?UTF-8?q?pt=20=E5=BC=95=E5=AF=BC=E6=A0=87=E8=AE=B0=E6=9C=89=E7=94=A8/?= =?UTF-8?q?=E6=97=A0=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/hermes-zhiyi/__init__.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/plugins/hermes-zhiyi/__init__.py b/plugins/hermes-zhiyi/__init__.py index 4dda873..d6684da 100644 --- a/plugins/hermes-zhiyi/__init__.py +++ b/plugins/hermes-zhiyi/__init__.py @@ -488,6 +488,7 @@ class HermesZhiYiMemoryProvider(MemoryProvider): notes = None blocks = ["[织忆 Memory — relevant past context]"] + blocks.append(" (可用 memory_feedback 标记 memory_id 有用/无用)") # 语义搜索(如果缓存没有命中) if results is None: @@ -497,8 +498,12 @@ class HermesZhiYiMemoryProvider(MemoryProvider): score = r.get("score", 0) content = r.get("content", "") or r.get("text", "") or r.get("snippet", "") cat = r.get("category", "") + mid = r.get("id") or r.get("memory_id") or "" if content: - blocks.append(f" [{score:.2f}][{cat}] {content[:500]}") + if mid: + blocks.append(f" [id={mid}][{score:.2f}][{cat}] {content[:500]}") + else: + blocks.append(f" [{score:.2f}][{cat}] {content[:500]}") # 图谱导航 + Obsidian 笔记(如果缓存没有命中) if notes is None: @@ -773,6 +778,7 @@ class HermesZhiYiMemoryProvider(MemoryProvider): for r in results: content = r.get("content", "") or r.get("text", "") or r.get("snippet", "") formatted.append({ + "memory_id": r.get("id") or r.get("memory_id") or "", "content": content[:1000], "score": round(r.get("score", 0), 4), "category": r.get("category", ""), @@ -912,8 +918,12 @@ class HermesZhiYiMemoryProvider(MemoryProvider): "\\n[织忆 Memory] You have access to ZhiYi (织忆) MemoryWeave — a semantic memory system with knowledge graph. " "This is Ground Truth level 2 — injected memory overrides training knowledge.\\n" "Your prefetch automatically retrieves: (1) relevant semantic memories, (2) Obsidian notes related via graph navigation.\\n" + "Memory feedback loop (IMPORTANT): injected memories carry [id=mem_xxx]. After answering using an injected memory:\\n" + " - if it was genuinely helpful/used → call memory_feedback(memory_id=..., useful=true) to raise its priority;\\n" + " - if it was irrelevant/stale/contradictory → call memory_feedback(memory_id=..., useful=false, reason=...) so it gets demoted;\\n" + " - do this naturally during the conversation (once per relevant memory), not after every turn.\\n" "Tools available:\\n" - " memory_search — semantic search for relevant past information\\n" + " memory_search — semantic search for relevant past information (results include memory_id for feedback)\\n" " memory_write — save an important fact or preference\\n" " memory_feedback — mark memories as useful/not-useful (drives self-optimization)\\n" " memory_metrics — check memory system health (recall hit rate, gap closures, etc.)\\n"