/** * 深度研究功能调试工具 * * 使用方法: * 1. 在浏览器控制台导入:import { debugResearch } from './utils/debugResearch' * 2. 运行测试:debugResearch.testCreateResearch('测试问题') */ import { researchApi } from '../services/researchApi'; export const debugResearch = { /** * 测试创建研究任务 */ async testCreateResearch(query: string = '什么是量子计算?') { console.group('🔍 测试创建研究任务'); console.log('查询:', query); try { let messageCount = 0; let accumulatedContent = ''; let lastMessage: any = null; const startTime = Date.now(); for await (const message of researchApi.createResearch({ query, output_format: 'model_detailed_report' })) { messageCount++; console.log(`📨 消息 #${messageCount}:`, message); if (message.content) { accumulatedContent += message.content; console.log(`📝 累积内容长度: ${accumulatedContent.length}`); } lastMessage = message; if (message.done) { console.log('✅ 收到完成标记'); console.log('Task ID:', message.task_id); console.log('累积内容:', accumulatedContent); break; } } const duration = Date.now() - startTime; console.log('📊 统计信息:'); console.log('- 总消息数:', messageCount); console.log('- 累积内容长度:', accumulatedContent.length); console.log('- 耗时:', `${duration}ms`); console.log('- 最后消息:', lastMessage); if (!lastMessage?.done) { console.warn('⚠️ 警告: 未收到完成标记'); } if (!lastMessage?.task_id) { console.error('❌ 错误: 未收到 task_id'); } if (!accumulatedContent) { console.error('❌ 错误: 未收到任何内容'); } console.groupEnd(); return { success: !!lastMessage?.done && !!lastMessage?.task_id, messageCount, contentLength: accumulatedContent.length, duration, taskId: lastMessage?.task_id, content: accumulatedContent }; } catch (error) { console.error('❌ 测试失败:', error); console.groupEnd(); throw error; } }, /** * 测试原始 HTTP 请求 */ async testRawRequest(query: string = '什么是量子计算?') { console.group('🔍 测试原始 HTTP 请求'); const API_BASE_URL = import.meta.env.VITE_API_BASE_URL; const url = `${API_BASE_URL}/api/v1/research/create`; console.log('URL:', url); console.log('请求体:', { query, output_format: 'model_detailed_report' }); try { const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': localStorage.getItem('token') || '' }, body: JSON.stringify({ query, output_format: 'model_detailed_report' }) }); console.log('响应状态:', response.status, response.statusText); console.log('响应头:', Object.fromEntries(response.headers.entries())); if (!response.ok) { const errorText = await response.text(); console.error('错误响应:', errorText); console.groupEnd(); return; } const reader = response.body?.getReader(); if (!reader) { console.error('❌ 无法获取 reader'); console.groupEnd(); return; } const decoder = new TextDecoder(); let chunkCount = 0; let totalBytes = 0; while (true) { const { done, value } = await reader.read(); if (done) { console.log('✅ 流结束'); break; } chunkCount++; totalBytes += value.length; const chunk = decoder.decode(value, { stream: true }); console.log(`📦 Chunk #${chunkCount} (${value.length} bytes):`, chunk); } console.log('📊 统计:'); console.log('- 总块数:', chunkCount); console.log('- 总字节数:', totalBytes); console.groupEnd(); } catch (error) { console.error('❌ 请求失败:', error); console.groupEnd(); throw error; } }, /** * 检查环境配置 */ checkConfig() { console.group('⚙️ 环境配置检查'); console.log('API Base URL:', import.meta.env.VITE_API_BASE_URL); console.log('Token:', localStorage.getItem('token') ? '已设置' : '未设置'); const token = localStorage.getItem('token'); if (token) { try { const payload = JSON.parse(atob(token.split('.')[1])); console.log('Token 信息:', payload); } catch (e) { console.error('Token 解析失败'); } } console.groupEnd(); } }; // 在开发环境下挂载到 window 对象 if (import.meta.env.DEV) { (window as any).debugResearch = debugResearch; console.log('💡 调试工具已加载,使用 window.debugResearch 访问'); }