news 2026/5/4 1:30:41

Agent 一接富文本编辑器就开始改错块:从 Selection Grounding 到 Undo Fence 的工程实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Agent 一接富文本编辑器就开始改错块:从 Selection Grounding 到 Undo Fence 的工程实战

很多团队以为 Agent 接上富文本编辑器后,剩下只是“把字打进去”。真到生产环境,事故常出在另一层:模型知道要改哪一句,人却只看到整篇文档被误覆盖。最常见的现象不是不会写,而是改错块、删错段、撤销失控。这类问题一旦进入客服或知识库后台,风险甚至高于普通表单误填。⚠️

富文本编辑器表面像输入框,内部却是 block tree、selection range、history stack 三套状态机。Agent 如果只看 DOM 文本或截图,很容易把“当前光标所在位置”误认为“允许修改的范围”。真正要治理的,不是生成质量,而是写入动作和编辑结构是否被精确绑定。🧭

图 1:富文本编辑器表面是文本框,底层却是块级结构和选区状态

问题为什么总出在“选区”而不是“文案”

很多富文本编辑器会把段落、列表、引用和表格存成独立节点。Agent 若仅依赖contenteditable的可见文本,就会把“视觉上相邻”误判为“结构上连续”。结果是替换一个 bullet 时,把整个 list node 一起重写;修改摘要时,连后面的引用块也被吞掉。😵

另一类坑来自异步 UI。用户刚点击某一段,编辑器还没完成 selection flush,Agent 已经开始粘贴。此时 DOM 里的 anchor node、浏览器原生 selection、编辑器内部 transaction selection 可能并不一致。根因其实是选区 grounding 缺失。🔍

图 2:浏览器选区、DOM 结构和编辑器事务状态常常不同步

一套可复现的 Selection Grounding 方案

更稳的做法,是先把编辑动作从“按像素点点击”升级为“按 block id 提交补丁”。每次执行前,先读取编辑器导出的结构化快照:块类型、块顺序、当前 selection 起止位置、最近一次 transaction id。只有当目标 block id、选区范围和 transaction id 同时命中,才允许真正写入。✅

关键实现可以像下面这样:

asyncfunctionguardedReplace(editor,targetBlockId,expectedTxn,text){constsnapshot=editor.exportSnapshot();constblock=snapshot.blocks.find(b=>b.id===targetBlockId);if(!block)thrownewError('block_missing');if(snapshot.selection.blockId!==targetBlockId)thrownewError('selection_drift');if(snapshot.txnId!==expectedTxn)thrownewError('stale_snapshot');editor.replaceBlockText(targetBlockId,text);editor.pushUndoFence({reason:'agent_patch',blockId:targetBlockId});}

这段逻辑看着简单,却比“找到编辑器然后 Ctrl+A 粘贴”可靠得多。它把可写范围压缩到单个 block,同时在提交后插入undo fence,保证用户一次撤销只回滚当前 Agent patch。🛡️

实战验证:为什么 Undo Fence 比全量回写更关键

在一个内部知识库编辑流里,团队对比了两种方案:一种是读取全文后重写目标段落,另一种是 block 级 patch + undo fence。前者在 200 次回放中有 11 次误覆盖相邻块,平均一次撤销会回滚 3.4 个编辑动作;后者误覆盖降到 1 次,且撤销粒度稳定在单 patch。📊

方案误改相邻块单次撤销回滚动作数用户可恢复性
全文回写11 / 2003.4
Block Patch + Undo Fence1 / 2001.0

真正有价值的结论不是“模型更聪明了”,而是写入协议更保守了。富文本场景里,结构隔离往往比生成能力更决定可用性。📌

图 3:以 block patch 和事务校验替代全文重写,才能把误改范围收住

深度思考:不要把富文本当成普通表单

笔者认为,很多 Agent 产品在富文本场景里迟迟上不了线,不是因为模型不会写,而是因为系统没有把“编辑权限边界”产品化。表单只要字段绑定,富文本却需要 block identity、selection proof、undo segmentation 三层保护。少任何一层,线上就会出现难以复盘的误改。🤔

接下来 3 到 6 个月,这类能力大概率会从“编辑器插件技巧”升级成 Agent 基础设施。谁先把 selection grounding、undo fence、patch ledger 做成通用层,谁就更有机会把 Agent 稳定接进 CRM 和知识库后台。实用建议是:先限制 Agent 只能改单块,再逐步放开跨块操作,不要一上来追求整页自动改写。🚀

以上就是这类问题的核心治理思路。你在接入 Quill、ProseMirror、Slate 或 Notion 类编辑器时,踩过最难复现的坑是什么?欢迎在评论区聊聊。如果这篇文章对你有帮助,记得点赞、收藏和关注,后续会继续拆更难的 Agent 工程细节。⭐

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 1:30:29

ChatGPT Shell CLI:零依赖终端AI助手,无缝集成命令行工作流

1. 项目概述与核心价值 如果你和我一样,是个重度命令行用户,每天大部分时间都泡在终端里,那么你肯定也想过:要是能把 ChatGPT 直接集成到终端里,不用切浏览器,不用开新窗口,直接在命令行里对话…

作者头像 李华
网站建设 2026/5/4 1:16:33

观察不同模型在taotoken平台上的实际响应速度差异

观察不同模型在 Taotoken 平台上的响应速度表现 1. 测试环境与模型选择 本次测试基于 Taotoken 平台提供的统一 API 接入能力,选取了模型广场中来自不同厂商的四个代表性模型进行对比观察。测试环境为本地开发机通过公网直连 Taotoken 服务端,网络延迟…

作者头像 李华
网站建设 2026/5/4 1:15:23

技术边界突破:开源工具实践指南与开发效率优化

技术边界突破:开源工具实践指南与开发效率优化 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial requ…

作者头像 李华
网站建设 2026/5/4 1:14:27

GPT-4如何评估大语言模型的常识推理能力:CommonGen-Eval框架解析

1. 项目概述:用GPT-4为LLM的“常识造句”能力打分在大型语言模型(LLM)能力评估的众多维度中,“常识推理”一直是个老大难问题。模型能写出华丽的辞藻,能解答复杂的数学题,但它真的理解我们日常生活中那些不…

作者头像 李华