利用Ajax实现智能回答的机器人

简介: 利用Ajax实现智能回答的机器人

下图是效果(文章末尾有所有的源代码)

3c0260ca86e7442095044a28cc8ced53.gif 一、实现人机交互步骤:

  • 获取dom元素,创建点击事件/键盘事件
  • 将我说的话传进ajax服务器中,获取机器人说的话,then()中的数据找到
  • 创建子节点追加并且渲染数据出来
  • 每次说完了都滚动到对话框最下面来

① 获取dom元素,创建点击事件/键盘事件

const btn = document.querySelector('#btnSend')
    const ipt = document.querySelector('#ipt')
    ipt.addEventListener('keyup', function (e) {
      if (e.key === 'Enter') {
        btn.click()
      }
    })
    btn.addEventListener('click', () => {
      const val = ipt.value.trim()
      console.log(val);

②将我说的话传进ajax服务器中

axios.get('http://ajax-api.itheima.net/api/robot',{ params: { spoken: val}}).then(res => {
        console.log(res);//res本质是服务器响应的值
        console.log(res.data.data.info.text);
        const words = res.data.data.info.text

这是服务器响应数据返回的值所在的位置(res.data.data.info.text)

8e250f20980c4c49b978198d4a2064db.png

 ③创建子节点追加并且渲染数据出来

li.className = 'left_word'
        document.querySelector('#talk_list').appendChild(li)
        li.innerHTML = `<img src="lib/img/person01.png" /> <span>${words}</span></li>`

④ 每次说完了都滚动到对话框最下面来

document.querySelector('ul').scrollTop = document.querySelector('ul').scrollHeight

以上这是传入Ajax发送的数据渲染,我们发的val同理渲染

// 自己发的
      const li = document.createElement('li')
      li.className = 'right_word'
      document.querySelector('#talk_list').appendChild(li)
      li.innerHTML = `<img src="lib/img/person02.png" /> <span>${val}</span></li>`
      ipt.value=''
      // 滚动到页面最下面
      document.querySelector('ul').scrollTop = document.querySelector('ul').scrollHeight

此时再进行校验下:

0a00e58c36af4e1ca65b96166dc1302c.png

二、以上的源码(图片素材不方便传,自己随便定义啦~)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  <title>案例_问答机器人</title>
  <link rel="stylesheet" href="https://unpkg.com/reset.css@2.0.2/reset.css" />
  <style>
    body {
      margin: 0;
      font-family: 'Microsoft YaHei', sans-serif;
    }
    .wrap {
      position: absolute;
      width: 100%;
      height: 100%;
      overflow: hidden;
    }
    .header {
      height: 55px;
      background: linear-gradient(90deg, rgba(246, 60, 47, 0.6), rgba(128, 58, 242, 0.6));
      overflow: hidden;
    }
    .header h3 {
      color: #faf3fc;
      line-height: 55px;
      font-weight: normal;
      float: left;
      letter-spacing: 2px;
      margin-left: 25px;
      font-size: 18px;
      text-shadow: 0px 0px 5px #944846;
    }
    .header img {
      float: right;
      margin: 7px 25px 0 0;
      border-radius: 20px;
      box-shadow: 0 0 5px #f7f2fe;
    }
    .main {
      position: absolute;
      left: 0;
      right: 0;
      top: 55px;
      bottom: 55px;
      background-color: #f4f3f3;
      box-sizing: border-box;
      overflow: hidden;
    }
    .talk_list {
      width: 100%;
      height: 100%;
      overflow-y: auto;
    }
    .talk_list li {
      overflow: hidden;
      margin: 20px 0px 30px;
      display: flex;
    }
    .talk_list .left_word {
      justify-content: flex-start;
    }
    .talk_list .left_word img {
      margin-left: 20px;
      width: 44px;
      height: 44px;
    }
    .talk_list .left_word span {
      background-color: #fe9697;
      padding: 10px 15px;
      border-radius: 12px;
      font-size: 16px;
      color: #fff;
      margin-left: 15px;
      margin-right: 20px;
      position: relative;
      line-height: 24px;
    }
    .talk_list .left_word span:before {
      content: '';
      position: absolute;
      left: -8px;
      top: 12px;
      width: 13px;
      height: 12px;
      background: url('../day01/lib/img/corner01.png') no-repeat;
    }
    .talk_list .right_word {
      justify-content: flex-end;
    }
    .talk_list .right_word img {
      margin-right: 20px;
      width: 44px;
      height: 44px;
    }
    .talk_list .right_word span {
      background-color: #fff;
      padding: 10px 15px;
      border-radius: 12px;
      font-size: 16px;
      color: #000;
      margin-right: 15px;
      margin-left: 20px;
      position: relative;
      line-height: 24px;
    }
    .talk_list .right_word span:before {
      content: '';
      position: absolute;
      right: -8px;
      top: 12px;
      width: 13px;
      height: 12px;
      background: url('../day01/lib/img/corner02.png') no-repeat;
    }
    .footer {
      width: 100%;
      height: 55px;
      left: 0px;
      bottom: 0px;
      background-color: #fff;
      position: absolute;
      display: flex;
      align-items: center;
      padding: 0 10px;
      box-sizing: border-box;
    }
    .input_txt {
      height: 37px;
      border: 0px;
      background-color: #f4f3f3;
      border-radius: 8px;
      padding: 0px;
      margin: 0 10px;
      outline: none;
      text-indent: 15px;
      flex: 1;
    }
    .input_sub {
      width: 70px;
      height: 37px;
      border: 0px;
      background-color: #fe9697;
      margin: 0;
      border-radius: 8px;
      padding: 0px;
      outline: none;
      color: #fff;
      cursor: pointer;
    }
  </style>
</head>
<body>
  <div class="wrap">
    <!-- 头部 Header 区域 -->
    <div class="header">
      <h3>小思同学</h3>
      <img src="lib/img/person01.png" alt="icon" />
    </div>
    <!-- 中间 聊天内容区域 -->
    <div class="main">
      <ul class="talk_list" style="top: 0px;" id="talk_list">
        <!-- 机器人 -->
        <!-- 我 -->
      </ul>
    </div>
    <!-- 底部 消息编辑区域 -->
    <div class="footer">
      <img src="lib/img/person02.png" alt="icon" />
      <input type="text" placeholder="说的什么吧..." class="input_txt" id="ipt" />
      <input type="button" value="发 送" class="input_sub" id="btnSend" />
    </div>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/axios@0.27.2/dist/axios.min.js"></script>
  <script>
    /* 
    实现人机交互步骤
    1.沟通:通过创建节点的方法获取我说的话并渲染出来
    2.将我说的话传进ajax服务器中
    3.获取机器人说的话并且渲染出来
    4.每次说完了都滚动到对话框最下面来
    */
    const btn = document.querySelector('#btnSend')
    const ipt = document.querySelector('#ipt')
    ipt.addEventListener('keyup', function (e) {
      if (e.key === 'Enter') {
        btn.click()
      }
    })
    btn.addEventListener('click', () => {
      const val = ipt.value.trim()
      console.log(val);
      axios.get('http://ajax-api.itheima.net/api/robot',{ params: { spoken: val}}).then(res => {
        console.log(res);//res本质是服务器响应的值
        console.log(res.data.data.info.text);
        const words = res.data.data.info.text
        const li = document.createElement('li')
        li.className = 'left_word'
        document.querySelector('#talk_list').appendChild(li)
        li.innerHTML = `<img src="lib/img/person01.png" /> <span>${words}</span></li>`
        // 滚动到页面最下面
        document.querySelector('ul').scrollTop = document.querySelector('ul').scrollHeight
      })
      // 自己发的
      const li = document.createElement('li')
      li.className = 'right_word'
      document.querySelector('#talk_list').appendChild(li)
      li.innerHTML = `<img src="lib/img/person02.png" /> <span>${val}</span></li>`
      ipt.value=''
      // 滚动到页面最下面
      document.querySelector('ul').scrollTop = document.querySelector('ul').scrollHeight
    })
  </script>
</body>
</html>
相关文章
|
6天前
|
机器学习/深度学习 传感器 算法
智能机器人在工业自动化中的应用与前景###
本文探讨了智能机器人在工业自动化领域的最新应用,包括其在制造业中的集成、操作灵活性和成本效益等方面的优势。通过分析当前技术趋势和案例研究,预测了智能机器人未来的发展方向及其对工业生产模式的潜在影响。 ###
36 9
|
3天前
|
机器人 人机交互 语音技术
智能电销机器人源码部署安装好后怎么运行
销售打电销,其中90%电销都是无效的,都是不接,不要等被浪费了这些的精力,都属于忙于筛选意向客户,大量的人工时间都耗费在此了。那么,有这种新型的科技产品,能为你替代这些基本的工作,能为你提升10倍的电销效果。人们都在关心智能语音客服机器人如何高效率工作的问题,今天就为大家简单的介绍下:1、智能筛选系统:电销机器人目前已经达到一个真人式的专家级的销售沟通水平,可以跟客户沟通,筛选意向,记录语音和文字通话记录,快速帮助电销企业筛选意向客户,大大的节约了筛选时间成本和人工成本。2、高速运转:在工作效率上,人工电销员,肯定跟不上智能语音机器人,机器人自动拨出电话,跟客户交谈。电话机
56 0
|
1月前
|
人工智能 搜索推荐 机器人
挑战未来职场:亲手打造你的AI面试官——基于Agents的模拟面试机器人究竟有多智能?
【10月更文挑战第7天】基于Agent技术,本项目构建了一个AI模拟面试机器人,旨在帮助求职者提升面试表现。通过Python、LangChain和Hugging Face的transformers库,实现了自动提问、即时反馈等功能,提供灵活、个性化的模拟面试体验。相比传统方法,AI模拟面试机器人不受时间和地点限制,能够实时提供反馈,帮助求职者更好地准备面试。
50 2
|
3月前
|
人工智能 算法 机器人
机器人版的斯坦福小镇来了,专为具身智能研究打造
【8月更文挑战第12天】《GRUtopia:城市级具身智能仿真平台》新论文发布,介绍了一款由上海AI实验室主导的大规模3D城市模拟环境——GRUtopia。此平台包含十万级互动场景与大型语言模型驱动的NPC系统,旨在解决具身智能研究中的数据稀缺问题并提供全面的评估工具,为机器人技术的进步搭建重要桥梁。https://arxiv.org/pdf/2407.10943
216 60
|
6月前
|
自然语言处理 机器人 Go
【飞书ChatGPT机器人】飞书接入ChatGPT,打造智能问答助手
【飞书ChatGPT机器人】飞书接入ChatGPT,打造智能问答助手
359 0
|
3月前
|
机器人 C# 人工智能
智能升级:WPF与人工智能的跨界合作——手把手教你集成聊天机器人,打造互动新体验与个性化服务
【8月更文挑战第31天】聊天机器人已成为现代应用的重要组成部分,提供即时响应、个性化服务及全天候支持。随着AI技术的发展,聊天机器人的功能日益强大,不仅能进行简单问答,还能实现复杂对话管理和情感分析。本文通过具体案例分析,展示了如何在WPF应用中集成聊天机器人,并通过示例代码详细说明其实现过程。使用Microsoft的Bot Framework可以轻松创建并配置聊天机器人,增强应用互动性和用户体验。首先,需在Bot Framework门户中创建机器人项目并编写逻辑。然后,在WPF应用中添加聊天界面,实现与机器人的交互。
98 0
|
3月前
|
机器人 TensorFlow 算法框架/工具
智能聊天机器人
【8月更文挑战第1天】智能聊天机器人。
108 2
|
3月前
|
人工智能 自然语言处理 安全
盘点国内:AI写作助手_ai智能问答机器人
AI写作助手是利用人工智能技术,特别是自然语言处理(NLP)技术,来辅助用户进行写作的工具。这类助手通过分析大量文本数据,能够理解语言的结构和含义,从而生成、编辑或优化文本内容。AI写作助手通常具有自动纠错、语法检查、内容生成和风格调整等功能,帮助用户提高写作效率和质量。
|
3月前
|
自然语言处理 监控 搜索推荐
使用 LangChain 创建高度互动和智能的聊天机器人
【8月更文第3天】随着自然语言处理(NLP)技术的进步,聊天机器人已成为企业和用户之间互动的重要渠道。LangChain 是一个强大的框架,旨在简化构建复杂语言模型应用程序的过程。本文将详细介绍如何使用 LangChain 框架创建高度互动和智能的聊天机器人,包括选择合适的语言模型、设计对话流程、上下文管理以及集成外部API和服务等内容。
152 0