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

文章目录

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

前言

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


一、实现目标

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

具体实现步骤包括:

创建聊天框和用户输入区域。

实现用户消息的发送和显示。

将用户消息发送到后端 API。

获取后端返回的 AI 回复并显示。

增加消息加载时的提示("AI 正在思考中...")。

处理可能的请求错误。

二、代码解析

2.1目录结构

bash 复制代码
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。如果没有安装,可以通过以下命令进行安装:

bash 复制代码
pip install flask

2.2.2 创建 Flask 应用

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

python 复制代码
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 代码如下:

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:

bash 复制代码
pip install flask-cors

3.2 在 Flask 中启用 CORS

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

python 复制代码
from flask_cors import CORS
app = Flask(__name__)
CORS(app)  # 允许跨域请求

四、大模型调用

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

python 复制代码
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大模型改为贾维斯!!!

相关推荐
Taichi呀8 分钟前
Python字符串常用操作
开发语言·python
小熊bdg35 分钟前
3D 生成重建027-Unique3D用超分为3D提供更多细节!
人工智能·3d·aigc
Fabarta技术团队1 小时前
枫清科技高雪峰:从数据到知识,重塑产业智能化的核心驱动力
人工智能·科技
上海知从科技1 小时前
知从科技总经理受邀参加上海临港新片区商会“湖畔TECS”技术分享沙龙(第五期)
人工智能
不知名网友小H2 小时前
【h5py】 提取mat文件中的HDF5格式的数据
人工智能·python
老大白菜2 小时前
基于Go和Python的高效Web开发实战解析
前端·python·golang
OKCC_kelaile5202 小时前
电销机器人为什么越来越受欢迎?
服务器·网络·人工智能·安全·机器人·语音识别
lshzdq2 小时前
【机器人】控制之稳定性判定: 李雅普诺夫Lyapunov (3) 李函数设计举例
人工智能·算法·机器人
十年一梦实验室2 小时前
【机器人】 SDK 与控制器
人工智能·机器人
weixi_kelaile5203 小时前
智能语音机器人代替人工电销能不能促进成单率
java·服务器·人工智能·机器人·语音识别