/** * unifuncs DeepSearch API 快速验证脚本 * * 运行方式: * cd backend * npx tsx scripts/test-unifuncs-deepsearch.ts */ import OpenAI from 'openai'; // ========== 配置 ========== const UNIFUNCS_API_KEY = 'sk-2fNwqUH73elGq0aDKJEM4ReqP7Ry0iqHo4OXyidDe2WpQ9XQ'; const UNIFUNCS_BASE_URL = 'https://api.unifuncs.com/deepsearch/v1'; // ========== 测试用例 ========== const TEST_QUERIES = [ // 简单测试 '糖尿病 SGLT2抑制剂 心血管 RCT', // 复杂临床问题 // '乳腺癌免疫治疗最新系统综述,近3年的研究进展', ]; // ========== 主函数 ========== async function testDeepSearch() { console.log('🚀 unifuncs DeepSearch API 验证测试\n'); console.log('=' .repeat(60)); const client = new OpenAI({ baseURL: UNIFUNCS_BASE_URL, apiKey: UNIFUNCS_API_KEY, }); for (const query of TEST_QUERIES) { console.log(`\n📝 测试查询: "${query}"\n`); console.log('-'.repeat(60)); try { const startTime = Date.now(); // 方式1: 流式响应(推荐用于验证) const stream = await client.chat.completions.create({ model: 's2', messages: [{ role: 'user', content: query }], stream: true, // @ts-ignore - unifuncs 扩展参数 introduction: '你是一名专业的临床研究文献检索专家,请在 PubMed 中检索相关文献。输出每篇文献的 PMID、标题、作者、期刊、发表年份、研究类型。', max_depth: 10, // 验证时用较小的深度,加快速度 domain_scope: ['https://pubmed.ncbi.nlm.nih.gov/'], domain_blacklist: ['wanfang.com', 'cnki.net'], reference_style: 'link', } as any); let thinking = false; let thinkingContent = ''; let responseContent = ''; console.log('📡 流式响应中...\n'); for await (const chunk of stream) { const delta = chunk.choices[0]?.delta; // 处理思考过程 (reasoning_content) if ((delta as any)?.reasoning_content) { if (!thinking) { console.log('💭 [思考过程]'); thinking = true; } const content = (delta as any).reasoning_content; thinkingContent += content; process.stdout.write(content); } // 处理正式回答 (content) else if (delta?.content) { if (thinking) { console.log('\n\n📄 [检索结果]'); thinking = false; } responseContent += delta.content; process.stdout.write(delta.content); } } const endTime = Date.now(); const duration = ((endTime - startTime) / 1000).toFixed(2); console.log('\n\n' + '='.repeat(60)); console.log(`✅ 测试完成!耗时: ${duration} 秒`); console.log(`📊 思考过程长度: ${thinkingContent.length} 字符`); console.log(`📊 回答内容长度: ${responseContent.length} 字符`); // 尝试提取 PMID const pmidMatches = responseContent.match(/PMID[:\s]*(\d+)/gi) || []; const pubmedLinks = responseContent.match(/pubmed\.ncbi\.nlm\.nih\.gov\/(\d+)/gi) || []; const totalPmids = new Set([ ...pmidMatches.map(m => m.replace(/PMID[:\s]*/i, '')), ...pubmedLinks.map(m => m.replace(/pubmed\.ncbi\.nlm\.nih\.gov\//i, '')), ]); console.log(`📚 检索到的文献数量: ${totalPmids.size} 篇`); if (totalPmids.size > 0) { console.log(`📚 PMID 列表: ${[...totalPmids].slice(0, 10).join(', ')}${totalPmids.size > 10 ? '...' : ''}`); } } catch (error: any) { console.error('\n❌ 测试失败:', error.message); if (error.response) { console.error('响应状态:', error.response.status); console.error('响应数据:', error.response.data); } } } console.log('\n' + '='.repeat(60)); console.log('🏁 所有测试完成!'); } // ========== 运行 ========== testDeepSearch().catch(console.error);