Files
zclaw_openfang/docs/plans/new-session-prompt-roadmap.md
iven 0d4fa96b82
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
refactor: 统一项目名称从OpenFang到ZCLAW
重构所有代码和文档中的项目名称,将OpenFang统一更新为ZCLAW。包括:
- 配置文件中的项目名称
- 代码注释和文档引用
- 环境变量和路径
- 类型定义和接口名称
- 测试用例和模拟数据

同时优化部分代码结构,移除未使用的模块,并更新相关依赖项。
2026-03-27 07:36:03 +08:00

10 KiB
Raw Permalink Blame History

ZCLAW 新会话提示词后续工作计划

一、目标

围绕 ZCLAW 的“新会话提示词”能力,完成一条从 真实 Agent 配置真实会话初始化行为 的可交付链路。

这项能力的目标不是增加一个前端文本框,而是让用户可以:

  • 为当前 Agent 设置默认的新会话提示词
  • 在开启某个新会话时临时覆盖这段提示词
  • 让提示词真实影响本次会话第一轮 Agent 行为
  • 让该能力在快速配置、右侧 Agent 面板、聊天区之间语义一致

二、当前已确认基础

以下基础能力已经打通,可作为本轮工作的前提:

  • Gateway 连接稳定可用
  • token 注入、自动连接、Control UI 握手已修好
  • zclaw-ui 插件已加载
  • zclaw.clones.listzclaw.plugins.status 可用
  • Agent 创建、右侧 Agent 面板编辑、保存回刷已验证通过
  • 快速配置应视为创建/更新 ZCLAW Agent
  • 右侧 Agent 面板已经是当前 Agent 配置的真实编辑入口

这意味着“新会话提示词”应该优先挂在 Agent Profile 真实配置链路 上,而不是再创建一套独立的本地状态。


三、问题定义

当前“新对话”链路还存在几个明显缺口:

3.1 会话初始化仍是本地 UI 行为

现状:

  • chatStore.newConversation() 只清空本地消息与 sessionKey
  • 首次发送时才临时生成 sessionKey
  • 当前没有“会话初始化参数”的明确模型

影响:

  • 新会话无法承载独立初始化上下文
  • 会话开场行为不可控、不可审计

3.2 Agent 配置与新会话行为未打通

现状:

  • Agent 已有真实配置入口
  • 但聊天区不会消费“新会话默认提示词”这一能力

影响:

  • Agent 身份和会话起始行为割裂
  • 用户改了 Agent不一定影响新会话

3.3 当前没有原生会话初始化协议

现状:

  • 当前 Gateway agent 请求只传 message / sessionKey / model
  • 尚未形成 sessionInitagentIdconversationContext 等结构化初始化协议

影响:

  • 若不做桥接,“新会话提示词”很难真实生效

四、设计原则

4.1 必须改变真实运行行为

验收标准不是“页面上能输入”,而是:

  • 第一条发给 Gateway 的真实消息已经体现新会话提示词
  • 不同会话可以有不同初始化上下文
  • 会话恢复后能够看出本会话使用过什么提示词

4.2 必须依附真实 Agent 配置链路

能力入口必须统一在以下两处:

  • 快速配置创建 Agent
  • 右侧 Agent 面板编辑当前 Agent

不新增与 Agent 平行、脱节的新设置体系。

4.3 先做最小真实闭环,再继续原生化

本轮优先实现:

  • Agent 级默认 newSessionPrompt
  • 会话级 sessionPromptDraft
  • 首轮消息注入

后续再根据 Gateway / ZCLAW 演进升级为结构化原生协议。


五、目标能力定义

5.1 Agent 级默认提示词

语义:

  • 某个 Agent 在每次开始新会话时默认携带的启动上下文
  • 属于 Agent Profile 的一部分
  • 可以由快速配置或右侧 Agent 面板编辑

建议字段:

  • newSessionPrompt?: string

5.2 会话级临时覆盖

语义:

  • 仅对本次新会话生效
  • 发出第一条用户消息前可编辑
  • 发出后固化到会话元数据中,不应在后续回合反复注入

建议字段:

  • sessionPromptDraft: string
  • conversation.sessionPrompt?: string | null

5.3 首轮运行时注入

语义:

  • 前端保留原始用户输入展示
  • 发送给 Gateway 的第一条消息在内部包装为“新会话提示词 + 原始用户问题”
  • 从而让提示词立即影响真实模型行为

六、实施阶段拆分

Phase 1数据模型与 RPC 链路补齐

目标

让“新会话提示词”成为真实 Agent 数据结构的一部分。

涉及位置

  • plugins/zclaw-ui/index.ts
  • desktop/src/store/gatewayStore.ts
  • desktop/src/store/chatStore.ts
  • desktop/src/components/CloneManager.tsx
  • desktop/src/components/RightPanel.tsx

具体任务

  • 插件层 CloneConfig 增加 newSessionPrompt
  • zclaw.clones.create/update/list 全链路透传该字段
  • 前端 Clone、快速配置草稿、右侧面板草稿模型补齐字段
  • 保证创建后、编辑后、刷新后都能回刷正确数据

交付物

  • Agent Profile 可持久化 newSessionPrompt
  • UI 能读取并展示该字段

验收标准

  • 创建 Agent 时可设置默认新会话提示词
  • 右侧 Agent 面板可编辑并保存该字段
  • 重新连接或刷新后字段仍存在

Phase 2聊天会话模型扩展

目标

为“新会话提示词”建立真正的会话级承载结构。

具体任务

  • chatStore 增加 sessionPromptDraft
  • Conversation 增加 sessionPromptagentId
  • newConversation() 时重置当前会话的提示词草稿
  • 当切换 Agent 且当前尚未开始聊天时,提示词草稿应回填为当前 Agent 默认值
  • 切换到历史会话时,恢复该会话使用过的 sessionPrompt

交付物

  • 会话层面拥有独立的提示词状态
  • 会话与 Agent 的关系更清晰

验收标准

  • 新会话默认读取当前 Agent 的默认提示词
  • 修改草稿只影响当前新会话,不污染其他历史会话
  • 切回历史会话时能恢复对应提示词信息

Phase 3首轮消息注入打通真实运行行为

目标

让“新会话提示词”真正影响 Gateway 收到的第一条消息。

具体任务

  • chatStore.sendMessage() 判断当前是否为该会话首轮用户消息
  • 若有有效 sessionPromptDraft,则构造包装后的发送内容
  • UI 中仍展示用户原始输入,不暴露包装结构
  • 首轮发出后,将实际使用过的提示词固化到当前 Conversation
  • 后续同一会话继续发送消息时不重复注入

建议包装格式

[ZCLAW_NEW_SESSION_PROMPT]
<session prompt>
[/ZCLAW_NEW_SESSION_PROMPT]

[USER_MESSAGE]
<original user message>
[/USER_MESSAGE]

交付物

  • 新会话提示词真正进入第一轮 Gateway 请求
  • 该能力不再是展示层占位

验收标准

  • 第一轮消息有提示词时,模型行为明显受影响
  • 第二轮起不再重复注入
  • 无提示词时发送链路与当前一致

Phase 4交互与可见性优化

目标

让用户知道“当前会话将以什么上下文启动”,同时避免界面复杂度失控。

具体任务

  • 在聊天区空态增加“新会话提示词”输入区
  • 提供简洁说明文案,明确这是“仅本次会话”的覆盖入口
  • 在右侧 Agent 面板非编辑态显示默认新会话提示词摘要
  • 在历史会话列表或会话详情中,保留轻量提示,帮助用户理解该会话的启动上下文

交付物

  • 新会话前可见、可改、可理解
  • Agent 默认值与会话覆盖值关系明确

验收标准

  • 用户能区分“Agent 默认值”和“当前会话覆盖值”
  • 用户不会误以为这是长期人格或全局系统提示词

Phase 5质量保障与回归验证

目标

确保能力上线后不会破坏现有已打通链路。

测试范围

  • Agent 创建后默认提示词可保存
  • 右侧 Agent 面板编辑提示词可回刷
  • 新会话读取默认值
  • 新会话覆盖值只作用于当前会话
  • 首轮消息注入只发生一次
  • 切换历史会话后元数据恢复正确
  • 无提示词情况下原有发送链路不回归

建议验证方式

  • Store 层单元测试
  • 关键组件交互测试
  • 手工联调验证 Gateway 请求行为

交付物

  • 至少覆盖核心 store 行为的测试
  • 一份人工回归清单

验收标准

  • 核心交互不回归
  • 会话状态与 Agent 状态一致性可验证

七、推荐执行顺序

建议按以下顺序推进,避免前后反复返工:

第一步

先做 Phase 1

原因:

  • 没有真实字段,就谈不上后续真实会话能力
  • 这一步风险最低,收益明确

第二步

Phase 2

原因:

  • 会话级草稿与历史恢复能力是首轮注入的前提

第三步

Phase 3

原因:

  • 这是从“有配置”到“真生效”的关键跃迁
  • 也是这轮工作的核心里程碑

第四步

Phase 4 + Phase 5

原因:

  • 在核心链路稳定后,再做可见性和质量封口最合适

八、本轮建议的最小可交付版本

如果本轮只做一个最小但高价值版本,建议交付以下内容:

  • 插件与前端数据模型支持 newSessionPrompt
  • 快速配置与右侧 Agent 面板都可编辑该字段
  • 聊天区空态可查看/修改当前新会话提示词
  • 首轮消息自动注入该提示词
  • 会话中记录本次实际使用的提示词

这版已经满足:

  • 有真实配置入口
  • 有真实运行时行为
  • 有会话级语义
  • 能被用户实际使用

九、主要风险与处理策略

风险 1当前 selected Agent 还未完全映射到 ZCLAW runtime agent

影响:

  • 即使 Agent Profile 已切换,底层仍可能没有原生 agent routing

处理:

  • 本轮先用“首轮消息注入”保证真实行为变化
  • 后续把 agentId 传输与 runtime routing 作为独立里程碑推进

风险 2提示词注入格式可能影响回答质量

影响:

  • 包装格式不佳时,可能让模型输出不稳定

处理:

  • 采用清晰、边界明确的包裹格式
  • 在真实模型上做几组样例测试

风险 3会话切换与持久化逻辑容易变脆

影响:

  • 草稿、历史会话、当前会话三者状态可能串扰

处理:

  • 优先把 store 状态边界设计清楚
  • 先覆盖核心状态迁移测试,再做 UI 微调

十、完成定义

当以下条件同时满足时,可视为“新会话提示词”能力第一阶段完成:

  • Agent 默认新会话提示词可创建、编辑、保存、回刷
  • 新会话开始前用户可临时覆盖该提示词
  • 首轮真实发送到 Gateway 的消息中包含该提示词上下文
  • 同一会话后续消息不重复注入
  • 历史会话可以恢复其实际使用过的提示词信息
  • 快速配置、右侧 Agent 面板、聊天区三处语义一致

十一、下一步建议

在本计划落地后,建议立即开始:

  • P1先补数据模型与插件透传
  • P2再补 chatStore 的会话级状态模型
  • P3最后接入首轮消息注入并做联调验证

这会以最小改动建立一条真正可用的闭环,也是当前最符合 ZCLAW 产品化推进方向的高杠杆路径。