急诊医学文献智能监测与交互式研习平台

Platform for Literature Research & Intelligent Monitoring in Emergency medicine (PRIME)
🎵 Saffron Chord
0:00 / 0:00
🔊
持续模式
点击播放,适合阅读文献时作为轻音乐背景。

⭐ 我的收藏文献

暂无收藏,在各分类页点击文章旁的 ☆ 按钮收藏

🔍 文献追踪 — 本站2026年收录文献查询

检索词
💬 对话记录
🎯 PICO 结构化提问

更新于 -- · 基于 -- 篇顶刊文献


1. 心脏骤停与复苏

本周在早产儿复苏领域,JAMA发表了一项关于初始复苏中靶向氧浓度的重要研究,探讨了不同氧浓度对早产儿预后的影响,提示精准氧疗策略可能改善神经系统结局。该研究为新生儿复苏指南的更新提供了高质量证据,但后续的通信讨论也指出其结论需结合临床实际谨慎解读。此外,创伤性脑损伤领域的研究显示,小型创伤性颅内出血在常规影像报告中虽常见,但不良事件风险较低,这有助于减少不必要的过度医疗干预。

2. 脓毒症与感染性休克

Intensive Care Medicine发表了一项关于脓毒症心肌病的深度分析,指出目前对舒张功能障碍的解读可能忽略了收缩功能的缺失作用,这一发现挑战了传统的心功能评估框架。研究强调,在脓毒症患者中,单纯依赖舒张功能指标可能高估心肌损伤程度,需结合收缩功能进行综合判断。JAMA上关于社区获得性肺炎精准免疫治疗的回复通信则进一步讨论了免疫调节策略在脓毒症中的个体化应用前景。

3. 卒中与神经急症

Stroke杂志发表了一项随机对照试验,证实基于家庭的监督心肺间歇训练可显著减轻卒中后疲劳并改善心肺适能,为卒中康复提供了低成本、可推广的非药物干预方案。另一项研究利用人工智能优化卒中临床试验知情同意书的可读性,显示出AI在提升患者知情同意质量方面的潜力。基础研究方面,外周电神经刺激通过激活中枢胆碱能环路改善血管性认知障碍大鼠的空间记忆缺陷,为卒中后认知康复开辟了新靶点。

4. 急性冠脉综合征

Circulation发表了ORBITA-FIRE研究,这是一项双盲、随机、安慰剂对照试验,旨在确定心绞痛的生理阈值。该研究通过严谨的假手术对照设计,揭示了冠状动脉狭窄程度与症状感知之间的复杂关系,提示传统基于解剖学或血流储备分数的阈值可能无法完全预测症状。这一发现挑战了现行血运重建决策的生理学依据,强调需结合患者症状进行个体化评估。同期另一项基础研究阐明了CD40-TRAF2/3/5信号通路通过促进巨噬细胞胞葬作用介导心肌梗死后心脏修复,为急性冠脉综合征后的免疫调节治疗提供了新靶点。

5. ARDS与机械通气

Intensive Care Medicine提出应重新审视患者-呼吸机异步现象,呼吁从传统的分类描述转向基于机制的框架,以更精准地识别和处理不同病理生理类型的异步。这一观点有助于推动机械通气管理从经验性调整向精准化治疗转变。此外,J Intensive Care上关于高流量鼻导管氧疗失败预测的回应文章强调,应超越静态指标,结合动态生理评估来识别高风险患者,为临床决策提供了更实用的监测思路。


`; } function exportReferences() { if (!_lastAnswer) return; var ordered = extractOrderedCitations(_lastAnswer); if (ordered.length === 0) { alert('\u672a\u627e\u5230\u5f15\u7528\u6587\u732e'); return; } // Build Vancouver-style reference list var lines = []; for (var i = 0; i < ordered.length; i++) { var c = ordered[i]; var url = resolveCitationUrl(c); var line = (i + 1) + '. ' + c + '.'; if (url) line += ' ' + url; lines.push(line); } var text = lines.join('\n'); var blob = new Blob([text], {type: 'text/plain;charset=utf-8'}); var dlUrl = URL.createObjectURL(blob); var a = document.createElement('a'); var today = new Date().toISOString().slice(0, 10); a.href = dlUrl; a.download = '\u53c2\u8003\u6587\u732e_' + today + '.txt'; a.click(); URL.revokeObjectURL(dlUrl); } // ============ EndNote 导出功能 (RIS/ENW 格式) ============ async function exportReferencesEndNote(format) { // Fallback: get answer from DOM if (!_lastAnswer) { var _ansEls2 = document.querySelectorAll('.ask-answer'); if (_ansEls2.length > 0) { var _lastEl2 = _ansEls2[_ansEls2.length-1]; _lastAnswer = _lastEl2.dataset.rawAnswer || _lastEl2.innerText || ''; } } if (!_lastAnswer) { alert('没有可导出的内容'); return; } // ---- 创建加载提示 ---- const loadingMsg = document.createElement('div'); loadingMsg.id = 'endnote-export-loading'; loadingMsg.style.cssText = [ 'position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);', 'background:rgba(0,0,0,0.88);color:#fff;padding:24px 36px;', 'border-radius:12px;z-index:9999;font-size:14px;text-align:center;', 'min-width:300px;box-shadow:0 8px 32px rgba(0,0,0,0.35);' ].join(''); loadingMsg.innerHTML = '
\ud83d\udcda 正在准备 ' + format.toUpperCase() + ' 文件...
' + '
正在提取文献引用列表...
'; document.body.appendChild(loadingMsg); const setDetail = (msg) => { const el = document.getElementById('endnote-detail'); if (el) el.textContent = msg; }; const removeLoading = () => { const el = document.getElementById('endnote-export-loading'); if (el && el.parentNode) el.parentNode.removeChild(el); }; try { // ========== Step 1: 优先用 prisma_generate_v2 提供的 pmid_list ========== // 这来自 agent_engine 的 sources 列表 (已按出现顺序去重), // 比前端模糊匹配的 _citeUrlMap 更准确。 const seen = new Set(); const pmids = []; const _rawPmidList = window._prismaPmidList || []; if (_rawPmidList.length > 0) { _rawPmidList.forEach(function(p) { if (p && !seen.has(p)) { seen.add(p); pmids.push(p); } }); console.log('[EndNote] Using pmid_list from prisma_generate_v2: ' + pmids.length + ' PMIDs'); } // 如果没有 pmid_list (普通问答模式), 回退到正文提取逻辑 const citationPmids = []; const missingCitations = []; const orderedCitations = extractOrderedCitations(_lastAnswer); orderedCitations.forEach((cite) => { const url = resolveCitationUrl(cite); if (url) { const pmid = pmidFromPubMedUrl(url); citationPmids.push(pmid || ''); if (pmid && !seen.has(pmid)) { seen.add(pmid); pmids.push(pmid); } else if (!pmid) missingCitations.push(cite); } else { citationPmids.push(''); missingCitations.push(cite); } }); // 来源2(兜底):正文中直接嵌入的原始 PubMed URL(部分格式直接含链接) const rawUrlRe = /https?:\/\/pubmed\.ncbi\.nlm\.nih\.gov\/(\d+)/g; let mt; while ((mt = rawUrlRe.exec(_lastAnswer)) !== null) { if (!seen.has(mt[1])) { seen.add(mt[1]); pmids.push(mt[1]); } } console.log('[EndNote] 文内引用数:' + orderedCitations.length + ';已解析 PMID:' + pmids.length + ';未解析:' + missingCitations.length + '(_citeUrlMap 总条目:' + Object.keys(_citeUrlMap || {}).length + ')'); if (missingCitations.length) { console.warn('[EndNote] 未能解析 PMID 的文内引用:', missingCitations); } setDetail('文内引用 ' + orderedCitations.length + ' 条,已匹配 PMID ' + pmids.length + ' 条,正在通过 PubMed 核对...'); // ========== Step 2: 发送到后端 ========== const body = { pmids: pmids, format: format, fetch_from_pubmed: true, review_text: _lastAnswer, citation_keys: orderedCitations, citation_pmids: citationPmids, unresolved_citation_keys: missingCitations }; if (pmids.length === 0) { body.review_text = _lastAnswer; setDetail('未从引用链接找到 PMID,正在分析全文...'); } const response = await fetch('/ai-clone/api/export_endnote', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) }); removeLoading(); if (!response.ok) { let errMsg = '未知错误'; try { const err = await response.json(); errMsg = err.error || errMsg; } catch(e) {} if (response.status === 400 || response.status === 404) { alert('暂无可导出的 PubMed 文献。\n\n可能原因:\n• 当前回答未包含 PubMed 文献引用\n• 请先生成含文献引用的医学综述,再导出'); } else { alert('导出失败: ' + errMsg); } return; } // ========== Step 3: 下载文件 ========== const blob = await response.blob(); const dlUrl = URL.createObjectURL(blob); const a = document.createElement('a'); const today = new Date().toISOString().slice(0, 10); a.href = dlUrl; a.download = 'references_' + today + '.' + format; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(dlUrl); const count = response.headers.get('X-Article-Count') || String(pmids.length); const successMsg = document.createElement('div'); successMsg.style.cssText = [ 'position:fixed;top:20px;right:20px;background:#10b981;color:#fff;', 'padding:12px 20px;border-radius:8px;z-index:9999;font-size:13px;', 'box-shadow:0 4px 12px rgba(0,0,0,0.15);' ].join(''); successMsg.textContent = '\u2713 已导出 ' + count + ' 篇文献(' + format.toUpperCase() + ')'; document.body.appendChild(successMsg); setTimeout(() => { if (successMsg.parentNode) successMsg.parentNode.removeChild(successMsg); }, 3500); console.log('[EndNote] 导出完成:' + count + ' 篇文献,格式 ' + format.toUpperCase()); } catch (err) { removeLoading(); console.error('[EndNote] 导出错误:', err); alert('导出失败,请稍后重试:\n' + err.message); } } function exportReferencesRIS() { exportReferencesEndNote('ris'); } function exportReferencesENW() { exportReferencesEndNote('enw'); } function _guessPptTitle() { const last = _askHistory.length > 0 ? _askHistory[_askHistory.length - 1] : null; const q = last && last.q ? last.q : '急诊医学文献智能研习汇报'; return q.replace(/[\r\n\t]+/g, ' ').replace(/[\\/:*?"<>|]/g, '').slice(0, 60) || '急诊医学文献智能研习汇报'; } function _cleanPptTitle(text) { return (text || '急诊医学文献智能研习汇报').replace(/[\r\n\t]+/g, ' ').replace(/[\\/:*?"<>|]/g, '').replace(/\.(txt|docx|doc)$/i, '').slice(0, 60) || '急诊医学文献智能研习汇报'; } function _getPptSource() { const uploadedOutline = (_askTxtContent || '').trim(); const uploadedName = (_askTxtFileName || '').trim(); const answerOutline = (_lastAnswer || '').trim(); if (uploadedOutline && answerOutline) { const useUpload = confirm('检测到已上传的 TXT/Word 大纲文件:' + uploadedName + '\n\n点击“确定”使用上传文件生成 PPT;点击“取消”则使用最近一次 ASK 智能体回答生成 PPT。'); if (useUpload) { return { outline: uploadedOutline, title: _cleanPptTitle(uploadedName || '上传大纲目录'), question: '基于用户上传的TXT/Word大纲目录生成PPT', sourceType: 'uploaded_outline', sourceFile: uploadedName }; } } if (uploadedOutline) { return { outline: uploadedOutline, title: _cleanPptTitle(uploadedName || '上传大纲目录'), question: '基于用户上传的TXT/Word大纲目录生成PPT', sourceType: 'uploaded_outline', sourceFile: uploadedName }; } if (answerOutline) { return { outline: answerOutline, title: _guessPptTitle(), question: _askHistory.length > 0 ? _askHistory[_askHistory.length - 1].q : '', sourceType: 'ask_answer', sourceFile: '' }; } return null; } function _looksLikePptOutline(text) { if (!text) return false; return /PPT|幻灯片|汇报|讲课|大纲|目录|第\s*\d+\s*页|Slide\s*\d+|建设背景|建设方法|建设结果|讨论|结论/i.test(text); } function _showPptLoading(message) { const loadingMsg = document.createElement('div'); loadingMsg.id = 'ppt-export-loading'; loadingMsg.style.cssText = [ 'position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);', 'background:rgba(15,23,42,0.94);color:#fff;padding:24px 36px;', 'border-radius:14px;z-index:9999;font-size:14px;text-align:center;', 'min-width:330px;box-shadow:0 10px 36px rgba(0,0,0,0.35);' ].join(''); loadingMsg.innerHTML = '
🎞️ 正在调用讯飞 PPT 大模型
' + '
' + (message || '正在根据智能体大纲生成 PPT,请稍候...') + '
' + '
' + '
' + ''; document.body.appendChild(loadingMsg); } function _hidePptLoading() { const el = document.getElementById('ppt-export-loading'); if (el && el.parentNode) el.parentNode.removeChild(el); } function _downloadBlob(blob, filename) { const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = filename; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); } function _pptTemplateCardHtml(t, idx) { const title = (t.style || '模板') + ' · ' + (t.color || '默认') + ' · ' + (t.industry || '通用'); const cover = t.cover || t.coverLarge || ''; return ''; } function choosePptTemplate() { return new Promise(function(resolve) { let resolved = false; const overlay = document.createElement('div'); overlay.id = 'ppt-template-picker'; overlay.style.cssText = 'position:fixed;inset:0;z-index:10000;background:rgba(15,23,42,0.52);backdrop-filter:blur(3px);display:flex;align-items:center;justify-content:center;padding:18px;'; overlay.innerHTML = '
' + '
' + '
选择 PPT 可视化模板
来自讯飞 PPTv2 免费主题模板;也可以跳过,随机生成。
' + '' + '
' + '
' + '' + '' + '' + '' + '
' + '
正在加载模板...
' + '
' + '' + '' + '
' + '
'; document.body.appendChild(overlay); function done(value) { if (resolved) return; resolved = true; overlay.remove(); resolve(value); } async function loadTemplates() { const grid = overlay.querySelector('#pptTplGrid'); grid.innerHTML = '
正在加载模板...
'; const params = new URLSearchParams({pageNum:'1', pageSize:'12'}); ['Style','Color','Industry'].forEach(function(name) { const el = overlay.querySelector('#pptTpl' + name); const key = name.charAt(0).toLowerCase() + name.slice(1); if (el && el.value) params.set(key, el.value); }); try { const res = await fetch('/ai-clone/api/ppt_templates?' + params.toString()); const data = await res.json(); if (!res.ok) throw new Error(data.error || '模板加载失败'); const templates = data.templates || []; if (!templates.length) { grid.innerHTML = '
没有匹配模板,请调整筛选条件。
'; return; } grid.innerHTML = templates.map(_pptTemplateCardHtml).join(''); grid.querySelectorAll('.ppt-template-card').forEach(function(card) { card.addEventListener('click', function() { done({templateId: card.dataset.templateId, label: card.dataset.templateLabel}); }); card.addEventListener('mouseover', function() { card.style.transform = 'translateY(-2px)'; card.style.borderColor = '#2563eb'; }); card.addEventListener('mouseout', function() { card.style.transform = 'none'; card.style.borderColor = '#e5e7eb'; }); }); } catch (err) { grid.innerHTML = '
模板加载失败:' + err.message + '
'; } } overlay.querySelector('#pptTemplateClose').onclick = function(){ done(null); }; overlay.querySelector('#pptTplCancel').onclick = function(){ done(null); }; overlay.querySelector('#pptTplRandom').onclick = function(){ done({templateId:'', label:'随机模板'}); }; overlay.querySelector('#pptTplRefresh').onclick = loadTemplates; overlay.addEventListener('click', function(e) { if (e.target === overlay) done(null); }); loadTemplates(); }); } async function exportAnswerPPT() { const pptSource = _getPptSource(); if (!pptSource || !pptSource.outline) { alert('没有可生成 PPT 的内容。请先上传 TXT/Word 大纲目录,或让 ASK 智能体生成 PPT 大纲。'); return; } if (!_looksLikePptOutline(pptSource.outline)) { const ok = confirm('当前内容不太像 PPT 大纲或目录,仍然发送给讯飞 PPT 大模型生成演示文稿吗?'); if (!ok) return; } const title = pptSource.title; const today = new Date().toISOString().slice(0, 10); const templateChoice = await choosePptTemplate(); if (templateChoice === null) return; _showPptLoading('正在整理大纲、文献来源和标题信息...'); try { const response = await fetch('/ai-clone/api/generate_ppt', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({ title: title, outline: pptSource.outline, question: pptSource.question, sources: _lastSources || [], source_type: pptSource.sourceType, source_file: pptSource.sourceFile, templateId: templateChoice.templateId || '', style: 'academic medical presentation', language: 'zh-CN' }) }); if (!response.ok) { let errMsg = 'PPT 生成失败'; try { const err = await response.json(); errMsg = err.error || errMsg; } catch(e) {} throw new Error(errMsg); } const contentType = response.headers.get('Content-Type') || ''; if (contentType.includes('presentation') || contentType.includes('octet-stream')) { const blob = await response.blob(); _downloadBlob(blob, 'AI智能体PPT_' + today + '.pptx'); } else { const data = await response.json(); if (data.file_base64) { const bytes = atob(data.file_base64); const arr = new Uint8Array(bytes.length); for (let i = 0; i < bytes.length; i++) arr[i] = bytes.charCodeAt(i); _downloadBlob(new Blob([arr], {type:'application/vnd.openxmlformats-officedocument.presentationml.presentation'}), data.filename || ('AI智能体PPT_' + today + '.pptx')); } else if (data.download_url || data.file_url || data.url) { window.open(data.download_url || data.file_url || data.url, '_blank'); } else { throw new Error(data.message || '讯飞接口未返回可下载的 PPT 文件或链接'); } } } catch (err) { alert('PPT 生成失败:' + err.message + '\n\n系统已支持长文本自动整理与重试;如仍失败,请稍后再试或检查 PPTv2 服务额度、APPID/APISecret 和代理服务状态。'); } finally { _hidePptLoading(); } } async function exportAnswerWord() { // Fallback: get answer from DOM if _lastAnswer is empty if (!_lastAnswer) { var _ansEls = document.querySelectorAll(".ask-answer"); if (_ansEls.length > 0) { var _lastEl = _ansEls[_ansEls.length-1]; _lastAnswer = _lastEl.dataset.rawAnswer || _lastEl.innerText || ""; } } if (!_lastAnswer) { alert("\u6ca1\u6709\u53ef\u5bfc\u51fa\u7684\u5185\u5bb9"); return; } const question = _askHistory.length > 0 ? _askHistory[_askHistory.length-1].q : ''; const filename = buildPrimeWordFilename(_lastAnswer, question); try { const response = await fetch('/ai-clone/api/export_word', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ answer: _lastAnswer, question: question, filename: filename }) }); if (!response.ok) { let errMsg = '未知错误'; try { const err = await response.json(); errMsg = err.error || errMsg; } catch(e) {} throw new Error(errMsg); } const blob = await response.blob(); _downloadBlob(blob, filename); } catch (err) { console.error('[Word Export] 导出错误:', err); alert('Word 导出失败:' + err.message); } } function buildPrimeWordFilename(answer, question) { const extractedTitle = extractReviewTitle(answer) || question || 'Untitled Review'; const safeTitle = sanitizeFilenameTitle(extractedTitle) || 'Untitled Review'; return 'PRIME-' + safeTitle + '.docx'; } function extractReviewTitle(answer) { const text = String(answer || '').replace(/\r/g, '\n'); const patterns = [ /【(?:中文|英文)?标题】\s*[::]?\s*([^\n]+)/i, /(?:^|\n)\s*(?:中文标题|英文标题|Title|标题)\s*[::]\s*([^\n]+)/i ]; for (const pattern of patterns) { const match = text.match(pattern); if (match && match[1]) return match[1]; } const lines = text.split('\n').map(function(line) { return line.replace(/^\s{0,3}#{1,6}\s*/, '').replace(/^\s*[*_]{1,3}|[*_]{1,3}\s*$/g, '').trim(); }).filter(Boolean); const reject = /^(摘要|Abstract|关键词|Keywords|引言|Introduction|方法学?|Methods?|结果|Results?|讨论|Discussion|结论|Conclusion|参考文献|References?)\b/i; for (const line of lines) { if (reject.test(line)) continue; if (line.length >= 4 && line.length <= 160) return line; } return ''; } function sanitizeFilenameTitle(title) { return String(title || '') .replace(/<[^>]*>/g, '') .replace(/\[[^\]]{1,30}\]/g, '') .replace(/[\\/:*?"<>|\u0000-\u001f]/g, '-') .replace(/[\s\-__]+/g, ' ') .replace(/[.。\s]+$/g, '') .trim() .slice(0, 90); } document.addEventListener('DOMContentLoaded', function() { _loadAskHistory(); });