ai-model-cloudbase
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseWhen to use this skill
何时使用该技能
Use this skill for calling AI models using CloudBase across all platforms.
Supported platforms:
| Platform | SDK/API | Section |
|---|---|---|
| Web (Browser) | | Part 1 |
| Node.js (Server/Cloud Functions) | | Part 1 (same API, different init) |
| Any platform (HTTP) | HTTP API / OpenAI SDK | Part 2 |
| WeChat Mini Program | | Part 3 ⚠️ Different API |
你可以在全平台使用该技能来通过CloudBase调用AI模型。
支持的平台:
| 平台 | SDK/API | 章节 |
|---|---|---|
| Web(浏览器) | | 第一部分 |
| Node.js(服务器/云函数) | | 第一部分(API相同,初始化方式不同) |
| 任意平台(HTTP) | HTTP API / OpenAI SDK | 第二部分 |
| 微信小程序 | | 第三部分 ⚠️ API不同 |
How to use this skill (for a coding agent)
如何为编码Agent使用该技能
- Identify the target platform - Ask user which platform they're developing for
- Confirm CloudBase environment - Get (environment ID) and credentials
env - Pick the appropriate section - Part 1 for JS/Node SDK, Part 3 for WeChat Mini Program
- Follow CloudBase API shapes exactly - Do not invent new APIs
- 确定目标平台 - 询问用户正在哪个平台上开发
- 确认CloudBase环境 - 获取(环境ID)和凭证
env - 选择合适的章节 - JS/Node SDK选第一部分,微信小程序选第三部分
- 严格遵循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
undefinedbash
undefinedFor 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 responsesjs
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 usagejs
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/completionshttps://<ENV_ID>.api.tcloudbasegateway.com/v1/ai/<PROVIDER>/v1/chat/completionscURL - 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 object, supports callbacks.
datajs
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不同: 参数必须包裹在对象中,支持回调函数。
datajs
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 微信小程序
| Feature | JS/Node SDK | WeChat Mini Program |
|---|---|---|
| Namespace | | |
| generateText params | Direct object | Direct object |
| generateText return | | Raw: |
| streamText params | Direct object | ⚠️ Wrapped in |
| streamText return | | |
| Callbacks | Not supported | |
| Image generation | Node SDK only | Not available |
| 功能 | JS/Node SDK | 微信小程序 |
|---|---|---|
| 命名空间 | | |
| generateText参数 | 直接传入对象 | 直接传入对象 |
| generateText返回值 | | 原始格式: |
| streamText参数 | 直接传入对象 | ⚠️ 包裹在 |
| streamText返回值 | | |
| 回调函数 | 不支持 | |
| 图像生成 | 仅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
最佳实践
- Use streaming for long responses - Better user experience
- Handle errors gracefully - Wrap AI calls in try/catch
- Keep API Keys secure - Never expose in client-side code
- Initialize early - Initialize SDK/cloud in app entry point
- Check for [DONE] - In WeChat Mini Program streaming, check to stop
event.data === "[DONE]"
- 长响应使用流式输出 - 提升用户体验
- 优雅处理错误 - 将AI调用包裹在try/catch块中
- 确保API密钥安全 - 切勿在客户端代码中暴露密钥
- 尽早初始化 - 在应用入口点初始化SDK/云服务
- 检查[DONE]标识 - 在微信小程序流式输出中,通过判断是否结束
event.data === "[DONE]"