You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js+NLP.js直连连接器中实现机器人定时发消息

解决nlp.js机器人延迟发送多轮消息的问题

问题场景

基于nlp.js开发聊天机器人,需要实现:用户发送“Work?”后,机器人先回复“Yes”,间隔2秒再回复“work”。之前尝试在代码中直接使用setTimeout导致实现失败甚至代码崩溃。

解决方案代码

针对quickstart/08.Webchat目录下的index.js,修改为以下代码,在消息发送环节处理延迟逻辑,避免干扰nlp.js内部流程:

const { dockStart } = require('@nlpjs/basic');
const express = require('express');
const http = require('http');
const socketIO = require('socket.io');

const app = express();
const server = http.createServer(app);
const io = socketIO(server);

app.use(express.static(__dirname + '/public'));

(async () => {
  const dock = await dockStart({ use: ['Basic']});
  const nlp = dock.get('nlp');

  nlp.addLanguage('en');
  // 添加现有问候意图
  nlp.addDocument('en', 'Jack', 'greetings.jack');
  nlp.addAnswer('en', 'greetings.jack', 'Hi, Jack');
  // 添加Work?对应的意图和回复
  nlp.addDocument('en', 'Work?', 'work.ask');
  nlp.addAnswer('en', 'work.ask', 'Yes');
  nlp.addAnswer('en', 'work.ask', 'work');

  await nlp.train();

  // 处理socket聊天消息
  io.on('connection', (socket) => {
    socket.on('message', async (msg) => {
      const response = await nlp.process('en', msg);
      if (response.intent === 'work.ask') {
        // 先发送第一个回复
        socket.emit('response', response.answers[0].answer);
        // 延迟2秒发送第二个回复
        setTimeout(() => {
          socket.emit('response', response.answers[1].answer);
        }, 2000);
      } else {
        // 其他意图直接发送回复
        socket.emit('response', response.answers[0].answer);
      }
    });
  });

  server.listen(3000, () => {
    console.log('Server running on http://localhost:3000');
  });
})();

关键说明

  1. 避免在nlp.js内部流程中使用异步延迟:之前的崩溃大概率是因为在addAnswer或nlp处理的同步流程中插入setTimeout,干扰了nlp.js的内部逻辑。正确的做法是在nlp完成意图识别和回复生成后,在消息发送环节处理延迟。
  2. 分开发送多轮回复:针对特定意图(如work.ask),先发送第一个回复,再通过setTimeout延迟发送第二个回复,确保异步操作不会影响nlp的核心流程。
  3. 适配Webchat场景:结合socket.io实现前端与后端的消息通信,这是08.Webchat示例的标准通信方式,确保延迟回复能正确推送到前端聊天界面。

内容的提问来源于stack exchange,提问作者Reg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:35:24