news 2026/4/28 21:59:33

开源免费的WPS AI 软件 察元AI文档助手:链路 015:Ribbon 直启写回守卫与 probeWritableAnchor

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
开源免费的WPS AI 软件 察元AI文档助手:链路 015:Ribbon 直启写回守卫与 probeWritableAnchor

链路 015:Ribbon 直启写回守卫与 probeWritableAnchor

总体链路图

下图在全系列各篇保持一致,仅通过高亮样式标示本篇所覆盖的环节;箭头表示主成功路径,点线为异常或可选路径。阅读任意一篇时都应能回到本图定位,避免在单文件里「钻太深」而失去上下游语境。

plain

structured

multimodal

1 入口: Ribbon/对话框 → assistantId

2 startAssistantTask 占位任务

3 launchInfo 与 resolveDocumentInput

4 resolveModel 与模型清单

5 提示词拼装与 launchGuard

6 分流 plain / structured / multimodal

7a chatCompletion 文本链路 plain

7b chatCompletion 结构化批次

8a applyDocumentAction

8b executionPlan → applyDocumentProcessingPlan

7c generateMultimodalAsset

9 评测持久化与任务完成态

异常路径 normalizeError → 安全弹窗

本篇在总体链路中的位置

对应图中节点 N5:提示词、分流条件、写回守卫等均在发起请求前完成。 高亮节点:N5。若本篇同时引用 chatApi 与任务运行器,通常意味着该逻辑处于「编排层与网络层交界」:修改时要同时考虑任务取消与 UI 快照。

深度说明(工程视角)

从工程维护角度看,本篇讨论的对象应当被视为「可替换实现」:只要对外的任务状态、HTTP 契约与文档写回语义保持不变,内部可以重构函数拆分或调整日志字段。阅读时建议始终抓住三个锚点:一是数据从哪来(PluginStorage、localStorage、COM 选区还是全文);二是数据何时离开本机(进入 fetch 之前是否已完成脱敏与快照);三是失败时用户可见的文本由谁归一(chatApi 与助手错误弹窗两条路径)。

就「链路 015:Ribbon 直启写回守卫与 probeWritableAnchor」而言,源码位置可概括为:executeAssistantTask 内 probeWritableAnchor 分支。这与摘要中的判断一致:当 launchSource 为 ribbon-direct 且 documentAction 属于写回类时,先探测 COM Range 坐标是否可用;失败则将 runtimeDocumentAction 降级为 none,并在任务 data 中记录 launchGuardReason。发生在首次 chatCompletion 之前。关键词「launchGuard、Range、none」提示你在仓库内做全文检索时应优先锁定这些符号,而不是仅依赖界面文案。

与网络请求相关的修改,务必在本地用开发者工具或代理核对:请求体中的 model 字段是否与设置页保存的 modelId 一致;Authorization 是否只取 apiKey 列表的第一段(部分网关对多密钥格式敏感);stream 为 true 时宿主是否稳定消费 SSE。若你引入新的 provider,应对照 getChatApiConfigByProvider 的 URL 拼接分支补充单元测试或手测用例,避免「路径已含 v1 却又重复拼接」类错误。

与文档写回相关的修改,应优先在无界面的纯函数层复现:例如仅调用 applyDocumentAction 或 applyDocumentProcessingPlan 的入参快照,观察 Range 坐标是否在 CRLF 归一化前后发生漂移。WPS 与 Word 在选区、批注锚点上的差异会放大这类问题,因此本篇若在讲坐标或分段,请同时阅读 documentPositionUtils 与 chunk 相关教程篇目。

阅读顺序上,本篇之后建议继续看:降级后模型仍可能被调用,但 apply 阶段不再写文档(需结合 apply 逻辑阅读)。若在总体图中定位,对应图中节点 N5:提示词、分流条件、写回守卫等均在发起请求前完成。 遇到与教程系列术语不一致时,以源码标识符为准:教程侧重导航与概念,本系列侧重调用次序与失败面。

最后说明写作立场:本系列不对任何云厂商或模型服务做优劣评价,也不暗示「必须开通」某类账号;所述配置项仅反映当前仓库为打通 OpenAI 兼容协议而需要的最小字段集合。若组织策略禁止外联,应在网关或 hosts 层拦截,而不是在加载项内写死假地址。

与教程系列文档的对照

下列文档来自docs/chayuan-tutorial-series,侧重「如何阅读仓库」与界面侧概念,与本链路系列互补:不重复推销功能,仅帮助建立目录与模块边界。

  • chayuan-tutorial-series/08-wenben-fenxi-zhushou-changjing-yu-fengxian.md:与本篇链路相邻的工程说明,可对照变量命名与文件职责。
  • chayuan-tutorial-series/16-wendang-shuru-laiyuan-jiekou.md:与本篇链路相邻的工程说明,可对照变量命名与文件职责。

摘要

当 launchSource 为 ribbon-direct 且 documentAction 属于写回类时,先探测 COM Range 坐标是否可用;失败则将 runtimeDocumentAction 降级为 none,并在任务 data 中记录 launchGuardReason。发生在首次 chatCompletion 之前。

关键词

launchGuard;Range;none

链路位置(源码索引)

executeAssistantTask 内 probeWritableAnchor 分支。

正文

1. 探测与降级

writeBackActions 集合与 probe 结果处理。

维护时建议把本节涉及的符号在 IDE 里「查找引用」:确认是否还有对话框专用服务、拼写检查服务或评测脚本以拷贝粘贴方式重复了相似逻辑。若发现重复,优先抽到 chatApi 之上的薄封装,而不是在业务层再次拼接 URL 或 Authorization,以降低安全审查时的遗漏面。

// src/utils/assistantTaskRunner.js 第1517-1525行constisRibbonDirectLaunch=launchSource==='ribbon-direct'constwriteBackActions=newSet(['replace','insert','comment','link-comment','comment-replace','append','prepend','insert-after'])letlaunchGuardReason=''if(isRibbonDirectLaunch&&writeBackActions.has(String(runtimeDocumentAction||'').trim())){constprobe=probeWritableAnchor()if(!probe.ok){launchGuardReason=String(probe.reason||'当前无法定位文档写回位置,已自动降级为仅生成结果').trim()runtimeDocumentAction='none'}

2. probeWritableAnchor 实现

读取 ActiveDocument 与 Selection.Range 的 Start/End。

维护时建议把本节涉及的符号在 IDE 里「查找引用」:确认是否还有对话框专用服务、拼写检查服务或评测脚本以拷贝粘贴方式重复了相似逻辑。若发现重复,优先抽到 chatApi 之上的薄封装,而不是在业务层再次拼接 URL 或 Authorization,以降低安全审查时的遗漏面。

// src/utils/assistantTaskRunner.js 第66-86行functionprobeWritableAnchor(){constdoc=getActiveDocument()if(!doc?.Content){return{ok:false,reason:'当前没有可写入的文档内容范围'}}constselection=getSelection()constrange=selection?.Range||doc.Contentif(!range){return{ok:false,reason:'当前无法定位可写入位置(选区与文档范围均不可用)'}}try{conststart=Number(range.Start)constend=Number(range.End)if(!Number.isFinite(start)||!Number.isFinite(end)){return{ok:false,reason:'当前可写入位置无效(坐标不可用)'}}}catch(_){return{ok:false,reason:'当前无法读取写入位置坐标'}}return{ok:true,reason:''}}

上下游衔接

降级后模型仍可能被调用,但 apply 阶段不再写文档(需结合 apply 逻辑阅读)。

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

多商户电商系统

电商系统可以理解为覆盖从商品展示、交易、支付,到履约、供应链管理的全链路数字化解决方案。一个成熟的电商系统不只是个“卖货的网站”,而是由多个子系统协同组成的商业基础设施。为了让理解更清晰,我按成熟度分了三个层次来介绍&#xff1…

作者头像 李华
网站建设 2026/4/28 21:52:22

vmware17pro(被收购后)官网下载指南

进入vmware官网 右上角点击注册和登录,登录账号为邮箱!!! 登录成功以后,点击我的下载,看到蓝框下载提示点HERE 输入”VMware Workstation Pro“进行搜索 出现”VMware Workstation Pro“搜索结果后点击一…

作者头像 李华
网站建设 2026/4/28 21:50:42

小龙虾 AI(OpenClaw)部署与使用方法(保姆级教程)

一、什么是小龙虾 AI(OpenClaw) 小龙虾 AI(官方名称 OpenClaw)是一款可操控电脑的 AI 智能体,能通过自然语言指令实现文件管理、浏览器操作、软件控制、数据处理等自动化任务,相当于 “AI 数字员工”&#…

作者头像 李华
网站建设 2026/4/28 21:50:19

告别繁琐切图与素材重制:多模型聚合AI作图平台「椒图AI」如何重构你的设计工作流?

对于广大开发者和UI/UED设计师而言,日常项目开发中常面临素材分辨率不足、特定场景图缺失、电商物料频繁换字等痛点。传统的处理方式依赖复杂的后期软件,耗时且效率极低。今天为大家测评一款旨在解决上述工作流瓶颈的在线作图平台——「椒图AI」。 作为一…

作者头像 李华
网站建设 2026/4/28 21:45:10

Docker AI Toolkit 2026的“Cost Lock”模式来了:一键冻结非关键容器支出,但87%用户因忽略--budget-safety-threshold触发服务中断——你设对了吗?

更多请点击: https://intelliparadigm.com 第一章:Docker AI Toolkit 2026“Cost Lock”模式的演进与设计哲学 Docker AI Toolkit 2026 引入的“Cost Lock”模式,标志着容器化AI工作流从资源弹性向成本确定性的范式跃迁。该模式并非简单冻结…

作者头像 李华