ai-model-cloudbase

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

When to use this skill

何时使用该技能

Use this skill for calling AI models using CloudBase across all platforms.
Supported platforms:
PlatformSDK/APISection
Web (Browser)
@cloudbase/js-sdk
Part 1
Node.js (Server/Cloud Functions)
@cloudbase/node-sdk
≥3.16.0
Part 1 (same API, different init)
Any platform (HTTP)HTTP API / OpenAI SDKPart 2
WeChat Mini Program
wx.cloud.extend.AI
Part 3 ⚠️ Different API

你可以在全平台使用该技能来通过CloudBase调用AI模型
支持的平台:
平台SDK/API章节
Web(浏览器)
@cloudbase/js-sdk
第一部分
Node.js(服务器/云函数)
@cloudbase/node-sdk
≥3.16.0
第一部分(API相同,初始化方式不同)
任意平台(HTTP)HTTP API / OpenAI SDK第二部分
微信小程序
wx.cloud.extend.AI
第三部分 ⚠️ API不同

How to use this skill (for a coding agent)

如何为编码Agent使用该技能

  1. Identify the target platform - Ask user which platform they're developing for
  2. Confirm CloudBase environment - Get
    env
    (environment ID) and credentials
  3. Pick the appropriate section - Part 1 for JS/Node SDK, Part 3 for WeChat Mini Program
  4. Follow CloudBase API shapes exactly - Do not invent new APIs

  1. 确定目标平台 - 询问用户正在哪个平台上开发
  2. 确认CloudBase环境 - 获取
    env
    (环境ID)和凭证
  3. 选择合适的章节 - JS/Node SDK选第一部分,微信小程序选第三部分
  4. 严格遵循CloudBase API格式 - 不要自行创建新的API

Part 1: CloudBase JS SDK & Node SDK

第一部分:CloudBase JS SDK & Node SDK

JS SDK and Node SDK share the same AI API. Only initialization differs.
JS SDK和Node SDK共享相同的AI API,仅初始化方式不同。

Installation

安装

bash
undefined
bash
undefined

For Web (Browser)

适用于Web(浏览器)

npm install @cloudbase/js-sdk
npm install @cloudbase/js-sdk

For Node.js (Server/Cloud Functions)

适用于Node.js(服务器/云函数)

npm install @cloudbase/node-sdk

⚠️ **Node SDK AI feature requires version 3.16.0 or above.** Check your version with `npm list @cloudbase/node-sdk`.
npm install @cloudbase/node-sdk

⚠️ **Node SDK的AI功能需要3.16.0或更高版本**,使用`npm list @cloudbase/node-sdk`检查你的版本。

Initialization - Web (JS SDK)

初始化 - Web(JS SDK)

js
import cloudbase from "@cloudbase/js-sdk";

const app = cloudbase.init({
  env: "<YOUR_ENV_ID>",
  accessKey: "<YOUR_PUBLISHABLE_KEY>"  // Get from CloudBase console
});

const auth = app.auth();
await auth.signInAnonymously();

const ai = app.ai();
js
import cloudbase from "@cloudbase/js-sdk";

const app = cloudbase.init({
  env: "<YOUR_ENV_ID>",
  accessKey: "<YOUR_PUBLISHABLE_KEY>"  // Get from CloudBase console
});

const auth = app.auth();
await auth.signInAnonymously();

const ai = app.ai();

Initialization - Node.js (Node SDK)

初始化 - Node.js(Node SDK)

js
const tcb = require('@cloudbase/node-sdk');
const app = tcb.init({ env: '<YOUR_ENV_ID>' });

exports.main = async (event, context) => {
  const ai = app.ai();
  // Use AI features - same API as JS SDK
};
js
const tcb = require('@cloudbase/node-sdk');
const app = tcb.init({ env: '<YOUR_ENV_ID>' });

exports.main = async (event, context) => {
  const ai = app.ai();
  // 使用AI功能 - 与JS SDK的API相同
};

generateText() - Non-streaming

generateText() - 非流式输出

js
const model = ai.createModel("hunyuan-exp");

const result = await model.generateText({
  model: "hunyuan-lite",
  messages: [{ role: "user", content: "你好,请你介绍一下李白" }],
});

console.log(result.text);           // Generated text string
console.log(result.usage);          // { prompt_tokens, completion_tokens, total_tokens }
console.log(result.messages);       // Full message history
console.log(result.rawResponses);   // Raw model responses
js
const model = ai.createModel("hunyuan-exp");

const result = await model.generateText({
  model: "hunyuan-lite",
  messages: [{ role: "user", content: "你好,请你介绍一下李白" }],
});

console.log(result.text);           // 生成的文本字符串
console.log(result.usage);          // { prompt_tokens, completion_tokens, total_tokens }
console.log(result.messages);       // 完整的消息历史
console.log(result.rawResponses);   // 原始模型响应

streamText() - Streaming

streamText() - 流式输出

js
const model = ai.createModel("hunyuan-exp");

const res = await model.streamText({
  model: "hunyuan-turbos-latest",
  messages: [{ role: "user", content: "你好,请你介绍一下李白" }],
});

// Option 1: Iterate text stream (recommended)
for await (let text of res.textStream) {
  console.log(text);  // Incremental text chunks
}

// Option 2: Iterate data stream for full response data
for await (let data of res.dataStream) {
  console.log(data);  // Full response chunk with metadata
}

// Option 3: Get final results
const messages = await res.messages;  // Full message history
const usage = await res.usage;        // Token usage
js
const model = ai.createModel("hunyuan-exp");

const res = await model.streamText({
  model: "hunyuan-turbos-latest",
  messages: [{ role: "user", content: "你好,请你介绍一下李白" }],
});

// 选项1:遍历文本流(推荐)
for await (let text of res.textStream) {
  console.log(text);  // 增量文本块
}

// 选项2:遍历数据流以获取完整响应数据
for await (let data of res.dataStream) {
  console.log(data);  // 包含元数据的完整响应块
}

// 选项3:获取最终结果
const messages = await res.messages;  // 完整的消息历史
const usage = await res.usage;        // Token使用情况

generateImage() - Image Generation

generateImage() - 图像生成

⚠️ Image generation is currently only available in Node SDK, not in JS SDK (Web) or WeChat Mini Program.
js
// Node SDK only
const imageModel = ai.createImageModel("hunyuan-image");

const res = await imageModel.generateImage({
  model: "hunyuan-image",
  prompt: "一只可爱的猫咪在草地上玩耍",
  size: "1024x1024",
  version: "v1.9",
});

console.log(res.data[0].url);           // Image URL (valid 24 hours)
console.log(res.data[0].revised_prompt);// Revised prompt if revise=true

⚠️ 目前仅Node SDK支持图像生成,JS SDK(Web)和微信小程序暂不支持。
js
// 仅适用于Node SDK
const imageModel = ai.createImageModel("hunyuan-image");

const res = await imageModel.generateImage({
  model: "hunyuan-image",
  prompt: "一只可爱的猫咪在草地上玩耍",
  size: "1024x1024",
  version: "v1.9",
});

console.log(res.data[0].url);           // 图片URL(有效期24小时)
console.log(res.data[0].revised_prompt);// 如果revise=true,返回修改后的提示词

Part 2: CloudBase HTTP API

第二部分:CloudBase HTTP API

API Endpoint

API端点

https://<ENV_ID>.api.tcloudbasegateway.com/v1/ai/<PROVIDER>/v1/chat/completions
https://<ENV_ID>.api.tcloudbasegateway.com/v1/ai/<PROVIDER>/v1/chat/completions

cURL - Non-streaming

cURL - 非流式输出

bash
curl -X POST 'https://<ENV_ID>.api.tcloudbasegateway.com/v1/ai/deepseek/v1/chat/completions' \
  -H 'Authorization: Bearer <YOUR_API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{"model": "deepseek-r1", "messages": [{"role": "user", "content": "你好"}], "stream": false}'
bash
curl -X POST 'https://<ENV_ID>.api.tcloudbasegateway.com/v1/ai/deepseek/v1/chat/completions' \
  -H 'Authorization: Bearer <YOUR_API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{"model": "deepseek-r1", "messages": [{"role": "user", "content": "你好"}], "stream": false}'

cURL - Streaming

cURL - 流式输出

bash
curl -X POST 'https://<ENV_ID>.api.tcloudbasegateway.com/v1/ai/deepseek/v1/chat/completions' \
  -H 'Authorization: Bearer <YOUR_API_KEY>' \
  -H 'Content-Type: application/json' \
  -H 'Accept: text/event-stream' \
  -d '{"model": "deepseek-r1", "messages": [{"role": "user", "content": "你好"}], "stream": true}'
bash
curl -X POST 'https://<ENV_ID>.api.tcloudbasegateway.com/v1/ai/deepseek/v1/chat/completions' \
  -H 'Authorization: Bearer <YOUR_API_KEY>' \
  -H 'Content-Type: application/json' \
  -H 'Accept: text/event-stream' \
  -d '{"model": "deepseek-r1", "messages": [{"role": "user", "content": "你好"}], "stream": true}'

OpenAI SDK Compatible

兼容OpenAI SDK

js
const OpenAI = require("openai");

const client = new OpenAI({
  apiKey: "<YOUR_API_KEY>",
  baseURL: "https://<ENV_ID>.api.tcloudbasegateway.com/v1/ai/deepseek/v1",
});

const completion = await client.chat.completions.create({
  model: "deepseek-r1",
  messages: [{ role: "user", content: "你好" }],
  stream: true,
});

for await (const chunk of completion) {
  console.log(chunk);
}

js
const OpenAI = require("openai");

const client = new OpenAI({
  apiKey: "<YOUR_API_KEY>",
  baseURL: "https://<ENV_ID>.api.tcloudbasegateway.com/v1/ai/deepseek/v1",
});

const completion = await client.chat.completions.create({
  model: "deepseek-r1",
  messages: [{ role: "user", content: "你好" }],
  stream: true,
});

for await (const chunk of completion) {
  console.log(chunk);
}

Part 3: WeChat Mini Program

第三部分:微信小程序

⚠️ WeChat Mini Program API is DIFFERENT from JS/Node SDK. Pay attention to the parameter structure.
Requires base library 3.7.1+. No extra SDK needed.
⚠️ 微信小程序的API与JS/Node SDK不同,请注意参数结构。
需要基础库3.7.1或以上版本,无需额外安装SDK。

Initialization

初始化

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

generateText() - Non-streaming

generateText() - 非流式输出

⚠️ Different from JS/Node SDK: Return value is raw model response.
js
const model = wx.cloud.extend.AI.createModel("hunyuan-exp");

const res = await model.generateText({
  model: "hunyuan-lite",
  messages: [{ role: "user", content: "你好" }],
});

// ⚠️ Return value is 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
⚠️ 与JS/Node SDK不同: 返回值为原始模型响应。
js
const model = wx.cloud.extend.AI.createModel("hunyuan-exp");

const res = await model.generateText({
  model: "hunyuan-lite",
  messages: [{ role: "user", content: "你好" }],
});

// ⚠️ 返回值为原始模型响应,并非像JS/Node SDK那样被封装
console.log(res.choices[0].message.content);  // 通过choices数组访问结果
console.log(res.usage);                        // Token使用情况

streamText() - Streaming

streamText() - 流式输出

⚠️ Different from JS/Node SDK: Must wrap parameters in
data
object, supports callbacks.
js
const model = wx.cloud.extend.AI.createModel("hunyuan-exp");

// ⚠️ Parameters MUST be wrapped in `data` object
const res = await model.streamText({
  data: {                              // ⚠️ Required wrapper
    model: "hunyuan-lite",
    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 also available
for await (let str of res.textStream) {
  console.log(str);
}

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

⚠️ 与JS/Node SDK不同: 参数必须包裹在
data
对象中,支持回调函数。
js
const model = wx.cloud.extend.AI.createModel("hunyuan-exp");

// ⚠️ 参数必须包裹在`data`对象中
const res = await model.streamText({
  data: {                              // ⚠️ 必须的包裹层
    model: "hunyuan-lite",
    messages: [{ role: "user", content: "hi" }]
  },
  onText: (text) => {                  // 可选:增量文本回调
    console.log("New text:", text);
  },
  onEvent: ({ data }) => {             // 可选:原始事件回调
    console.log("Event:", data);
  },
  onFinish: (fullText) => {            // 可选:完成回调
    console.log("Done:", fullText);
  }
});

// 也支持异步迭代
for await (let str of res.textStream) {
  console.log(str);
}

// 通过eventStream检查是否完成
for await (let event of res.eventStream) {
  console.log(event);
  if (event.data === "[DONE]") {       // ⚠️ 检查[DONE]以停止迭代
    break;
  }
}

API Comparison: JS/Node SDK vs WeChat Mini Program

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

FeatureJS/Node SDKWeChat Mini Program
Namespace
app.ai()
wx.cloud.extend.AI
generateText paramsDirect objectDirect object
generateText return
{ text, usage, messages }
Raw:
{ choices, usage }
streamText paramsDirect object⚠️ Wrapped in
data: {...}
streamText return
{ textStream, dataStream }
{ textStream, eventStream }
CallbacksNot supported
onText
,
onEvent
,
onFinish
Image generationNode SDK onlyNot available

功能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支持不支持

Type Definitions

类型定义

JS/Node SDK - BaseChatModelInput

JS/Node SDK - BaseChatModelInput

ts
interface BaseChatModelInput {
  model: string;                        // Required: model name
  messages: Array<ChatModelMessage>;    // Required: message array
  temperature?: number;                 // Optional: sampling temperature
  topP?: number;                        // Optional: nucleus sampling
}

type ChatModelMessage =
  | { role: "user"; content: string }
  | { role: "system"; content: string }
  | { role: "assistant"; content: string };
ts
interface BaseChatModelInput {
  model: string;                        // 必填:模型名称
  messages: Array<ChatModelMessage>;    // 必填:消息数组
  temperature?: number;                 // 可选:采样温度
  topP?: number;                        // 可选:核采样参数
}

type ChatModelMessage =
  | { role: "user"; content: string }
  | { role: "system"; content: string }
  | { role: "assistant"; content: string };

JS/Node SDK - generateText() Return

JS/Node SDK - generateText() 返回值

ts
interface GenerateTextResult {
  text: string;                         // Generated text
  messages: Array<ChatModelMessage>;    // Full message history
  usage: Usage;                         // Token usage
  rawResponses: Array<unknown>;         // Raw model responses
  error?: unknown;                      // Error if any
}

interface Usage {
  prompt_tokens: number;
  completion_tokens: number;
  total_tokens: number;
}
ts
interface GenerateTextResult {
  text: string;                         // 生成的文本
  messages: Array<ChatModelMessage>;    // 完整的消息历史
  usage: Usage;                         // Token使用情况
  rawResponses: Array<unknown>;         // 原始模型响应
  error?: unknown;                      // 错误信息(如有)
}

interface Usage {
  prompt_tokens: number;
  completion_tokens: number;
  total_tokens: number;
}

JS/Node SDK - streamText() Return

JS/Node SDK - streamText() 返回值

ts
interface StreamTextResult {
  textStream: AsyncIterable<string>;    // Incremental text stream
  dataStream: AsyncIterable<DataChunk>; // Full data stream
  messages: Promise<ChatModelMessage[]>;// Final message history
  usage: Promise<Usage>;                // Final token usage
  error?: unknown;                      // Error if any
}

interface DataChunk {
  choices: Array<{
    finish_reason: string;
    delta: ChatModelMessage;
  }>;
  usage: Usage;
  rawResponse: unknown;
}
ts
interface StreamTextResult {
  textStream: AsyncIterable<string>;    // 增量文本流
  dataStream: AsyncIterable<DataChunk>; // 完整数据流
  messages: Promise<ChatModelMessage[]>;// 最终消息历史
  usage: Promise<Usage>;                // 最终Token使用情况
  error?: unknown;                      // 错误信息(如有)
}

interface DataChunk {
  choices: Array<{
    finish_reason: string;
    delta: ChatModelMessage;
  }>;
  usage: Usage;
  rawResponse: unknown;
}

WeChat Mini Program - streamText() Input

微信小程序 - streamText() 输入参数

ts
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
}
ts
interface WxStreamTextInput {
  data: {                              // ⚠️ 必填的包裹对象
    model: string;
    messages: Array<{
      role: "user" | "system" | "assistant";
      content: string;
    }>;
  };
  onText?: (text: string) => void;     // 增量文本回调
  onEvent?: (prop: { data: string }) => void;  // 原始事件回调
  onFinish?: (text: string) => void;   // 完成回调
}

WeChat Mini Program - streamText() Return

微信小程序 - streamText() 返回值

ts
interface WxStreamTextResult {
  textStream: AsyncIterable<string>;   // Incremental text stream
  eventStream: AsyncIterable<{         // Raw event stream
    event?: unknown;
    id?: unknown;
    data: string;                      // "[DONE]" when complete
  }>;
}
ts
interface WxStreamTextResult {
  textStream: AsyncIterable<string>;   // 增量文本流
  eventStream: AsyncIterable<{         // 原始事件流
    event?: unknown;
    id?: unknown;
    data: string;                      // 完成时为"[DONE]"
  }>;
}

WeChat Mini Program - generateText() Return

微信小程序 - generateText() 返回值

ts
// 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;
  };
}
ts
// 原始模型响应(兼容OpenAI格式)
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;
  };
}

HunyuanGenerateImageInput (JS/Node SDK only)

HunyuanGenerateImageInput(仅JS/Node SDK支持)

ts
interface HunyuanGenerateImageInput {
  model: "hunyuan-image" | string;      // Required
  prompt: string;                       // Required: image description
  version?: "v1.8.1" | "v1.9";         // Default: "v1.8.1"
  size?: string;                        // Default: "1024x1024"
  negative_prompt?: string;             // v1.9 only
  style?: string;                       // v1.9 only
  revise?: boolean;                     // Default: true
  n?: number;                           // Default: 1
  footnote?: string;                    // Watermark, max 16 chars
  seed?: number;                        // Range: [1, 4294967295]
}

interface HunyuanGenerateImageOutput {
  id: string;
  created: number;
  data: Array<{
    url: string;                        // Image URL (24h valid)
    revised_prompt?: string;
  }>;
}

ts
interface HunyuanGenerateImageInput {
  model: "hunyuan-image" | string;      // 必填
  prompt: string;                       // 必填:图像描述
  version?: "v1.8.1" | "v1.9";         // 默认值:"v1.8.1"
  size?: string;                        // 默认值:"1024x1024"
  negative_prompt?: string;             // 仅v1.9支持
  style?: string;                       // 仅v1.9支持
  revise?: boolean;                     // 默认值:true
  n?: number;                           // 默认值:1
  footnote?: string;                    // 水印,最多16个字符
  seed?: number;                        // 范围:[1, 4294967295]
}

interface HunyuanGenerateImageOutput {
  id: string;
  created: number;
  data: Array<{
    url: string;                        // 图片URL(有效期24小时)
    revised_prompt?: string;
  }>;
}

Best Practices

最佳实践

  1. Use streaming for long responses - Better user experience
  2. Handle errors gracefully - Wrap AI calls in try/catch
  3. Keep API Keys secure - Never expose in client-side code
  4. Initialize early - Initialize SDK/cloud in app entry point
  5. Check for [DONE] - In WeChat Mini Program streaming, check
    event.data === "[DONE]"
    to stop
  1. 长响应使用流式输出 - 提升用户体验
  2. 优雅处理错误 - 将AI调用包裹在try/catch块中
  3. 确保API密钥安全 - 切勿在客户端代码中暴露密钥
  4. 尽早初始化 - 在应用入口点初始化SDK/云服务
  5. 检查[DONE]标识 - 在微信小程序流式输出中,通过
    event.data === "[DONE]"
    判断是否结束