fix(hermes-plugin): memory_feedback 闭环 — prefetch/memory_search 输出带 memory_id,system prompt 引导标记有用/无用
This commit is contained in:
parent
8356480541
commit
506f76bd00
|
|
@ -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"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue