發佈 0.1.12:會話模式新增「每則獨立」,ctx 達 80% 自動開新會話

根本原因:
會話越用越慢——每張生成圖都會塞回上下文,實測同一會話從 36 秒
一路漲到 135 秒,也更容易在串流時被切斷。

修法:
1. 會話模式 sharedSession 布林改為 sessionMode(per-chat / shared / stateless),
   stateless = 每則訊息獨立、不保留記憶,適合單張生圖這類不需上下文的 bot;
   舊設定檔的 sharedSession 自動相容轉換。
2. 新增 autoResetCtxPercent(預設 80):任一會話上下文用量達門檻即自動
   開新會話並在回覆末尾提示,避免無限累積。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-17 16:18:33 +08:00
co-authored by Claude Fable 5
parent cfa61aa01a
commit 24c66130d0
5 changed files with 54 additions and 25 deletions
+6 -5
View File
@@ -224,8 +224,9 @@
<select id="f-session">
<option value="per-chat" selected>各聊天室獨立(私訊、每個群組各自記憶)</option>
<option value="shared">所有聊天室共用(同一條記憶,適合單一專案助理)</option>
<option value="stateless">每則訊息獨立(不保留記憶,最快;適合單張生圖)</option>
</select>
<div class="hint">共用模式下 /new 會清掉所有聊天室的記憶</div>
<div class="hint">記憶會隨對話變慢(尤其含圖);用量達 80% 時所有模式都會自動開新會話</div>
</div>
<div class="field">
<label class="check" style="margin-top:2px"><input type="checkbox" id="f-network"> 允許 Codex 連網</label>
@@ -386,8 +387,8 @@ function renderBots(bots) {
'<td>' + statusBadge(b.status) + '</td>' +
'<td><span class="mono" title="' + esc(b.workDir) + '">' + esc(shortPath(b.workDir)) + '</span></td>' +
'<td class="mono">' + esc(b.sandbox || '-') +
((b.model || b.reasoningEffort || b.sharedSession || b.networkAccess)
? '<br><span class="script-name">' + esc([b.model, b.reasoningEffort, b.sharedSession ? '共用會話' : '', b.networkAccess ? '可連網' : ''].filter(Boolean).join(' / ')) + '</span>'
((b.model || b.reasoningEffort || b.sessionMode !== 'per-chat' || b.networkAccess)
? '<br><span class="script-name">' + esc([b.model, b.reasoningEffort, b.sessionMode === 'shared' ? '共用會話' : b.sessionMode === 'stateless' ? '無記憶' : '', b.networkAccess ? '可連網' : ''].filter(Boolean).join(' / ')) + '</span>'
: '') + '</td>' +
'<td class="mono">' + esc(b.tokenMasked || '-') + '</td>' +
'<td>' + fmtBytes(b.memory) + '</td>' +
@@ -479,7 +480,7 @@ function openEdit(name) {
document.getElementById('f-workdir').value = b.workDir || '';
document.getElementById('f-sandbox').value = b.sandbox || 'workspace-write';
populateModelSelects(b.model || '', b.reasoningEffort || '');
document.getElementById('f-session').value = b.sharedSession ? 'shared' : 'per-chat';
document.getElementById('f-session').value = b.sessionMode || 'per-chat';
document.getElementById('f-network').checked = !!b.networkAccess;
document.getElementById('f-timeout').value = b.timeoutMinutes || 30;
document.getElementById('f-autostart-wrap').style.display = 'none';
@@ -501,7 +502,7 @@ async function saveBot() {
sandbox: document.getElementById('f-sandbox').value,
model: document.getElementById('f-model').value,
reasoningEffort: document.getElementById('f-effort').value,
sharedSession: document.getElementById('f-session').value === 'shared',
sessionMode: document.getElementById('f-session').value,
networkAccess: document.getElementById('f-network').checked,
timeoutMinutes: document.getElementById('f-timeout').value,
};