基于python快速部署属于你自己的页面智能助手

文章目录

  • 前言
  • 一、实现目标
  • 二、代码解析
    • 2.1目录结构
    • 2.2 后端:Flask 服务器的搭建
      • 2.2.1 安装 Flask
      • 2.2.2 创建 Flask 应用
    • 2.3 实现聊天界面与消息交互
      • 2.3.1 创建聊天界面
    • 三、跨域问题的解决
      • 3.1 安装 flask-cors
      • 3.2 在 Flask 中启用 CORS
    • 五 效果展示


前言

  AI 聊天机器人已经成为了许多应用场景中的重要组成部分。通过与用户的对话,聊天机器人不仅能够提升用户体验,还能通过不断学习与优化,提高互动的精准性和智能化水平。


一、实现目标

  本次实现的目标是创建一个简单的网页聊天机器人,用户通过输入消息与 AI 进行交互。系统将通过与后端 API 的请求交互,将用户的消息传递给服务器,获取 AI 的回答,并实时展示聊天内容。

具体实现步骤包括:

  创建聊天框和用户输入区域。
  实现用户消息的发送和显示。
  将用户消息发送到后端 API。
  获取后端返回的 AI 回复并显示。
  增加消息加载时的提示(“AI 正在思考中…”)。
  处理可能的请求错误。

二、代码解析

2.1目录结构

ai-chatbot-project/
│
├── backend/                    # 后端目录
│   ├── app.py                  # 后端主文件 (Flask / FastAPI)
│   ├── requirements.txt        # 后端依赖 (Flask/FastAPI等)
│   ├── ai_model.py             # 集成大模型的文件
│   └── config.py               # 配置文件
│
├── frontend/                   # 前端目录
│   ├── index.html              # 主页 HTML 文件
│   ├── script.js               # 前端交互逻辑 (JS)
│   ├── style.css               # 页面样式
│   └── package.json            # 前端依赖 (Node.js)
│
└── README.md                   # 项目说明

2.2 后端:Flask 服务器的搭建

  使用 Python 的 Flask 框架搭建后端服务器,用于接收前端发来的请求并返回 AI 的回应。首先,需要创建一个 app.py 文件,其中定义路由 /api/chat 来处理聊天请求。

2.2.1 安装 Flask

  首先,确保你已经安装了 Flask。如果没有安装,可以通过以下命令进行安装:

pip install flask

2.2.2 创建 Flask 应用

  在 app.py 文件中,创建了一个基本的 Flask 应用,并且设置了一个 API 接口 /api/chat 用于处理 POST 请求。代码如下:

from flask import Flask, request, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

@app.route('/api/chat', methods=['POST'])
def chat():
    user_message = request.json.get('message')
    if user_message:
        # 假设你有 AI 模型的接口来处理用户消息
        ai_response = "这是AI的回应:" + user_message
        return jsonify({'response': ai_response})
    else:
        return jsonify({'response': '没有收到消息'}), 400

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

2.3 实现聊天界面与消息交互

  前端部分使用纯 HTML 和 JavaScript 来实现用户界面,并通过 fetch API 向后端发送请求。需要一个简单的聊天框,用户可以在其中输入消息,点击按钮后消息会发送到后端并返回 AI 的回答。

2.3.1 创建聊天界面

  在 index.html 文件中,创建了一个简单的聊天界面,并使用 JavaScript 来控制消息的发送和显示。HTML 代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>AI 聊天机器人</title>
    <style>
        body {
            font-family: 'Arial', sans-serif;
            background-color: #f5f5f5;
            margin: 0;
            padding: 0;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }

        .chat-container {
            width: 100%;
            max-width: 500px;
            background-color: #fff;
            border-radius: 8px;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
            overflow: hidden;
        }

        #chat-box {
            height: 350px;
            overflow-y: auto;
            padding: 20px;
            border-bottom: 1px solid #eee;
            background-color: #fafafa;
        }

        .user, .ai {
            margin-bottom: 15px;
            padding: 10px;
            border-radius: 5px;
        }

        .user {
            background-color: #e0f7fa;
            color: #00796b;
            text-align: right;
        }

        .ai {
            background-color: #f1f8e9;
            color: #388e3c;
            text-align: left;
        }

        .input-container {
            padding: 10px;
            display: flex;
            border-top: 1px solid #eee;
            background-color: #fff;
        }

        #user-input {
            flex-grow: 1;
            padding: 10px;
            border: 1px solid #ccc;
            border-radius: 20px;
            font-size: 14px;
        }

        button {
            padding: 10px 20px;
            margin-left: 10px;
            background-color: #00796b;
            color: white;
            border: none;
            border-radius: 20px;
            cursor: pointer;
            font-size: 14px;
        }

        button:hover {
            background-color: #004d40;
        }

        button:active {
            background-color: #004d40;
        }

        /* 滚动条样式 */
        #chat-box::-webkit-scrollbar {
            width: 8px;
        }

        #chat-box::-webkit-scrollbar-thumb {
            background-color: #ccc;
            border-radius: 4px;
        }

        #chat-box::-webkit-scrollbar-thumb:hover {
            background-color: #888;
        }

        .loading {
            text-align: center;
            color: #00796b;
            font-size: 14px;
        }
    </style>
</head>
<body>

<div class="chat-container">
    <div id="chat-box"></div>
    <div class="input-container">
        <input type="text" id="user-input" placeholder="请输入消息..." onkeypress="handleKeyPress(event)">
        <button onclick="sendMessage()">发送</button>
    </div>
</div>

<script>
    function sendMessage() {
        const userMessage = document.getElementById('user-input').value;

        if (userMessage.trim() !== '') {
            // 显示用户消息
            appendMessage('用户:' + userMessage, 'user');

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

            // 显示AI正在处理中
            const loadingElement = document.createElement('div');
            loadingElement.classList.add('loading');
            loadingElement.innerText = 'AI 正在思考中...';
            appendMessage(loadingElement.outerHTML, 'ai');

            // 向后端发送请求
            fetch('http://localhost:5000/api/chat', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                },
                body: JSON.stringify({ message: userMessage })
            })
            .then(response => response.json())
            .then(data => {
                const aiMessage = data.response || '抱歉,我无法理解你的问题。';

                // 确保加载提示被替换
                const lastAiMessage = document.querySelector('.ai:last-child');
                if (lastAiMessage && lastAiMessage.querySelector('.loading')) {
                    lastAiMessage.innerHTML = aiMessage;
                } else {
                    appendMessage('AI:' + aiMessage, 'ai');
                }
            })
            .catch(error => {
                console.error('Error:', error);
                // 处理请求失败的情况
                const lastAiMessage = document.querySelector('.ai:last-child');
                if (lastAiMessage && lastAiMessage.querySelector('.loading')) {
                    lastAiMessage.innerHTML = 'AI:请求失败,请稍后再试。';
                }
            });
        }
    }

    // 按下回车键发送消息
    function handleKeyPress(event) {
        if (event.key === 'Enter') {
            sendMessage();
        }
    }

    // 将消息添加到聊天框
    function appendMessage(message, sender) {
        const chatBox = document.getElementById('chat-box');
        const messageElement = document.createElement('div');
        messageElement.classList.add(sender);
        messageElement.innerHTML = message; // 使用innerHTML以便渲染HTML标签
        chatBox.appendChild(messageElement);
        chatBox.scrollTop = chatBox.scrollHeight; // 滚动到底部
    }
</script>

</body>
</html>

三、跨域问题的解决

  在开发过程中,如果前端和后端不在同一域名或端口上运行,浏览器会限制跨域请求。为了避免这种问题,我们可以在 Flask 中使用 flask-cors 库来启用跨域资源共享(CORS)。

3.1 安装 flask-cors

  通过以下命令安装 flask-cors:

pip install flask-cors

3.2 在 Flask 中启用 CORS

  在 app.py 中导入并启用 CORS,如下所示:

from flask_cors import CORS
app = Flask(__name__)
CORS(app)  # 允许跨域请求

四、大模型调用
  在ai_model.py中使用ollama调用qwen大模型。首先ollama sever启动ollama。

import requests
import json

def get_ai_response(user_message):
    try:
        messages = [{"role": "system", "content": '你是我的专属人工智能助手,你的名字是贾维斯'}]

        messages.append({"role": "user", "content": user_message})
        res = requests.post(
                url="http://localhost:11434/api/chat",
                json={"model": "qwen2.5:7b", "messages": messages, "stream": False},
            )
        res.raise_for_status()
        data = res.json()  # 使用.json()方法直接解析JSON
        context = data['message']['content']
        return f"AI 响应: {context}"
    except Exception as e:
        return f"AI 错误: {str(e)}"

五 效果展示

  这里已经通过系统级别提示,把qwen大模型改为贾维斯!!!
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker在Ubuntu和CentOS系统下的安装

目录 1. 各版本平台支持情况2. 在Ubuntu系统下安装docker3. 常见报错4. Docker的镜像源修改5. Docker目录修改6. 在CentOS系统下安装docker 1. 各版本平台支持情况 &#xff08;1&#xff09;平台支持情况如下&#xff1a; Server 版本 桌面版本 2. 在Ubuntu系统下安装docker…

深入解析强化学习中的 Generalized Advantage Estimation (GAE)

中文版 深入解析强化学习中的 Generalized Advantage Estimation (GAE) 1. 什么是 Generalized Advantage Estimation (GAE)? 在强化学习中&#xff0c;计算策略梯度的关键在于 优势函数&#xff08;Advantage Function&#xff09; 的设计。优势函数 ( A ( s , a ) A(s, a…

【开源】基于SpringBoot框架的个性化的旅游网站 (计算机毕业设计)+万字毕业论文 T025

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境&#xff1a; Tomcat 7.x,8.x,9.x版本均可 操作系统…

java web 实验五 Servlet控制层设计(设计性)

实验五 Servlet控制层设计&#xff08;设计性&#xff09; //代码放在资源包里了 实验目的 熟悉Servlet的基本语法。掌握采用HTML、JS、JDBC、JSP、Servlet和四层结构的综合应用。实验要求 本实验要求每个同学单独完成&#xff1b;调试程序要记录调试过程中出现的问题及解决…

汽车保养系统+ssm

摘 要 由于APP软件在开发以及运营上面所需成本较高&#xff0c;而用户手机需要安装各种APP软件&#xff0c;因此占用用户过多的手机存储空间&#xff0c;导致用户手机运行缓慢&#xff0c;体验度比较差&#xff0c;进而导致用户会卸载非必要的APP&#xff0c;倒逼管理者必须改…

仿iOS日历、飞书日历、Google日历的日模式

仿iOS日历、飞书日历、Google日历的日模式&#xff0c;24H内事件可自由上下拖动、自由拉伸。 以下是效果图&#xff1a; 具体实现比较简单&#xff0c;代码如下&#xff1a; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color;…

网易云信荣获“HarmonyOS NEXT SDK星河奖”

近日&#xff0c;鸿蒙生态伙伴 SDK 开发者论坛在北京举行。 网易云信凭借在融合通信领域的技术创新和鸿蒙生态贡献&#xff0c;荣获鸿蒙生态“HarmonyOS NEXT SDK星河奖”。 会上&#xff0c;华为鸿蒙正式推出 SDK 生态繁荣伙伴支持计划&#xff0c;旨在为 SDK 领域伙伴和开发…

Electromagnetic Tracking Smart Car based on STM32F401 or GD32F450ZGT6

Electromagnetic Smart Car1 基于梁山派的电磁循迹智能车的主控芯片来自立创梁山派板载的国产兆易创新GD32F450ZGT6&#xff0c;整车采用模块化开发&#xff0c;由电源模块、L298N驱动模块、电磁循迹模块、梁山派、调试模块和显示模块组成。 嵌入式软件开发环境是&#xff1a;K…

Windows下Docker Desktop+k8s安装和部署程序

Windows下Docker Desktopk8s安装和部署程序 一、安装Docker DesktopKubernetes 1.需要安装windows版的docker 安装 Docker Desktop&#xff0c;启用Hyper-V、虚拟机平台和容器 https://www.docker.com/get-started/ 2.启用Kubernetes 打开Docker-Desktop&#xff0c;启用…

网络原理03

回顾 应用层&#xff1a;应用程序&#xff0c;数据具体如何使用 传输层&#xff1a;关注起点和终点 网络层&#xff1a;关注路径规划 数据链路层&#xff1a;关注相邻节点的转发 物理层&#xff1a;硬件设备 应用层 应用程序 在应用层&#xff0c;很多时候&#xff0c;…

HTTP 状态码大全

常见状态码 200 OK # 客户端请求成功 400 Bad Request # 客户端请求有语法错误 不能被服务器所理解 401 Unauthorized # 请求未经授权 这个状态代码必须和WWW- Authenticate 报头域一起使用 403 Forbidden # 服务器收到请求但是拒绝提供服务 404 Not Found # 请求资源不存…

Ajax--实现检测用户名是否存在功能

目录 &#xff08;一&#xff09;什么是Ajax &#xff08;二&#xff09;同步交互与异步交互 &#xff08;三&#xff09;AJAX常见应用情景 &#xff08;四&#xff09;AJAX的优缺点 &#xff08;五&#xff09;使用jQuery实现AJAX 1.使用JQuery中的ajax方法实现步骤&#xf…

unique_ptr自定义删除器,_Compressed_pair利用偏特化减少存储的一些设计思路

主要是利用偏特化&#xff0c; 如果自定义删除器是空类&#xff08;没有成员变量&#xff0c;可以有成员函数&#xff09;&#xff1a; _Compressed_pair会继承删除器&#xff08;删除器作为基类&#xff09;&#xff0c;但_Compressed_pair里不保存删除器对象&#xff0c;只…

AGCRN论文解读

一、创新点 传统GCN只能基于静态预定义图建模全局共享模式&#xff0c;而AGCRN通过两种GCN的增强模块&#xff08;NAPL、DAGG&#xff09;实现了更精细的节点特性学习和图结构生成。 1 节点自适应参数学习模块&#xff08;NAPL&#xff09; 传统GCN通过共享参数&#xff08;权重…

使用观测云排查数据库死锁故障

故障发现 核心应用 pod 发生重启&#xff0c;同时接收到对应使用者反馈业务问题&#xff0c;开始排查。 观测云排查现场 1、根据重启应用信息&#xff0c;查询 APM 执行数据库 update 操作大量报错&#xff0c;执行时间在 5min 以上。 分析 APM 链路异常&#xff0c;发现是触…

UNIX数据恢复—UNIX系统常见故障问题和数据恢复方案

UNIX系统常见故障表现&#xff1a; 1、存储结构出错&#xff1b; 2、数据删除&#xff1b; 3、文件系统格式化&#xff1b; 4、其他原因数据丢失。 UNIX系统常见故障解决方案&#xff1a; 1、检测UNIX系统故障涉及的设备是否存在硬件故障&#xff0c;如果存在硬件故障&#xf…

npm或yarn包配置地址源

三种方法 1.配置.npmrc 文件 在更目录新增.npmrc文件 然后写入需要访问的包的地址 2.直接yarn.lock文件里面修改地址 简单粗暴 3.yarn install 的时候添加参数 设置包的仓库地址 yarn config set registry https://registry.yarnpkg.com 安装&#xff1a;yarn install 注意…

opencv——图片矫正

图像矫正 图像矫正的原理是透视变换&#xff0c;下面来介绍一下透视变换的概念。 听名字有点熟&#xff0c;我们在图像旋转里接触过仿射变换&#xff0c;知道仿射变换是把一个二维坐标系转换到另一个二维坐标系的过程&#xff0c;转换过程坐标点的相对位置和属性不发生变换&a…

【学习】企业通过CMMI认证,还需要申请CSMM资质吗

​ 企业通过CMMI认证之后&#xff0c;是否还有必要申请CSMM资质&#xff1f;这是一个值得软件企业深思的问题。虽然CMMI和CSMM都在组织的软件过程改进和认证方面发挥着重要作用&#xff0c;但它们各自拥有自己的特点在。企业需要根据自身发展需求来选择适合的认证方式。首先我…

OpenHarmony-3.HDF input子系统(5)

HDF input 子系统OpenHarmony-4.0-Release 1.Input 概述 输入设备是用户与计算机系统进行人机交互的主要装置之一&#xff0c;是用户与计算机或者其他设备通信的桥梁。常见的输入设备有键盘、鼠标、游戏杆、触摸屏等。本文档将介绍基于 HDF_Input 模型的触摸屏器件 IC 为 GT91…