fix: 诊断提速与稳定性修复(reasoning 2048→512、输出精简、上限16000→8000、loading提示、观测日志+配置错误可读)

This commit is contained in:
LuminousRuoxi
2026-08-25 13:21:49 +08:00
parent d6f70b02f4
commit c04b6a0fd0
6 changed files with 70 additions and 11 deletions
+16 -4
View File
@@ -85,7 +85,7 @@ button,input,textarea{font:inherit}button{cursor:pointer}.hidden{display:none!im
.rewrite-card{min-height:690px}.rewrite-intro{font-size:12px;color:#737b8d;margin-bottom:12px}.rewrite-area{width:100%;min-height:500px;border:1px solid #e2e4ed;border-radius:11px;outline:0;resize:vertical;padding:15px 16px;font:15px/1.8 Georgia,"Times New Roman",serif;color:#2f3443;background:#fff;transition:.15s}.rewrite-area:focus{border-color:#b9baff;box-shadow:0 0 0 3px rgba(86,84,245,.08)}.rewrite-meta{display:flex;justify-content:space-between;gap:10px;margin-top:8px;font-size:11px;color:#9aa0ad}.rewrite-help{margin-top:16px;border-top:1px solid var(--line);padding-top:13px}.help-entry{display:flex;align-items:center;gap:8px;font-size:11.5px;color:#777e8f}.help-entry .btn.link{font-size:11.5px;font-weight:760;padding:0}.help-panel{display:none;margin-top:10px;background:#fafbff;border:1px solid #e6e7f3;border-radius:10px;padding:11px 12px}.help-panel.open{display:block}.help-label{font-size:10px;color:#8b92a3;font-weight:800;margin-bottom:5px}.scaffold{font-size:12px;color:#50586a;line-height:1.7;white-space:pre-wrap}.reference-trigger{margin-top:9px;padding-top:8px;border-top:1px solid #eceef4}.reference{display:none;margin-top:8px;background:#fff;border:1px solid #e6e7ef;border-radius:8px;padding:9px 10px;font-size:11.5px;color:#596174;white-space:pre-wrap;line-height:1.7}.reference.open{display:block}.reference-note{font-size:10px;color:#9198a7;margin-top:6px}.write-tools{border-top:1px solid var(--line);padding:11px 14px;display:flex;justify-content:space-between;gap:10px;align-items:center}.nav-group{display:flex;gap:8px}.demo-hint{font-size:11px;color:#9a9fac}
.submit-row{position:fixed;left:0;right:0;bottom:0;background:linear-gradient(180deg,rgba(246,247,251,0),#f6f7fb 35%);padding:28px 24px 16px;display:flex;justify-content:flex-end;z-index:25;pointer-events:none}.submit-row .submit-inner{width:100%;max-width:1540px;margin:0 auto;display:flex;justify-content:flex-end;align-items:center;gap:12px;pointer-events:auto}.submit-hint{font-size:12px;color:#8a6270}.submit-row .btn{padding:11px 18px}
.demo-panel{position:fixed;left:14px;bottom:14px;z-index:60}.demo-panel details{background:#fff;border:1px solid #dfe2ea;border-radius:10px;box-shadow:0 7px 20px rgba(23,27,42,.08);font-size:11px;color:#7d8495}.demo-panel summary{cursor:pointer;padding:7px 10px;font-weight:700;color:#666e80}.demo-panel .demo-body{padding:0 9px 9px;display:flex;gap:6px;flex-wrap:wrap;max-width:260px}
.loading-card{padding:20px 22px}.loading-title{font-size:16px;font-weight:760;margin-bottom:10px}.loading-row{display:flex;align-items:center;gap:9px;padding:7px 0;color:#687084;font-size:12px}.spinner{width:17px;height:17px;border:2px solid #dfe1ff;border-top-color:var(--brand);border-radius:50%;animation:spin .8s linear infinite}.loading-dot{width:8px;height:8px;border-radius:50%;background:#d7dbe6}.loading-row.active{color:#4247c7;font-weight:650}.loading-row.active .loading-dot{background:var(--brand)}@keyframes spin{to{transform:rotate(360deg)}}
.loading-card{padding:20px 22px}.loading-title{font-size:16px;font-weight:760;margin-bottom:10px}.loading-row{display:flex;align-items:center;gap:9px;padding:7px 0;color:#687084;font-size:12px}.spinner{width:17px;height:17px;border:2px solid #dfe1ff;border-top-color:var(--brand);border-radius:50%;animation:spin .8s linear infinite}.loading-dot{width:8px;height:8px;border-radius:50%;background:#d7dbe6}.loading-row.active{color:#4247c7;font-weight:650}.loading-row.active .loading-dot{background:var(--brand)}.loading-hint{color:#b9770b;font-size:12px;font-weight:600;margin-top:8px}@keyframes spin{to{transform:rotate(360deg)}}
@media(max-width:1180px){.entry-shell{grid-template-columns:1fr 320px}.work-grid{gap:9px;padding-left:12px;padding-right:12px}.work-head{padding-left:14px;padding-right:14px}.pane-head{padding:0 12px}.progress-track{width:100px}.paragraph-switcher{max-width:min(280px,38vw)}}
@media(max-width:900px){.work-grid{grid-template-columns:1fr}.sticky-pane{position:relative;top:auto;max-height:none}.pane-card{min-height:auto}.rewrite-area{min-height:360px}.submit-row{position:relative;padding:0 12px 20px}.work-head-inner{align-items:flex-start}.progress-mini{min-width:0}.demo-panel{display:none}}
@media(max-width:760px){.entry-shell{display:block;height:auto}.essay-pane{padding:24px 18px}.smart-pane{border-top:1px solid var(--line)}.smart-body{padding:24px 18px}.top-actions{display:none}.chat-wrap{padding:20px 12px 120px}.message{grid-template-columns:30px 1fr;gap:8px}.avatar{width:30px;height:30px}.bubble{padding:16px}.user .bubble{max-width:90%}.agent-table{font-size:11px}.work-grid{padding:12px}.work-head{padding:12px}.work-head-inner{display:block}.progress-mini{margin-top:8px;justify-content:flex-start}.progress-track{width:120px}.original-pane-head{height:auto;min-height:58px;flex-wrap:wrap;padding-top:9px;padding-bottom:9px}.paragraph-switcher{margin-left:0;max-width:100%}.pane-body{padding:14px}}
@@ -276,8 +276,19 @@ function scrollChat(){setTimeout(()=>window.scrollTo({top:document.body.scrollHe
function addUser(text, silent){const m=document.createElement('div');m.className='message user';m.innerHTML=`<div class="bubble"><p>${escapeHtml(text)}</p></div>`;chat.appendChild(m);if(!silent){m._logId=++chatLogSeq;chatLog.push({id:m._logId,t:'user',text});}scrollChat();}
function addAgent(html, silent){const m=document.createElement('div');m.className='message';m.innerHTML=`<div class="avatar">AI</div><div class="bubble">${html}</div>`;chat.appendChild(m);if(!silent){m._logId=++chatLogSeq;chatLog.push({id:m._logId,t:'msg',html});}scrollChat();return m;}
function addLoadingCard(title, rows){
const list = (rows||['真实模型生成中,可能需要十几秒']).map((t,i)=>`<div class="loading-row${i===0?' active':''}"><span class="loading-dot"></span>${escapeHtml(t)}</div>`).join('');
return addAgent(`<div class="loading-card"><div class="loading-title"><span class="spinner" style="display:inline-block;vertical-align:-3px;margin-right:8px"></span>${escapeHtml(title)}</div>${list}</div>`);
const list = (rows||['真实模型生成中,通常需要 12 分钟']).map((t,i)=>`<div class="loading-row${i===0?' active':''}"><span class="loading-dot"></span>${escapeHtml(t)}</div>`).join('');
const el = addAgent(`<div class="loading-card"><div class="loading-title"><span class="spinner" style="display:inline-block;vertical-align:-3px;margin-right:8px"></span>${escapeHtml(title)}</div>${list}</div>`);
// 真实模型生成可能超过 1 分钟(同事实测 diagnose 卡 5 分钟误以为死机):
// 45s / 120s 时在卡内追加进度提示,避免"一直在转但没有反馈"
const hint = document.createElement('div');
hint.className = 'loading-hint';
hint.style.display = 'none';
const card = el.querySelector('.loading-card');
if(card) card.appendChild(hint);
const showHint = (msg) => { if(!document.body.contains(el)) return; hint.textContent = msg; hint.style.display = ''; };
setTimeout(()=>showHint('仍在生成中,首次通常需要 1–3 分钟…'), 45000);
setTimeout(()=>showHint('已超过 2 分钟,如长时间无响应可稍后重试。'), 120000);
return el;
}
function removeEl(el){
// transient 卡片(loading/过渡提示/错误重试)从 DOM 移除时同步从历史快照删除,避免刷新后"复活"
@@ -599,7 +610,8 @@ async function runAnalyze(){
ensureParaState();
track('human_voice_analysis_start', {paragraphs: paragraphs.length});
show('agentView'); chat.innerHTML=''; chatLog=[]; agentStage='loading';
const loading = addAgent(`<div class="loading-card"><div class="loading-title"><span class="spinner" style="display:inline-block;vertical-align:-3px;margin-right:8px"></span>正在读懂这篇文书…</div><div class="loading-row active"><span class="loading-dot"></span>正在结合题目理解全文</div><div class="loading-row"><span class="loading-dot"></span>正在确认每一段实际表达的内容</div><div class="loading-row"><span class="loading-dot"></span>正在整理需要与你确认的理解</div></div>`);
// 统一走 addLoadingCard:带 45s/120s 超时提示(真实模型生成可能超过 1 分钟)
const loading = addLoadingCard('正在读懂这篇文书…', ['正在结合题目理解全文','正在确认每一段实际表达的内容','正在整理需要与你确认的理解']);
const rows = loading.querySelectorAll('.loading-row');
const t1 = setTimeout(()=>{rows[0].classList.remove('active');rows[1].classList.add('active')},650);
const t2 = setTimeout(()=>{rows[1].classList.remove('active');rows[2].classList.add('active')},1300);