/** * 聊天功能测试工具 * 用于验证 RAG Grounding 服务和聊天界面是否正常工作 */ import { queryRagGrounding, testRagGroundingConnection, getRagGroundingConfig } from '../services/ragGroundingService'; /** * 控制台日志工具 */ export class ConsoleLogger { static logChatResponse(userInput: string, response: any, totalTime: number) { console.group('🎯 聊天回复详情'); console.log('📝 用户输入:', userInput); console.log('💬 AI 回答:', response.answer); console.log('⏱️ 后端响应时间:', response.response_time_ms + 'ms'); console.log('🕐 前端总耗时:', totalTime + 'ms'); console.log('🤖 使用模型:', response.model_used); console.log('🕐 时间戳:', new Date().toLocaleString()); if (response.grounding_metadata?.sources && response.grounding_metadata.sources.length > 0) { console.log('📚 参考来源 (' + response.grounding_metadata.sources.length + ' 条):'); response.grounding_metadata.sources.forEach((source: any, index: number) => { console.log(` 📖 ${index + 1}. ${source.title}`); if (source.content) { console.log(` 📄 内容: ${JSON.stringify(source.content, null, 2)}`); } if (source.uri) { console.log(` 🔗 链接: ${source.uri}`); } }); } if (response.grounding_metadata?.search_queries && response.grounding_metadata.search_queries.length > 0) { console.log('🔍 搜索查询:', response.grounding_metadata.search_queries); } console.groupEnd(); } static logError(operation: string, error: any) { console.group('❌ 错误详情'); console.log('🔧 操作:', operation); console.log('💥 错误信息:', error); console.log('🕐 时间戳:', new Date().toLocaleString()); console.groupEnd(); } static logSuccess(operation: string, details?: any) { console.group('✅ 操作成功'); console.log('🔧 操作:', operation); if (details) { console.log('📊 详情:', details); } console.log('🕐 时间戳:', new Date().toLocaleString()); console.groupEnd(); } } /** * 测试 RAG Grounding 连接 */ export async function testConnection(): Promise { try { console.log('🔧 测试 RAG Grounding 连接...'); const result = await testRagGroundingConnection(); console.log('✅ 连接测试成功:', result); return true; } catch (error) { console.error('❌ 连接测试失败:', error); return false; } } /** * 测试配置获取 */ export async function testConfig(): Promise { try { console.log('📋 获取 RAG Grounding 配置...'); const config = await getRagGroundingConfig(); console.log('✅ 配置获取成功:', config); return true; } catch (error) { console.error('❌ 配置获取失败:', error); return false; } } /** * 测试简单查询 */ export async function testSimpleQuery(): Promise { try { console.log('🔍 测试简单查询...'); const result = await queryRagGrounding('你好,请介绍一下自己', { sessionId: 'test-session', includeMetadata: true, timeout: 30000 }); if (result.success && result.data) { console.group('✅ 简单查询测试成功'); console.log('💬 AI 回答:', result.data.answer); console.log('⏱️ 响应时间:', result.data.response_time_ms + 'ms'); console.log('🤖 使用模型:', result.data.model_used); console.log('🕐 总耗时:', result.totalTime + 'ms'); if (result.data.grounding_metadata?.sources) { console.log('📚 参考来源数量:', result.data.grounding_metadata.sources.length); result.data.grounding_metadata.sources.forEach((source, index) => { const contentPreview = source.content ? (typeof source.content === 'string' ? source.content.substring(0, 50) : JSON.stringify(source.content).substring(0, 50)) : '无内容'; console.log(` ${index + 1}. ${source.title}: ${contentPreview}...`); }); } if (result.data.grounding_metadata?.search_queries) { console.log('🔍 搜索查询:', result.data.grounding_metadata.search_queries); } console.groupEnd(); return true; } else { console.error('❌ 查询失败:', result.error); return false; } } catch (error) { console.error('❌ 查询异常:', error); return false; } } /** * 测试上下文保持 */ export async function testContextRetention(): Promise { try { console.log('🔄 测试上下文保持...'); const sessionId = `test-context-${Date.now()}`; // 第一个问题 const result1 = await queryRagGrounding('我的名字是张三', { sessionId, includeMetadata: false, timeout: 30000 }); if (!result1.success) { console.error('❌ 第一个查询失败:', result1.error); return false; } // 等待一秒 await new Promise(resolve => setTimeout(resolve, 1000)); // 第二个问题,测试是否记住了名字 const result2 = await queryRagGrounding('你还记得我的名字吗?', { sessionId, includeMetadata: false, timeout: 30000 }); if (result2.success && result2.data) { const contextRetained = result2.data.answer.includes('张三') || result2.data.answer.includes('名字'); console.group('✅ 上下文保持测试结果'); console.log('👤 会话ID:', sessionId); console.log('📝 第一个问题: "我的名字是张三"'); console.log('💬 第一个回答:', result1.data?.answer.substring(0, 150) + '...'); console.log('📝 第二个问题: "你还记得我的名字吗?"'); console.log('💬 第二个回答:', result2.data.answer); console.log('🧠 上下文保持:', contextRetained ? '✅ 成功' : '❌ 失败'); console.log('⏱️ 第一次响应时间:', result1.data?.response_time_ms + 'ms'); console.log('⏱️ 第二次响应时间:', result2.data.response_time_ms + 'ms'); if (contextRetained) { console.log('🎉 AI 成功记住了用户的名字!'); } else { console.warn('⚠️ AI 没有记住用户的名字,上下文可能丢失'); } console.groupEnd(); return true; } else { console.error('❌ 第二个查询失败:', result2.error); return false; } } catch (error) { console.error('❌ 上下文测试异常:', error); return false; } } /** * 运行所有测试 */ export async function runAllTests(): Promise { console.log('🚀 开始运行聊天功能测试...'); const tests = [ { name: '连接测试', fn: testConnection }, { name: '配置测试', fn: testConfig }, { name: '简单查询测试', fn: testSimpleQuery }, { name: '上下文保持测试', fn: testContextRetention } ]; const results: { name: string; success: boolean }[] = []; for (const test of tests) { console.log(`\n--- ${test.name} ---`); try { const success = await test.fn(); results.push({ name: test.name, success }); } catch (error) { console.error(`${test.name} 执行异常:`, error); results.push({ name: test.name, success: false }); } } // 输出测试结果摘要 console.log('\n📊 测试结果摘要:'); results.forEach(result => { console.log(`${result.success ? '✅' : '❌'} ${result.name}: ${result.success ? '通过' : '失败'}`); }); const passedTests = results.filter(r => r.success).length; const totalTests = results.length; console.log(`\n🎯 总体结果: ${passedTests}/${totalTests} 测试通过`); if (passedTests === totalTests) { console.log('🎉 所有测试通过!聊天功能正常工作。'); } else { console.log('⚠️ 部分测试失败,请检查相关配置和服务状态。'); } } // 在浏览器控制台中可以直接调用的测试函数 if (typeof window !== 'undefined') { (window as any).testChatFunction = { testConnection, testConfig, testSimpleQuery, testContextRetention, runAllTests }; console.log('🔧 聊天功能测试工具已加载,可在控制台中使用:'); console.log('- window.testChatFunction.testConnection()'); console.log('- window.testChatFunction.testConfig()'); console.log('- window.testChatFunction.testSimpleQuery()'); console.log('- window.testChatFunction.testContextRetention()'); console.log('- window.testChatFunction.runAllTests()'); }