TXT版轻量NotebookLM

基于知识库提问

选择知识库并向AI提问,系统将基于知识库内容为您提供答案

~ 字符

AI回答

支持回答的知识内容

throw new Error(result.detail || '生成失败'); } } catch (error) { console.error('生成错误:', error); generateResultContent.innerHTML = `

生成失败: ${error.message}

`; generateResult.classList.remove('hidden'); // 重新启用按钮 generateBtn.disabled = false; generateAsyncBtn.disabled = false; } } // 检查生成任务状态 async function checkGenerateTaskStatus() { if (!generateTaskId) { alert('没有正在运行的生成任务'); return; } try { const response = await fetch(`/task_status/${generateTaskId}`); const result = await response.json(); if (result.state === 'PENDING') { generateTaskStatusSpan.textContent = '任务等待中...'; } else if (result.state === 'PROGRESS') { generateTaskStatusSpan.textContent = `${result.status} (${result.percent}%)`; // 更新进度条 generateProgress.classList.remove('hidden'); generateProgressBar.style.width = `${result.percent}%`; generateProgressBar.textContent = `${result.percent}%`; } else if (result.state === 'SUCCESS') { generateTaskStatusSpan.textContent = '任务完成'; // 显示结果 const taskResult = result.result; // 保存结果用于导出 lastGeneratedResult = { query: taskResult.query, generated_text: taskResult.generated_text }; let resultHTML = `

生成结果

问题: ${taskResult.query}

生成文案:

${taskResult.generated_text.replace(/\n/g, '
')}

`; // 显示幻觉警告信息 if (taskResult.hallucination_warnings) { const warnings = taskResult.hallucination_warnings; let warningHTML = ''; if (warnings.keywords && warnings.keywords.length > 0) { warningHTML += `

幻觉关键词: ${warnings.keywords.join(', ')}

`; } if (warnings.entities && warnings.entities.length > 0) { warningHTML += `

幻觉实体: ${warnings.entities.join(', ')}

`; } if (warningHTML) { resultHTML += `

⚠️ 检测到可能的幻觉内容:

${warningHTML}

请核对原文确认表述准确性

`; } } generateResultContent.innerHTML = resultHTML; generateResult.classList.remove('hidden'); exportBtn.classList.remove('hidden'); editBtn.classList.remove('hidden'); scoreBtn.classList.remove('hidden'); // 隐藏进度条 generateProgress.classList.add('hidden'); // 标记步骤4为完成 steps[3].classList.add('completed'); } else { generateTaskStatusSpan.textContent = `任务失败: ${result.error}`; // 显示错误 generateResultContent.innerHTML = `

任务失败: ${result.error}

`; generateResult.classList.remove('hidden'); // 隐藏进度条 generateProgress.classList.add('hidden'); } } catch (error) { console.error('检查任务状态错误:', error); generateTaskStatusSpan.textContent = '检查状态失败'; } } // 生成评分 async function scoreGeneration() { if (!lastGeneratedResult || !lastContext || !lastQuery) { alert('没有可评分的内容'); return; } try { // 创建FormData const formData = new FormData(); formData.append('generated_text', lastGeneratedResult.generated_text); formData.append('context', lastContext); formData.append('query', lastQuery); // 发送评分请求 const response = await fetch('/score_generation', { method: 'POST', body: formData }); const scoreResultData = await response.json(); if (response.ok) { // 显示评分结果 displayScoreResult(scoreResultData); } else { throw new Error(scoreResultData.detail || '评分失败'); } } catch (error) { console.error('评分错误:', error); scoreResult.innerHTML = `

评分失败: ${error.message}

`; scoreResult.classList.remove('hidden'); } } // 显示评分结果 function displayScoreResult(scoreData) { let scoreHTML = `

生成评分结果

总分: ${scoreData.total_score || scoreData.score}/100

`; if (scoreData.dimensions) { scoreHTML += `

各维度得分:

`; } if (scoreData.feedback) { scoreHTML += `

反馈意见: ${scoreData.feedback}

`; } if (scoreData.suggestions) { scoreHTML += `

改进建议: ${scoreData.suggestions}

`; } scoreResult.innerHTML = scoreHTML; scoreResult.classList.remove('hidden'); } // 导出为Markdown async function exportToMarkdown() { if (!lastGeneratedResult) { alert('没有可导出的内容'); return; } try { // 创建FormData const formData = new FormData(); formData.append('query', lastGeneratedResult.query); formData.append('generated_text', lastGeneratedResult.generated_text); // 发送导出请求 const response = await fetch('/export_markdown', { method: 'POST', body: formData }); if (response.ok) { // 创建下载链接 const blob = await response.blob(); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = response.headers.get('content-disposition') .split('filename=')[1] .replace(/"/g, ''); document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); document.body.removeChild(a); alert('导出成功!'); } else { throw new Error('导出失败'); } } catch (error) { console.error('导出错误:', error); alert('导出失败: ' + error.message); } } // 导出为DOCX async function exportToDocx() { if (!lastGeneratedResult) { alert('没有可导出的内容'); return; } try { // 创建FormData const formData = new FormData(); formData.append('query', lastGeneratedResult.query); formData.append('generated_text', lastGeneratedResult.generated_text); // 发送导出请求 const response = await fetch('/export_docx', { method: 'POST', body: formData }); if (response.ok) { // 创建下载链接 const blob = await response.blob(); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = response.headers.get('content-disposition') .split('filename=')[1] .replace(/"/g, ''); document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); document.body.removeChild(a); alert('DOCX导出成功!'); } else { throw new Error('导出失败'); } } catch (error) { console.error('导出错误:', error); alert('导出失败: ' + error.message); } } // 打开编辑器 function openEditor() { if (!lastGeneratedResult) { alert('没有可编辑的内容'); return; } currentEditingText = lastGeneratedResult.generated_text; editorTextarea.value = currentEditingText; editorModal.classList.remove('hidden'); editorModal.style.display = 'flex'; // 确保显示 editorModal.style.visibility = 'visible'; // 确保可见 // 防止背景滚动 document.body.style.overflow = 'hidden'; } // 保存编辑 function saveEdit() { const editedText = editorTextarea.value; lastGeneratedResult.generated_text = editedText; // 更新显示内容 const paragraphs = generateResultContent.querySelectorAll('p'); for (let p of paragraphs) { if (p.innerHTML.includes('生成文案:')) { // 找到生成文案的段落并更新内容 const nextP = p.nextElementSibling; if (nextP && nextP.tagName === 'P') { nextP.innerHTML = editedText.replace(/\n/g, '
'); break; } } } // 关闭编辑器 editorModal.classList.add('hidden'); editorModal.style.display = 'none'; // 确保隐藏 editorModal.style.visibility = 'hidden'; // 确保隐藏 // 恢复背景滚动 document.body.style.overflow = 'auto'; editorTextarea.blur(); // 清除焦点 alert('编辑已保存'); } // 取消编辑 function cancelEdit() { // 恢复原始文本 editorTextarea.value = currentEditingText; // 关闭编辑器 editorModal.classList.add('hidden'); editorModal.style.display = 'none'; // 确保隐藏 // 恢复背景滚动 document.body.style.overflow = 'auto'; // 清除焦点 editorTextarea.blur(); // 防止事件冒泡 if (event) { event.stopPropagation(); } // 确保完全隐藏 setTimeout(() => { editorModal.style.visibility = 'hidden'; }, 10); } // 定期检查任务状态 setInterval(() => { if (uploadTaskId) { checkUploadTaskStatus(); } if (generateTaskId) { checkGenerateTaskStatus(); } }, 3000); // 每3秒检查一次