当前位置: 首页 > news >正文

链开源免费的WPS AI 软件 察元AI文档助手:路 013:shouldUsePlainDocumentPipeline 与批注类动作分流

链路 013:shouldUsePlainDocumentPipeline 与批注类动作分流

总体链路图

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

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 与助手错误弹窗两条路径)。

就「链路 013:shouldUsePlainDocumentPipeline 与批注类动作分流」而言,源码位置可概括为:assistantTaskRunner.js shouldUsePlainDocumentPipeline。这与摘要中的判断一致:报告模式、STRUCTURED_PIPELINE_REQUIRED_IDS、revision-edits 模式、以及「锚点批注」类 documentAction 会禁止 plain 管线,强制走结构化 JSON 分批。该决策直接影响是否调用 runStructuredBatchChat。关键词「plain、structured、comment」提示你在仓库内做全文检索时应优先锁定这些符号,而不是仅依赖界面文案。

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

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

阅读顺序上,本篇之后建议继续看:plain 为 true 时走 runPlainDocumentAssistantExecution 或 runChunkedPlainDocumentExecution(027)。若在总体图中定位,对应图中节点 N5:提示词、分流条件、写回守卫等均在发起请求前完成。 遇到与教程系列术语不一致时,以源码标识符为准:教程侧重导航与概念,本系列侧重调用次序与失败面。

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

与教程系列文档的对照

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

  • chayuan-tutorial-series/14-jiegouhua-json-liushuixian-yu-banben.md:与本篇链路相邻的工程说明,可对照变量命名与文件职责。
  • chayuan-tutorial-series/24-pizhu-maodian-guize-ji-zhong.md:与本篇链路相邻的工程说明,可对照变量命名与文件职责。
  • chayuan-tutorial-series/25-wendang-fenkuai-qi-collection.md:与本篇链路相邻的工程说明,可对照变量命名与文件职责。

摘要

报告模式、STRUCTURED_PIPELINE_REQUIRED_IDS、revision-edits 模式、以及「锚点批注」类 documentAction 会禁止 plain 管线,强制走结构化 JSON 分批。该决策直接影响是否调用 runStructuredBatchChat。

关键词

plain;structured;comment

链路位置(源码索引)

assistantTaskRunner.js shouldUsePlainDocumentPipeline。

正文

1. 判定条件

STRUCTURED_PIPELINE_REQUIRED_IDS 集合与 getStructuredAssistantMode、isAnchoredCommentDocumentAction。

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

// src/utils/assistantTaskRunner.js 第183-210行/** * 必须走「结构化 JSON 分批 + executionPlan」的助手:精确定位修订或程序依赖的 JSON 输出。 * 脱密/表单等对话框链路仍走助手设置;占位脱密与密码复原由专用对话框与 documentDeclassifyService 处理。 *//** 输出必须为可解析 JSON 且由结构化管线消费的助手(修订类见 revision-edits) */constSTRUCTURED_PIPELINE_REQUIRED_IDS=newSet([ANALYSIS_SECRET_KEYWORD_EXTRACT_ID,'analysis.form-field-extract','analysis.form-field-audit'])/** * 默认聊天类助手:先模型生成正文,再按助手设置的文档动作一次性写回(applyDocumentAction), * 避免结构化 executionPlan 二次遍历文档诱发 WPS 宿主不稳定。 * 报告模式开启时仍走下方结构化分批;修订类与上表助手除外。 * 凡「添加批注 / 链接批注」且非修订类助手,必须走结构化分批,否则易变成整篇一条批注。 */functionshouldUsePlainDocumentPipeline(assistantId,reportSettings,documentAction=''){if(reportSettings?.enabled===true)returnfalseconstid=String(assistantId||'').trim()if(STRUCTURED_PIPELINE_REQUIRED_IDS.has(id))returnfalseif(getStructuredAssistantMode(assistantId)==='revision-edits')returnfalseconstact=String(documentAction||'').trim()if(isAnchoredCommentDocumentAction(act)){returnfalse}returntrue}

上下游衔接

plain 为 true 时走 runPlainDocumentAssistantExecution 或 runChunkedPlainDocumentExecution(027)。

http://www.jsqmd.com/news/716824/

相关文章:

  • 【AI项目实践】RAG多轮对话智能客服+异常推送飞书
  • 大模型Prompt-Tuning技术详解:从入门到进阶
  • DeepSeek-V4 技术报告深度解析
  • 技术日报|mattpocock技能库连冠再揽5645星总量破3万,免费Claude Code工具两日合计近5千星
  • 新谈设计模式 Chapter 22 — 访问者模式 Visitor
  • 别再只会用Excel了!用Minitab做控制图,5分钟搞定SPC分析(附实战数据)
  • POLIR-Laws-国家赔偿: 《中华人民共和国国家赔偿法》
  • Docker AI Toolkit 2026架构图首度泄露(含Control Plane与AI Runtime双平面通信协议),仅开放48小时下载
  • 开源闪电探测器Flash Bee:低成本DIY雷电预警方案
  • C++27 std::atomic_ref正式落地:3大编译器(GCC 14/Clang 18/MSVC 19.42)生成汇编级对比,性能跃升42%的关键配置
  • 新手入门:三步、四步相移算法到底怎么选?一个实验帮你搞定(附MATLAB/Python代码)
  • php内核 海外冗余模块裁剪、无用组件移除方案
  • Gems 捷迈 FT-110 工业级涡轮式低流量传感器的国产替代方案
  • 答辩 PPT 不用熬!虎贲等考 AI PPT:论文一键生成,学术风直接过关
  • MFA(多重身份验证)绕过码风险解析,如何管控MFA绕过风险,筑牢身份认证防线
  • 5步深度优化:Win11Debloat终极系统清理与性能提升指南
  • UART协议避坑指南:波特率、采样与多数表决,你的串口通信稳定吗?
  • LFM2-2.6B-GGUF在运维自动化中的应用:智能解析日志并执行故障修复脚本
  • 告别混乱:PCIe 6.0的Shared Buffer用Credit Block实现了怎样的秩序?
  • 别再只盯着ICP了!用PCL实战计算点云配准的RMSE与重合率(附完整C++代码)
  • Playwright MCP终极指南:AI驱动的浏览器自动化革命
  • Steam Deck终极插件指南:5分钟解锁Decky Loader的全部潜力
  • springboot+vue3宠物领养系统 原生微信小程序
  • 【小白轻松解决】龙虾智能体 2.6.4 一键安装完整教程(内含安装包)
  • 施耐德Pro-face远程客户端避坑指南:独家触控和状态图标设置,防止产线误操作
  • 熙瑾会悟离线转记踩坑实录:实时纠错 SDK 适配问题深度排查与解决方案
  • 国风美学生成模型v1.0社区共建:如何参与开源项目并贡献Prompt案例
  • 给应用层开发者的AutoSar BSW避坑指南:别再被MCAL、ECU抽象层搞晕了
  • 如何利用客流数据优化零售店转化率?基于“经过人数”和“停留人数”的数据驱动优化模型
  • 【国产AI推理引擎集成实战指南】:Java开发者必看的3大国产化替代方案与性能对比数据