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

开源免费的WPS AI 软件 察元AI文档助手:链路 020:runPlainDocumentAssistantExecution 单次 chatCompletion

链路 020:runPlainDocumentAssistantExecution 单次 chatCompletion

总体链路图

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

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 → 安全弹窗

本篇在总体链路中的位置

对应图中 N8a→N9:plain 文本生成后经 applyDocumentAction 写回。 高亮节点:N8a、N9。若本篇同时引用 chatApi 与任务运行器,通常意味着该逻辑处于「编排层与网络层交界」:修改时要同时考虑任务取消与 UI 快照。

深度说明(工程视角)

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

就「链路 020:runPlainDocumentAssistantExecution 单次 chatCompletion」而言,源码位置可概括为:assistantTaskRunner.js runPlainDocumentAssistantExecution。这与摘要中的判断一致:plain 单次路径组装 messages=[system,user],调用 buildChatCompletionsRequestSnapshot 写入任务 items 供审计展示,再 await chatCompletion(非流、默认 stream:false)。返回文本后进入 applyDocumentAction。关键词「messages、chatCompletion、applyDocumentAction」提示你在仓库内做全文检索时应优先锁定这些符号,而不是仅依赖界面文案。

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

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

阅读顺序上,本篇之后建议继续看:长文则走 runChunkedPlainDocumentExecution(027)。若在总体图中定位,对应图中 N8a→N9:plain 文本生成后经 applyDocumentAction 写回。 遇到与教程系列术语不一致时,以源码标识符为准:教程侧重导航与概念,本系列侧重调用次序与失败面。

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

与教程系列文档的对照

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

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

摘要

plain 单次路径组装 messages=[system,user],调用 buildChatCompletionsRequestSnapshot 写入任务 items 供审计展示,再 await chatCompletion(非流、默认 stream:false)。返回文本后进入 applyDocumentAction。

关键词

messages;chatCompletion;applyDocumentAction

链路位置(源码索引)

assistantTaskRunner.js runPlainDocumentAssistantExecution。

正文

1. 请求快照与调用

temperature 来自 config;llmChatRequest 进入 updateTask data.items。

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

// src/utils/assistantTaskRunner.js 第920-954行consttemperature=config.temperature??0.3constmessages=[{role:'system',content:systemPrompt},{role:'user',content:userPrompt}]constllmChatRequest=buildChatCompletionsRequestSnapshot({providerId:model.providerId,modelId:model.modelId,ribbonModelId:model.id,messages,temperature,stream:false})updateTask(taskId,{progress:42,data:buildTaskData({progressStage:'calling_model',renderedSystemPrompt:systemPrompt,renderedUserPrompt:userPrompt,progressEvents:[`任务已启动,正在调用模型(${shortLabel}· 单次)。`,launchGuardReason?`${launchGuardReason},本次仅生成结果,不写回文档。`:''].filter(Boolean),items:[buildProgressItem('模型处理',inputText,'running',{request:llmChatRequest})]})})constraw=awaitchatCompletion({providerId:model.providerId,modelId:model.modelId,temperature,signal:runState.abortController?.signal,messages})

上下游衔接

长文则走 runChunkedPlainDocumentExecution(027)。

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

相关文章:

  • ARM原子操作指令解析:LDSETP与LDSMAX实战指南
  • 保姆级教程:在Ubuntu 20.04上从零部署PointPillars ROS节点(含CUDA 11.7/Spconv 2.x避坑指南)
  • 别再为覆盖率头疼了!聊聊Test Point如何帮你搞定ATPG Pattern数量
  • 终极Fabric物品与方块API开发指南:从零开始创建自定义游戏元素的完整流程
  • 如何选择最佳Mac应用清理工具:Pearcleaner 2025年完整使用指南
  • Fuel Core 终极商业模式解析:区块链基础设施的可持续盈利探索
  • Ollamac本地AI对话伴侣:隐私优先的图形化大模型客户端部署与实战
  • React-Cropper深度解析:从基础配置到高级用法
  • 语言模型序列推理:从理论到实践的范式转变
  • 中兴STB调试工具|永久版|免沙箱直运行|可复制文件
  • 你所不知道的关于AI的27个冷知识——AI与环境保护
  • 别再搜XML了!IDEA 2024.1新版本里,Spring Boot启动报‘命令行太长’的3秒修复法
  • 大模型赋能邻域搜索:G-LNS优化算法解析
  • 超导量子处理器ECR门误差分析与抑制技术
  • 你所不知道的关于AI的27个冷知识——AI的计算能力与能源消耗
  • Gopeed微前端架构解析:10个模块化开发与按需加载的终极技巧
  • 告别老InputSystem!UE5.3增强输入系统实战:从蓝图到C++完整配置流程
  • 如何用ChatTTS Top-K采样提升语音生成质量:简单实用的优化指南
  • Vibe Space技术:实现概念级图像混合的突破
  • 语义学是否存在普遍真理?从理论分野到NLP的破局可能
  • Agent 一接浏览器弹窗就开始误点确认:从 Dialog Intent Binding 到 Destructive Action Guard 的工程实战
  • #TencentOS AI 体验官# TencentOS已经提前进入自然语言运维时代
  • 构建企业级AI记忆系统:Embedchain网络安全防护终极指南
  • 软考中级软件设计师做题笔记
  • 终极yq架构解析:轻松掌握多格式数据处理核心原理
  • nostr-tools使用教程
  • Lily58机械键盘成本分析:DIY vs 成品的经济效益对比
  • 搞Web自动化测试/爬虫必看:如何为Selenium固定Chrome驱动版本(附历史版本下载与匹配方法)
  • 终极Dapr认证指南:从零基础到架构专家的完整技能路径
  • 高效提取Ren‘Py游戏资源:rpatool实战解析与专业操作流程