refactor(prompt): remove nearby L0 fallback attachment to avoid wrong event binding

This commit is contained in:
2026-02-13 14:11:45 +08:00
parent 2b71cb3121
commit 4214cc89a4

View File

@@ -52,9 +52,6 @@ const SUMMARIZED_EVIDENCE_MAX = 1500;
const UNSUMMARIZED_EVIDENCE_MAX = 5000; const UNSUMMARIZED_EVIDENCE_MAX = 5000;
const TOP_N_STAR = 5; const TOP_N_STAR = 5;
// 邻近补挂:未被事件消费的 L0如果距最近事件 ≤ 此值则补挂
const NEARBY_FLOOR_TOLERANCE = 2;
// L0 显示文本:分号拼接 vs 多行模式的阈值 // L0 显示文本:分号拼接 vs 多行模式的阈值
const L0_JOINED_MAX_LENGTH = 120; const L0_JOINED_MAX_LENGTH = 120;
// 背景证据:无实体匹配时保留的最低相似度(与 recall.js CONFIG.EVENT_ENTITY_BYPASS_SIM 保持一致) // 背景证据:无实体匹配时保留的最低相似度(与 recall.js CONFIG.EVENT_ENTITY_BYPASS_SIM 保持一致)
@@ -945,68 +942,6 @@ async function buildVectorPrompt(store, recallResult, causalById, focusEntities,
// 每个 L0 只挂最近的一个事件,不扩展事件范围,不产生重叠 // 每个 L0 只挂最近的一个事件,不扩展事件范围,不产生重叠
// ═══════════════════════════════════════════════════════════════════ // ═══════════════════════════════════════════════════════════════════
const allSelectedItems = [...selectedDirect, ...selectedRelated];
const nearbyByItem = new Map();
for (const l0 of l0Selected) {
if (usedL0Ids.has(l0.id)) continue;
let bestItem = null;
let bestDistance = Infinity;
for (const item of allSelectedItems) {
const range = parseFloorRange(item.event?.summary);
if (!range) continue;
let distance;
if (l0.floor < range.start) distance = range.start - l0.floor;
else if (l0.floor > range.end) distance = l0.floor - range.end;
else continue;
if (distance <= NEARBY_FLOOR_TOLERANCE && distance <= bestDistance) {
bestDistance = distance;
bestItem = item;
}
}
if (bestItem) {
if (!nearbyByItem.has(bestItem)) nearbyByItem.set(bestItem, []);
nearbyByItem.get(bestItem).push(l0);
usedL0Ids.add(l0.id);
}
}
for (const [item, nearbyL0s] of nearbyByItem) {
const floorMap = groupL0ByFloor(nearbyL0s);
for (const [floor, l0s] of floorMap) {
const group = buildEvidenceGroup(floor, l0s, l1ByFloor);
item.evidenceGroups.push(group);
}
item.evidenceGroups.sort((a, b) => a.floor - b.floor);
const newText = formatEventWithEvidence(item, 0, item.evidenceGroups, causalById);
const newTokens = estimateTokens(newText);
const delta = newTokens - item.tokens;
if (total.used + delta > total.max) {
for (const l0 of nearbyL0s) usedL0Ids.delete(l0.id);
continue;
}
total.used += delta;
eventBudget.used += delta;
const isDirect = selectedDirect.includes(item);
if (!isDirect) relatedBudget.used += delta;
injectionStats.evidence.l0InEvents += nearbyL0s.length;
item.text = newText;
item.tokens = newTokens;
injectionStats.event.tokens += delta;
}
// 重新编号 + 星标 // 重新编号 + 星标
const directEventTexts = selectedDirect.map((it, i) => { const directEventTexts = selectedDirect.map((it, i) => {
const numbered = renumberEventText(it.text, i + 1); const numbered = renumberEventText(it.text, i + 1);