Skip to content

refactor(web,agent,tools): system prompt 只承载稳定内容 - #28

Merged
liut merged 1 commit into
mainfrom
refactor/system-prompt-stable-blocks
Sep 13, 2026
Merged

liut merged 1 commit into
mainfrom
refactor/system-prompt-stable-blocks

Conversation

@liut

@liut liut commented Sep 13, 2026 •

Copy link
Copy Markdown
Owner

system prompt 之前每轮重建,并把时间、SessionID、用户身份、记忆清单、知识库命中一起塞进 system 消息。这些内容逐轮变化,其中记忆清单还带着「用 memory_recall 取正文」这样的祈使句,在 user 角色下读起来像用户本轮的发言,实测会让回复质量随会话推进明显下滑,登录用户尤其明显。

现在 system 只保留不随轮次变化的内容:preset 正文、工具说明、频道说明、记忆引导、技能索引。记忆改由模型按需调用 memory_list / memory_recall;时间新增 current_time 工具承接(无条件注册、无参数、描述一句话);技能索引只给 name 与 description,正文经 skill_read 或 /skill 显式激活取得;知识库命中不再进 prompt;SessionID 与用户身份不再出现在任何消息里。保留一个例外:/skill 是用户显式激活,技能全文以 user 消息注入,位置在历史之后、本轮提问之前。

代价是模型不再知道用户名与 SessionID,时间已由工具补回;Web 侧技能激活入口与身份可见性记在计划 002 的 Deferred 里待定。同时删除了两个失去消费者的配置项:date_in_context 与 SKILL_DIRECT_THRESHOLD。

需求与验收口径见 docs/plans/2026-09-13-002-refactor-system-prompt-prefix-plan.md。go test ./...、make vet、make lint 通过;新增用例锁定稳定块顺序与默认回退、跨轮字节一致、身份不进 prompt、技能索引不含正文、激活消息的序列与位置、用量 MsgCount 口径、时辰换算的 24 个映射点。

上一版把时间、SessionID、身份、记忆清单、技能块合成一条 user 上下文消息插在
历史与本轮提问之间。模型会把这段系统注入的数据当成用户本轮发言,实测明显
影响回复质量;记忆清单的祈使句在 user 角色下也读成了"用户要求你调工具"。

改为:system 只由 preset 正文、工具说明、频道说明、记忆引导与技能索引构成,
常驻数据一律不进任何消息,改为经工具按需获取。

- 记忆走 memory_list/memory_recall 工具,稳定块注入一段记忆引导(仅在记忆
  工具在场时),替代被移除的清单,避免模型想不起去查
- 技能索引恒为 name/description,正文经 skill_read 或 /skill 显式激活取得
- 显式激活以 user 消息注入(# Activated Skill 标题),位置在历史之后、提问
  之前;HTTP 路径没有激活入口,不产生该消息
- 时间改由 current_time 工具承接(无条件注册、描述一句话、无参数;返回本地
  日期时间加一行「当前时辰: 申时」);原 agent.ThisMoment 的时辰换算随之迁入
  tools 包
- promptStore 收窄为 Preset/Skill(提示层不再触碰记忆与知识库);删除失效
  配置 date_in_context 与 SKILL_DIRECT_THRESHOLD

决策与需求记录在 docs/plans/2026-09-13-002-refactor-system-prompt-prefix-plan.md
(R1-R6、U1-U4)。代价是模型不再知道用户名与会话号,记忆与时间都需要主动调
工具。go test ./...、make vet、make lint 均通过。
@liut
liut merged commit c91003e into main Sep 13, 2026
1 check passed
@liut
liut deleted the refactor/system-prompt-stable-blocks branch September 13, 2026 09:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant