在 Node.js 中调用
Node.js 应用可以通过云开发 Node SDK 或 HTTP API 调用 Agent。
前置条件
- Node.js 18+
- 已开通云开发环境
- 已创建 Agent
使用 Node SDK(推荐)
安装
npm install @cloudbase/node-sdk
基础调用
const cloudbase = require('@cloudbase/node-sdk');
const app = cloudbase.init({
env: 'your-env-id',
});
const ai = app.ai();
const res = await ai.bot.sendMessage({
// botId 必填,标识调用的 Agent
botId: 'your-agent-id',
// 入参结构参考前后端通信协议:
// https://docs.cloudbase.net/ai/agent/http-agent-protocol
threadId: 'your-thread-id',
runId: 'your-run-id',
messages: [
{ id: 'msg-1', role: 'user', content: '你好' }
],
tools: [],
context: [],
state: {},
forwardedProps: {}
});
// 流式接收响应
let text = '';
for await (const data of res.dataStream) {
// 根据事件类型输出,响应事件参考文档:
// https://docs.cloudbase.net/ai/agent/http-agent-protocol#%E5%93%8D%E5%BA%94%E4%BA%8B%E4%BB%B6
switch (data.type) {
case 'TEXT_MESSAGE_CONTENT':
text += data.delta;
process.stdout.write(data.delta); // 实时输出
break;
case 'RUN_ERROR':
console.error('运行出错:', data.message);
break;
case 'RUN_FINISHED':
// 运行结束
break;
}
}
console.log('\n完整响应:', text);
多轮对话
多轮对话通过 threadId 来关联同一会话,通过 messages 传递历史消息:
const { v4: uuidv4 } = require('uuid');
// 使用同一个 threadId 来关联多轮对话
const threadId = uuidv4();
const messages = [];
// 第一轮对话
messages.push({ id: uuidv4(), role: 'user', content: '你好' });
const res1 = await ai.bot.sendMessage({
botId: 'your-agent-id',
threadId: threadId,
runId: uuidv4(),
messages: messages,
tools: [],
context: [],
state: {},
forwardedProps: {}
});
let answer1 = '';
for await (const data of res1.dataStream) {
if (data.type === 'TEXT_MESSAGE_CONTENT') {
answer1 += data.delta;
}
}
// 记录 AI 回复
messages.push({ id: uuidv4(), role: 'assistant', content: answer1 });
// 第二轮对话
messages.push({ id: uuidv4(), role: 'user', content: '继续聊聊' });
const res2 = await ai.bot.sendMessage({
botId: 'your-agent-id',
threadId: threadId,
runId: uuidv4(),
messages: messages,
});
使用 HTTP API
Agent API 地址
在云开发控制台「AI Agent」→ 选择对应 Agent → 查看「API 地址」,格式为:
https://{envId}.api.tcloudbasegateway.com/v1/aibot/bots/{agentId}/send-message
const response = await fetch(
'https://your-env-id.api.tcloudbasegateway.com/v1/aibot/bots/your-agent-id/send-message',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'text/event-stream',
'Authorization': 'Bearer <YOUR_API_KEY>',
},
body: JSON.stringify({
threadId: 'thread-xxx',
runId: 'run-xxx',
messages: [{ id: '1', role: 'user', content: '你好' }],
tools: [],
context: [],
state: {},
}),
}
);
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const text = decoder.decode(value);
for (const line of text.split('\n')) {
if (line.startsWith('data: ') && line.slice(6) !== '[DONE]') {
try {
const event = JSON.parse(line.slice(6));
if (event.type === 'TEXT_MESSAGE_CONTENT') {
process.stdout.write(event.delta);
}
} catch (e) {}
}
}
}