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"