Files
bigwo/test2/server/tests/_test_alias_ab.cjs

44 lines
2.5 KiB
JavaScript
Raw Permalink Normal View History

/**
* A/B 测试原始查询 vs 别名扩展后查询的检索效果对比
* 直接调用 VikingDB + reranker比较 topScore hit 状态
*/
require('dotenv').config({ path: require('path').join(__dirname, '..', '.env') });
const kbRetriever = require('../services/kbRetriever');
const TEST_QUERIES = [
// 中文俗名 → 中文全名(语义接近)
{ raw: '牙膏怎么用', alias: '草本护理牙膏 Med Dental+怎么用', label: '牙膏(俗名→全名)' },
{ raw: '喷雾功效', alias: 'IB5 口腔免疫喷雾功效', label: '喷雾(俗名→全名)' },
{ raw: '乳酪怎么喝', alias: '乳酪煲 乳酪饮品怎么喝', label: '乳酪(俗名→全名)' },
// 中文昵称 → 英文产品名(语义无关联)
{ raw: '小红怎么吃', alias: '小红产品 Activize Oxyplus怎么吃', label: '小红(昵称→英文名)' },
{ raw: '大白功效', alias: '大白产品 Basics功效', label: '大白(昵称→英文名)' },
{ raw: '小绿排毒', alias: 'D-Drink 小绿 排毒饮排毒', label: '小绿(昵称→英文名)' },
{ raw: '小黑适合谁', alias: 'MEN+ 倍力健 小黑适合谁', label: '小黑(昵称→英文名)' },
// 通用词 → 特定产品
{ raw: '氨基酸', alias: 'ProShape Amino 氨基酸', label: '氨基酸(通用→产品)' },
{ raw: '胶原蛋白', alias: '胶原蛋白肽', label: '胶原蛋白(通用→产品)' },
{ raw: '细胞抗氧素功效', alias: 'Zellschutz 细胞抗氧素功效', label: '细胞抗氧素(中→英)' },
];
async function runTest() {
console.log('=== A/B 测试:原始查询 vs 别名扩展 ===\n');
console.log('| 场景 | 原始 topScore | 扩展 topScore | 差值 | 原始hit | 扩展hit |');
console.log('|------|-------------|-------------|------|---------|---------|');
for (const t of TEST_QUERIES) {
const rawRes = await kbRetriever.searchAndRerank(t.raw, {});
await new Promise(r => setTimeout(r, 1500));
const aliasRes = await kbRetriever.searchAndRerank(t.alias, {});
await new Promise(r => setTimeout(r, 1500));
const rawScore = rawRes.topScore?.toFixed(3) || '0.000';
const aliasScore = aliasRes.topScore?.toFixed(3) || '0.000';
const diff = ((aliasRes.topScore || 0) - (rawRes.topScore || 0)).toFixed(3);
const diffStr = diff > 0 ? `+${diff}` : diff;
console.log(`| ${t.label} | ${rawScore} | ${aliasScore} | ${diffStr} | ${rawRes.hit ? 'HIT' : 'MISS'} | ${aliasRes.hit ? 'HIT' : 'MISS'} |`);
}
console.log('\n阈值: reranker hit >= 0.1');
}
runTest().catch(e => { console.error('FAILED:', e.message); process.exit(1); });