小程序调用
微信小程序通过 wx.cloud.extend.AI 调用 CloudBase AI 大模型,无需额外安装 SDK。
前置条件
- 微信基础库版本 ≥ 3.7.1
- 已开通云开发环境
- 已配置大模型(见 大模型配置指南)
初始化
在 app.js 中初始化云开发:
App({
onLaunch() {
wx.cloud.init({
env: "<YOUR_ENV_ID>"
});
}
});
文本生成
generateText() - 非流式
一次性返回完整结果,适用于短文本生成。
const model = wx.cloud.extend.AI.createModel("hunyuan-exp");
const res = await model.generateText({
data: {
model: "hunyuan-turbos-latest",
messages: [{ role: "user", content: "介绍一下李白" }],
}
});
// 返回值为原始模型响应
console.log(res.choices[0].message.content);
console.log(res.usage); // { prompt_tokens, completion_tokens, total_tokens }
返回值
interface GenerateTextResponse {
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;
};
}
streamText() - 流式
流式返回文本,适用于实时对话、长文本生成场景。
const model = wx.cloud.extend.AI.createModel("hunyuan-exp");
const res = await model.streamText({
data: {
model: "hunyuan-turbos-latest",
messages: [{ role: "user", content: "介绍一下李白" }],
}
});
// 使用 textStream 获取增量文本
for await (const text of res.textStream) {
console.log("文本片段:", text);
}
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| data | object | 是 | 请求参数,包含 model 和 messages |
| data.model | string | 是 | 模型名称 |
| data.messages | array | 是 | 消息列表 |
返回值
| 属性 | 类型 | 说明 |
|---|---|---|
| textStream | AsyncIterable\<string> | 增量文本流 |
| eventStream | AsyncIterable\<object> | 原始事件流(包含元数据) |
检测流结束
使用 eventStream 可获取完整事件信息,当返回 [DONE] 时表示流结束:
for await (const event of res.eventStream) {
console.log(event);
if (event.data === "[DONE]") {
break;
}
}
完整示例
聊天页面
Page({
data: {
messages: [],
inputValue: "",
isLoading: false
},
async sendMessage() {
const { inputValue, messages } = this.data;
if (!inputValue.trim() || this.data.isLoading) return;
// 添加用户消息
const userMessage = { role: "user", content: inputValue };
const newMessages = [...messages, userMessage];
this.setData({
messages: [...newMessages, { role: "assistant", content: "" }],
inputValue: "",
isLoading: true
});
try {
const model = wx.cloud.extend.AI.createModel("hunyuan-exp");
let assistantContent = "";
const res = await model.streamText({
data: {
model: "hunyuan-turbos-latest",
messages: newMessages,
}
});
// 使用 textStream 逐步更新 UI
for await (const text of res.textStream) {
assistantContent += text;
this.setData({
messages: [
...newMessages,
{ role: "assistant", content: assistantContent }
]
});
}
} catch (error) {
console.error("调用失败:", error);
wx.showToast({ title: "请求失败", icon: "error" });
} finally {
this.setData({ isLoading: false });
}
}
});
与 Web SDK 的差异
| 特性 | 小程序 | Web SDK |
|---|---|---|
| 命名空间 | wx.cloud.extend.AI | app.ai() |
| 参数格式 | 包裹在 data 对象中 | 直接传递 |
| 返回值 | 原始响应 { choices, usage } | 封装后 { text, usage, messages } |
| 图片生成 | 不支持 | 支持 |