feat(memory-core): expose hybrid search component scores · openclaw/openclaw@66e66f1
ajfonthemove
·
2026-04-25
·
via Recent Commits to openclaw:main
File tree
extensions/memory-core/src/memory
packages/memory-host-sdk/src/host
| Original file line number | Diff line number | Diff line change |
|---|
@@ -60,7 +60,11 @@ describe("memory hybrid helpers", () => {
|
60 | 60 | const a = merged.find((r) => r.path === "memory/a.md"); |
61 | 61 | const b = merged.find((r) => r.path === "memory/b.md"); |
62 | 62 | expect(a?.score).toBeCloseTo(0.7 * 0.9); |
| 63 | +expect(a?.vectorScore).toBeCloseTo(0.9); |
| 64 | +expect(a?.textScore).toBe(0); |
63 | 65 | expect(b?.score).toBeCloseTo(0.3 * 1.0); |
| 66 | +expect(b?.vectorScore).toBe(0); |
| 67 | +expect(b?.textScore).toBeCloseTo(1.0); |
64 | 68 | }); |
65 | 69 | |
66 | 70 | it("mergeHybridResults prefers keyword snippet when ids overlap", async () => { |
@@ -94,5 +98,7 @@ describe("memory hybrid helpers", () => {
|
94 | 98 | expect(merged).toHaveLength(1); |
95 | 99 | expect(merged[0]?.snippet).toBe("kw-a"); |
96 | 100 | expect(merged[0]?.score).toBeCloseTo(0.5 * 0.2 + 0.5 * 1.0); |
| 101 | +expect(merged[0]?.vectorScore).toBeCloseTo(0.2); |
| 102 | +expect(merged[0]?.textScore).toBeCloseTo(1.0); |
97 | 103 | }); |
98 | 104 | }); |
| Original file line number | Diff line number | Diff line change |
|---|
@@ -72,6 +72,8 @@ export async function mergeHybridResults(params: {
|
72 | 72 | startLine: number; |
73 | 73 | endLine: number; |
74 | 74 | score: number; |
| 75 | +vectorScore: number; |
| 76 | +textScore: number; |
75 | 77 | snippet: string; |
76 | 78 | source: HybridSource; |
77 | 79 | }> |
@@ -131,11 +133,15 @@ export async function mergeHybridResults(params: {
|
131 | 133 | startLine: entry.startLine, |
132 | 134 | endLine: entry.endLine, |
133 | 135 | score, |
| 136 | +vectorScore: entry.vectorScore, |
| 137 | +textScore: entry.textScore, |
134 | 138 | snippet: entry.snippet, |
135 | 139 | source: entry.source, |
136 | 140 | }; |
137 | 141 | }); |
138 | 142 | |
| 143 | +// Keep component scores as raw retrieval diagnostics; temporal decay and MMR |
| 144 | +// only adjust or reorder the combined ranking score. |
139 | 145 | const temporalDecayConfig = { ...DEFAULT_TEMPORAL_DECAY_CONFIG, ...params.temporalDecay }; |
140 | 146 | const decayed = await applyTemporalDecayToHybridResults({ |
141 | 147 | results: merged, |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -5,6 +5,8 @@ export type MemorySearchResult = {
|
5 | 5 | startLine: number; |
6 | 6 | endLine: number; |
7 | 7 | score: number; |
| 8 | +vectorScore?: number; |
| 9 | +textScore?: number; |
8 | 10 | snippet: string; |
9 | 11 | source: MemorySource; |
10 | 12 | citation?: string; |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -5,6 +5,8 @@ export type MemorySearchResult = {
|
5 | 5 | startLine: number; |
6 | 6 | endLine: number; |
7 | 7 | score: number; |
| 8 | +vectorScore?: number; |
| 9 | +textScore?: number; |
8 | 10 | snippet: string; |
9 | 11 | source: MemorySource; |
10 | 12 | citation?: string; |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。