Javascript 编写一个简单的聊天机器人

news2024/11/20 11:43:25

在本 Web 开发教程中,我们将了解如何使用 HTML、CSS 和 vanilla JavaScript 创建基本的聊天机器人。本练习侧重于 JS 基础知识,而不是任何类型的人工智能 (AI)。为了使该过程更简单,更易于学习,我没有使用任何第三方库。我将通过专注于JavaScript编程语言的基础知识从头开始构建聊天机器人。

在这里插入图片描述
本练习旨在帮助 JavaScript 程序员了解聊天机器人的工作原理以及 Web 开发人员如何使用 JavaScript 构建基本的聊天机器人。

文章目录

  • 在 JavaScript 中创建聊天机器人
  • 创建.js文件
  • 聊天机器人的JavaScript函数
  • 在 JavaScript 中编程机器人响应
  • 聊天机器人触发器和响应
  • 更新 DOM
  • 聊天机器人编程教程

在 JavaScript 中创建聊天机器人

首先,首先创建一个 HTML 文件。让我们创建一个文件名 index.html,其中包含以下代码:

<!DOCTYPE html>

<html><div id="main">

    <div><input id="input" type="text" placeholder="Write something..." autocomplete="off"  autofocus="true"/></div>

</div></html>

在这里,我们创建了一个 id 为“main”的 div,其中我们有一个输入字段,用户可以在其中键入文本并与机器人通信。这是基本的 HTML 设置。在此过程中,我们将添加更多功能。

接下来,我们还需要向网页添加一些布局样式。因此,让我们创建一个名为 style.css 的CSS文件。使用以下样式表代码:

#main { 
    position: fixed; 
    top: 40%; 
    right: 200px;} 
.messages {
	display: flex;
	flex-direction: column;
	overflow: scroll;
	height: 90%;
	width: 100%;
	background-color: white;
	padding: 15px;
	margin: 15px;
	border-radius: 10px;
}

创建.js文件

现在,创建一个.js文件,然后使用以下 JavaScript 代码在其中设置一些基本功能:

document.addEventListener("DOMContentLoaded", () => {
  document.querySelector("#input").addEventListener("keydown", function(e) {
    if (e.code === "Enter") {
        console.log("You pressed the enter button!")
    }
  });
});

请注意,在此处添加 DOMContentLoaded 侦听器可确保 JavaScript 仅在 HTML 完成渲染时加载。顺便说一下,这是一个很好的编码实践。

一些用户发现一次又一次地单击发送按钮以通过聊天应用程序发送消息是一项繁琐的任务。因此,我们希望在此应用程序中实现即时消息功能,该功能将使用户在完成键入消息后只需按 Enter 键即可发送消息。

这可以通过以下方式完成:

    const inputField = document.getElementById("input")
    inputField.addEventListener("keydown", function(e) {
        if (e.code === "Enter") {
            let input = inputField.value;
            inputField.value = "";
            output(input);
    }
  });

通过添加 e.code == 'Enter',我们告诉事件侦听器我们只关心 Enter 键。我们已将控制台日志替换为一些正在执行这些操作的语句:

将输入字段值分配给局部变量。

我们还希望在提交后清除表单输入字段,因此我们将输入字段的值设置为空字符串。

将输入值传递给我们的下一个函数“output”

聊天机器人的JavaScript函数

在下一步中,我们将创建一些 JavaScript 函数来制作机器人。

首先,我们希望控制用户在输入表单字段中键入的文本。无论用户在输入字段中键入什么,我们都希望使用正则表达式使其更加标准,如以下代码片段所示:

function output()
{
        let text = input.toLowerCase().replace(/[^\w\s\d]/gi, "");}

上述正则表达式将删除单词、数字和空格以外的所有内容。我们还想删除所有流氓角色以及所有可能使比赛变得困难的东西。因此,可以通过以下方式完成:

function output()
{
      let text = input.toLowerCase().replace(/[^\w\s\d]/gi, "");
        …     
     
     text = text
    .replace(/ a /g, " ")
    .replace(/whats/g, "what is")
    .replace(/please /g, "")
    .replace(/ please/g, "");
}

例如,如果用户类型是“发生了什么”或“发生了什么”或“发生了什么”,而不是单独考虑这些差异,我们会将它们一视同仁。

现在我们已经了解了用户输入的外观,让我们创建一组可能的机器人响应和用户文本。

在 JavaScript 中编程机器人响应

我们的下一个任务是根据触发器(用户文本)处理机器人响应。因此,我将创建包含话语和答案的数组数组。为简单起见,我将简短地介绍它们。

const utterances = [ 
  ["how are you", "how is life", "how are things"],        //0
  ["hi", "hey", "hello", "good morning", "good afternoon"],      //1
  ["what are you doing", "what is going on", "what is up"],      //2
  ["how old are you"],					//3
  ["who are you", "are you human", "are you bot", "are you human or bot"],   //4;
 
// Possible responses corresponding to triggers
 
const answers = [
   [
    "Fine... how are you?",
    "Pretty well, how are you?",
    "Fantastic, how are you?"
  ],                                                                                  	//0
  [
    "Hello!", "Hi!", "Hey!", "Hi there!", "Howdy"
  ],						//1
  [
    "Nothing much",
    "About to go to sleep",
    "Can you guess?",
    "I don't know actually"
  ],						//2
  ["I am infinite"],					//3
  ["I am just a bot", "I am a bot. What are you?"],	//4];
 
// For any other user input
 
const alternatives = [
  "Go on...",
  "Try again",
];

如果您注意到每个数组的索引以及它们的排列方式,您将看到与话语 [0] 中的选项匹配的用户文本将使用答案 [0] 中的选项进行响应,依此类推。当然,替代数组适用于第一个数组中不匹配的输入值。这解释了基本的聊天机器人如何在引擎盖下工作。

聊天机器人触发器和响应

现在我们可以熟悉触发器和响应的外观。下一步是创建一个函数来比较这些数组:

function compare(utterancesArray, answersArray, string) {
  let item;
  for (let x = 0; x < utterancesArray.length; x++) {
    for (let y = 0; y < utterancesArray[x].length; y++) {
      if (utterancesArray[x][y] === string) {
        items = answersArray[x];
        item = items[Math.floor(Math.random() * items.length)];
        }
      }
   }
  return item;
}

现在我们通过以下方式从原始函数 ‘output()’ 调用此函数:

function output(input) {
  let product;
  let text = input.toLowerCase().replace(/[^\w\s\d]/gi, "");
  text = text
    .replace(/ a /g, " ")
    .replace(/whats/g, "what is")
    .replace(/please /g, "")
    .replace(/ please/g, "");
 
  if (compare(utterances, answers, text)) {
    product = compare(utterances, answers, text);
  } 
  else {
    product = alternatives[Math.floor(Math.random() * alternatives.length)];
  }
 
  //update  DOM
  addChatEntry (input, product);
}

在比较数组之后,我们的“output”函数最终调用addChatEntry()函数以使对话呈现在网页上。

更新 DOM

现在剩下的最后一件事就是更新 DOM。所以我们必须创建一个函数addChatEntry():

function addChatEntry(input, product) {
  const messagesContainer = document.getElementById("messages");
  
  let userDiv = document.createElement("div");
  userDiv.id = "user";
  userDiv.className = "user response";
  userDiv.innerHTML = `${input}`;
  messagesContainer.appendChild(userDiv);
 
  let botDiv = document.createElement("div");
  let botText = document.createElement("span");
  botDiv.id = "bot";
  botDiv.className = "bot response";
  botText.innerText = "Typing...";
  botDiv.appendChild(botText);
  messagesContainer.appendChild(botDiv);setTimeout(() => {
    botText.innerText = `${product}`;
  }, 2000); }

此函数在同一页面上为机器人和用户字段创建消息线程。

在这里插入图片描述

setTimeout 函数中,我们将时间延迟设置了两秒,以给人一种机器人思考几秒钟的印象,然后在有人与之交谈时回复。

聊天机器人编程教程

在这里,我们使用Javascript创建了一个基本的聊天机器人。本教程的主要重点是了解创建聊天机器人背后的 Javascript 逻辑。

构建实时聊天机器人可能是一项复杂的任务,但这是值得的。如今,有许多软件开发公司和聊天机器人平台正在构建聊天机器人并将其集成到不同的业务应用程序中。您还可以使用预先编写的代码来构建聊天机器人。它们有助于优化客户沟通和接触目标受众。

您可以在我的 Codepen上访问此应用程序的源代码: https://codepen.io/willin/pen/RwEWVeP

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/927551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ffmpeg windows环境MinGW+msys2编译so库

一、安装MinGW 1.1、下载MinGW 1.2、下载完成后&#xff0c;会得到一个名为 mingw-get-setup.exe 的安装包&#xff0c;双击打开它&#xff0c;可以看到如下的对话框&#xff1a; 1.3、直接点击“Install”&#xff0c;进入下面的对话框 1.4、可根据自己操作系统的实际情况&am…

数据库MySQL中left join多个条件下的执行

1 基础表 创建表A 表B create table testA(id int, name varchar(10)); create table testB(id int, name varchar(10)); 2 插入数据 insert into testA values(1,zhangssa),(2,lisi),(3,wangwu) insert into testB values(2,zhangssa2),(3,lisi2),(4,wangwu4) 3 left joi…

WPF自定义命令及属性改变处理

1、项目建构 2、自定义命令 namespace WpfDemo.Base {public class MyCommand : ICommand{Action executeAction;public MyCommand(Action action){executeAction action;}public event EventHandler? CanExecuteChanged;public bool CanExecute(object? parameter){retu…

ssm会员管理系统源码和论文

ssm会员管理系统源码和论文062 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#x…

36k字从Attention讲解Transformer及其在Vision中的应用(pytorch版)

文章目录 0.卷积操作1.注意力1.1 注意力概述(Attention)1.1.1 Encoder-Decoder1.1.2 查询、键和值1.1.3 注意力汇聚: Nadaraya-Watson 核回归1.2 注意力评分函数1.2.1 加性注意力1.2.2 缩放点积注意力1.3 自注意力(Self-Attention)1.3.1 自注意力的定义和计算1.3.2 自注意…

邀请函 | 区块链如何助力建设“健康中国”?ESG系列研讨会“医疗”专场来袭!

党的十九大报告指出&#xff0c;要全面实施健康中国战略&#xff0c;为人民群众提供全方位全周期健康服务。今年7月&#xff0c;国家卫生健康委等六部门联合印发了《深化医药卫生体制改革2023年下半年重点工作任务》&#xff0c;明确指出要开展全国医疗卫生机构信息互通共享三年…

基于 vue2 发布 npm包

背景&#xff1a;组件化开发需要&#xff0c;走了一遍发布npm包的过程&#xff0c;采用很简单的模式实现包的发布流程&#xff0c;记录如下。 项目参考&#xff1a;基于vue的时间播放器组件&#xff0c;并发布到npm_timeplay.js_xmy_wh的博客-CSDN博客 1、项目初始化 首先&a…

AKM10-58C大电流TVS二极管参数:58V 10000A

东沃&#xff08;DOWO&#xff09;AKM10-76C是什么二极管&#xff1f; 东沃生产AKM10-76C大电流TVS二极管吗&#xff1f;有现货吗&#xff1f; 除了AKM10-76C外&#xff0c;东沃&#xff08;DOWO&#xff09;生产的贴片大电流二极管还有哪些型号&#xff1f; …… AKM10-76C是厂…

VMware 新装 CentOS 7 连不上网络的【解决方法】

文章目录 1&#xff09;虚拟机设置2&#xff09;虚拟网络编辑器3&#xff09;Linux 网卡设置4&#xff09;检查网络状态参考资料&#xff1a; 安装好虚拟机之后&#xff0c;将来会在虚拟机内的系统中安装各种应用&#xff0c;如果虚拟机内的系统连不上网&#xff0c;则无从谈起…

PythonJS逆向解密——实现翻译软件+语音播报

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: python 3.8 pycharm 模块使用: requests --> pip install requests execjs --> pip install PyExecJS ttkbootstrap --> pip install ttkbootstrap pyttsx3 --> pip install pyttsx3 第三…

interview2-框架篇

一、Spring篇 1、Spring &#xff08;1&#xff09;Bean线程安全问题 不是线程安全的。Spring框架中有一个Scope注解&#xff0c;默认的值就是singleton&#xff0c;单例的。因为一般在spring的bean的中都是注入无状态的对象&#xff0c;没有线程安全问题&#xff0c;如果在b…

【Focal Loss】解决类别不平衡问题,增加对困难样本的挖掘

Focal Loss是在交叉熵损失函数的基础上增加了一个平衡因子 α \alpha α和一个聚焦因子 γ \gamma γ&#xff0c;分别用来调节不同类别样本的权重以及难分样本和易分样本之间的权重一个样本的交叉熵损失函数如下&#xff1a; p t p_t pt​表示将该样本分类为t的概率一个样本的…

8个好用的产品设计工具,收藏一下

产品设计在设计工作中是非常重要的一个环节&#xff0c;它是对产品的初步构思&#xff0c;能明确规定产品设计的细节。今天本文将为大家推荐8个好用的产品设计工具&#xff0c;不仅操作方便&#xff0c;而且简单好用&#xff0c;能充分提高工作效率&#xff0c;一起来看看吧&am…

政府网站定期巡检:构建高效、安全与透明的数字政务

在数字时代&#xff0c;政府网站已不仅仅是一个信息发布窗口&#xff0c;更是政府与公众互动的桥梁、政务服务的主要渠道以及数字化治理的重要平台。因此&#xff0c;确保政府网站的高效运行、信息安全与透明公开就显得尤为重要。在此背景下&#xff0c;定期的网站巡检与巡查成…

搭建微信小程序商城的详细教程

微信小程序商城是一种通过微信平台进行线上购物的应用&#xff0c;它具有界面友好、交互便利、功能实用等特点&#xff0c;成为越来越多企业和个人创业者的选择。下面&#xff0c;我们将为大家介绍如何搭建微信小程序商城的详细教程。 第一步&#xff0c;登录乔拓云平台进入后台…

D.OASIS City 和 Warrix 在The Sandbox 庆祝 Rise of the 10th Legend十周年

D.OASIS 首次展示了变革性娱乐 D.OASIS City&#xff0c;正如它与 WARRIX 一起承诺的那样。WARRIX 是获得泰国国家队球衣生产授权的标志性运动服装品牌。 这款激动人心的游戏冒险游戏于今天推出&#xff0c;让用户能够投入 D.OASIS City x WARRIX&#xff1a;Rise of the 10th…

数据库怎么备份文件,数据库一般怎么备份

在当今的数字世界中&#xff0c;数据已经成为企业的生命线。无论是客户数据、业务数据还是内部流程&#xff0c;都需要通过数据库进行存储和管理。然而&#xff0c;数据的安全性和完整性也成为企业面临的一大挑战。在这种情况下&#xff0c;数据库备份尤为重要。那么&#xff0…

陪诊系统源码开发:实现个性化医疗陪护的创新之路

陪诊系统的源码开发在现代医疗中具有重要意义。本文将通过代码示例介绍陪诊系统的源码开发&#xff0c;展示如何实现个性化医疗陪护的创新方案。 1. 安装和环境设置&#xff1a; 首先&#xff0c;确保你的开发环境中已经安装了合适的编程语言和框架&#xff0c;比如Python和…

python 模块xlrd 读取.xls文件

Python操作Excel的模块有很多&#xff0c;并且各有优劣&#xff0c;不同模块支持的操作和文件类型也有不同。下面是各个模块的支持情况&#xff1a; xlwt&#xff1a;xlwt 写入.xls文件xlwings&#xff1a;xlwings 读取写入Excel文件openpyxl&#xff1a;openpyxl 读取写入.xl…

主从、哨兵、集群模式有什么区别 ?

目录 1.Redis 多机部署的方式 2.主从、哨兵、集群模式有什么区别 2.1 主从同步 2.2 哨兵模式 2.3 集群模式 1.Redis 多机部署的方式 Redis 多机部署主要有 3 种方式&#xff1a; 1. 主从同步&#xff1a;主要存储数据的节点叫做主节点&#xff08;master&#xff09;&…