chore: update story summary and lint fixes
This commit is contained in:
@@ -131,16 +131,44 @@ export function stateToVirtualChunks(l0Results) {
|
||||
// ═══════════════════════════════════════════════════════════════════════════
|
||||
|
||||
/**
|
||||
* 合并 L0 和 L1 chunks,每楼层最多保留 limit 条
|
||||
* @param {Array} l0Chunks - 虚拟 chunks(已按相似度排序)
|
||||
* @param {Array} l1Chunks - 真实 chunks(已按相似度排序)
|
||||
* 合并 L0 和 L1 chunks
|
||||
* @param {Array} l0Chunks - L0 虚拟 chunks(带 similarity)
|
||||
* @param {Array} l1Chunks - L1 真实 chunks(无 similarity)
|
||||
* @param {number} limit - 每楼层上限
|
||||
* @returns {Array} 合并后的 chunks
|
||||
*/
|
||||
export function mergeAndSparsify(l0Chunks, l1Chunks, limit = 2) {
|
||||
// 构建 L0 楼层 → 最高 similarity 映射
|
||||
const floorSimilarity = new Map();
|
||||
for (const c of (l0Chunks || [])) {
|
||||
const existing = floorSimilarity.get(c.floor) || 0;
|
||||
if ((c.similarity || 0) > existing) {
|
||||
floorSimilarity.set(c.floor, c.similarity || 0);
|
||||
}
|
||||
}
|
||||
|
||||
// L1 继承所属楼层的 L0 similarity
|
||||
const l1WithScore = (l1Chunks || []).map(c => ({
|
||||
...c,
|
||||
similarity: floorSimilarity.get(c.floor) || 0.5,
|
||||
}));
|
||||
|
||||
// 合并并按相似度排序
|
||||
const all = [...(l0Chunks || []), ...(l1Chunks || [])]
|
||||
.sort((a, b) => b.similarity - a.similarity);
|
||||
const all = [...(l0Chunks || []), ...l1WithScore]
|
||||
.sort((a, b) => {
|
||||
// 相似度优先
|
||||
const simDiff = (b.similarity || 0) - (a.similarity || 0);
|
||||
if (Math.abs(simDiff) > 0.01) return simDiff;
|
||||
|
||||
// 同楼层:L0 优先于 L1
|
||||
if (a.floor === b.floor) {
|
||||
if (a.isL0 && !b.isL0) return -1;
|
||||
if (!a.isL0 && b.isL0) return 1;
|
||||
}
|
||||
|
||||
// 按楼层升序
|
||||
return a.floor - b.floor;
|
||||
});
|
||||
|
||||
// 每楼层稀疏去重
|
||||
const byFloor = new Map();
|
||||
@@ -153,8 +181,9 @@ export function mergeAndSparsify(l0Chunks, l1Chunks, limit = 2) {
|
||||
}
|
||||
}
|
||||
|
||||
// 扁平化并保持相似度排序
|
||||
// 扁平化并保持排序
|
||||
return Array.from(byFloor.values())
|
||||
.flat()
|
||||
.sort((a, b) => b.similarity - a.similarity);
|
||||
.sort((a, b) => (b.similarity || 0) - (a.similarity || 0));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user