feat: hide assistant card names in extraction transcript, split sectioned recentMessages into 2 system messages

This commit is contained in:
Youzini-afk
2026-04-12 13:33:39 +08:00
parent 433e62e084
commit f40b03c306
8 changed files with 232 additions and 46 deletions

View File

@@ -224,16 +224,25 @@ function collectAllPromptContent(captured) {
assert.equal(result.success, true);
assert.ok(captured);
const recentBlock = (Array.isArray(captured.promptMessages) ? captured.promptMessages : []).find(
const recentMessages = (Array.isArray(captured.promptMessages)
? captured.promptMessages
: []
).filter(
(m) => m.sourceKey === "recentMessages",
);
assert.ok(recentBlock, "recentMessages block should exist");
const recentContent = String(recentBlock?.content || "");
assert.match(recentContent, /以下是上下文回顾(已提取过),仅供理解剧情/);
assert.match(recentContent, /以下是本次需要提取记忆的新对话内容/);
assert.equal(recentMessages.length, 2, "recentMessages should split into 2 section system messages");
assert.equal(recentMessages[0]?.role, "system");
assert.equal(recentMessages[0]?.transcriptSection, "context");
assert.match(String(recentMessages[0]?.content || ""), /^--- 以下是上下文回顾(已提取过),仅供理解剧情 ---/);
assert.match(String(recentMessages[0]?.content || ""), /#10 \[user\|玩家\]: 第一轮消息/);
assert.equal(recentMessages[1]?.role, "system");
assert.equal(recentMessages[1]?.transcriptSection, "target");
assert.match(String(recentMessages[1]?.content || ""), /^--- 以下是本次需要提取记忆的新对话内容 ---/);
assert.match(String(recentMessages[1]?.content || ""), /#12 \[user\|玩家\]: 第二轮消息/);
assert.ok(
recentContent.indexOf("已提取过") < recentContent.indexOf("本次需要提取"),
"context review should appear before extraction target section",
recentMessages[0].content.includes("提取") &&
recentMessages[1].content.includes("本次需要提取"),
"context and target sections should each be emitted as a single system message",
);
} finally {
restore();