免费开源的WPS AI插件 察元AI助手:generateMultimodalAsset:类型校验与分支派发

摘要

多模态任务根据 kind 分派到 generateImageAsset、generateSpeechAsset、generateVideoAsset。providerId/modelId 为空时抛错,提示先在设置中启用对应模型。

关键词

image;audio;video

扩展阅读与维护提示

本篇围绕「generateMultimodalAsset:类型校验与分支派发」组织材料。仓库内与主题最直接相关的检索词包括:image、audio、video。建议在阅读正文所列片段后,用 IDE 全局搜索这些符号,沿 import 与调用栈向上追问「谁在什么时机调用」,而不是只记住单文件路径。

摘要所概括的要点为:多模态任务根据 kind 分派到 generateImageAsset、generateSpeechAsset、generateVideoAsset。providerId/modelId 为空时抛错,提示先在设置中启用对应模型。落地到排障时,可把现象粗分为三类交叉验证:配置是否按预期写入持久化介质;WPS COM 上下文是否可用(例如是否缺少 ActiveDocument);以及网络与证书策略是否拦截了 fetch。本篇涉及的模块通常只覆盖其中一两类,需要与相邻篇目拼成完整拼图。

教程文件名「31-duomotai-renwu-yu-chatCompletion.md」仅用于导航与排序,不等价于源码模块名。若正文中的行号与本地分支不一致,多半因合并导致行偏移,此时应以函数名、导出名为锚重新检索;团队若维护了生成脚本,可在变更大段源码后重新运行以保持摘录大致对齐。

本文刻意避免对产品能力做营销式承诺:所述行为均以当前仓库可见实现为准。若组织策略要求离线或内网模型,应在网关、证书与代理层收口,而不是假设加载项能绕过浏览器安全模型。

若你同时阅读 docs/chayuan-llm-chain-series,可先对照其中的总体链路图理解「请求从 UI 到 chatApi」的次序,再回到本教程看数据结构、默认值与修改风险面;两者互补,不重复堆砌功能列表。

正文

1. 入口校验

kind 白名单与模型 id 非空检查。

阅读源码摘录时,请把它当作「定位入口」而非完整实现:同一函数可能在其他分支还有早退条件或 try/catch。修改默认行为前,建议用最小文档手工走一遍相关助手或对话框,并观察任务清单与日志中的字段是否与预期一致,再决定是否做数据迁移或配置重置。

复制代码
// src/utils/multimodalTaskRunner.js 第113-122行
export async function generateMultimodalAsset(options = {}) {
  const kind = String(options.kind || '').trim()
  if (!['image', 'audio', 'video'].includes(kind)) {
    throw new Error('未识别的多模态任务类型')
  }
  const providerId = String(options.providerId || '').trim()
  const modelId = String(options.modelId || '').trim()
  if (!providerId || !modelId) {
    throw new Error(`未找到可用的${getKindLabel(kind)}模型,请先在设置中配置并启用相应模型`)
  }

2. 图像分支

executionPrompt 与 aspectRatio 从 generationPlan 或 options 回填。

阅读源码摘录时,请把它当作「定位入口」而非完整实现:同一函数可能在其他分支还有早退条件或 try/catch。修改默认行为前,建议用最小文档手工走一遍相关助手或对话框,并观察任务清单与日志中的字段是否与预期一致,再决定是否做数据迁移或配置重置。

复制代码
// src/utils/multimodalTaskRunner.js 第126-137行
  if (kind === 'image') {
    const asset = await generateImageAsset({
      providerId,
      modelId,
      prompt: String(generationPlan.executionPrompt || options.prompt || '').trim(),
      aspectRatio: String(generationPlan.aspectRatio || options.aspectRatio || '').trim() || '16:9',
      signal: options.signal || null
    })
    return {
      ...asset,
      generationPlan
    }
相关推荐
阿牛哥_GX5 小时前
CDP 浏览器操控原理:让脚本接管你的浏览器
人工智能
ThreeS5 小时前
手搓MiniVLA全实战教程-一步一步用pytorch解释原理与思路
人工智能·python
米小虾6 小时前
Loop Engineering —— 循环的设计与自主执行
人工智能·agent
米小虾6 小时前
Harness Engineering —— 系统的安全护栏
人工智能·agent
火山引擎开发者社区6 小时前
积分当钱花,火山引擎开发者激励计划首月消费双倍回馈
人工智能
aqi007 小时前
15天学会AI应用开发(十)把文本嵌入模型换成国产模型
人工智能·python·ai编程
MobotStone7 小时前
为什么在AI时代,“好奇心”成了最值钱的能力?
人工智能
武子康8 小时前
调查研究-200 llama.cpp b9754:一次很小但很关键的 Agent 工具调用修复
人工智能·agent·llama