feat: optimize default prompt structure for U-shaped attention + fix opfs/ranking flakes

- Restructure all 7 task templates: add assistant identity-ack and info-ack blocks, restore reference materials to system role, keep only format+rules as user tail
- Fix writeJsonFile treating empty serializedText as valid (opfs-persistence flake)
- Fix shared-ranking test: strip diagnostic lastSearchTimings from side-effect comparison
- Update all related test assertions (prompt-builder-defaults, task-profile-migration, task-profile-storage, prompt-builder-mixed-transcript, p0-regressions, extractor-phase3-layered-context)
This commit is contained in:
Youzini-afk
2026-04-23 00:28:06 +08:00
parent e73407c156
commit e7cb7b31b6
7 changed files with 508 additions and 275 deletions

View File

@@ -69,16 +69,18 @@ const extractPromptBuild = await buildTaskPrompt(settings, "extract", {
const extractPayload = buildTaskLlmPayload(extractPromptBuild, "fallback-user");
assert.equal(extractPayload.systemPrompt, "");
assert.equal(extractPayload.userPrompt, "");
assert.equal(
extractPayload.promptMessages.filter((message) => message.role === "user").length,
2,
);
assert.deepEqual(
extractPayload.promptMessages
.filter((message) => message.role === "user")
.map((message) => message.blockName),
["输出格式", "行为规则"],
);
assert.deepEqual(
extractPayload.promptMessages
.filter((message) => message.role === "assistant")
.map((message) => message.blockName),
["身份确认", "信息确认"],
);
const extractFormatBlock = extractPayload.promptMessages.find(
(message) => message.blockName === "输出格式",
);
@@ -98,10 +100,10 @@ assert.deepEqual(
[
"charDescription",
"userPersona",
"recentMessages",
"graphStats",
"schema",
"currentRange",
"recentMessages",
],
);
@@ -118,9 +120,17 @@ const recallPromptBuild = await buildTaskPrompt(settings, "recall", {
const recallPayload = buildTaskLlmPayload(recallPromptBuild, "fallback-user");
assert.equal(recallPayload.systemPrompt, "");
assert.equal(recallPayload.userPrompt, "");
assert.equal(
recallPayload.promptMessages.filter((message) => message.role === "user").length,
2,
assert.deepEqual(
recallPayload.promptMessages
.filter((message) => message.role === "user")
.map((message) => message.blockName),
["输出格式", "行为规则"],
);
assert.deepEqual(
recallPayload.promptMessages
.filter((message) => message.role === "assistant")
.map((message) => message.blockName),
["身份确认", "信息确认"],
);
assert.deepEqual(
recallPayload.promptMessages
@@ -129,11 +139,11 @@ assert.deepEqual(
[
"charDescription",
"userPersona",
"graphStats",
"sceneOwnerCandidates",
"candidateNodes",
"recentMessages",
"userMessage",
"candidateNodes",
"sceneOwnerCandidates",
"graphStats",
],
);
const recallFormatBlock = recallPayload.promptMessages.find(