Mark top recall events

This commit is contained in:
2026-01-30 13:47:04 +08:00
parent 0c3808cf60
commit 201c74dc71

View File

@@ -36,6 +36,7 @@ const RECENT_ORPHAN_MAX = 5000; // [待整理] 独立预算
const TOTAL_BUDGET_MAX = 15000; // 总预算(用于日志显示) const TOTAL_BUDGET_MAX = 15000; // 总预算(用于日志显示)
const L3_MAX = 2000; const L3_MAX = 2000;
const ARCS_MAX = 1500; const ARCS_MAX = 1500;
const TOP_N_STAR = 5; // 相似度前N条加⭐
// ───────────────────────────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────────────────────────
// 工具函数 // 工具函数
@@ -466,7 +467,9 @@ async function buildVectorPrompt(store, recallResult, causalById, queryEntities
const selectedDirect = []; // { event, text, tokens, chunk, hasEvidence } const selectedDirect = []; // { event, text, tokens, chunk, hasEvidence }
const selectedSimilar = []; // { event, text, tokens, chunk, hasEvidence } const selectedSimilar = []; // { event, text, tokens, chunk, hasEvidence }
for (const e of candidates) { for (let candidateRank = 0; candidateRank < candidates.length; candidateRank++) {
const e = candidates[candidateRank];
if (total.used >= total.max) break; if (total.used >= total.max) break;
const isDirect = e._recallType === "DIRECT"; const isDirect = e._recallType === "DIRECT";
@@ -494,9 +497,9 @@ async function buildVectorPrompt(store, recallResult, causalById, queryEntities
// 写入 // 写入
if (isDirect) { if (isDirect) {
selectedDirect.push({ event: e.event, text, tokens: cost, chunk: chosenChunk, hasEvidence }); selectedDirect.push({ event: e.event, text, tokens: cost, chunk: chosenChunk, hasEvidence, candidateRank });
} else { } else {
selectedSimilar.push({ event: e.event, text, tokens: cost, chunk: chosenChunk, hasEvidence }); selectedSimilar.push({ event: e.event, text, tokens: cost, chunk: chosenChunk, hasEvidence, candidateRank });
} }
injectionStats.events.selected++; injectionStats.events.selected++;
@@ -533,8 +536,15 @@ async function buildVectorPrompt(store, recallResult, causalById, queryEntities
selectedDirect.sort((a, b) => getEventSortKey(a.event) - getEventSortKey(b.event)); selectedDirect.sort((a, b) => getEventSortKey(a.event) - getEventSortKey(b.event));
selectedSimilar.sort((a, b) => getEventSortKey(a.event) - getEventSortKey(b.event)); selectedSimilar.sort((a, b) => getEventSortKey(a.event) - getEventSortKey(b.event));
const selectedDirectTexts = selectedDirect.map((it, i) => renumberEventText(it.text, i + 1)); const selectedDirectTexts = selectedDirect.map((it, i) => {
const selectedSimilarTexts = selectedSimilar.map((it, i) => renumberEventText(it.text, i + 1)); const numbered = renumberEventText(it.text, i + 1);
return it.candidateRank < TOP_N_STAR ? `${numbered}` : numbered;
});
const selectedSimilarTexts = selectedSimilar.map((it, i) => {
const numbered = renumberEventText(it.text, i + 1);
return it.candidateRank < TOP_N_STAR ? `${numbered}` : numbered;
});
details.directCount = selectedDirect.length; details.directCount = selectedDirect.length;
details.similarCount = selectedSimilar.length; details.similarCount = selectedSimilar.length;