Skip to main content

在 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) {}
}
}
}

相关文档