预设兼容:按真实抓包对齐装配与包装层,补上声明式工具与预设正则。

- 装配只认 prompt_order.enabled;squash_system_messages 只合并相邻 system(新增 system 档,连接符按酒馆用单换行)
- 包装层:new_chat_prompt、示例对话(new_example_chat_prompt + <START> 切段 + name)、角色卡三块与 personality_format/scenario_format、{{user}}/{{char}} 取值、任务契约并进预设条目
- 工具协议:按 ToolBindings / 伪工具协议数据声明真 tools(presetToolPolicy=preset),工具描述用到的条目不再重复作为消息发出
- 正则:promptOnly 作用于对话历史(含 depth 过滤)、写入时脚本改写回复;{{//}} 注释按配平扫描
- tools/st-request-diff:真假上游抓包对比工具、三份预设的机制结论与实测报告
This commit is contained in:
2026-10-23 00:13:08 +08:00
parent ed09e5c831
commit 9dc927282f
94 changed files with 11558 additions and 413 deletions
+74
View File
@@ -34,6 +34,7 @@
<button type="button" class="st-rail-item" data-section="preference">用户偏好</button>
<button type="button" class="st-rail-item" data-section="preset">预设</button>
<button type="button" class="st-rail-item" data-section="storage">上下文</button>
<button type="button" class="st-rail-item" data-section="chat">直聊</button>
<p class="st-rail-note">保存在本机 <code>~/.writing-agent/</code>,明文、不同步。</p>
</aside>
@@ -106,6 +107,53 @@
</section>
<section class="settings-section hidden" id="section-preset">
<div class="settings-card storage-card">
<h3>发出前的消息整形</h3>
<p class="settings-help">
预设(如酒馆的 <code>squash_system_messages</code>)会要求把相邻同角色的消息合并。
这里默认「跟随预设」,也可以强制覆盖。
</p>
<div class="settings-form">
<div class="form-row">
<span class="form-label" id="preset-squash-label">合并模式</span>
<div class="form-control">
<select id="message-squash" aria-labelledby="preset-squash-label">
<option value="follow-preset">跟随预设</option>
<option value="none">不合并</option>
<option value="merge">合并相同角色连续的发言</option>
<option value="semi">半严格(强制对话角色交替)</option>
<option value="strict">严格(强制对话角色交替、用户最先)</option>
<option value="single-user-turn">单一用户消息(无工具)</option>
</select>
<p class="form-hint">
请求里带工具调用时,后三档会退化为「只合并相邻同角色」,避免拆散工具调用。
</p>
</div>
</div>
<div class="form-row">
<span class="form-label" id="preset-tool-label">预设工具协议</span>
<div class="form-control">
<select id="preset-tool-policy" aria-labelledby="preset-tool-label">
<option value="adapt">适配(把预设要求的工具折算到已有工具上)</option>
<option value="app">只用本应用工具(排除预设的伪工具条目)</option>
<option value="preset">只发预设要求的工具</option>
</select>
</div>
</div>
<div class="form-row">
<span class="form-label"><code>{{char}}</code> 取值</span>
<div class="form-control">
<p class="form-static">
优先用直聊上下文壳里的<strong>角色名</strong>;创作期取<strong>当前作品名</strong>
(对话落盘时给快照起的名字)。都没填时用「作品」。
</p>
</div>
</div>
</div>
<div class="storage-actions">
<button type="button" class="btn-primary" id="btn-save-preset-runtime">保存</button>
</div>
</div>
<div id="presets-list" class="card-list"></div>
<pre id="import-report" class="import-report" hidden></pre>
</section>
@@ -156,6 +204,32 @@
</div>
</div>
</section>
<section class="settings-section hidden" id="section-chat">
<div class="settings-card storage-card">
<h3>直聊卡片拖动</h3>
<p class="settings-help">
在直聊里按住回复卡片拖动(左右切卡片、上下滚正文)时,指针移动 1px 实际滚动多少 px。
</p>
<label class="field">
拖动倍率
<input
type="number"
id="chat-drag-gain"
min="0.5"
max="3"
step="0.1"
value="1.5"
/>
</label>
<p class="settings-help muted">
默认 1.5(拖 100px 走 150px);1 = 跟手;范围 0.5–3。保存后回到直聊刷新即生效。
</p>
<div class="storage-actions">
<button type="button" class="btn-primary" id="btn-save-drag-gain">保存倍率</button>
</div>
</div>
</section>
</div>
</main>
</div>