聊天机器人组件

桌面浅色 手机浅色
DesktopChatbotLight
MobileChatbotLight
桌面深色 手机深色
DesktopChatbotDark
MobileChatbotDark

Chatbot 组件为用户提供了一个动态且交互式的聊天界面,以便与 AI 聊天机器人进行通信。它呈现用户和聊天机器人之间的聊天消息,包括聊天机器人响应的打字模拟和自动滚动到最新消息等功能。

先决条件

确保您的项目中已安装 @neo4j-ndl 库才能使用此 Chatbot 组件。

用法

要将 Chatbot 组件集成到您的应用程序中,您首先需要导入它

import Chatbot from './path/to/Chatbot';

接下来,在应用程序的组件树中渲染 Chatbot 组件,并提供必要的 props

<Chatbot messages={listMessages} />

listMessages 应该是您要最初显示的消息对象的数组。

组件 Props

Chatbot 组件接受以下 props

名称 描述 必需

messages

聊天机器人将渲染的消息对象的数组。每个消息对象应包含 idusermessagedatetime 字段。还可以包含可选的 isTyping 布尔值来模拟聊天机器人正在键入响应。

消息对象结构

messages 数组 prop 中的每个消息对象都应遵循此结构

{
  id: number; // Unique identifier for the message
  user: string; // "user" for user messages, "chatbot" for chatbot messages
  message: string; // The message text
  datetime: string; // Timestamp of the message
  isTyping?: boolean; // Optional, simulates typing effect for chatbot messages
}

关键组件

处理状态和效果

该组件使用 React 的 useState hook 来管理

  • listMessages:要显示的当前消息列表。

  • inputMessage:用户当前输入的文本。

它还使用 useEffect hook 在每次添加新消息时自动滚动到消息列表底部,这要归功于 messagesEndRef 引用。

提交消息

当用户提交消息时

  1. 它会阻止默认的表单提交行为。

  2. 它会检查消息是否不为空。

  3. 它会将用户的消息添加到 listMessages 状态。

  4. 它会清除输入字段。

  5. 它会使用 simulateTypingEffect 模拟聊天机器人的响应。

模拟打字效果

simulateTypingEffect 函数模拟聊天机器人键入响应,一次显示一个字符。一旦消息完全“键入完毕”,它就会更新消息以指示聊天机器人已完成键入。

示例

以下是使用带有初始消息的 Chatbot 组件的基本示例

const listMessages = [
  {
    id: 1,
    user: 'user',
    message: 'Hello, chatbot!',
    datetime: '01/01/2024 00:00:00',
  },
  {
    id: 2,
    user: 'chatbot',
    message: 'Hello! How can I assist you today?',
    datetime: '01/01/2024 00:00:00',
  },
];

<Chatbot messages={listMessages} />

这将呈现一个聊天界面,其中包含两条初始消息,一条来自用户,一条来自聊天机器人。

组件集成

Chatbot 组件集成到现有应用程序中非常简单。确保为其提供必要的 messages prop 以初始化聊天历史记录。该组件在内部处理用户输入和聊天机器人响应,提供开箱即用的完整聊天界面体验。

如果您已经有负责生成聊天机器人响应的后端应用程序,并且想要将其与 Chatbot 组件集成,以下是一个示例

首先,我们将设置一个新的状态 gettingResponse,它将指示我们当前是否正在从后端获取响应

const [gettingResponse, setGettingResponse] = useState(false);

然后,我们将定义一个新函数 fetchResponseFromAPI,它将负责根据用户的消息从后端获取聊天机器人的响应

const fetchResponseFromAPI = async () => {
    setGettingResponse(true);
    const requestBody = {
      message: inputMessage
    };

    try {
      const response = await fetch(`<URI_TO_YOUR_BACKEND_API>`, {
        method: 'POST',
        headers: {
          'accept': 'application/json',
          'Content-Type': 'application/json',
        },
        body: JSON.stringify(requestBody),
      });
      const data = await response.json();
      setGettingResponse(false);
      return data.content;
    } catch (error) {
      console.error("API call failed:", error);
      return "Sorry, something went wrong.";
    } finally {
      setGettingResponse(false);
    }
  };
理想情况下,您需要考虑使用框架来管理状态、缓存和 hook,例如 tanstack/react-query,以及向您的后端 API 调用添加身份验证和授权

然后,我们只需要在用户提交消息时调用此函数,检索响应并模拟打字效果:在我们的 handleSubmit 函数中

const chatbotReply = await fetchResponseFromAPI();
simulateTypingEffect(chatbotReply);