fix(hermes-plugin): memory_feedback 闭环 — prefetch/memory_search 输出带 memory_id,system prompt 引导标记有用/无用

This commit is contained in:
xiaowei 2026-09-05 21:44:08 +08:00
parent 8356480541
commit 506f76bd00
1 changed files with 12 additions and 2 deletions

View File

@ -488,6 +488,7 @@ class HermesZhiYiMemoryProvider(MemoryProvider):
notes = None notes = None
blocks = ["[织忆 Memory — relevant past context]"] blocks = ["[织忆 Memory — relevant past context]"]
blocks.append(" (可用 memory_feedback 标记 memory_id 有用/无用)")
# 语义搜索(如果缓存没有命中) # 语义搜索(如果缓存没有命中)
if results is None: if results is None:
@ -497,8 +498,12 @@ class HermesZhiYiMemoryProvider(MemoryProvider):
score = r.get("score", 0) score = r.get("score", 0)
content = r.get("content", "") or r.get("text", "") or r.get("snippet", "") content = r.get("content", "") or r.get("text", "") or r.get("snippet", "")
cat = r.get("category", "") cat = r.get("category", "")
mid = r.get("id") or r.get("memory_id") or ""
if content: 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 笔记(如果缓存没有命中) # 图谱导航 + Obsidian 笔记(如果缓存没有命中)
if notes is None: if notes is None:
@ -773,6 +778,7 @@ class HermesZhiYiMemoryProvider(MemoryProvider):
for r in results: for r in results:
content = r.get("content", "") or r.get("text", "") or r.get("snippet", "") content = r.get("content", "") or r.get("text", "") or r.get("snippet", "")
formatted.append({ formatted.append({
"memory_id": r.get("id") or r.get("memory_id") or "",
"content": content[:1000], "content": content[:1000],
"score": round(r.get("score", 0), 4), "score": round(r.get("score", 0), 4),
"category": r.get("category", ""), "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. " "\\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" "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" "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" "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_write — save an important fact or preference\\n"
" memory_feedback — mark memories as useful/not-useful (drives self-optimization)\\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" " memory_metrics — check memory system health (recall hit rate, gap closures, etc.)\\n"