小白入手实现AI客服机器人demo

news2024/12/23 6:22:53

一、环境准备

1 安装python
2 安装vscode
3 安装相关python库
pip install flask flask_cors openai

4.在vscode里安装TONGYI Lingma(AI编程助手)
在这里插入图片描述

二、后端搭建

创建一个后端文件夹chatbot,再新建一个app.py的python文件

from flask import Flask, request, jsonify
from flask_cors import CORS
from openai import OpenAI
import os

from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())


client = OpenAI()


app = Flask(__name__)
CORS(app, resources={r"/*":{"origins": "*"}}) # 这会为所有端点添加跨源头部分

@app.route('/ask', methods=['POST'])

def ask():
    user_question = request.json['message']
    answer = get_answer_from_model(user_question)
    return jsonify({'answer': answer})


def get_answer_from_model(message):
    response = client.completions.create(
        model="gpt-3.5-turbo-instruct",
        prompt=message,
        max_tokens=512,
        # stream=False
        stream=True
    )

    print('response:',response)
    # answer = response.choices[0].text.strip()

    answer = ""
    for chunk in response:
        answer += chunk.choices[0].text

    return answer

if __name__ == '__main__':
    app.run(debug=True, port=5000)

三、前端搭建

1 创建前端文件夹chatbot-interface
2 创建三个前端的文件index.html styles.css srcript.js

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>AI Chatbot</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="chat-container">
        <div class="chat-header">
            <h3>AI Chatbot</h3>
        </div>
        <div class="chat-box" id="chat-box">
            <!-- 聊天消息将在这里显示 -->
        </div>
        <div class="chat-input">
            <input type="text" id="user-input" placeholder="Type your message...">
            <button id="send-button" onclick="sendMessage()">Send</button>
        </div>
    </div>

    <script src="script.js"></script>
</body>
</html>

styles.css

body, html {
    margin: 0;
    padding: 0;
    font-family: Arial, sans-serif;
}

.chat-container {
    max-width: 1080px;
    margin: 30px auto;
    border: 1px solid #ccc;
    border-radius: 5px;
}

.chat-header {
    background-color: #f4f4f4;
    padding: 10px;
    border-top-left-radius: 5px;
    border-top-right-radius: 5px;
}

.chat-box {
    height: 720px;
    overflow-y: scroll;
    padding: 15px;
    background-color: #fff;
}

.chat-input {
    padding: 10px;
    display: flex;
    justify-content: space-between;
}

.chat-input input {
    flex-grow: 1;
    padding: 5px;
    border: 1px solid #ccc;
    border-radius: 5px;
}

.chat-input button {
    padding: 5px 15px;
    background-color: #007bff;
    color: white;
    border: none;
    border-radius: 5px;
    cursor: pointer;
}

/* 简单的动画效果 */
.chat-box::-webkit-scrollbar {
    width: 6px;
}

.chat-box::-webkit-scrollbar-thumb {
    background-color: #ccc;
}

script.js

var inputBox = document.getElementById('user-input');
var sendButton = document.getElementById('send-button');
inputBox.addEventListener('keydown', function(event) {
    if (event.keyCode === 13 || event.key === 'Enter') {
        event.preventDefault();
        sendMessage();
    }
});

function sendMessage() {
    //var userInput = document.getElementById('user-input').value;
    var userInput = inputBox.value;
    if (userInput.trim() === '') return;

    // 将用户输入添加到聊天框
    addToChatBox('baiyang', userInput);

    // 清空输入框
    document.getElementById('user-input').value = '';

    // 假设这里发送请求到服务器,并获取AI的回复
    fetch('http://127.0.0.1:5000/ask', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({ message: userInput })
    })
    .then(response => {
        if (!response.ok){
            throw new Error('Network response was not ok');
        }
        return response.json()})
    .then(data => {
        // 将AI的回复添加到聊天框
        if (data && data.answer){
            console.log(data.answer);
            addToChatBox("douwan", data.answer);
        }
        else{
            console.error('Invalid response data:', data);
        }
        // addToChatBox('AI', data.reply);
    })
    .catch((error) => {
        console.error('Error:', error);
    });
}

function addToChatBox(sender, message) {
    var chatBox = document.getElementById('chat-box');
    var div = document.createElement('div');
    div.innerHTML = `<strong>${sender}:</strong> ${message}`;
    chatBox.appendChild(div);
    chatBox.scrollTop = chatBox.scrollHeight; // 自动滚动到底部
}

四、效果展示

1 首先运行app.py文件,在vscode中运行,如
在这里插入图片描述

2 浏览器打开index文件,在输入框中输入相关文件,发送可返回信息。
在这里插入图片描述

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

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

相关文章

Windows10笔记本如何系统重装?64位电脑重装系统需小心!一键安装超详细步骤!

在日常生活和工作中&#xff0c;我们有时会遇到Windows 10笔记本系统运行缓慢、频繁出现错误或受到病毒攻击等问题。这时&#xff0c;重装系统就成了解决这些问题的最佳选择。然而&#xff0c;对于许多用户来说&#xff0c;尤其是64位电脑用户&#xff0c;重装系统可能是一项既…

梳理Y3游戏编辑器入门者需要明白的基础概念

前言 Y3编辑器是网易开发的一款类似于“War3地图编辑器”的产品。 最近KK对战平台上不少热门的RPG地图都出自Y3编辑器&#xff1a; 最近我花了些时间学习了这款编辑器的基础知识。我发现其中很多概念是比较抽象需要理解的&#xff0c;而有些概念比如“物件”、“物体”、“物…

生活好物:日常更精彩

我们的日用杂货店&#xff0c;是生活美学的聚集地。这里汇聚了各式各样的生活用品&#xff0c;每一件都蕴含着对生活的热爱与追求。 走进我们的日用杂货店&#xff0c;仿佛打开了一个充满生活气息的宝藏盒。从厨房的锅碗瓢盆&#xff0c;到浴室的洗漱用品&#xff0c;再到客厅的…

列表(list)(Python)

文章目录 一、定义二、列表常用操作 一、定义 list ["张三", "李四", "王五", "赵六"]二、列表常用操作 分类关键字/函数/方法说明增加列表.append(值)在列表末尾追加值列表.insert(索引&#xff0c; 值)在指定位置插入值&#xff…

快去复习吧+++常用算法及参考算法 递推法++穷举法++排序(冒泡、选择)++查找(顺序、折半)++字符串处理++方程求根++无穷级数求和

接上&#xff1a;常用算法及参考算法 &#xff08;1&#xff09;累加 &#xff08;2&#xff09;累乘 &#xff08;3&#xff09;素数 &#xff08;4&#xff09;最大公约数 &#xff08;5&#xff09;最值问题 &#xff08;6&#xff09;迭代法 常用算法及参考算法 7. 递推法…

公共服务数字化转型的五个路径

数字化技术赋能公共服务&#xff0c;主要以数据为着力点&#xff0c;通过数据驱动优化或重塑公共服务架构。基于用数据决策、用数据服务、用数据创新的现代化的公共服务供给模式&#xff0c;推进“信息数字化业务数字化组织业务化”的全方位公共服务数字化&#xff0c;进而赋能…

springboot应用启动太慢排查 半天才打印日志

springboot应用启动太慢排查 半天才打印日志 解决办法 hostnamectl 命令查看主机名 vim /etc/hosts 加上主机名配置 127.0.0.1 hostname

SAP 在过账的时候系统提示:被合并的公司 XXXX 和 ‘ ‘ 是不同的解决办法

最近用户反馈在STO的业务模式中交货单过账的时候&#xff0c;报错没有办法过账。查看了一下报错的信息提示&#xff1a;被合并的公司 和1300是不同的 如下图所示&#xff1a; 消息号是F5080 首先根据SAP的消息号找了一下NOTE&#xff0c;发现2091823有详细的说。 主要是财务…

Excel批量一列转多列多行

你在公司或学校是否遇到过对人员进行分组&#xff0c;你是否曾一个一个复制粘贴&#xff0c;如只有100人&#xff0c;尚有时间一一分组&#xff0c;如1000人&#xff0c;甚至更多&#xff0c;不知分到“地老天荒”是否可以完成&#xff01; 今天刘小生分享一个方法“用替换等号…

选择电动升降控制台需要考虑哪几方面

电动升降控制台是现代办公环境中不可或缺的一部分&#xff0c;尤其对于那些需要频繁调整控制台高度以适应不同工作或人体工程学需求的企业和机构。选择一款合适的电动升降控制台不仅关乎工作效率&#xff0c;更关乎员工的健康和舒适度。那么&#xff0c;如何选择到一款合适的电…

【设计模式-10】代理模式的代码实现及使用场景

&emsp&#xff1b;代理模式是一种应用很广发的结构性设计模式&#xff0c;它的设计初衷就是通过引入新的代理对象&#xff0c;在客户端和目标对象之间起到中介的作用&#xff0c;从而实现控制客户端对目标对象的访问&#xff0c;比如增强或者阉割某些能力。 1. 概述 代理模…

OZON爆款新品推荐丨OZON珠宝首饰好款推荐

在OZON平台上&#xff0c;珠宝首饰一直以其独特的魅力和精致的工艺吸引着广大消费者。以下是几款推荐的OZON珠宝首饰好款&#xff1a; Top1 隐形树藤项链 MARIOLA Ювелирное колье серебро 925 леска невидимка женское сере…

Graphviz——安装、绘制可视化协议状态机(Python)

1、简介 Graphviz 是一个开源的图形可视化软件包&#xff0c;特别擅长绘制有向图和无向图等结构化图形。它非常适合用于生成各种图表&#xff0c;例如流程图、网络图、状态机图、层次结构图等。Graphviz 的主要组件 dot: 这是Graphviz最常用的布局程序&#xff0c;用于创建有向…

TC3xx A\B SWAP机制的小细节(1)

目录 1.汽车OTA背景 1.1 汽车为什么需要OTA 1.2 汽车OTA概念 2. MCU的硬件A\B Swap机制 3.小结 1.汽车OTA背景 1.1 汽车为什么需要OTA 谈到英飞凌TC3xx的A\B SWAP硬件机制&#xff0c;我们首先要搞懂它的应用场景--OTA。 在手机或者电脑上&#xff0c;我们几乎每天都可…

从11个视角看全球Rust程序员2/4:深度解读JetBrains最新报告

讲动人的故事,写懂人的代码 5 Rust代码最常使用什么协议与其他代码交互? REST API: 2022年:51%2023年:51%看上去REST API的使用比例挺稳定的,没啥变化。语言互操作性(Language Interop): 2022年:53%2023年:43%语言互操作性的比例在2023年下来了一些,掉了10个百分点…

内外同趋 | 牵手AEye、ATI,灵途科技全球布局战略启航!

近日&#xff0c;灵途科技&#xff08;LighTekton&#xff09;与自适应高性能激光雷达解决方案全球领导者AEye公司&#xff08;NASDAQ:LIDR&#xff09;及光电器件规模化量产巨头Accelight Technologies&#xff08;ATI&#xff09;达成战略合作&#xff0c;这标志着灵途科技全…

全篇创新点!图像融合9大魔改创新方案,暴力涨点

在处理复杂图像数据和提升图像质量时&#xff0c;采用图像融合的技术是个更好的选择。 这是因为&#xff1a;图像融合能够整合来自不同图像源的信息&#xff0c;为我们提供比单一图像更丰富、更全面、更高质量的图像数据。这种技术不仅减少了数据冗余&#xff0c;还增强了图像…

【Nvidia+AI摄像头】面向机器人双目视觉相机

随着人工智能和机器人技术的不断发展&#xff0c;双目深度相机作为一种重要的传感器&#xff0c;正在被广泛应用于各种机器人系统中。双目深度相机作为机器人不可或缺的感知器件&#xff0c;其高精度深度信息为机器人提供环境感知、立体视觉、姿态识别等功能&#xff0c;让机器…

手把手安装教导安装QT开源版

第一步&#xff1a;下载安装安装程序 官网地址&#xff1a;试用Qt | 开发应用程序和嵌入式系统 | Qt 点击页面中的“选择开源版” &#xff0c; 之后页面往下拉&#xff0c;找到下载按钮&#xff0c;点击下载安装程序 第二步&#xff1a;安装 下载好了安装程序之后&#xff0…

Android笔记-安装Termux开启ssh,安装vim、android-tool、python等

背景 家里面有个老手机&#xff0c;想将此手机做成一个家庭服务器。控制各种家电。目前准备先控制电视机 流程 用电脑usb连接手机&#xff0c;下载好Termux&#xff0c;在安卓手机上安装好。这里就不记录笔记了&#xff0c;各个手机不一样。 安装好进入手机后&#xff1a; …