QwenPaw 编写插件让 会话(频道) 支持 分支(fork),回退(rewind),重新生成(regen)

前言,QwenPaw 太久没有增加这个支持,但是这个功能非常需要。我只能靠AI辅助下,手动写一个插件来实现这个功能了。

实现3个基础功能,支持 fork rewind 和 regen。

仓库:https://github.com/one-sixth/qwenpaw-plugin-session-tools

https://gitee.com/ONE_SIX_MIX/qwenpaw-plugin-session-tools

🛠️ QwenPaw会话增强工具 (qwenpaw-plugin-session-tools)

为 QwenPaw 提供会话管理能力:回退对话 、分叉会话 、重新生成回复。

📋 功能

命令 功能 说明
/rewind [N] ⏪ 回退 N 轮对话 删除最后 N 组用户+助手消息,默认 1 轮
/fork [N] 🍴 分叉新会话 从 N 轮前分叉出新会话(默认 0=全部分叉)
/regen 🔄 重新生成回复 删掉最后一轮,让 AI 重新生成

使用示例

复制代码
/rewind         → 回退 1 轮
/rewind 3       → 回退 3 轮
/fork           → 完整复制当前会话为新会话
/fork 2         → 从 2 轮前分叉,保留最后 2 轮上下文
/regen          → 重新生成上一条回复

📦 安装

方法一:官方命令安装(推荐)

bash 复制代码
qwenpaw plugin install <插件目录路径> --force

例如:

bash 复制代码
qwenpaw plugin install D:/插件测试/qwenpaw-plugin-session-tools --force

方法二:QwenPaw的插件管理安装(QwenPaw版本大于v1.8.1 推荐)

前往QwenPaw的webui中的插件管理,点击安装插件,然后把下载的插件压缩包拖放进去

方法三:手动复制到插件目录

将 qwenpaw-plugin-session-tools 目录复制到插件目录:

bash 复制代码
cp -r qwenpaw-plugin-session-tools ~/.qwenpaw/plugins/

加载插件

使用官方命令安装方法,立即生效。手动复制方法,重启 QwenPaw 后生效。

🏗️ 架构

复制代码
session-tools/
├── plugin.json      # 插件元数据(名称、版本、入口等)
├── plugin.py        # 入口文件:命令拦截、monkey patch、命令分发
├── session_ops.py   # 核心操作:会话文件的读写、消息解析、rollback/fork/regen
└── README.md        # 本文件

关键设计

  • 命令拦截 :通过 monkey patch AgentRunner.query_handler 拦截 /fork、/rewind、/regen 命令,在命令到达 Agent 之前处理
  • 会话操作 :SessionOperator 类封装了会话文件的读取、解析、写入,自动处理多 agent 工作区隔离
  • 消息格式 :实际消息存储在 agent.memory.content 中,每条消息为 [{msg_dict}, {extra}] 的列表对格式
  • WebUI 集成 :
    • /fork 通过 ChatManager.create_chat() 注册新会话,自动命名 Fork #N 原名称(编号递增)
    • /rewind 提示刷新页面以显示更新后的会话
    • /regen 即时重跑 AI 流程,无需刷新

⚙️ 工作原理

/rewind [N]

复制代码
1. 读取会话文件中的消息列表
2. 找到最后 N 个用户消息的索引位置
3. 截断:保留该位置之前的所有消息
4. 写回会话文件

/fork [N]

复制代码
1. 读取源会话文件
2. 若 N>0:保留最后 N 轮对话的消息
3. 生成新会话 ID(基于源 ID + 时间戳)
4. 写入新会话文件
5. 通过 ChatManager 注册,WebUI 可见

/regen

复制代码
1. 截断会话:删除最后一条用户消息及之后的所有内容
2. 提取该用户消息的文本
3. 用该文本替换 "/regen" 命令
4. 走原始 Agent 处理流程 → AI 重新生成回复

📂 会话文件位置

复制代码
{workspace_dir}/sessions/{channel}/{user_id}_{sanitized_session_id}.json

示例:

复制代码
C:/Users/ABC/.qwenpaw/workspaces/default/sessions/wecom/企微会话1.json

🔧 技术细节

  • 运行目录 :~/.qwenpaw/plugins/qwenpaw-plugin-session-tools/
  • 插件类型 :command
  • 内部 API :使用 SafeJSONSession 的 update_session_state / get_session_state_dict 方法
  • 多 agent 支持 :SessionOperator 按 agent_id 缓存,每个 agent 工作区独立
  • 消息存储 :state.agent.memory.content(列表对格式)
  • 新会话注册 :通过 ChatManager.create_chat(ChatSpec) 确保 WebUI 可见

📝 注意事项

  • /rewind 后请刷新 WebUI 页面以查看更新后的会话
  • /regen 会丢弃上一轮的所有上下文(包括 tool_call、搜索结果等),请确保确认后再使用
  • /regen 在第一条用户消息时不可用
  • 会话文件修改前会自动备份到 {workspace_dir}/sessions_backup/ 目录

🧩 依赖

  • QwenPaw >= 1.1.0
  • Python >= 3.10

📄 许可

MIT License

👥 作者

相关推荐
橙橙笔记3 小时前
具身智能的学习 - 完成一个机械臂 第1节
python·学习·机械臂·具身智能
小小张说故事3 小时前
Python 的 class 语句到底执行了什么?拆开 __prepare__、metaclass.__new__ 和那个被讲反的 __set_name__ 顺序
python
天天被压力5 小时前
【A股分钟级高频数据完全手册 #07】北交所历史分钟K线接口:京市Pro版分时批量
java·人工智能·python
天天被压力5 小时前
【A股分钟级高频数据完全手册 #08】股票日、分时数据接口对比:普通分时与Pro版差异实测
java·人工智能·python
特立独行的猫A6 小时前
AI 时代,我为什么推荐用 cj-tauri 开发桌面应用
java·后端·python
小lo想吃棒棒糖6 小时前
把机器人训练从 GPU 搬到昇腾 NPU:启元 Q1 起身动作 PPO 训练全记录
python·机器人·昇腾·启元机器人
Thanks_ks6 小时前
【第 006 讲】搭建 PyCharm 开发环境:PyCharm 的下载与安装 | 初始设置与常用配置
ide·python·pycharm·开发工具·jetbrains·开发环境·集成开发环境
青少儿编程课堂7 小时前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛
tellmewhoisi7 小时前
nlp:知识库检索和dify知识库创建
python·自然语言处理
2601_968793148 小时前
Python Requests 轻量自动化:无需浏览器,实现真人级账号浏览模拟
开发语言·python·自动化