Refine story summary prompts and vector sync

This commit is contained in:
2026-01-30 00:55:04 +08:00
parent 6aaed2af4a
commit d87c8a0207
7 changed files with 1174 additions and 432 deletions

View File

@@ -36,7 +36,7 @@ Incremental_Summary_Requirements:
- 转折: 改变某条线走向
- 点睛: 有细节不影响主线
- 氛围: 纯粹氛围片段
- Causal_Chain: 为每个新事件标注直接前因事件IDcausedBy0-2个只填 evt-数字 形式,必须指向已存在事件”或“本次新输出事件”。不要写解释文字
- Causal_Chain: 为每个新事件标注直接前因事件IDcausedBy。仅在因果关系明确(直接导致/明确动机/承接后果)时填写;不明确时填[]完全正常。0-2个只填 evt-数字指向已存在本次新输出事件。
- Character_Dynamics: 识别新角色,追踪关系趋势(破裂/厌恶/反感/陌生/投缘/亲密/交融)
- Arc_Tracking: 更新角色弧光轨迹与成长进度(0.0-1.0)
- World_State_Tracking: 维护当前世界的硬性约束。解决"什么不能违反"。采用 KV 覆盖模型,追踪生死、物品归属、秘密知情、关系状态、环境规则等不可违背的事实。(覆盖式更新)
@@ -215,10 +215,7 @@ Before generating, observe the USER and analyze carefully:
- events.id 从 evt-{nextEventId} 开始编号
- 仅输出【增量】内容,已有事件绝不重复
- keywords 是全局关键词,综合已有+新增
- causedBy 规则
- 数组最多2个无前因则 []
- 只能填 evt-数字(例如 evt-12
- 必须引用“已存在事件”或“本次新输出事件”(允许引用本次 JSON 内较早出现的事件)
- causedBy 仅在因果明确时填写,允许为[]0-2个详见上方 Causal_Chain 规则
- worldUpdate 可为空数组
- 合法JSON字符串值内部避免英文双引号
- 用朴实、白描、有烟火气的笔触记录,避免比喻和意象

View File

@@ -91,11 +91,11 @@ function cleanSummary(summary) {
function buildSystemPreamble() {
return [
"以上内容为因上下文窗口限制保留的可见历史",
"【剧情记忆】为对以上可见不可见历史的总结",
"1) 【世界状态】属于硬约束",
"2) 【事件/证据/碎片/人物弧光】可用于补全上下文与动机。",
"以下【剧情记忆】是对可见不可见历史的总结",
" 【世界约束】记录着已确立的事实",
"• 其余部分是过往经历的回忆碎片",
"",
"请阅读并内化以下剧情记忆:",
"请内化这些记忆:",
].join("\n");
}
@@ -275,7 +275,7 @@ function buildNonVectorPrompt(store) {
if (data.world?.length) {
const lines = formatWorldLines(data.world);
sections.push(`[世界约束] 规则手册,请严格遵守\n${lines.join("\n")}`);
sections.push(`[世界约束] 已确立的事实\n${lines.join("\n")}`);
}
if (data.events?.length) {
@@ -602,7 +602,7 @@ async function buildVectorPrompt(store, recallResult, causalById, queryEntities
// 1. 世界约束
if (assembled.world.lines.length) {
sections.push(`[世界约束] 规则手册,请严格遵守\n${assembled.world.lines.join("\n")}`);
sections.push(`[世界约束] 已确立的事实\n${assembled.world.lines.join("\n")}`);
}
// 2. 核心经历