-
Notifications
You must be signed in to change notification settings - Fork 132
Description
Bug Description
我在使用CoPAW项目,其应该使用了agentscope-runtime作为其Web UI。在Linux Firefox环境下使用,与Agent对话时,会出现很大的内存占用。该情况主要发生在让Agent生成很长的脚本代码或打开了很多MarkDown渲染块的情况下,例如每次都会点开它的thinking查看思考内容。
怀疑是由于在Firefox中,DOM内存管理比Chromium差,频繁重新渲染大段内容时:
旧的DOM节点可能没有及时被GC回收
语法高亮器创建大量DOM节点
内存累积 → 爆炸
由于我本人没有很强的分析能力,以下部分分析由调用GLM-5的CoPAW提供
Affected Component
- Engine
- Sandbox
- Tools
- Common
- Documentation
- Other: Web UI / @agentscope-ai/chat
Reproduction Steps
- Your code:
- How to run:
启动 CoPaw 或任何使用 @agentscope-ai/chat 的前端
使用 Firefox 浏览器打开控制台
发送一条触发长回复的消息(例如要求生成代码脚本) - Error occurs at:
当流式输出大段内容(特别是包含代码块时),Firefox 内存无限制飙升,页面极度卡顿
Expected vs Actual Behavior
**Expected:**流式渲染长 Markdown 内容时,内存应该稳定,不应该持续增长导致崩溃
Actual: Firefox 中流式渲染长内容(尤其是带代码块)时,内存使用量急剧上升(可达数GB),而在Chromium内核的浏览器测试未见这些情况
Error Messages
无错误日志
Environment
AgentScope Runtime Version: v1.1.51 (@agentscope-ai/chat)
Python Version: N/A (前端问题)
OS: Linux (也应在其他系统复现)
Installation: npm / 作为 CoPaw 依赖安装
Browser: Firefox 135+
Additional Context
问题分析:
查看打包后的 index-RBhZ6czj.js,VW 组件(X-Markdown 渲染器)的实现:
VW = Z.memo(e => {
const { streaming: t, content: i, ... } = e,
// 每次content变化都调用zpn解析
g = zpn(i || o || "", { streaming: t, components: r }),
// 每次g变化都重新解析整个markdown
y = m.useMemo(() => g ? O.parse(g) : "", [g, O]);
// 每次都重新渲染整个DOM树
return g ? Z.createElement("div", ..., b.render(y)) : null;
});
根本原因:
每次流式更新 → content 变化
每次都重新解析整个 Markdown → O.parse(g)
每次都重新渲染整个 DOM 树 → b.render(y)
代码块的语法高亮生成大量 DOM 节点
Firefox 的 DOM 内存管理不如 Chromium,旧节点可能未及时 GC
可能的修复方向:
增量渲染:只渲染新增的内容,而非每次重渲染全部
虚拟化长列表:对消息列表使用虚拟滚动
对长代码块使用懒加载语法高亮
限制单次渲染的内容长度
依赖版本:
@ant-design/x-markdown: ^2.2.2
react-markdown: ^10.1.0