Files
writing-agent/tools/st-request-diff/peek-tools-shape.mjs
chenmoranzhi 9dc927282f 预设兼容:按真实抓包对齐装配与包装层,补上声明式工具与预设正则。
- 装配只认 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:真假上游抓包对比工具、三份预设的机制结论与实测报告
2026-10-23 00:13:08 +08:00

19 lines
930 B
JavaScript

// 看酒馆工具模式请求里的 tools 定义全文,以及 Reborn 预设里的 ToolBindings 结构。
import { readFileSync } from "node:fs";
const capture = process.argv[2];
const body = JSON.parse(JSON.parse(readFileSync(capture, "utf8")).body);
console.log("=== 抓包里的 tools ===");
console.log(JSON.stringify(body.tools, null, 1).slice(0, 3000));
console.log("=== tool_choice: " + JSON.stringify(body.tool_choice));
const presetFile = process.argv[3];
if (presetFile) {
const raw = JSON.parse(readFileSync(presetFile, "utf8"));
const spreset = raw.extensions?.SPreset ?? raw.extensions?.spreset ?? null;
console.log("=== 预设 extensions 键: " + Object.keys(raw.extensions || {}).join(", "));
const bindings = spreset?.ToolBindings ?? raw.extensions?.ToolBindings ?? null;
console.log("=== ToolBindings ===");
console.log(bindings ? JSON.stringify(bindings, null, 1).slice(0, 2000) : "(无)");
}