main
HuangHai 4 weeks ago
parent c300fab45e
commit bf25c6139d

@ -4,6 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>东师理想教学大模型</title> <title>东师理想教学大模型</title>
<link rel="icon" href="data:,">
<style> <style>
body { body {
font-family: 'Microsoft YaHei', sans-serif; font-family: 'Microsoft YaHei', sans-serif;
@ -281,48 +282,83 @@
function submitQuestion() { function submitQuestion() {
const question = document.getElementById('questionInput').value.trim(); const question = document.getElementById('questionInput').value.trim();
const checkboxes = document.querySelectorAll('input[name="tags"]:checked'); const checkboxes = document.querySelectorAll('input[name="tags"]:checked');
if (!question) { if (!question) {
alert('请输入问题!'); alert('请输入问题!');
return; return;
} }
if (checkboxes.length === 0) { if (checkboxes.length === 0) {
alert('请至少选择一个原稿!'); alert('请至少选择一个原稿!');
return; return;
} }
const selectedDocs = Array.from(checkboxes).map(cb => cb.value); const selectedDocs = Array.from(checkboxes).map(cb => cb.value);
const loader = document.getElementById('loader'); const loader = document.getElementById('loader');
const answerArea = document.getElementById('answerArea'); const answerArea = document.getElementById('answerArea');
answerArea.innerHTML = ''; answerArea.innerHTML = '';
loader.style.display = 'block'; loader.style.display = 'block';
const data = {
query: question,
tags: selectedDocs
};
fetch('/api/rag', { fetch('/api/rag', {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'Accept': 'text/event-stream'
}, },
body: JSON.stringify({ body: JSON.stringify(data)
query: question,
tags: selectedDocs
})
}) })
.then(response => response.json()) .then(response => {
.then(data => { const reader = response.body.getReader();
if (data.reply) { const decoder = new TextDecoder();
answerArea.innerHTML = marked.parse(data.reply); let buffer = '';
MathJax.typeset(); let accumulatedContent = '';
localStorage.setItem('lastMarkdownContent', data.reply);
function processChunk() {
return reader.read().then(({done, value}) => {
if (done) {
loader.style.display = 'none';
return;
}
buffer += decoder.decode(value, {stream: true});
const lines = buffer.split('\n');
buffer = lines.pop();
for (const line of lines) {
if (line.includes('data:')) {
const jsonStr = line.replace(/^data:\s*/, '').replace(/^data:\s*/, '').trim();
if (jsonStr) {
try {
const data = JSON.parse(jsonStr);
if (data.reply) {
accumulatedContent += data.reply;
answerArea.innerHTML = marked.parse(accumulatedContent);
MathJax.typesetPromise();
}
} catch (e) {
console.log('忽略解析错误:', e);
}
}
}
}
return processChunk();
});
} }
loader.style.display = 'none';
return processChunk();
}) })
.catch(error => { .catch(error => {
console.error('Error:', error); console.error('Error:', error);
loader.style.display = 'none'; loader.style.display = 'none';
}); });
}ai.html }
function clearAll() { function clearAll() {
document.getElementById('questionInput').value = ''; document.getElementById('questionInput').value = '';

Loading…
Cancel
Save