使用 Node.js、Socket.IO 和 GPT-4 构建 AI 聊天机器人

简介: 使用 Node.js、Socket.IO 和 GPT-4 构建 AI 聊天机器人

由 GPT-4 等先进人工智能技术提供支持的聊天机器人可以显着提高用户参与度、提供即时帮助并提升整体用户体验。在本教程中,将构建一个利用 Node.js、Socket.IO 和 GPT-4 API 强大功能的 AI 聊天机器人应用程序。通过分步指南,将了解如何创建无缝的实时聊天机器人体验,从而改变网站并给访问者留下深刻印象。

image.png

要使用 GPT-4 创建一个提供聊天机器人功能的完整 Node.js Web 应用程序,需要一个 Express 服务器,使用 Socket.IO 进行实时通信,并使用 HTML 提供一个简单的前端, CSS 和 JavaScript 文件。

设置项目并安装依赖项

在深入研究聊天机器人的实施之前,需要先设置项目并安装必要的依赖项。在下面将引导完成创建项目结构、安装所需的 Node.js 包并确保顺利的开发体验。

第 1 步:为项目创建一个目录并进入到该目录

执行以下命令在第一步中创建一个新的项目目录:


mkdir ai-chatbot
cd ai-chatbot

第 2 步:初始化项目并安装所需的包

接下来,在项目文件夹中创建一个 package.json 文件,并确保安装了所有需要的依赖项:


npm init -y 
npm install express socket.io openai dotenv

第 3 步:创建一个 .env 文件来存储 OpenAI API 密钥:


OPENAI_API_THISKEY=your_openai_api_key

实现服务器逻辑

下面开始创建服务器端逻辑。

第 4 步:为服务器创建一个文件:service.js


require("dotenv").config();
const express = require("express");
const http = require("http");
const socketIO = require("socket.io");
const { Configuration, OpenAIApi } = require("openai");
const app = express();
const server = http.createServer(app);
const io = socketIO(server);
const port = process.env.PORT || 3001;
// OpenAI API 配置
const configuration = new Configuration({
    apiKey: process.env.OPENAI_API_THISKEY,
});
const openai = new OpenAIApi(configuration);
// 静态文件目录
app.use(express.static("public"));
io.on("connection", (socket) => {
    console.log("New user connected");
    // Initialize the conversation history
    const conversationHistory = [];
    socket.on("sendMessage", async (message, callback) => {
        try {
            // Add the user message to the conversation history
            conversationHistory.push({ role: "user", content: message });
            const completion = await openai.createChatCompletion({
                model: "gpt-4",
                messages: conversationHistory,
            });
            const response = completion.data.choices[0].message.content;
            // Add the assistant's response to the conversation history
            conversationHistory.push({ role: "assistant", content: response });
            socket.emit("message", response);
            callback();
        } catch (error) {
            console.error(error);
            callback("Error: Unable to connect to the chatbot");
        }
    });
    socket.on("disconnect", () => {
        console.log("User disconnected");
    });
});
server.listen(port, () => {
    console.log(`Server is running on port ${port}`);
});

上述代码片段是使用 GPT-4 API、Express 和 Socket.IO 的 Node.js 聊天机器人 Web 应用程序的主要服务器端代码。

  1. dotenv 导入并配置为从 .env 文件加载环境变量。
  2. 导入必要的模块,例如express、http、socket.io和 openai
  3. 创建一个 Express 应用程序、一个 HTTP 服务器和一个 Socket.IO 服务器,服务器侦听指定端口(来自环境变量或默认为 3001)。
  4. OpenAI API 使用提供的 API 密钥进行配置。
  5. public 目录设置为 Express 应用程序的静态文件目录。
  6. 连接事件监听器被添加到 Socket.IO 服务器。当新用户连接时:
  • 记录用户的连接。
  • 一个名为 conversationHistory 的空数组被初始化以存储对话历史记录。
  • 事件监听器 sendMessage 被添加到连接的套接字。当用户发送消息时:用户的消息被添加到数组中 conversationHistory。GPT-4 API 请求以对话历史记录作为输入。聊天机器人的响应从 API 结果中提取并添加到数组中 conversationHistory 。最后,聊天机器人的响应通过事件发回给用户 message。如果出现错误,则会向用户发送错误消息。
  1. disconnect事件侦听器被添加到已连接的套接字中,以在用户断开连接时进行记录。
  2. 服务器启动,一条日志消息表明它正在指定端口上运行。

第 5 步:创建一个目录 public 并在其中创建 index.html、styles.css 和 script.js 文件:


mkdir public
cd public
touch index.html styles.css script.js

前端部分

以下 HTML 代码表示聊天机器人 Web 应用程序的主页。它提供基本结构,包括聊天机器人前端所需的 CSS 和 JavaScript 文件,需要插入到 index.html 中:


<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>AI Chatbot</title>
        <meta
            name="keywords"
            content="GPT、AI、ChatGPT、Docker、Vue、angular、ember、ChatGPT、Html、WEB Point"
        />
        <meta
            name="description"
            content="An AI chatbot full stack project driven by GPT-4,used node.js、express、socke.io"
        />
        <meta http-equiv="content-language" content="en" />
        <meta name="author" content="https://github.com/QuintionTang" />
        <link rel="stylesheet" href="styles.css" />
    </head>
    <body>
        <div id="chat-container">
            <div id="messages"></div>
            <form id="message-form">
                <input
                    type="text"
                    id="message-input"
                    placeholder="Type your message"
                    autocomplete="off"
                />
                <button type="submit">Send</button>
            </form>
        </div>
        <script src="/socket.io/socket.io.js"></script>
        <script src="script.js"></script>
    </body>
</html>

第 7 步:将以下 CSS 代码添加到 styles.css 文件中


body {
    font-family: Arial, sans-serif;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    margin: 0;
    background-color: #262e35;
    -webkit-text-size-adjust: 100%;
    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
*,
:after,
:before {
    box-sizing: border-box;
}
#chat-container {
    border-radius: 5px;
    display: flex;
    line-height: 1.5;
    width: 100%;
    height: 100vh;
    flex-direction: column;
}
#messages {
    overflow-y: auto;
    padding: 1.5rem !important;
    height: calc(100vh - 91px);
}
#message-form {
    display: flex;
    padding: 1.5rem !important;
    border-top: 1px solid #36404a;
}
#message-input {
    flex-grow: 1;
    border: 1px solid #36404a;
    border-radius: 5px;
    border-radius: 0.4rem;
    font-size: 0.875rem;
    min-height: calc(1.5em + 1rem + 6px);
    background-color: rgb(54, 64, 74);
    padding: 0.5rem 1rem;
    color: #fff;
}
button {
    background-color: #007bff;
    border-radius: 0.4rem;
    color: white;
    border: none;
    border-radius: 5px;
    padding: 0.5rem 1rem;
    padding: 6px 12px;
    margin-left: 5px;
    cursor: pointer;
}
button:hover {
    background-color: #0056b3;
}
.ctext-wrap {
    display: flex;
    margin-bottom: 10px;
    background-color: #7269ef;
    border-radius: 8px 8px 8px 8px;
    color: #fff;
    padding: 12px 20px;
    position: relative;
}

第 8 步:将以下 JavaScript 代码添加到 script.js 文件中


const socket = io();
const messageForm = document.getElementById("message-form");
const messageInput = document.getElementById("message-input");
const messages = document.getElementById("messages");
function displayMessage(role, message) {
    const div = document.createElement("div");
    div.innerHTML = `<p><b>${
        role === "user" ? "You" : "Assistant"
    }:</b> ${message}</p>`;
    messages.appendChild(div);
    messages.scrollTop = messages.scrollHeight;
}
messageForm.addEventListener("submit", (e) => {
    e.preventDefault();
    const message = messageInput.value;
    displayMessage("user", message); //
    socket.emit("sendMessage", message, (error) => {
        if (error) {
            return alert(error);
        }
        messageInput.value = "";
        messageInput.focus();
    });
});
socket.on("message", (message) => {
    displayMessage("assistant", message);
});
  1. Socket.IO 客户端实例是使用该变量创建io()并分配给该socket变量的。
  2. DOM 元素,例如消息表单、消息输入字段和消息容器,使用getElementById
  3. displayMessage函数定义为在消息容器中创建和显示聊天消息。它以消息发送者的角色(用户或助理)和消息内容作为参数,使用格式化消息创建一个新元素,将div其附加到消息容器,并将容器滚动到底部。
  4. 事件侦听器添加到消息表单以处理表单提交:默认的表单提交行为被阻止使用e.preventDefault()。从输入字段中检索用户的消息并使用该displayMessage函数显示。该sendMessage事件通过带有用户消息的 Socket.IO 客户端发出,并提供错误回调函数。如果有错误,它会显示为警报。否则,输入字段被清除,焦点返回到输入字段。
  5. 事件侦听器添加到 Socket.IO 客户端以处理 message 事件:当从服务器接收到一条消息(聊天机器人的响应)时,displayMessage 将使用角色 助手 调用该函数,并将接收到的消息显示在聊天中。

测试应用程序

测试是为了验证逻辑,下面来测试一下。

第 9 步:通过运行启动服务器

node service.js

现在,可以在浏览器中访问 http://localhost:3000 并与 GPT-4 聊天机器人进行交互。聊天机器人将回复消息,可以与其进行对话。

如上所见:聊天机器人知道对话的上下文并提供考虑了对话历史的答案。

结论

到此使用 Node.js、Socket.IO 和 GPT-4 API 成功构建了 AI 支持的聊天机器人 Web 应用程序。凭借其上下文感知功能和实时交互,聊天机器人可以满足当今用户不断变化的期望。

随着继续开发和完善聊天机器人,可能性是无限的。可以进一步自定义聊天机器人的功能、外观以及与其他服务的集成以满足特定需求。


相关实践学习
阿里小蜜中的机器阅读技术
阿里云智能对话机器人(原云小蜜)依托阿里云AI技术,为企业提供一体化对话机器人服务,帮助企业构建新一代全时段智能交互系统,精准理解用户意图,支持界面化流程配置、自定义三方业务集成等功能,降本增效,广泛适用于智能客服问答、智能办公助理、售前业务咨询等场景。
相关文章
|
JavaScript 前端开发 物联网
JavaScript:构建动态世界的引擎
JavaScript:构建动态世界的引擎
|
前端开发 JavaScript 开发者
JavaScript:构建动态网络的引擎
JavaScript:构建动态网络的引擎
|
人工智能 API 开发者
Dify x AiOnly平台:手把手教你调用GPT-5从零构建AI工作流!
本文介绍如何通过Dify与AiOnly平台,快速构建基于GPT-5等顶尖大模型的AI应用。涵盖环境部署、模型接入、工作流编排及实战案例,助力开发者低门槛打造专属聊天机器人,轻松实现AI应用落地。(238字)
|
人工智能 自然语言处理 API
快速集成GPT-4o:下一代多模态AI实战指南
快速集成GPT-4o:下一代多模态AI实战指南
787 101
|
前端开发 JavaScript 开发者
JavaScript:构建动态Web的核心力量
JavaScript:构建动态Web的核心力量
|
机器学习/深度学习 人工智能 PyTorch
GPT为定制AI应用工程师转型第一周学习计划
本计划帮助开发者快速入门AI领域,首周涵盖AI基础理论、Python编程及PyTorch实战。前两天学习机器学习、深度学习与Transformer核心概念,掌握LLM工作原理。第三至四天快速掌握Python语法与Jupyter使用,完成基础编程任务。第五至七天学习PyTorch,动手训练MNIST手写识别模型,理解Tensor操作与神经网络构建。
733 0
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
存储 人工智能 自然语言处理
15.4K Star!Vercel官方出品,零基础构建企业级AI聊天机器人
"基于Next.js 14和AI SDK打造的Chat SDK,让开发者快速构建支持多模态交互、代码执行、文件共享的智能对话系统,5分钟完成全栈部署!" —— Vercel AI Chatbot项目核心宣言
1018 5
|
前端开发 搜索推荐 JavaScript
如何通过DIY.JS快速构建出一个DIY手机壳、T恤的应用?
DIY.JS 是一款基于原生 Canvas 的业务级图形库,专注于商品定制的图形交互功能,帮助开发者轻松实现个性化设计。适用于 T 恤、手机壳等多种商品场景。它自带丰富功能,无需从零构建,快速集成到项目中。通过创建舞台、添加模型、定义 DIY 区域和添加素材四个步骤即可完成基础用法。支持在线演示体验,文档详细,易上手。
812 57
|
人工智能 自然语言处理 数据可视化
GPT-5首发夜:AI可以成为每个人的“创新搭子”吗?
GPT-5震撼上线,ModelGate同步开放千万Token免费试用,AI正从“黑科技”变为人人可用的“创新搭子”。无需专业背景,只需一个想法,你就能用自然语言让AI帮你写代码、做设计、搞创意。从扫雷小游戏到多模态交互,GPT-5不仅懂你,还能优化你的创意细节。AI创新门槛大幅下降,ModelGate提供便捷平台,让每个人都能低成本试错、高效创作。未来,“一人一AI搭子”或成标配,你和AI会创造出什么新可能?

热门文章

最新文章