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 :使用 SafeJSONSessionupdate_session_state / get_session_state_dict 方法
  • 多 agent 支持SessionOperatoragent_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

👥 作者

相关推荐
PAK向日葵2 小时前
我用 C++ 写了一个轻量级 Python 虚拟机,刚刚开源
c++·python·开源
财经资讯数据_灵砚智能4 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年5月26日
大数据·人工智能·python·信息可视化·自然语言处理·ai编程·灵砚智能
我材不敲代码4 小时前
Python基础:列表详解、增删改查及常用高阶操作
开发语言·windows·python
AI玫瑰助手4 小时前
Python运算符:成员运算符(in/not in)的使用场景
开发语言·python·信息可视化
Warson_L5 小时前
python - class 入门
python
水木流年追梦5 小时前
大模型入门-大模型分布式训练2
开发语言·分布式·python·算法·正则表达式·prompt
ZHANG8023ZHEN5 小时前
Diffusion 数学推理
人工智能·python·机器学习
海天一色y5 小时前
SGLang 本地部署 Qwen3-8B 大模型实战指南
python·sglang
代码帮6 小时前
面试题 - GIL全局解释器锁 :为什么Python多线程不能利用多核?GIL对I/O密集和CPU密集任务的影响?如何绕过GIL(多进程、C扩展)
python·面试
徐安安ye6 小时前
FlashAttention流式输出:Streaming Chunked Attention与增量解码
人工智能·pytorch·python