AI SDK
初始化 SDK
初始化方法请参考初始化 SDK。
app.ai
初始化后,可以使用挂载至 cloudbase 实例上的 ai 方法创建 AI 实例,用于后续模型创建。
使用示例
app = cloudbase.init({ env: "your-env" });
const ai = app.ai();
类型声明
function ai(): AI;
返回值
AI
返回新创建的 AI 实例。
AI
用于创建 AI 模型的类。
createModel()
创建指定的 AI 模型。
使用示例
const model = ai.createModel("hunyuan-exp");
类型声明
function createModel(model: string): ChatModel;
返回一个实现了 ChatModel 抽象类的模型实例,该实例提供 AI 生成文本相关能力。
createImageModel()
创建指定的图片生成模型。
使用示例
const imageModel = ai.createImageModel("hunyuan-image");
类型声明
function createImageModel(provider: string): ImageModel;
参数
| 参数名 | 必填 | 类型 | 说明 |
|---|---|---|---|
| provider | 是 | string | 模型提供方名称,如 "hunyuan-image" |
返回值
返回一个 ImageModel 实例,该实例提供 AI 图片生成相关能力。
bot
挂载了 Bot 类的实例,上面集合了一系列与 Agent 交互的方法。具体可参考 Bot 类 的详细文档。
使用示例
const agentList = await ai.bot.list({ pageNumber: 1, pageSize: 10 });
registerFunctionTool()
注册函数工具。在进行大模型调用时,可以告知大模型可用的函数工具,当大模型的响应被解析为工具调用时,会自动调用对应的函数工具。
使用示例
// 省略初始化 AI sdk 的操作...
// 1. 定义获取天气的工具,详见 FunctionTool 类型
const getWeatherTool = {
name: "get_weather",
description: "返回某个城市的天气信息。调用示例:get_weather({city: '北京'})",
fn: ({ city }) => `${city}的天气是:秋高气爽!!!`, // 在这定义工具执行的内容
parameters: {
type: "object",
properties: {
city: {
type: "string",
description: "要查询的城市",
},
},
required: ["city"],
},
};
// 2. 注册我们刚定义好的工具
ai.registerFunctionTool(getWeatherTool);
// 3. 在给大模型发送消息的同时,告知大模型可用一个获取天气的工具
const model = ai.createModel("hunyuan-exp");
const result = await model.generateText({
model: "hunyuan-turbos-latest",
tools: [getWeatherTool], // 这里我们传入了获取天气工具
messages: [
{
role: "user",
content: "请告诉我北京的天气状况",
},
],
});
console.log(result.text);
类型声明
function registerFunctionTool(functionTool: FunctionTool);
参数
| 参数名 | 必填 | 类型 | 说明 |
|---|---|---|---|
| functionTool | 是 | FunctionTool | 详见 FunctionTool |
返回值
undefined
ChatModel
这个抽象类描述了 AI 生文模型类提供的接口。
generateText()
调用大模型生成文本。
使用示例
const hy = ai.createModel("hunyuan-exp"); // 创建模型
const res = await hy.generateText({
model: "hunyuan-turbos-latest",
messages: [{ role: "user", content: "你好,请你介绍一下李白" }],
});
console.log(res.text); // 打印生成的文本
类型声明
function generateText(data: BaseChatModelInput): Promise<{
rawResponses: Array<unknown>;
text: string;
messages: Array<ChatModelMessage>;
usage: Usage;
error?: unknown;
}>;
参数
| 参数名 | 必填 | 类型 | 示例 | 说明 |
|---|---|---|---|---|
| data | 是 | BaseChatModelInput | {model: "hunyuan-turbos-latest", messages: [{ role: "user", content: "你好,请你介绍一下李白" }]} | 参数类型定义为 BaseChatModelInput ,作为基础的入参定义。实际上各家大模型还会有各自独特的输入参数,开发者可按需根据实际使用的大模型官方文档传入其他不在此类型中被定义的参数,充分利用大模型提供的能力。其他参数会被透传至大模型接口, SDK 侧不对它们不做额外处理。 |
返回值
| 属性名 | 类型 | 示例 | 说明 |
|---|---|---|---|
| text | string | "李白是一位唐朝诗人。" | 大模型生成的文本。 |
| rawResponses | unknown[] | [{"choices": [{"finish_reason": "stop","message": {"role": "assistant", "content": "你好呀,有什么我可以帮忙的吗?"}}], "usage": {"prompt_tokens": 14, "completion_tokens": 9, "total_tokens": 23}}] | 大模型的完整返回值,包含更多详细数据,如消息创建时间等等。由于各家大模型返回值互有出入,请根据实际情况使用。 |
| res.messages | ChatModelMessage[] | [{role: 'user', content: '你好'},{role: 'assistant', content: '你好!很高兴与你交流。请问有什么我可以帮助你的吗?无论是关于生活、工作、学习还是其他方面的问题,我都会尽力为你提供帮助。'}] | 本次调用的完整消息列表。 |
| usage | Usage | {"completion_tokens":33,"prompt_tokens":3,"total_tokens":36} | 本次调用消耗的 token。 |
| error | unknown | 调用过程中产生的错误。 |
streamText()
以流式调用大模型生成文本。流式调用时,生成的文本及其他响应数据会通过 SSE 返回,该接口的返回值对 SSE 做了不同程度的封装,开发者能根据实际需求获取到文本流和完整数据流。
使用示例
const hy = ai.createModel("hunyuan-exp"); // 创建模型
const res = await hy.streamText({
model: "hunyuan-turbos-latest",
messages: [{ role: "user", content: "你好,请你介绍一下李白" }],
});
for await (let str of res.textStream) {
console.log(str); // 打印生成的文本
}
for await (let data of res.dataStream) {
console.log(data); // 打印每次返回的完整数据
}
类型声明
function streamText(data: BaseChatModelInput): Promise<StreamTextResult>;
参数
| 参数名 | 必填 | 类型 | 示例 | 说明 |
|---|---|---|---|---|
| data | 是 | BaseChatModelInput | {model: "hunyuan-turbos-latest", messages: [{ role: "user", content: "你好,请你介绍一下李白" }]} | 参数类型定义为 BaseChatModelInput ,作为基础的入参定义。实际上各家大模型还会有各自独特的输入参数,开发者可按需根据实际使用的大模型官方文档传入其他不在此类型中被定义的参数,充分利用大模型提供的能力。其他参数会被透传至大模型接口, SDK 侧不对它们不做额外处理。 |
返回值
| StreamTextResult 属性名 | 类型 | 说明 |
|---|---|---|
| textStream | ReadableStream<string> | 以流式返回的大模型生成文本,可参考使用示例获取到生成的增量文本。 |
| dataStream | ReadableStream<DataChunk> | 以流式返回的大模型响应数据,可参考使用示例获取到生成的增量数据。由于各家大模型响应值互有出入,请根据实际情况合理使用。 |
| messages | Promise<ChatModelMessage[]> | 本次调用的完整消息列表。 |
| usage | Promise<Usage> | 本次调用消耗的 token。 |
| error | unknown | 本次调用产生的错误。 |
| DataChunk 属性名 | 类型 | 说明 |
|---|---|---|
| choices | Array<object> | |
| choices[n].finish_reason | string | 模型终止推断的原因。 |
| choices[n].delta | ChatModelMessage | 本次请求的消息。 |
| usage | Usage | 本次请求消耗的 token。 |
| rawResponse | unknown | 大模型返回的原始回复。 |
示例
const hy = ai.createModel("hunyuan-exp");
const res = await hy.streamText({
model: "hunyuan-turbos-latest",
messages: [{ role: "user", content: "1+1结果是" }],
});
// 文本流
for await (let str of res.textStream) {
console.log(str);
}
// 1
// 加
// 1
// 的结果
// 是
// 2
// 。
// 数据流
for await (let str of res.dataStream) {
console.log(str);
}
// {created: 1723013866, id: "a95a54b5c5d2144eb700e60d0dfa5c98", model: "hunyuan-turbos-latest", version: "202404011000", choices: Array(1), …}
// {created: 1723013866, id: "a95a54b5c5d2144eb700e60d0dfa5c98", model: "hunyuan-turbos-latest", version: "202404011000", choices: Array(1), …}
// {created: 1723013866, id: "a95a54b5c5d2144eb700e60d0dfa5c98", model: "hunyuan-turbos-latest", version: "202404011000", choices: Array(1), …}
// {created: 1723013866, id: "a95a54b5c5d2144eb700e60d0dfa5c98", model: "hunyuan-turbos-latest", version: "202404011000", choices: Array(1), …}
// {created: 1723013866, id: "a95a54b5c5d2144eb700e60d0dfa5c98", model: "hunyuan-turbos-latest", version: "202404011000", choices: Array(1), …}
// {created: 1723013866, id: "a95a54b5c5d2144eb700e60d0dfa5c98", model: "hunyuan-turbos-latest", version: "202404011000", choices: Array(1), …}
// {created: 1723013866, id: "a95a54b5c5d2144eb700e60d0dfa5c98", model: "hunyuan-turbos-latest", version: "202404011000", choices: Array(1), …}
// {created: 1723013866, id: "a95a54b5c5d2144eb700e60d0dfa5c98", model: "hunyuan-turbos-latest", version: "202404011000", choices: Array(1), …}
ImageModel
这个类描述了 AI 图片生成模型类提供的接口。
generateImageSubUrlConfig
用于配置不同 provider 和 model 组合对应的 API 子路径。调用 generateImage() 时,SDK 会根据 input.model 查找对应的子路径,若未找到则使用默认路径 images/generations。
类型声明
generateImageSubUrlConfig: Record<string, Record<string, string>>
默认值
{
'hunyuan-image': {
'hunyuan-image-v3.0-v1.0.4': 'images/ar/generations',
'hunyuan-image-v3.0-v1.0.1': 'images/ar/generations',
},
}
使用示例
const imageModel = ai.createImageModel("hunyuan-image");
// 自定义子路径配置
imageModel.generateImageSubUrlConfig['hunyuan-image']['custom-model'] = 'images/custom/generations';
generateImage()
调用大模型生成图片。
使用示例
const imageModel = ai.createImageModel("hunyuan-image");
const res = await imageModel.generateImage({
model: "hunyuan-image-v3.0-v1.0.4",
prompt: "一只可爱的猫咪在草地上玩耍",
});
console.log(res.data[0].url); // 打印生成的图片 URL
类型声 明
function generateImage(input: HunyuanARGenerateImageInput): Promise<HunyuanARGenerateImageOutput>;
function generateImage(input: HunyuanGenerateImageInput): Promise<HunyuanGenerateImageOutput>;
参数
| 参数名 | 必填 | 类型 | 说明 |
|---|---|---|---|
| input | 是 | HunyuanARGenerateImageInput | HunyuanGenerateImageInput | 图片生成参数,详见 HunyuanARGenerateImageInput 或 HunyuanGenerateImageInput |
返回值
Promise<HunyuanARGenerateImageOutput> 或 Promise<HunyuanGenerateImageOutput>
| 属性名 | 类型 | 说明 |
|---|---|---|
| id | string | 此次请求的 id |
| created | number | unix 时间戳 |
| data | Array<object> | 返回的图片生成内容 |
| data[n].url | string | 生成的图片 url,有效期为 24 小时 |
| data[n].revised_prompt | string | 原 prompt 改写后的文本(若 revise 为 false,则为原 prompt) |
Bot
用于与 Agent 交互的类。
get()
获取某个 Agent 的信息。
使用示例
const res = await ai.bot.get({ botId: "botId-xxx" });
console.log(res);
类型声明
function get(props: { botId: string });
参数
| 参数名 | 必填 |
|---|