跳到主要内容

AI SDK

初始化 SDK

初始化方法请参考初始化 SDK

app.ai

初始化后,可以使用挂载至 cloudbase 实例上的 ai 方法创建 AI 实例,用于后续模型创建。

使用示例

app = cloudbase.init({ env: "your-env" });
const ai = await app.ai();

类型声明

function ai(options?: AIInitOption): Promise<AI>;

参数

参数名必填类型示例说明
optionsAIInitOption{ env: "my-env" }AI 初始化参数,大多数场景下不用传递。该参数传递的数据 SDK 都会自动获取,在特殊场景可按需传递覆盖。

返回值

Promise<AI>

返回新创建的 AI 实例。

AI

用于创建 AI 模型的类。

createModel()

创建指定的 AI 模型。

使用示例

const model = ai.createModel("hunyuan");

类型声明

function createModel(model: string): ChatModel;

返回一个实现了 ChatModel 抽象类的模型实例,该实例提供 AI 生成文本相关能力。

bot

挂载了 Bot 类的实例,上面集合了一系列与 Agent 交互的方法。具体可参考 Bot 类 的详细文档。

使用示例

const agentList = await ai.bot.list({ pageNumber: 1, pageSize: 10 });

ChatModel

这个抽象类描述了 AI 生文模型类提供的接口。

generateText()

调用大模型生成文本。

使用示例

const hy = ai.createModel("hunyuan"); // 创建模型
const res = await hy.generateText({
model: "hunyuan-lite",
messages: [{ role: "user", content: "你好,请你介绍一下李白" }],
});
console.log(res.text); // 打印生成的文本

类型声明

function generateText(data: BaseChatModelInput): Promise<{
rawResponse: any;
text: string;
}>;

参数

参数名必填类型示例说明
dataBaseChatModelInput{model: "hunyuan-lite", messages: [{ role: "user", content: "你好,请你介绍一下李白" }]}参数类型定义为 BaseChatModelInput ,作为基础的入参定义。实际上各家大模型还会有各自独特的输入参数,开发者可按需根据实际使用的大模型官方文档传入其他不在此类型中被定义的参数,充分利用大模型提供的能力。其他参数会被透传至大模型接口, SDK 侧不对它们不做额外处理。

返回值

属性名类型示例说明
res.textstring"李白是一位唐朝诗人。"大模型生成的文本。
res.rawResponseobject{"choices": [{"finish_reason": "stop","message": {"role": "assistant", "content": "你好呀,有什么我可以帮忙的吗?"}}], "usage": {"prompt_tokens": 14, "completion_tokens": 9, "total_tokens": 23}}大模型的完整返回值,包含更多详细数据,如 token 使用情况相关字段。由于各家大模型返回值互有出入,请根据实际情况使用。

streamText()

以流式调用大模型生成文本。流式调用时,生成文本及其他响应数据会通过 SSE 返回,该接口的返回值对 SEE 做了不同程度的封装,开发者能根据实际需求获取到文本流、完整数据流和 SSE 流。

使用示例

const hy = ai.createModel("hunyuan"); // 创建模型
const res = await hy.streamText({
model: "hunyuan-lite",
messages: [{ role: "user", content: "你好,请你介绍一下李白" }],
});

for await (let str of res.textStream) {
console.log(str); // 打印生成的文本
}
for await (let data of res.dataStream) {
console.log(str); // 打印每次返回的数据
}
for await (let event of res.eventSourceStream) {
console.log(event); // 打印 SSE 数据
}

类型声明

function streamText(data: BaseChatModelInput): Promise<StreamTextResult>;

参数

参数名必填类型示例说明
dataBaseChatModelInput{model: "hunyuan-lite", messages: [{ role: "user", content: "你好,请你介绍一下李白" }]}参数类型定义为 BaseChatModelInput ,作为基础的入参定义。实际上各家大模型还会有各自独特的输入参数,开发者可按需根据实际使用的大模型官方文档传入其他不在此类型中被定义的参数,充分利用大模型提供的能力。其他参数会被透传至大模型接口, SDK 侧不对它们不做额外处理。

返回值

属性名类型说明
res.textStreamReadableStream<string>以流式返回的大模型生成文本,可参考使用示例获取到生成的增量文本。
res.dataStreamReadableStream<object>以流式返回的大模型响应数据,可参考使用示例获取到生成的增量数据。由于各家大模型响应值互有出入,请根据实际情况合理使用。
res.eventSourceStreamReadableStream<object>以流式返回的完整 SSE 数据,可参考使用示例获取到每个 SSE 响应。由于各家大模型响应值互有出入,请根据实际情况合理使用。

示例

const hy = ai.createModel("hunyuan");
const res = await hy.streamText({
model: "hunyuan-lite",
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-lite", version: "202404011000", choices: Array(1), …}
// {created: 1723013866, id: "a95a54b5c5d2144eb700e60d0dfa5c98", model: "hunyuan-lite", version: "202404011000", choices: Array(1), …}
// {created: 1723013866, id: "a95a54b5c5d2144eb700e60d0dfa5c98", model: "hunyuan-lite", version: "202404011000", choices: Array(1), …}
// {created: 1723013866, id: "a95a54b5c5d2144eb700e60d0dfa5c98", model: "hunyuan-lite", version: "202404011000", choices: Array(1), …}
// {created: 1723013866, id: "a95a54b5c5d2144eb700e60d0dfa5c98", model: "hunyuan-lite", version: "202404011000", choices: Array(1), …}
// {created: 1723013866, id: "a95a54b5c5d2144eb700e60d0dfa5c98", model: "hunyuan-lite", version: "202404011000", choices: Array(1), …}
// {created: 1723013866, id: "a95a54b5c5d2144eb700e60d0dfa5c98", model: "hunyuan-lite", version: "202404011000", choices: Array(1), …}
// {created: 1723013866, id: "a95a54b5c5d2144eb700e60d0dfa5c98", model: "hunyuan-lite", version: "202404011000", choices: Array(1), …}

// SSE 流
for await (let str of res.eventSourceStream) {
console.log(str);
}
// {type: "event", id: undefined, event: undefined, data: "{"created":1723013866,"id":"a95a54b5c5d2144eb700e6…okens":6,"completion_tokens":1,"total_tokens":7}}"}
// {type: "event", id: undefined, event: undefined, data: "{"created":1723013866,"id":"a95a54b5c5d2144eb700e6…okens":6,"completion_tokens":2,"total_tokens":8}}"}
// {type: "event", id: undefined, event: undefined, data: "{"created":1723013866,"id":"a95a54b5c5d2144eb700e6…okens":6,"completion_tokens":3,"total_tokens":9}}"}
// {type: "event", id: undefined, event: undefined, data: "{"created":1723013866,"id":"a95a54b5c5d2144eb700e6…kens":6,"completion_tokens":4,"total_tokens":10}}"}
// {type: "event", id: undefined, event: undefined, data: "{"created":1723013866,"id":"a95a54b5c5d2144eb700e6…kens":6,"completion_tokens":5,"total_tokens":11}}"}
// {type: "event", id: undefined, event: undefined, data: "{"created":1723013866,"id":"a95a54b5c5d2144eb700e6…kens":6,"completion_tokens":6,"total_tokens":12}}"}
// {type: "event", id: undefined, event: undefined, data: "{"created":1723013866,"id":"a95a54b5c5d2144eb700e6…kens":6,"completion_tokens":7,"total_tokens":13}}"}
// {type: "event", id: undefined, event: undefined, data: "{"created":1723013866,"id":"a95a54b5c5d2144eb700e6…kens":6,"completion_tokens":7,"total_tokens":13}}"}
// {type: "event", id: undefined, event: undefined, data: "[DONE]"}

Bot

用于与 Agent 交互的类。

get()

获取某个 Agent 的信息。

使用示例

await ai.bot.get({ botId: "botId-xxx" });

类型声明

function get(props: { botId: string });

参数

参数名必填类型说明
props.botIdstring要获取信息的 Agent 的 id

list()

批量获取多个 Agent 的信息。

使用示例

await ai.bot.list({
pageNumber: 1,
pageSize: 10,
name: "",
enable: true,
information: "",
introduction: "",
});

类型声明

function list(props: {
name: string;
introduction: string;
information: string;
enable: boolean;
pageSize: number;
pageNumber: number;
});

参数

参数名必填类型说明
props.pageNumbernumber分页大小
props.pageSizenumber分页下标
props.enablebooleanAgent 是否启用
props.namestringAgent 名字,用于模糊查询
props.informationstringAgent 信息,用于模糊查询
props.introductionstringAgent 简介,用于模糊查询

sendMessage()

批量获取多个 Agent 的信息。

使用示例

const res = await ai.bot.sendMessage({
botId: "botId-xxx",
history: [{ content: "你是李白。", role: "user" }],
msg: "你好",
});
for await (let str of res.dataStream) {
console.log(str);
}

类型声明

function sendMessage(props: {
botId: string;
msg: string;
history: Array<{
role: string;
content: string;
}>;
});

参数

参数名必填类型说明
props.botIdnumberAgent id
props.msgnumber此次对话要发送的消息
props.historyboolean在此次对话前发生的聊天记录
props.history[n].rolestring本聊天信息的发送角色
props.history[n].contentstring本聊天信息的内容

getChatRecords()

获取聊天记录。

使用示例

await ai.bot.getChatRecords({
botId: "botId-xxx",
pageNumber: 1,
pageSize: 10,
sort: "asc",
});

类型声明

function getChatRecords(props: {
botId: string;
sort: string;
pageSize: number;
pageNumber: number;
});

参数

参数名必填类型说明
props.botIdstringAgent id
props.sortstring排序方式
props.pageSizenumber分页大小
props.pageNumbernumber分页下标

sendFeedback()

发送对某条聊天记录的反馈信息。

使用示例

const res = await ai.bot.sendFeedback({
userFeedback: {
botId: "botId-xxx",
recordId: "recordId-xxx",
comment: "非常棒",
rating: 5,
tags: ["优美"],
aiAnswer: "落英缤纷",
input: "来个成语",
type: "upvote",
},
});

类型声明

function sendFeedback(props: { userFeedback: IUserFeedback });

参数

参数名必填类型说明
props.userFeedbackIUserFeedback用户反馈,详见 IUserFeedback 类型定义
props.botIdstring将要获取聊天记录的 Agent 的 id
props.sortstring排序方式
props.pageSizenumber分页大小
props.pageNumbernumber分页下标

getFeedBack()

获取已存在的反馈信息。

使用示例

const res = await ai.bot.getFeedBack({
botId: "botId-xxx",
from: 0,
to: 0,
maxRating: 4,
minRating: 3,
pageNumber: 1,
pageSize: 10,
sender: "user-a",
senderFilter: "include",
type: "upvote",
});

类型声明

function sendFeedback(props: {
botId: string;
type: string;
sender: string;
senderFilter: string;
minRating: number;
maxRating: number;
from: number;
to: number;
pageSize: number;
pageNumber: number;
});

参数

参数名必填类型说明
props.botIdstringAgent id
props.typestring用户反馈类型,点赞 upvote 点踩 downvote
props.senderstring评论创建用户
props.senderFilterstring评论创建用户过滤关系 include:包含 exclude:不包含 equal:等于 unequal:不等于 prefix:前缀
props.minRatingnumber最低评分
props.maxRatingnumber最高评分
props.fromnumber开始时间戳
props.tonumber结束时间戳
props.pageSizenumber分页大小
props.pageNumbernumber分页下标

getRecommendQuestions()

获取推荐的问题。

使用示例

const res = ai.bot.getRecommendQuestions({
botId: "botId-xxx",
history: [{ content: "你是谁啊", role: "user" }],
msg: "你好",
agentSetting: "",
introduction: "",
name: "",
});

for await (let str of res.textStream) {
console.log(str);
}

类型声明

function getRecommendQuestions(props: {
botId: string;
name: string;
introduction: string;
agentSetting: string;
msg: string;
history: Array<{
role: string;
content: string;
}>;
});

参数

参数名必填类型说明
props.botIdstringAgent id
props.namestringAgent 名称
props.introductionstringAgent 简介
props.agentSettingstringAgent 设定
props.msgstring用户发送信息
props.historyArray历史对话信息
props.history[n].rolestring历史信息角色
props.history[n].contentstring历史信息内容

BaseChatModelInput

interface BaseChatModelInput {
messages: {
role: "user" | "system" | "assistant";
content: string;
}[];
model: string;
temperature?: number;
top_p?: number;
}

BotInfo

interface BotInfo {
botId: string;
name: string;
introduction: string;
agentSetting: string;
welcomeMessage: string;
avatar: string;
background: string;
tags: Array<string>;
isNeedRecommend: boolean;
knowledgeBase: Array<string>;
type: string;
initQuestions: Array<string>;
enable: true;
}

IUserFeedback

interface IUserFeedback {
recordId: string;
type: string;
botId: string;
comment: string;
rating: number;
tags: Array<string>;
input: string;
aiAnswer: string;
}