const path = require('path'); const { performance } = require('perf_hooks'); require('dotenv').config({ path: path.join(__dirname, '../.env') }); const ToolExecutor = require('../services/toolExecutor'); const coldTestQueryTemplates = [ { name: 'Product - Q10 Unique', template: 'Q10辅酵素氧修护有什么独特功效 ' }, { name: 'Product - IB5 Unique', template: 'IB5口腔免疫喷雾如何正确使用 ' }, { name: 'Product - CC胶囊 Unique', template: 'CC胶囊的主要适用人群有哪些 ' }, { name: 'Company - 邓白氏 Unique', template: '德国PM邓白氏认证的具体含义是什么 ' }, { name: 'Technology - 火炉原理 Unique', template: '请详细阐述一下火炉原理的核心思想 ' } ]; async function runColdStartTest() { console.log('='.repeat(80)); console.log('VIKING COLD START PERFORMANCE TEST'); console.log('(No Cache - Real API Calls)'); console.log('='.repeat(80)); console.log(''); const allResults = []; for (const { name, template } of coldTestQueryTemplates) { console.log(`Testing (Cold): ${name}`); const latencies = []; const hits = []; for (let i = 0; i < 3; i++) { const uniqueQuery = template + Math.random(); const start = performance.now(); let result; try { result = await ToolExecutor.searchKnowledge({ query: uniqueQuery, response_mode: 'answer' }, []); const latency = performance.now() - start; latencies.push(latency); hits.push(!!result.hit); console.log(` Attempt ${i + 1}: ${latency.toFixed(2)}ms, hit=${result.hit}, source=${result.source}`); } catch (e) { console.log(` Attempt ${i + 1} error: ${e.message}`); } } if (latencies.length > 0) { const avgLatency = latencies.reduce((a, b) => a + b, 0) / latencies.length; const minLatency = Math.min(...latencies); const maxLatency = Math.max(...latencies); const hitRate = hits.filter(h => h).length / hits.length; allResults.push({ name, template, avgLatency, minLatency, maxLatency, hitRate, latencies }); console.log(` → Avg: ${avgLatency.toFixed(2)}ms, Min: ${minLatency.toFixed(2)}ms, Max: ${maxLatency.toFixed(2)}ms, Hit Rate: ${(hitRate * 100).toFixed(1)}%\n`); } } console.log('='.repeat(80)); console.log('COLD START SUMMARY'); console.log('='.repeat(80)); if (allResults.length > 0) { const totalAvg = allResults.reduce((a, b) => a + b.avgLatency, 0) / allResults.length; const totalMin = Math.min(...allResults.flatMap(r => r.latencies)); const totalMax = Math.max(...allResults.flatMap(r => r.latencies)); const totalHitRate = allResults.reduce((a, b) => a + b.hitRate, 0) / allResults.length; console.log(`\nOverall Average Latency: ${totalAvg.toFixed(2)}ms`); console.log(`Overall Min Latency: ${totalMin.toFixed(2)}ms`); console.log(`Overall Max Latency: ${totalMax.toFixed(2)}ms`); console.log(`Overall Hit Rate: ${(totalHitRate * 100).toFixed(1)}%`); console.log('\nFastest queries:'); allResults.sort((a, b) => a.avgLatency - b.avgLatency).forEach((r, i) => { console.log(` ${i + 1}. ${r.name}: ${r.avgLatency.toFixed(2)}ms`); }); } console.log('\n' + '='.repeat(80)); return allResults; } runColdStartTest().catch(console.error);