mixvideo-v2/apps/desktop/src/utils/testChatFunction.ts

255 lines
8.4 KiB
TypeScript

/**
* 聊天功能测试工具
* 用于验证 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<boolean> {
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<boolean> {
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<boolean> {
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<boolean> {
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<void> {
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()');
}