mcpField
A
ai-model-wechat

ai-model-wechat

github.com/tencentcloudbase开发791.1k 次安装今天更新
代码仓库

关于 ai-model-wechat

ai-model-wechat 是面向微信小程序开发者的技能,指导通过 `wx.cloud.extend.AI` 调用 AI 模型。内容重点说明 provider 与模型 ID 的区别,并要求调用前依次检查计费资格和模型组配置。

主要功能

  1. 01指导小程序调用 AI 文本模型
  2. 02说明流式响应回调
  3. 03区分 provider 与模型 ID
  4. 04规定调用前的资格检查
  5. 05指导模型组查询与启用

适用场景

  1. 01为小程序接入文本生成
  2. 02实现带回调的流式响应
  3. 03调用 Hunyuan 模型
  4. 04排查模型未启用导致的错误

MCP 相关

技能流程要求使用 MCP 工具 `queryEnv action=info` 获取环境信息;输入还提及通过 Cloud API 检查资格与模型配置。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/tencentcloudbase/skills --skill ai-model-wechat

安装后在 Claude Code 中输入/ai-model-wechat确认已加载。

附带文件LICENSE.md

详细介绍

同级技能(仅限本地)

同级 CloudBase 技能会与此技能一同提供。请使用 ../auth-tool-cloudbase/SKILL.md 这样的本地相对路径。

如果此环境中缺少引用的同级技能文件,请让用户安装完整的 CloudBase 插件(或缺失的技能)。不要通过 HTTP 将远程技能或协议 Markdown 获取到 Agent 上下文中。

何时使用此技能

在微信小程序中使用 wx.cloud.extend.AI 调用 AI 模型时,请使用此技能。

适用于以下场景:

  • 在小程序中集成 AI 文本生成
  • 通过回调支持流式传输 AI 响应
  • 在微信环境中调用 Hunyuan 模型

不适用于以下场景:

  • 浏览器/Web 应用 → 使用 ai-model-web 技能
  • Node.js 后端或云函数 → 使用 ai-model-nodejs 技能
  • 图像生成 → 使用 ai-model-nodejs 技能(小程序中不可用)
  • 没有 CloudBase SDK 的运行环境(原生应用、Python 等)→ 使用 http-api-cloudbase 技能(其中现已包含可用于直接 HTTP 调用的 ai_model OpenAPI 规范)

⛔ 停止 — wx.cloud.extend.AI.createModel(provider) 的参数不是供应商或模型名称

在编写任何 createModel(...) 代码行之前,请先阅读此处。Agent 经常会臆造此参数。合法形式恰好只有四种。其他任何形式都是错误。

✅ 合法的 createModel(provider) 参数使用场景
"cloudbase"默认选项,包括小程序成长计划。 主托管分组(由 TokenHub 支持的多供应商池)。成长计划额度由 cloudbase + hy3 共同提供,需先启用 hy3。供应商和具体模型应填写在 model 字段中,例如 { model: "deepseek-v4-flash" }。
"hunyuan-v3"即将退役的旧版套餐分组。 仅提供 hy3,且不会添加新模型。已加入此套餐的现有代码仍可运行;新代码应使用 cloudbase + hy3。
"hunyuan-exp"较早的旧版内置分组 — 仅当 DescribeAIModels 仍返回此分组时使用。其默认模型 hunyuan-2.0-instruct-20251111 已于 2026-05-31 下线;切勿指定此 ID。
"custom-<your-name>"通过 CreateAIModel 接入的用户自定义 GroupName。必须以 custom- 开头(例如 custom-kimi、custom-openai-compat)。
❌ 不要编写以下任何内容 — 它们都不正确
wx.cloud.extend.AI.createModel("deepseek")                   // wrong — vendor, not GroupName
wx.cloud.extend.AI.createModel("deepseek-v4-flash")          // wrong — model id goes in `model`
wx.cloud.extend.AI.createModel("hunyuan")                    // wrong — vendor family
wx.cloud.extend.AI.createModel("hunyuan-2.0-instruct-20251111")  // wrong — model name
wx.cloud.extend.AI.createModel("glm") / "kimi" / "minimax"   // wrong — vendor names
wx.cloud.extend.AI.createModel("custom")                     // wrong — placeholder
wx.cloud.extend.AI.createModel(modelName)                    // wrong — do not reuse the model-id variable
✅ 正确模式 — provider 和 model 是两个不同的字段
// Growth Plan branch (enable hy3 in the console first)
const model = wx.cloud.extend.AI.createModel("cloudbase"); // ← provider / GroupName
await model.streamText({
  data: { model: "hy3", messages: [...] }  // ← concrete model id
});

// Token Credits branch
const model = wx.cloud.extend.AI.createModel("cloudbase");
await model.streamText({
  data: { model: "deepseek-v4-flash", messages: [...] }
});
决策流程(用户指定具体模型时)
  1. 用户说“使用 DeepSeek v3.2”/“使用 hunyuan thinking”/“使用 Kimi k2.6”/……
  2. 首先运行下方的资格判定流程 — 几乎所有情况下 provider 都是 "cloudbase",包括成长计划环境(cloudbase + hy3)。只有在现有代码已使用 "hunyuan-v3" 时才会出现该值;只有当 DescribeAIModels 仍返回较早的分组时才使用 "hunyuan-exp"。
  3. 将模型 ID 填入 data 中的 model 字段:{ model: "deepseek-v3.2" }、{ model: "hy3" }、{ model: "kimi-k2.6" }、……
  4. 使用模型 ID 前,请确认它包含在 DescribeAIModels({ GroupName: "cloudbase" }).Models[] 中。如果不包含,请通过 UpdateAIModel 启用它。

如果你正准备输入 wx.cloud.extend.AI.createModel(,且括号内是供应商名称或模型 ID — 请停下。它几乎肯定不是上述四种合法值之一。


强制两步预检

禁止直接开始调用 wx.cloud.extend.AI.createModel(...)。编写任何业务代码之前,必须按以下固定顺序确认计费资格和分组就绪状态:① 资格 → ② 分组就绪状态。不要调换顺序。

预检 ① · 计费资格(两条并行计费路径)

小程序侧有两种计费路径:小程序成长计划(优先检查)和 Token Credits 资源包(通用回退)。两者都通过 cloudbase 主托管分组结算——使用成长计划时,模型为 hy3,优先扣除计划额度;hunyuan-v3 是旧版计划分组,仅扣除计划额度,现正逐步停用。

  1. 通过 MCP 工具 queryEnv action=info 获取 envId。

  2. 根据用户意图选择分支:

用户意图优先检查的资格命中时的 createModel provider模型选择未命中时的指引
未指定模型/默认调用先检查是否已加入 小程序成长计划;如果未加入,再检查 Token Credits 资源包两种情况下均为 "cloudbase"已加入:hy3(成长计划文本模型——先在 "cloudbase" 分组中启用)。否则:与用户选择文本模型,然后通过 DescribeAIModels → DescribeManagedAIModelList → UpdateAIModel 在 "cloudbase" 分组中验证并启用未加入计划 → 指引至 https://docs.cloudbase.net/ai/ai-inspire-plan;缺少资源包 → 提供购买链接
用户请求 hunyuan-* 模型小程序成长计划资格"cloudbase"(计划额度使用 hy3)在 DescribeAIModels({ GroupName: "cloudbase" }).Models[] 中验证准确的 Model;如果缺失,则通过 UpdateAIModel 启用已加入但模型缺失 → 启用模型;未加入 → 指引至计划页面,或使用 "cloudbase" + 资源包
用户请求 deepseek-* / glm-* / kimi-* / minimax-* / 其他非 hunyuan 托管模型Token Credits 资源包激活状态"cloudbase"不要假设模型已启用。调用 DescribeAIModels → 如果缺失,调用 DescribeManagedAIModelList 获取规范的 Model 字符串 → 使用 Status: 1 调用 UpdateAIModel(完整替换 Models[])资源包未激活 → 提供购买链接
用户请求第三方/可自托管(非托管)模型跳过计费资格检查,转到“自定义接入”自定义 GroupName(必须以 custom- 开头)通过 CreateAIModel.Models[] 注册同时提供控制台和 CreateAIModel 两种方式
  1. 检查是否已加入小程序成长计划:
callCloudApi({
  service: "tcb",
  action: "DescribeActivityInfo",
  params: {
    ActivityNames: ["ai_miniprogram_inspire_plan"], // PascalCase preferred; switch to camelCase if InvalidParameter is returned
  },
})

**命中条件:**响应的 attendRecords 中至少有一项满足 activityName === "ai_miniprogram_inspire_plan",且 envId 与当前环境匹配。命中后,使用 createModel("cloudbase") + model: "hy3"(先在分组中启用 hy3);调用时会扣除计划的免费额度。旧代码使用 createModel("hunyuan-v3") + hy3 仍可运行,但该分组正逐步停用——请将其迁移到 cloudbase。

⚠️ 赠送的 Token 仅适用于特定来源。它仅适用于小程序客户端调用和管理员身份调用(控制台 Playground、云函数内部发起的调用)。来自其他来源的调用不会扣除该 Token,而是使用环境的资源点池结算——用户会因此反馈“Token 资源包未生效,扣了资源点”。遇到此类反馈时,应先检查调用来源,再修改代码或模型配置。下方 Token Credits 资源包路径也遵循同一规则。

**未命中时:**不要静默回退。告知用户“当前环境未加入小程序成长计划”,提供加入入口 https://docs.cloudbase.net/ai/ai-inspire-plan,并询问用户是要加入计划后重试,还是切换到使用非 hunyuan 模型的 Token Credits 资源包路径。

  1. 检查 Token Credits 资源包(当路径指向 "cloudbase" 主托管分组时):
callCloudApi({
  service: "tcb",
  action: "DescribeEnvPostpayPackage",
  params: {
    EnvId: "<current envId>",
  },
})

命中条件:envPostpayPackageInfoList 中有一项的 postpayPackageId 以 pkg_tcb_tokencredits_ 开头,status ∉ [3, 4](未过期、未停用),且 versionSwitchStatus 不处于阻止状态。

**未命中时:**提供购买链接(将 {envId} 替换为真实 ID,绝不能保留占位符):

https://buy.cloud.tencent.com/lowcode?buyType=resPack&envId={envId}&resourceType=token
预检 ② · 分组就绪状态(每次小程序 AI 调用前都必须执行)

符合资格并不代表可以调用目标模型。"cloudbase" 主托管分组中默认不启用任何模型——你必须先调用 DescribeAIModels 查看已启用的模型,然后(如果缺少目标模型)调用 DescribeManagedAIModelList 查询权威的受支持模型目录,并通过 UpdateAIModel 设置 Status: 1 启用模型。加入成长计划也不能跳过此检查:hy3 仍必须存在于 cloudbase 分组中并处于启用状态。旧版 "hunyuan-v3" 仅提供 hy3,且正在退役——应将其视为只读兼容选项,而非默认选项。

  1. 查询环境中当前配置的分组和开关(tcb Action DescribeAIModels,Version 2018-06-08):
callCloudApi({
  service: "tcb",
  action: "DescribeAIModels",
  params: { EnvId: "<envId>" },
})

返回 AIModelGroups: AIModelGroup[]。每个 AIModelGroup 都包含 GroupName(例如 cloudbase / hunyuan-exp / 自定义分组)、Type(builtin / custom)、Models: [{ Model, EnableMCP, Tags }] 和 Status(1=开启 / 2=关闭)。分组就绪需同时满足以下三项:存在 GroupName + Status === 1 + 目标 Model 存在于 Models[] 中。

  1. 如果 DescribeAIModels 的响应中没有目标模型,则通过 DescribeManagedAIModelList 查询平台目录和定价——该接口会返回 ManagedAIModelGroup[],其中包含 ModelSpec(上下文长度等)和 ModelChargingInfo(Uniform / Tiered 定价)。选择目标模型,然后通过 UpdateAIModel 启用它:
callCloudApi({
  service: "tcb",
  action: "UpdateAIModel",
  params: {
    EnvId: "<envId>",
    GroupName: "cloudbase",
    Status: 1, // 1=on, 2=off
    Models: [
      { Model: "deepseek-v4-flash", EnableMCP: false },
      { Model: "deepseek-v3.2", EnableMCP: false },   // append the new model to enable
    ],
    // ⚠️ `Models` is a FULL REPLACEMENT, not incremental; merge the old list + new entries before passing.
  },
})
  1. 两个步骤都通过后,才在小程序代码中编写 wx.cloud.extend.AI.createModel("<GroupName>"),并传入该分组 Models[] 中存在的 model 值。

顺序固定。 未满足资格条件时,不会有已启用模型产生费用;未就绪分组时,即使符合资格,也会收到 ModelNotEnabled 类错误。两项都必须在编写业务代码前完成。

API 大小写提示: tcb 公共服务的 Action 正式使用 PascalCase(EnvId、GroupName、ActivityNames);部分文档使用 camelCase。首次调用时,如果遇到 InvalidParameter,请切换大小写后重试,然后在项目封装中固定使用成功的形式。


可用的提供方和模型

wx.cloud.extend.AI.createModel(provider) 的 provider 参数等于 DescribeAIModels 返回的 GroupName。只有以下四种值合法。选择前请先执行决策树。

A. 小程序成长计划(加入计划时的默认选项)—— provider 为 cloudbase,model 为 hy3
createModel provider默认模型其他可用模型备注
"cloudbase"hy3环境在 DescribeAIModels({ GroupName: "cloudbase" }).Models[] 中启用的其他模型——运行时查询,切勿硬编码当调用来源允许时,优先使用计划额度;首次调用前通过 UpdateAIModel 启用 hy3
"hunyuan-v3"hy3无——此分组仅提供 hy3旧版计划分组,正在退役。现有代码仍可运行;请迁移到 cloudbase + hy3
"hunyuan-exp"—环境当前仍返回的模型较早的旧版内置分组。其原默认模型 hunyuan-2.0-instruct-20251111 已下线(2026-05-31)——不要使用它
B. 主要托管组(Token Credits 套餐场景,推荐默认使用)

"cloudbase" GroupName 由 Tencent Cloud TokenHub 支持,这是一个统一的托管池,涵盖多个腾讯自研和第三方供应商,包括 Hunyuan 系列(HY 2.0 Instruct、HY 2.0 Think、Hunyuan-role、Hy3 preview,……)、DeepSeek 系列(DeepSeek-V4-Pro、DeepSeek-V4-Flash、Deepseek-v3.2、Deepseek-v3.1、Deepseek-r1-0528、Deepseek-v3-0324,……)、Zhipu GLM(GLM-5、GLM-5-Turbo、GLM-5.1、GLM-5V-Turbo)、Kimi(K2.5、K2.6)、MiniMax(M2.5、M2.7)等。模型列表会随时间变化,因此不要在应用代码中硬编码列表——务必在运行时查询。

createModel provider模型就绪状态如何启用模型备注
"cloudbase"默认情况下不会启用任何模型——务必先检查 DescribeAIModels({ GroupName: "cloudbase" }).Models[]1) 通过 DescribeManagedAIModelList 获取权威目录和定价(不要猜测 Model 字符串)。2) 调用 UpdateAIModel,设置 Status: 1,并传入包含目标模型的完整替换 Models[]统一托管组(Type=builtin),备注为 "腾讯云开发",依赖 pkg_tcb_tokencredits_* 资源包

⚠️ 常见的小程序错误:编写 createModel("deepseek") / createModel("hunyuan") / createModel("glm") / createModel("kimi") / createModel("minimax") / createModel("custom")。这些都不正确——它们是供应商/模型名称,不是 provider/GroupName。provider 必须是 DescribeAIModels 返回的 GroupName 值之一。新项目一律使用统一的 "cloudbase" 托管组,并通过 model 字段选择具体的供应商模型。

C. 不在托管目录中 → 自定义接入

涉及第三方/自托管/兼容 OpenAI 的端点的模型(未出现在 A/B 中的任何模型)不走上述计费路径。必须先通过“自定义接入”注册 Type=custom 的 GroupName。请参阅下一节。


自定义接入(模型不在托管目录中时)

当用户指定的模型不在主要托管组(cloudbase)目录中时(例如,企业托管的兼容 OpenAI 端点、第三方模型服务),请从以下两种路径中选择一种。使用“第三方/自托管/兼容 OpenAI 的端点”等中性措辞——不要点名具体的竞品品牌。

路径 1 · 在控制台注册

引导用户前往 CloudBase 控制台的 AI 模型页面:

https://tcb.cloud.tencent.com/dev?envId={envId}#/ai

将 {envId} 替换为实际的环境 ID,并让用户填写模型名称、端点、API 密钥等信息。

路径 2 · 通过 callCloudApi + CreateAIModel 注册

tcb Action CreateAIModel(版本 2018-06-08)会在当前环境中创建一个 Type=custom 的 AI 模型组:

callCloudApi({
  service: "tcb",
  action: "CreateAIModel",
  params: {
    EnvId: "<current envId>",
    GroupName: "custom-openai-compat",  // ⚠️ MUST start with "custom-" (e.g. custom-kimi, custom-moonshot) to avoid colliding with built-in / vendor GroupNames; this becomes the value passed to createModel(provider)
    BaseUrl: "https://api.example.com/v1",
    Models: [
      { Model: "gpt-4o-mini", EnableMCP: false },
      { Model: "gpt-4o",       EnableMCP: false },
    ],
    Remark: "Internal OpenAI-compatible endpoint",
    Status: 1,                         // 1=on, 2=off
    Secret: {
      // Key / ApiKey: pick one; OpenAI-compatible endpoints usually use ApiKey
      ApiKey: "<vendor-api-key>",
    },
  },
})

注册后:

  • 运行 DescribeAIModels,确认存在 GroupName,且其 Status=1,目标 Model 出现在 Models[] 中。
  • 在小程序中,调用 wx.cloud.extend.AI.createModel("custom-openai-compat"),并将已注册的模型名称(例如 "gpt-4o-mini")作为 model 字段传入。
  • 后续添加或修改模型时,使用 UpdateAIModel(请记住,Models 是完整替换;Status 用 1/2 表示开/关)。要删除整个自定义组,请使用 DeleteAIModel(仅限自定义组;通过 GroupNames.N 批量操作)。
  • 所有调用仍会走环境的计费路径。如果此类自定义模型也需要 Token 结算,必须先确认是否符合条件。

前提条件

  • 微信基础库 3.7.1+
  • 无需安装额外的 SDK

初始化

// app.js
App({
  onLaunch: function() {
    wx.cloud.init({ env: "<YOUR_ENV_ID>" });
  }
})

generateText() - 非流式

⚠️ **与 JS/Node SDK 不同:**返回值是原始模型响应。

**前提条件:**已完成“Mandatory Two-Step Preflight”,并且已通过 DescribeAIModels 确认目标模型已启用(如果模型未启用,则通过 UpdateAIModel 启用)。以下示例假定当前环境已加入小程序成长计划,并使用 createModel("cloudbase") + hy3。如果目标是其他托管模型,请保留提供方,并将 model 设置为用户选择且刚刚通过 UpdateAIModel 启用的模型——切勿假定 deepseek-v4-flash 已经启用。

const model = wx.cloud.extend.AI.createModel("cloudbase");

const res = await model.generateText({
  model: "hy3",  // plan-enrolled default
  messages: [{ role: "user", content: "hi" }],
});

// ⚠️ Return value is the RAW model response, NOT wrapped like JS/Node SDK
console.log(res.choices[0].message.content);  // access via choices array
console.log(res.usage);                        // token usage

streamText() - 流式

⚠️ **与 JS/Node SDK 不同:**参数必须封装在 data 对象中;支持回调。

**前提条件:**已完成“Mandatory Two-Step Preflight”,并且已启用目标模型。以下示例使用成长计划分支(cloudbase + hy3);对于其他托管模型,请保留提供方,并将 model 设置为用户选择且刚刚通过 UpdateAIModel 启用的模型(默认情况下不会启用任何模型)。

const model = wx.cloud.extend.AI.createModel("cloudbase");

// ⚠️ Parameters MUST be wrapped in a `data` object
const res = await model.streamText({
  data: {                              // ⚠️ Required wrapper
    model: "hy3",  // plan-enrolled default
    messages: [{ role: "user", content: "hi" }]
  },
  onText: (text) => {                  // Optional: incremental text callback
    console.log("New text:", text);
  },
  onEvent: ({ data }) => {             // Optional: raw event callback
    console.log("Event:", data);
  },
  onFinish: (fullText) => {            // Optional: completion callback
    console.log("Done:", fullText);
  }
});

// Async iteration is also available
for await (let str of res.textStream) {
  console.log(str);
}

// Check for completion via eventStream
for await (let event of res.eventStream) {
  console.log(event);
  if (event.data === "[DONE]") {       // ⚠️ Check for [DONE] to stop
    break;
  }
}

错误处理模式

**前提条件:**已完成“Mandatory Two-Step Preflight”。对于资源包分支,请使用 "cloudbase" + 刚刚通过 DescribeAIModels / UpdateAIModel 验证或启用的特定文本模型——默认情况下不会启用任何模型。

const model = wx.cloud.extend.AI.createModel("cloudbase");

try {
  const res = await model.generateText({
    model: "deepseek-v4-flash",
    messages: [{ role: "user", content: "Write a welcome message" }],
  });

  console.log(res.choices[0].message.content);
} catch (error) {
  console.error("Mini Program AI request failed", error);
}

API 对比:JS/Node SDK 与微信小程序

特性JS/Node SDK微信小程序
命名空间app.ai()wx.cloud.extend.AI
generateText 参数直接对象直接对象
generateText 返回值{ text, usage, messages }原始值:{ choices, usage }
streamText 参数直接对象⚠️ 封装在 data: {...} 中
streamText 返回值{ textStream, dataStream }{ textStream, eventStream }
回调不支持onText、onEvent、onFinish
图像生成仅 Node SDK 支持不可用

类型定义

streamText() 输入
interface WxStreamTextInput {
  data: {                              // ⚠️ Required wrapper object
    model: string;
    messages: Array<{
      role: "user" | "system" | "assistant";
      content: string;
    }>;
  };
  onText?: (text: string) => void;     // incremental text callback
  onEvent?: (prop: { data: string }) => void;  // raw event callback
  onFinish?: (text: string) => void;   // completion callback
}
streamText() 返回值
interface WxStreamTextResult {
  textStream: AsyncIterable<string>;   // incremental text stream
  eventStream: AsyncIterable<{         // raw event stream
    event?: unknown;
    id?: unknown;
    data: string;                      // "[DONE]" when complete
  }>;
}
generateText() 返回值
// Raw model response (OpenAI-compatible format)
interface WxGenerateTextResponse {
  id: string;
  object: "chat.completion";
  created: number;
  model: string;
  choices: Array<{
    index: number;
    message: {
      role: "assistant";
      content: string;
    };
    finish_reason: string;
  }>;
  usage: {
    prompt_tokens: number;
    completion_tokens: number;
    total_tokens: number;
  };
}

最佳实践

  1. 编写业务代码前,先完成两步预检。 固定顺序:① DescribeActivityInfo / DescribeEnvPostpayPackage,检查计费资格 → ② DescribeAIModels,检查分组是否就绪(如有需要,先调用 DescribeManagedAIModelList 查看目录和价格,再调用 UpdateAIModel 启用目标模型)。两步都通过后,才能编写 wx.cloud.extend.AI.createModel(...)。
  2. createModel(provider) 只接受四类值——"cloudbase"(主要托管分组,新项目和成长计划的默认值)、"hunyuan-v3"(旧版计划分组,仅限 hy3,正在退役)、"hunyuan-exp"(更早的旧版内置分组),或自定义接入的 GroupName(必须以 custom- 开头,例如 custom-kimi、custom-openai-compat,以避免与内置名称或厂商名称冲突)。切勿编写 createModel("deepseek")(除非 DescribeAIModels 确实返回名为 deepseek 的旧版内置分组)、createModel("hunyuan")、createModel("kimi") 或 createModel("custom")——这些是模型/厂商名称或占位符,并非 GroupName。
  3. model 字段必须来自 DescribeAIModels。 传入的值必须实际存在于所选分组的 Models[].Model 列表中。主要托管分组默认只启用了 deepseek-v4-flash;如需使用其他模型,请先调用 UpdateAIModel。
  4. 计划配额与成长计划绑定,而非与分组名称绑定。 已加入计划的环境通过 cloudbase + hy3 使用免费配额;hunyuan-v3(仅限 hy3)也仍可使用该配额,但正在退役。尚未加入计划时,请引导用户访问 https://docs.cloudbase.net/ai/ai-inspire-plan,或使用资源包下的 "cloudbase" + 托管模型。
  5. 启用更多模型前,先检查价格。 DescribeManagedAIModelList 会返回 ModelChargingInfo(Uniform 表示统一定价,Tiered 表示阶梯定价)以及 ModelSpec.ContextLength。调用 UpdateAIModel 前请确认价格。Models 是全量替换——传入前请合并旧列表和新条目。
  6. 检查基础库版本。 需要 3.7.1 或更高版本;在较旧版本中,wx.cloud.extend.AI 为 undefined——请勿将此问题当作模型问题来排查。
  7. 使用回调更新 UI。 onText 非常适合逐步刷新聊天气泡;手动拼接 eventStream 中的内容容易丢失分隔符。
  8. 检查 [DONE]。 遍历 eventStream 时,仅在 event.data === "[DONE]" 时停止,否则流会一直等待下一帧。
  9. 别忘了 data 包装层。 streamText 参数必须包装在 data: { ... } 中——这与 JS/Node SDK 不同。忘记包装会导致参数错误。
  10. 区分“不符合资格/分组未就绪”和“调用失败”。 前者应引导用户完成加入计划/购买/调用 UpdateAIModel 等流程;后者则需要排查提示词、参数或网络。两者的错误消息和后续操作完全不同。
  11. 不要在小程序中硬编码第三方模型 API 密钥。 对于托管目录之外的模型,请使用 CreateAIModel(Secret.ApiKey),将密钥存储在 CloudBase 侧;小程序中只保留 GroupName。
  12. TypeScript:不要使用 any 来规避类型错误。 如果 wx.cloud.extend.AI 接口缺少类型声明,请为实际使用的部分声明精确的 interface,或通过本地 .d.ts 扩展类型。切勿使用 : any、as any、@ts-ignore 或 @ts-nocheck。
  13. 声称完成前,先自行验证。 构建小程序,在微信开发者工具模拟器中打开,并端到端测试真实的 streamText / generateText 流程,确认:(a) 文本块通过 onText 到达;(b) [DONE] 能终止流;(c) 控制台没有新增错误。未经实际运行,仅凭“应该能用”不能作为有效证据。

评论

支持 Markdown