const path = require('path'); const https = require('https'); const fs = require('fs'); // 加载 .env const envPath = path.join(__dirname, '../.env'); if (fs.existsSync(envPath)) { fs.readFileSync(envPath, 'utf8').split('\n').forEach(line => { const t = line.trim(); if (!t || t.startsWith('#')) return; const i = t.indexOf('='); if (i > 0) { const k = t.slice(0, i).trim(); let v = t.slice(i + 1).trim(); if ((v.startsWith('"') && v.endsWith('"')) || (v.startsWith("'") && v.endsWith("'"))) v = v.slice(1, -1); if (!process.env[k]) process.env[k] = v; } }); } const PROMPT = '你是大沃的智能助手,负责回答与PM-FitLine德国产品相关的问题。知识库涵盖近50款PM-FitLine产品的完整资料(成分、用法、剂量、价格、规格、搭配方案、好转反应等)及117个常见问答。回答规则:产品相关具体信息必须严格依据知识库,不得猜测或自行补充;公司背景、健康常识可适当补充。产品常有别名(小红=艾特维、大白=倍适、小白=维适多等),请注意识别。不得编造产品名或数据。PM是营养品非药物,涉及疾病建议咨询医生。若知识库无相关内容,坦诚说明并建议咨询推荐人。回答口语化、简洁,1-3句给结论,150字内。'; const QUERY = process.argv[2] || '一成系统 赋能 德国PM'; const m = process.env.VOLC_ARK_KB_MODEL || process.env.VOLC_ARK_KNOWLEDGE_ENDPOINT_ID; const ak = process.env.VOLC_ARK_API_KEY || process.env.VOLC_ACCESS_KEY_ID; const ids = (process.env.VOLC_ARK_KNOWLEDGE_BASE_IDS || '').split(',').map(s => s.trim()).filter(Boolean); const th = parseFloat(process.env.VOLC_ARK_KNOWLEDGE_THRESHOLD) || 0.3; const body = JSON.stringify({ model: m, messages: [ { role: 'system', content: PROMPT }, { role: 'user', content: QUERY }, ], metadata: { knowledge_base: { dataset_ids: ids, top_k: 3, threshold: th } }, stream: false, max_tokens: 80, thinking: { type: 'disabled' }, }); const t0 = Date.now(); const req = https.request({ hostname: 'ark.cn-beijing.volces.com', path: '/api/v3/chat/completions', method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${ak}`, 'Content-Length': Buffer.byteLength(body), }, timeout: 15000, }, (res) => { let chunks = []; res.on('data', c => chunks.push(c)); res.on('end', () => { const j = JSON.parse(Buffer.concat(chunks).toString()); const content = j.choices?.[0]?.message?.content || '(empty)'; const u = j.usage || {}; const ms = Date.now() - t0; const isNoHit = /未找到|未提及|暂无|没有相关|无法|不确定/.test(content); console.log(`\n检索词: "${QUERY}"`); console.log(`延迟: ${ms}ms | tokens: ${u.prompt_tokens}->${u.completion_tokens} | ${isNoHit ? '❌NO-HIT' : '✅HIT'}`); console.log(`\n回答:\n${content}\n`); }); }); req.on('error', e => console.error('ERROR:', e.message)); req.write(body); req.end();