Web SDK 调用
通过 @cloudbase/js-sdk 在 Web 应用中调用 CloudBase AI 大模型,支持文本生成、流式输出、图生文等能力。
安装
npm install @cloudbase/js-sdk
初始化
import cloudbase from "@cloudbase/js-sdk";
const app = cloudbase.init({
env: "<YOUR_ENV_ID>",
accessKey: "<YOUR_PUBLISHABLE_KEY>" // 从控制台获取
});
// 获取 AI 实例
const ai = app.ai();
Publishable Key 获取地址:CloudBase 控制台 → 环境配置 → API Key
文本生成
generateText() - 非流式
一次性返回完整结果。
const model = ai.createModel("hunyuan-exp");
const result = await model.generateText({
model: "hunyuan-turbos-latest",
messages: [{ role: "user", content: "介绍一下李白" }],
});
console.log(result.text); // 生成的文本
console.log(result.usage); // Token 使用量
console.log(result.messages); // 完整消息历史
返回值
| 属性 | 类型 | 说明 |
|---|---|---|
| text | string | 生成的文本 |
| messages | ChatModelMessage[] | 完整消息历史 |
| usage | Usage | Token 使用量 |
| rawResponses | unknown[] | 原始模型响应 |
| error | unknown | 错误信息(如有) |
streamText() - 流式
流式返回文本,适用于实时对话场景。
const model = ai.createModel("hunyuan-exp");
const res = await model.streamText({
model: "hunyuan-turbos-latest",
messages: [{ role: "user", content: "介绍一下李白" }],
});
// 方式一:迭代文本流(推荐)
for await (const text of res.textStream) {
console.log(text); // 增量文本
}
// 方式二:迭代数据流,获取完整响应数据
for await (const data of res.dataStream) {
console.log(data); // 包含 choices、usage 等完整信息
}
// 获取最终结果
const messages = await res.messages;
const usage = await res.usage;
返回值
| 属性 | 类型 | 说明 |
|---|---|---|
| textStream | AsyncIterable\<string> | 增量文本流 |
| dataStream | AsyncIterable\<DataChunk> | 完整数据流 |
| messages | Promise\<ChatModelMessage[]> | 最终消息历史 |
| usage | Promise\<Usage> | 最终 Token 使用量 |
图生文(视觉理解)
使用支持视觉的模型(如 hunyuan-vision)理解图片内容。
tip
需要先配置自定义模型 hunyuan-custom,填写混元大模型的 BaseURL 和 API Key。
const model = ai.createModel("hunyuan-custom");
const res = await model.streamText({
model: "hunyuan-vision",
messages: [
{
role: "user",
content: [
{ type: "text", text: "这张图片的内容是什么?" },
{
type: "image_url",
image_url: {
url: "https://example.com/image.png"
}
}
]
}
]
});
for await (const text of res.textStream) {
console.log(text);
}
消息内容格式
当使用图生文时,content 为数组格式:
文本内容:
interface TextContent {
type: "text";
text: string;
}
图片内容:
interface ImageContent {
type: "image_url";
image_url: {
url: string; // 图片 URL
};
}
文生图
注意
图片生成功能仅在 Node SDK 中可用,Web SDK 暂不支持。如需在 Web 应用中使用,请通过云函数调用。详见 Node SDK 调用 - 图片生成。
完整示例
聊天应用
import cloudbase from "@cloudbase/js-sdk";
const app = cloudbase.init({
env: "<YOUR_ENV_ID>",
accessKey: "<YOUR_PUBLISHABLE_KEY>"
});
async function chat(userInput, history = []) {
const auth = app.auth();
await auth.signInAnonymously();
const ai = app.ai();
const model = ai.createModel("hunyuan-exp");
const messages = [
...history,
{ role: "user", content: userInput }
];
const res = await model.streamText({
model: "hunyuan-turbos-latest",
messages
});
let fullText = "";
for await (const text of res.textStream) {
fullText += text;
// 更新 UI
document.getElementById("output").textContent = fullText;
}
return fullText;
}
类型定义
BaseChatModelInput
interface BaseChatModelInput {
model: string; // 模型名称
messages: ChatModelMessage[]; // 消息列表
temperature?: number; // 采样温度
topP?: number; // 核采样
}
type ChatModelMessage =
| { role: "user"; content: string | ContentPart[] }
| { role: "system"; content: string }
| { role: "assistant"; content: string };
Usage
interface Usage {
prompt_tokens: number;
completion_tokens: number;
total_tokens: number;
}