Back to Aionui

ACP 单聊 - 会话管理 (F-SESSION)

docs/prds/conversations/acp/session.md

1.9.2511.5 KB
Original Source

ACP 单聊 - 会话管理 (F-SESSION)

本文档由 PM 从 prd-acp-scenarios.md 抽取,保持与源同步。 覆盖技术场景:S-LIFE-01 ~ S-LIFE-17


(F-SESSION-01) 创建新会话 [已实现]

用户故事:作为用户,我希望点击新建按钮后立即看到一个新会话出现在列表中,以便我可以开始与 AI 对话。

正常流程(用户视角):

  1. 用户点击「新建会话」按钮,选择 AI 后端类型(Claude、Codex、Gemini 等)
  2. 系统在会话列表中立即显示新会话条目
  3. 系统托盘菜单同步更新,包含新会话

异常情况

  • 选择了无效的会话类型:系统不创建会话,无任何可见变化
  • 创建过程中发生内部错误:系统仍返回会话记录,但后续操作可能需要重试

验收标准

  • 点击新建后,会话列表立即出现新条目
  • 系统托盘菜单同步更新
  • 支持所有已配置的 AI 后端类型

覆盖场景:S-LIFE-01


(F-SESSION-02) 进入会话并建立连接 [已实现]

用户故事:作为用户,我希望点击一个会话后系统自动完成所有准备工作(连接 AI 后端、认证、恢复上下文),以便我可以直接开始对话。

前置条件:会话已创建(F-SESSION-01)

正常流程(用户视角):

  1. 用户点击进入某个会话
  2. 系统显示「正在连接...」状态
  3. 系统自动完成以下动作(用户无需干预):
    • 连接到对应的 AI 后端
    • 完成认证(如需要)
    • 加载用户已配置且启用的 MCP 工具服务(如数据库查询、API 调用等外部工具)
    • 加载内置 MCP 工具服务(如图像生成等系统预装能力)
    • 加载扩展贡献的 MCP 工具服务(来自已安装的扩展插件)
    • 恢复之前的对话上下文(如有)
    • 恢复用户之前选择的模型和会话模式
  4. 状态变为「已就绪」,用户可以开始输入
  5. AI 可以在对话中调用已注入的所有 MCP 工具

异常情况

  • 连接超时(约 70 秒,Codex 约 150 秒):系统显示连接失败提示
  • 认证失败:系统引导用户手动登录 TODO: 认证失败的引导方式需要具体设计
  • 首次连接失败:系统自动重试一次(用户可能感知短暂延迟),二次失败后提示错误
  • 之前选择的模型已不可用:系统自动回退到默认模型,并提示用户「您之前选择的模型 [xxx] 已不可用,已切换至默认模型」 TODO: 模型不可用的提示方式需要具体设计
  • 会话模式恢复失败:静默回退到默认模式,不影响使用
  • MCP 工具服务加载失败:AI 仍可正常对话,但缺少对应外部工具能力(如无法查数据库) TODO: MCP 工具加载失败的提示方式需要具体设计
  • 用户未配置任何 MCP 工具服务:不影响基本对话功能,AI 仅使用内置能力

不同 AI 后端的差异

  • Claude:首次使用可能需要登录授权
  • Qwen:首次使用可能需要登录授权
  • Codex:连接时间较长(最长约 2.5 分钟),无需额外认证
  • 其他后端:连接时间约 70 秒,认证由后端自行处理

验收标准

  • 进入会话后自动完成连接,用户无需手动操作
  • 连接过程中显示状态指示(连接中 -> 已连接 -> 就绪)
  • 首次连接失败自动重试一次
  • 之前的对话上下文、模型选择、会话模式均能恢复
  • 认证失败时提供明确的引导
  • 并发进入同一会话不会导致重复初始化
  • 用户已启用的 MCP 工具服务在建立连接时自动注入
  • MCP 工具服务加载失败不阻塞会话连接

覆盖场景:S-LIFE-02, S-LIFE-03, S-LIFE-09, S-LIFE-10, S-LIFE-11, S-LIFE-12


(F-SESSION-03) 停止当前 AI 回复 [已实现]

用户故事:作为用户,我希望在 AI 回复过程中可以随时点击停止按钮中断回复,以便我可以修改问题或发送新的指令。

前置条件:AI 正在生成回复

正常流程(用户视角):

  1. AI 正在流式输出内容,界面显示「停止」按钮
  2. 用户点击「停止」按钮
  3. AI 立即停止输出
  4. 已输出的内容保留在对话中
  5. 输入框恢复可用状态,用户可以继续发送消息

异常情况

  • 会话尚未初始化(用户很快点击停止):无任何效果,不报错
  • AI 尚未开始回复时点击停止:无明显效果,界面恢复可用状态
  • AI 恰好在用户点击停止的同时完成回复:用户看到完整回复,停止操作无可见效果

验收标准

  • AI 回复过程中显示「停止」按钮
  • 点击停止后 AI 立即停止输出
  • 连接保持活跃,后续消息可正常发送
  • 已生成的部分回复保留在对话历史中
  • 输入框恢复可用状态
  • 停止操作不会断开连接,后续消息可正常发送

覆盖场景:S-LIFE-05


(F-SESSION-04) 意外断连自动处理 [已实现]

用户故事:作为用户,我希望在 AI 后端意外断开时系统自动处理,下次发消息时无感重新连接,以便我不需要手动操作来恢复会话。

正常流程(用户视角):

  1. 用户在会话中正常使用
  2. AI 后端因网络或其他原因意外断开
  3. 如果 AI 正在回复中:已输出的部分内容保留,界面恢复可用状态,系统提示「连接已断开」
  4. 用户再次发送消息时,系统自动重新连接并恢复会话
  5. 重连成功后消息正常发送,用户无需额外操作

异常情况

  • 自动重连失败:系统提示「无法连接到 AI 后端,请检查网络或稍后重试」
  • AI 后端崩溃:当前回复停止,已输出内容保留,后续消息触发自动重连

验收标准

  • 意外断连时,已输出的部分内容不丢失
  • 断连后当前回复停止,界面恢复可用状态
  • 断连后再次发送消息时自动重连
  • 重连成功后对话上下文��丢失
  • 重连失败时给出明确提示

覆盖场景:S-LIFE-06, S-ERR-03


(F-SESSION-05) 空闲会话自动释放 [已实现]

用户故事:作为用户,我希望长时间不使用的会话能自动释放系统资源,但下次使用时可以无感恢复,以便系统不会因为大量闲置会话而占用过多资源。

正常流程(用户视角):

  1. 用户与 AI 完成对话后,不再发送消息
  2. 会话空闲超过设定时间(默认 5 分钟,可配置)后,系统自动释放后台资源
  3. 用户再次回到该会话发送消息时,系统自动重新连接(参见 F-SESSION-02),用户无需额外操作
  4. 对话历史完整保留,用户体验与未断开时一致

异常情况

  • AI 正在执行定时任务:系统不会释放该会话,直到任务完成

验收标准

  • 空闲超过默认 5 分钟后自动释放后台资源
  • 释放后对话历史完整保留
  • 用户再次操作时自动恢复连接,无缝体验
  • 正在执行定时任务的会话不被释放
  • 用户可在设置中调整空闲超时时间

覆盖场景:S-LIFE-07


(F-SESSION-06) 重置所有会话 [已实现]

用户故事:作为用户,我希望可以一次性重置所有会话的运行状态,以便在系统出现异常时快速恢复。

正常流程(用户视角):

  1. 用户触发「重置所有会话」操作
  2. 系统关闭所有运行中的 AI 后端连接
  3. 会话列表中的会话数据保留,但所有会话回到「未连接」状态
  4. 用户重新进入任意会话时自动重新连接

异常情况

  • 某些会话关闭失败:不影响其他会话的关闭过程

验收标准

  • 所有运行中的连接全部关闭
  • 会话数据(历史、设置)不丢失
  • 单个会话关闭失败不影响整体操作

覆盖场景:S-LIFE-08


(F-SESSION-07) 删除会话 [已实现]

用户故事:作为用户,我希望删除不需要的会话,以便保持会话列表整洁。

正常流程(用户视角):

  1. 用户选择某个会话并点击「删除」
  2. 该会话从列表中移除
  3. 系统托盘菜单同步更新
  4. 如果该会话正在运行中,AI 连接自动断开

异常情况

  • 删除过程中出错:会话可能仍然保留在列表中,用户可重试

验收标准

  • 删除后会话从列表中消失
  • 运行中的会话删除后自动断开连接
  • 系统托盘菜单同步更新
  • 关联的消息历史一并删除

覆盖场景:S-LIFE-16


(F-SESSION-08) 查看会话详情与状态 [已实现]

用户故事:作为用户,我希望能看到会话的实时运行状态,以便了解 AI 当前是否正在处理任务。

正常流程(用户视角):

  1. 用户查看某个会话
  2. 系统显示该会话的详细信息,包括:
    • 会话基本信息(名称、创建时间等)
    • 实时运行状态(运行中 / 已完成 / 未连接)

异常情况

  • 会话已被空闲释放或从未初始化:状态显示为「已完成」

验收标准

  • 会话详情页显示实时运行状态
  • 未连接的会话状态显示为「已完成」

覆盖场景:S-LIFE-14


(F-SESSION-09) 会话迁移 [已实现]

用户故事:作为用户,我希望从旧版本升级后,之前的会话能自动迁移到新格式,以便我不丢失任何对话历史。

正常流程(用户视角):

  1. 系统检测到存在旧格式的会话数据
  2. 自动将旧会话迁移为新格式,包括对话历史和定时任务
  3. 旧会话从列表中消失,新格式会话出现
  4. 用户无需任何操作,迁移过程对用户透明

异常情况

  • 迁移过程失败:旧会话数据保留,不会丢失

验收标准

  • 旧格式会话自动迁移为新格式
  • 迁移后对话历史完整保留
  • 定时任务(如有)一并迁移
  • 迁移失败时旧数据不丢失

覆盖场景:S-LIFE-17


(F-SESSION-10) AI 回复完成处理 [已实现]

用户故事:作为用户,我希望在 AI 完成回复后,界面立即恢复到可输入状态,以便我可以继续对话。无论 AI 是正常完成还是异常中断,界面都应可靠地恢复可用。

正常流程(用户视角):

  1. AI 完成回复,输出最后的文本内容
  2. 界面从「正在回复」状态变为「已完成」状态
  3. 输入框恢复可用,用户可以输入新消息
  4. 如果 AI 回复中包含定时任务指令(如设置提醒),系统自动创建或更新定时任务,并显示系统提示

异常情况(自动恢复)

  • AI 生成了内容但未正常发出完成信号:系统在 15 秒无新内容后自动判定回复完成,恢复界面状态
  • AI 回复请求已发送但未收到任何内容也未收到完成信号:系统自动补发完成信号,恢复界面状态
  • AI 输出了思考过程但没有生成实际内容:回复仍标记为完成
  • AI 正在等待用户审批权限时不会触发自动结束判定

验收标准

  • AI 完成回复后界面立即恢复可输入状态
  • 界面从「正在回复」状态变为「已完成」状态
  • 15 秒无活动后自动恢复界面状态(防止界面卡在「正在回复」)
  • 权限审批期间不触发自动结束
  • 1 秒内重复完成的回合自动去重,不会重复触发通知
  • 定时任务指令被正确识别和执行
  • 无论 AI 是否正常完成回复,界面最终都能恢复可输入状态

覆盖场景:S-LIFE-15, S-LIFE-13, S-UI-03, S-UI-04, S-UI-18, S-ERR-08, S-ERR-09