refactor(prompt): remove nearby L0 fallback attachment to avoid wrong event binding
This commit is contained in:
@@ -52,9 +52,6 @@ const SUMMARIZED_EVIDENCE_MAX = 1500;
|
||||
const UNSUMMARIZED_EVIDENCE_MAX = 5000;
|
||||
const TOP_N_STAR = 5;
|
||||
|
||||
// 邻近补挂:未被事件消费的 L0,如果距最近事件 ≤ 此值则补挂
|
||||
const NEARBY_FLOOR_TOLERANCE = 2;
|
||||
|
||||
// L0 显示文本:分号拼接 vs 多行模式的阈值
|
||||
const L0_JOINED_MAX_LENGTH = 120;
|
||||
// 背景证据:无实体匹配时保留的最低相似度(与 recall.js CONFIG.EVENT_ENTITY_BYPASS_SIM 保持一致)
|
||||
@@ -945,68 +942,6 @@ async function buildVectorPrompt(store, recallResult, causalById, focusEntities,
|
||||
// 每个 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 numbered = renumberEventText(it.text, i + 1);
|
||||
|
||||
Reference in New Issue
Block a user