打造属于您的AI对话伙伴:基于Flask和Socket.IO的交互式聊天应用

使用Python 打造实时聊天应用:使用Flask和SocketIO的终极指南 这篇博客展示了如何使用Flask和Flask-SocketIO构建一个简单的实时聊天应用。应用支持WebSocket通信,能够存储和广播聊天消息。好的,让我们一步一步来解析这个代码片段,并给出相关的扩展和说明。导入库和初始化应用 Flask: 一个轻量级的Web框架,用于构建Web应用。 Flask-SocketIO: 一个扩展,允许Flask应用支持WebSocket。 os: 提供了一种便携式的方式使用操作系统相关的功能。 app.config[‘SECRET_KEY’]: 设置Fla 阅读详情

打造属于您的AI对话伙伴:基于Flask和Socket.IO的交互式聊天应用

前言

在这个科技迅速发展的时代,人工智能(AI)技术不仅改变了我们的生活方式,更在重新定义我们的工作方式。尽管许多人已经开始使用现成的AI工具,但对AI技术的深入理解和应用开发仍然是一个挑战。本项目旨在突破这一限制,引导您从零开始,亲手打造一个基于Flask和Socket.IO的实时AI聊天助手。
让我们跳出"用户"的角色,成为"创造者"。让你不再只是用户,而是成为技术的创造者和推动者。这不仅是学习新技术的机会,更是参与塑造AI未来的宝贵经历。

通过这个项目,您将能够:

  • 探索AI对话系统的核心原理和运作方式
  • 掌握开发实时Web应用的关键技术和最佳实践
  • 研究如何将AI技术与现代Web开发无缝结合

技术栈

  • Flask:
    功能强大的Python Web框架,提供灵活的后端支持。
  • Socket.IO:
    实现实时、双向的基于事件的通信,是实现实时对话的关键。
  • 通义千问API:
    具有强大的AI对话生成能力。

这个技术栈的组合使我们能够创建一个反应迅速、智能度高的聊天助手,为用户带来良好的交互体验。

技术亮点

  • AI驱动的对话生成:
    利用OpenAI的强大API,我们的助手能够理解用户输入的上下文,并生成相关、连贯且信息丰富的回复。无论是日常闲聊、专业咨询还是创意激发,AI都能够胜任。

  • Socket.IO实现实时通信:
    通过Socket.IO,我们建立了服务器和客户端之间的实时双向通信通道。这使得AI生成的回答可以立即传送到用户界面,实现了真正的实时对话。

  • 通义千问API集成:
    深度集成了阿里云通义千问API,利用其强大的语言模型来生成高质量的对话内容。通过精心设计的提示和上下文管理,我们确保了AI回答的相关性和连贯性。

  • 流式响应技术:
    这是本项目的一大亮点。不同于传统的等待整个回复生成后再显示,我们的系统能够实时流式显示AI的回答。用户可以看到回答是如何一字一句"打出来"的,大大提升了交互的即时性和趣味性。

  • Markdown格式化消息:
    支持Markdown格式,使得消息内容不仅限于文本,还可以包括代码块、列表、加粗等丰富的格式选项。这使得对话内容更加多样化和丰富,提高了用户体验。

详细实现

为了帮助大家理解前后端的实现细节,下面我将提供一个详细的步骤指南,并附上相关的代码示例。

后端实现

步骤 1: 初始化 Flask 应用和 SocketIO 实例
from flask import Flask, render_template, session
from flask_socketio import SocketIO, emit
from openai import OpenAI
import os
import threading
import uuid

app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
socketio = SocketIO(app)

client = OpenAI(
    api_key="sk-",  # 替换为实际的 API 密钥
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

stop_event = threading.Event()
conversation_history = {}
步骤 2: 设置路由

这部分主要涉及到 Flask 的路由配置,这里只有一个简单的路由,用于渲染聊天界面。

@app.route('/')
def index():
    # 为每个新用户生成一个唯一的会话ID
    session['user_id'] = str(uuid.uuid4())
    # 渲染聊天界面模板
    return render_template('chat.html')
步骤 3: 设置 SocketIO 事件处理

这部分涉及到 SocketIO 的事件监听和处理逻辑,我们将其拆分为几个小步骤以便于理解和实现。

步骤 3.1: 处理停止生成事件
@socketio.on('stop_generating')
def handle_stop():
    stop_event.set()  # 通知模型停止生成
    emit('message_stopped')  # 通知前端停止生成
步骤 3.2: 处理发送消息事件

当用户在前端界面输入消息并点击发送按钮时,这个消息会通过Socket.IO发送到服务器。服务器端的 handle_message 函数会被触发,处理这个消息。

@socketio.on('send_message')
def handle_message(message):
    stop_event.clear()  # 清除停止标志位
    user_id = session.get('user_id')  # 获取当前用户的会话ID
    
    # 初始化或更新用户的对话历史
    conversation_history.setdefault(user_id, [
        {'role': 'system', 'content': '你是一个有帮助的助手。'}
    ])
    
    conversation_history[user_id].append({'role': 'user', 'content': message})
    handle_ai_response(user_id)  # 调用函数处理AI响应
步骤 3.3: 生成并发送AI响应

此步骤负责生成AI的响应并将其发送给用户。当用户发送消息后,系统会调用此函数来处理AI的生成和响应过程。

功能描述
  • **生成AI响应:**使用OpenAI的API,根据用户的对话历史生成响应。这个过程是流式的,即AI的回答会逐渐生成并发送。
  • **实时发送响应:**通过Socket.IO,将AI生成的响应实时发送给前端,用户可以看到AI回答的逐字生成过程。
  • **处理中断请求:**如果用户在AI响应生成过程中请求停止,系统将立即停止生成并通知用户。
代码实现
def handle_ai_response(user_id):
    try:
        # 启动与AI模型的会话,传入用户的对话历史
        completion = client.chat.completions.create(
            model="qwen-long",
            messages=conversation_history[user_id],
            stream=True
        )
        ai_response = ""  # 初始化AI响应字符串

        # 处理每一个生成的数据块
        for chunk in completion:
            if stop_event.is_set():
                break  # 如果接收到停止信号,则中断响应生成
            if chunk.choices[0].delta.content:
                content = chunk.choices[0].delta.content
                ai_response += content
                emit('message_chunk', {'content': content})  # 发送内容增量给前端

        # 如果生成完成且未被中断,发送完整的响应
        if not stop_event.is_set():
            conversation_history[user_id].append({'role': 'assistant', 'content': ai_response})
            emit('message_complete')
    except Exception as e:
        print(f"Error: {str(e)}")
        emit('error', {'message': str(e)})  # 处理可能发生的异常

前端实现

前端部分主要负责与用户的交互以及与后端SocketIO服务的通信。

步骤 1: 编写基本的 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>
</head>
<body>
    <div class="chat-container">
        <div class="header">AI聊天助手</div>
        <div class="chat-area" id="chatArea">
            <!-- 对话记录 -->
        </div>
        <div class="input-area">
            <textarea id="userInput" placeholder="有什么想问的吗..." rows="2"></textarea>
            <button id="sendButton" onclick="toggleSendStop()">发送</button>
        </div>
        <div class="usage-info">
            <details>
                <summary>使用说明 </summary>
                <p>- 在输入框中输入你的问题或指令</p>
                <p>- 点击发送按钮或按回车键发送消息</p>
                <p>- AI助手会根据你的输入给出回应</p>
                <p>- 你可以继续提问或进行对话</p>
            </details>
        </div>
    </div>
</body>
</html>
步骤 2: 使用 JavaScript 脚本来处理事件,以下为部分代码
// 发送消息逻辑...
async function sendMessage() {
    const userInput = document.getElementById('userInput');
    const chatArea = document.getElementById('chatArea');
    const sendButton = document.getElementById('sendButton');
    const message = userInput.value.trim();

    if (message && !isResponding) {
        isResponding = true;
        stopRequested = false;
        aiStartedResponding = false;  // 重置AI回复状态
        sendButton.textContent = '停止';
        sendButton.classList.add('stop');

        // 添加用户消息
        const userMessage = document.createElement('div');
        userMessage.className = 'message user-message';
        userMessage.textContent = message;
        chatArea.appendChild(userMessage);
        scrollToBottom();

        // 清空输入框并重置高度
        userInput.value = '';
        adjustTextareaHeight();

        // 创建AI消息元素
        const aiMessage = document.createElement('div');
        aiMessage.className = 'message ai-message';
        chatArea.appendChild(aiMessage);
        scrollToBottom();

        // 重置currentAiMessage
        currentAiMessage = '';

        // 发送消息到服务器
        socket.emit('send_message', message);
    }
}

// 自动调整文本区域高度...
function adjustTextareaHeight() {
    const textarea = document.getElementById('userInput');
    textarea.style.height = 'auto';
    textarea.style.height = (textarea.scrollHeight) + 'px';
}

// 处理Enter键事件...
function handleKeyPress(event) {
    if (event.key === 'Enter' && !event.shiftKey) {
        event.preventDefault(); // 阻止默认的回车行为
        if (!isResponding) {
            sendMessage();
        }
    }
}

// 滚动监听...
function handleScroll() {
    const chatArea = document.getElementById('chatArea');
    userScrolled = true;
    // 如果用户滚动到接近底部,重置 userScrolled
    if ((chatArea.scrollHeight - chatArea.scrollTop - chatArea.clientHeight) < scrollThreshold) {
        userScrolled = false;
    }
}

总结

通过开发这个基于Flask和Socket.IO的实时AI聊天助手,我们不仅创造了一个功能强大的应用,更重要的是,我们深入探索了AI技术与Web开发的结合。这个项目为我们提供了宝贵的实践经验,让我们能够:

  • 深入理解AI对话系统的工作原理,包括自然语言处理和上下文管理。
  • 掌握实时Web应用开发的关键技术,特别是Socket.IO的使用。
  • 体验AI与Web技术的融合过程,了解如何将AI能力无缝集成到Web应用中。

通过亲手构建这样一个系统,我们跨越了从"使用者"到"创造者"的鸿沟,为未来参与更复杂、更有挑战性的AI项目做好了准备。

版本说明

基础版本

  • 功能:基本的消息发送和接收,无需连续对话支持。
  • 技术:使用基础的HTTP请求处理,不涉及WebSocket技术。
  • 用户界面:简单的文本输入和显示,不支持Markdown语法或其他富文本格式。

升级版本

  • 功能:支持连续对话,能够根据上下文生成响应。
  • 技术:采用WebSocket实现实时双向通信,提高响应速度和交互体验。
  • 用户界面:支持Markdown语法,可以显示富文本格式,提升用户交互体验。

在这里插入图片描述

在这里插入图片描述

手把手带你搭建一个语音对话机器人:5分钟定制个人AI小助手 通过本文的简单步骤,你已经掌握了如何用 Python 搭建一个语音对话机器人。我们使用了实现语音识别,利用 OpenAI API 生成对话内容,并通过gTTS将文本转换为语音。整个流程非常简洁,你可以根据自己的需求进一步扩展机器人功能,甚至将其集成到实际的应用场景中。 阅读详情

相关推荐

使用Flask-SocketIO完成服务端和客户端的双向通信

  介绍:flask-socketio模块实际上是封装了flask对websocket的支持,websocket在连接建立阶段是通过HTTP的握手方式进行的,这可以看做是为了兼容浏览器或者使用一些现成的功能来实现,这样一种捷径。当连接建立之后,客户端和服务端之间就不再进行HTTP通信了,所有信息交互都由websocket接管。Flask-SocketIO使Flask应用程序可以访问客户端和服务器...

Java知音 4万+

Flask和Vue框架实现WebSocket消息通信

主要的安装包 Flask、Flask-SocketIO,注意Python版本要求3.6+更新基础环境我的“requirements.txt”的包安装命令。

make_progress的博客 3918

flask-socketio实现的网页聊天室(一)

初学flask-socketio,做的聊天室

m0_61143764的博客 5386

做AI问答过程中遇到的问题:markdown-it、Typed

Markdown-it支持丰富的Markdown语法,并能够将Markdown文本轻松转换为HTML格式。它拥有丰富的插件和配置选项,使得文档编辑更加灵活多变。此外,Markdown-it还提供了高性能和高度可配置性,确保跨平台一致性。

syue779的博客 1374

flackweb:使用Flask和SocketIO进行实时聊天的Python Web App

项目二 使用Python和JavaScript“ #flackweb”进行Web编程 目标 了解如何使用JavaScript在服务器端运行代码。 更加轻松地构建Web用户界面。 获得使用Socket.IO进行客户端和服务器之间通信的经验。 概述 在这个项目中,我使用Flask构建了一个在线消息传递服务,其精神类似于Slack。 用户将能够使用显示名称登录到您的网站,创建交流渠道(即聊天室),以及查看和加入现有渠道。 选择一个频道后,用户将能够实时相互发送和接收消息。

用workbuddy自定义Skill:手把手搭建AI炒股分析助手

AI Agent正成为个人投资研究的重要工具,而Skill作为行为规范,能让AI输出保持稳定与专业。在AI Agent应用中,很多人分不清Skill与Agent的区别:Agent负责目标拆解与执行,Skill则固化分析流程与输出模板。借助本地工作台workbuddy,用户可自定义Skill,实现从市场环境检查到财务排雷的五段式分析。通过调低温度参数、设定数据验证规则,该方案能有效避免大模型凭空编造数据,帮助个人投资者快速完成基本面体检、资金面观察与风险清单生成。本文基于一套可直接套用的配置与一个月实测,展示

weixin_29038537的博客 520

Flask-SocketIO,一个高效的 Python WebSocket 库!

大家好,我是“一行”。今天想带大家了解一个非常强大的工具:Flask-SocketIO。在现代的Web应用中,我们经常需要实时交互功能,比如即时聊天、实时通知等。Flask-SocketIO正是一个帮助我们轻松实现WebSocket实时通讯的库。它简单好用、功能强大,非常适合初学者上手。如果你已经熟悉Flask,那今天的内容将会让你的应用更上一层楼!什么是 Flask-SocketIO?Flask...

一行玩python 2506

将雷达连接到树莓派的串口

dev/ttyAMA0 是树莓派的主要 UART(用于 GPIO 引脚 8 (TXD) 和 10 (RXD))。通常,树莓派使用 GPIO 引脚 8 (TXD) 和 10 (RXD) 进行串口通信。树莓派上通常有两个串口:/dev/ttyS0 和 /dev/ttyAMA0。你需要确认雷达的 TX 和 RX 引脚,并与树莓派的对应引脚连接。VCC(电源)连接到树莓派的 3.3V 或 5V(根据雷达的要求)MR(Receive)连接到树莓派的 GPIO 8 (TXD)GND(地)连接到树莓派的 GND。

qq_45943628的博客 1465

探秘Flask-SocketIO-Chat:打造实时互动的聊天应用

在这个数字化时代,即时通讯成为了连接人与人的重要桥梁。对于开发者而言,构建一个既简单又高效的实时聊天系统是一个挑战也是机遇。今天,让我们一同探索【Flask-SocketIO-Chat】——一个优雅地展示了如何基于Flask框架和Socket.IO实现聊天应用的开源项目。 ## 1. **项目介绍** **Flask-SocketIO-Chat** 简洁而不失深度,它不仅是一个运行示例,更是一

gitblog_00563的博客 1092

【技术解析】Point-NeRF:如何通过点云优化加速神经辐射场渲染

本文深入解析了Point-NeRF技术,它通过引入3D点云作为几何先验,有效解决了传统神经辐射场渲染速度慢的痛点。该方法利用神经点云构建局部辐射场,结合点剪枝与生长策略进行动态优化,在保证高渲染质量的同时,实现了高达30倍的训练加速,为高效3D场景重建提供了新范式。

weixin_29159127的博客 268

cherry使用MCP协议Streamable HTTP实践

摘要:Streamable HTTP协议是针对传统HTTP+SSE传输方式的改进方案,解决了连接恢复、服务器资源占用和单向通信等问题。该协议基于普通HTTP实现,支持无状态服务器、纯HTTP服务和多轮对话,同时兼容现有基础设施。通过演示展示了服务端和客户端的配置方法,体现了其灵活性和实用性。MCP(多轮对话协议)作为扩展LLM能力的关键技术,代表着未来交互式AI的发展趋势。

全网120W+关注AI拉呱,专注人工智能以及科技前沿! 563

从零构建高颜值局域网聊天室:Flask+Socket.IO全栈实战

摘要:本文将带你从零开发一个支持文字、表情、文件传输的局域网聊天室,涵盖Flask后端架构设计、Socket.IO实时通信、前端交互优化等核心技术点。项目采用前后端分离架构,具备消息持久化、用户状态管理、文件上传等企业级特性。在即时通讯领域,WebSocket已成为实时通信的事实标准。本项目采用Flask + Socket.IO组合,相比纯WebSocket方案具备以下优势:兼容性强:Socket.IO自动降级为长轮询,兼容老旧浏览器开发效率高:Flask轻量灵活,配合Socket.IO简洁的API扩展性好

白泽的博客 2818

软件设计师---UML

软件设计师---UML

我从不打没有准备的仗! 1万+

AI口语App的开发流程

目标:明确 App 的核心目标,例如帮助用户提高英语口语能力、提供实时对话练习等。功能需求:确定核心功能,如语音识别、对话生成、发音评估、学习进度跟踪等。用户画像:定义目标用户群体(如学生、职场人士)及其需求。

dt_dev的博客 1228

管好 SAP Fiori Launchpad Content:技术目录、业务目录与 KPI 工具的完整治理思路

SAP Fiori Launchpad 作为企业级统一入口,需通过技术目录(源对象)和业务目录(引用编排)分层治理。技术目录由 Launchpad App Manager 维护,负责应用描述对象(Tile 和 Target Mapping)的创建与管理;业务目录由 Launchpad Content Manager 编排,通过引用技术目录对象实现灵活配置。分析型内容则通过 F2814 统一管理。这种分层设计支持应用复用,便于升级维护,是 SAP S/4HANA 项目中实现高效内容治理的关键。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 130

基于Python的IMF经济数据爬取与分析:从入门到实战

本文详细介绍了如何使用Python爬取国际货币基金组织(IMF)的经济数据,包括最新的爬虫技术、反反爬策略、数据解析与存储方法。文章从IMF数据源分析开始,逐步讲解如何构建一个完整的爬虫系统,并提供了详细的代码实现和优化建议。通过本文,读者将掌握爬取复杂国际组织数据的关键技术,并能将这些技术应用于其他类似的数据获取场景。关键词:Python爬虫、IMF数据、经济数据获取、数据清洗、反爬策略IMF Data (data.imf.org) - 主要数据门户。

2201_76125261的博客 1439

《Python Web网站部署应知应会》No4:基于Flask的调用AI大模型的高性能博客网站的设计思路和实战(上)

本文详细探讨了一个基于Flask框架的高性能博客系统的设计与实现,该系统集成了本地AI大模型生成内容的功能。重点关注如何在高并发、高负载状态下保持系统的高性能和稳定性.用代码写一个网站现在越来越容易,但是要让网站在实际场景中保持稳定和高性能,尤其在大模型AI接口调用高并发背景下,真的需要一定的技术。文章详细介绍了多层次缓存策略、异步处理机制、请求批处理技术以及全面的性能监控系统的实现。通过多种性能测试工具的实战应用,包括负载测试、缓存性能测试和并发性能测试。

yweng18的博客 1763

机器人轨迹规划——梯形速度轨迹(超详细)

机器人轨迹 这一系列轨迹教程将主要包括以下内容: 点到点轨迹(P2P) 五次多项式插值轨迹 三次多项式插值轨迹 梯形速度曲线轨迹 双S形速度曲线轨迹 多个自由度轨迹的时间同步 在线轨迹规划 多项式在线轨迹规划 梯形在线轨迹规划 双S形在线轨迹规划 非线性实时轨迹滤波 多点轨迹(Multi-point) 三次样条曲线(cubic spline) 贝赛尔曲线(Bezier Curve) B样条曲线(BSpline) 时间最优轨迹 三次样条时间最优轨迹 任意路径下的时间最优轨迹 时间

出门搔白首,若负平生志 1万+

爱智EdgerOS之深入解析在爱智应用中如何使用Socket.IO轻松实现双向通信

Socket.IO 是一个基于事件通信的实时应用程序框架,它在即时通讯、通知和消息推送,实时分析等场景中有广泛的应用。Socket.IO 包括两个部分:在 Server 端的模块(JSRE 已提供了 socket.io 模块);在 Client 端的模块。Socket.IO 将实现分成了两层:底层管道:即 Engine.IO 层,它是 Socket.IO 的内部引擎。高级API:即 Sokcet.IO 本身。

╰つ栺尖篴夢ゞ 744

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

“从文字到声音:重新定义在线沟通”实时语音通话功能!简单聊天小程序!

添加实时语音通话功能时,通常会使用 WebRTC 技术。WebRTC 是一种用于实时通信的协议,允许在对等网络之间直接传输音频和视频。在 Flask 中实现 WebRTC 可能稍微复杂一些,但下面是一个简化的示例,指导你如何将语音通话功能整合到我们之前的实时聊天应用中。

lvrouhuosha1o的博客 730

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

使用OpenAI Api实现一个简单的聊天程序

最近在工作中接触到了一些使用OpenAI Api接入大模型做一些文本提炼和翻译的工作,今天有时间就研究了一下做一个简单的聊天工具。使用Node.js、openai、dotenv、readline大模型使用的是硅基流动里的,这是邀请链接,使用邀请码可以得tokens,邀请码是IX1HEqHs,有兴趣的小伙伴可以试试哈。

qq_43074195的博客 653

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

使用flask-socketio实现WebSocket消息广播

目的 在flask应用内,通过引入flask-socketio实现站内WebSocket消息广播。各网页接收广播消息并动态刷新页面。 为便于观察,我们通过向服务端发送"/push" http 请求,触发站内广播;并通过Flask-SocketIO的广播模式,将广播信息通过WebSocket接口发送到客户端浏览器打开的网页。网页根据接收到的信息动态展示内容。 实现 服务端搭建Flask应用 首先在服...

TechRunner 4246

Flask-socketio聊天室 (附源码)

`* A Chat Room Completed with Flask-socketio 功能: 实时消息更新,实时用户上线显示 快捷注册 快捷登陆 表情支持 截图: 使用方法: 安装依赖:pip install -r requirements.txt 数据库迁移,映射 python manage.py db init python manag...

weixin_30371875的博客 861

Flask-Socketio 部分翻译

待验证 server端emit数据到浏览器,浏览器端收到数据,无法触发emit指定的回调函数。 广播 Broadcasting 以下 socketio 为 SocketIO的一个实例 Broadcast是SocketIO中非常实用的特性,在 send() 或 emit() 中指定 broadcast = True 可以激活这个特性:@socketio.on('my event') def h

博客 4862

6 款电商 AI 图片生成软件实测|国内 + 跨境卖家工具清单

电商 AI 作图工具已经从 "能不能用" 进入了 "好不好用" 的阶段。对于绝大多数卖家而言,现在的 AI 工具已经可以覆盖 60%-80% 的基础商品图需求,显著降低拍摄和设计成本。选择工具的核心逻辑不是 "哪款最强",而是 "哪款最适配你的品类、平台规模和团队能力"。垂直电商工具胜在工作流效率,通用生图工具强在创意上限,模板类工具赢在上手速度。建议根据自身业务阶段,搭配 1-2 款主力工具 + 1 款辅助工具,形成适合自己的视觉生产流程。

Mardi_Ladin的博客 359
上一篇: 基于SpringBoot + Vue的商城系统
下一篇: 这款工具在手,前端开发轻松搞定!
luomaCodeing
博客等级 码龄2年 23粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值