大模型WebUI:Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(5)
大模型WebUI:Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(5)
- 前言
- 本篇摘要
- 11. Chatbot:融合大模型的多模态聊天机器人
- 11.5 Chatbot的特殊Events
- 11.5.1 各事件总演示
- 11.5.2 详解.undo、.retry、.like和.edit事件
- 1. .undo:撤销
- 2. .retry:重试
- 3. .like:点赞
- 4. .edit:编辑
- 参考文献
前言
本系列文章主要介绍WEB界面工具Gradio。Gradio是Hugging Face发布的简易webui开发框架,它基于FastAPI和svelte,可以使用机器学习模型、python函数或API开发多功能界面和部署人工智能模型,是当前热门的非常易于展示机器学习大语言模型LLM及扩散模型DM的WebUI框架。
本系列文章分为前置概念、安装运行与部署、Gradio高级特性、基础功能实战和高级功能实战五部分。第一部分前置概念:先介绍Gradio的详细技术架构、历史、应用场景、与其他框架Gradio/NiceGui/StreamLit/Dash/PyWebIO的区别,然后详细介绍了著名的资源网站Hugging Face,因为Gradio演示中经常用到Hugging Face的models及某些场景需要部署在spaces,这里主要包括三类资源models/datasets/spaces的使用以及六类工具库transformers/diffusers/datasets/PEFT/accelerate/optimum实战。第二部分安装运行与部署:讲解多种不同的安装、运行和部署方式,安装包括Linux/Win/Mac三类系统安装,运行包括普通方式和热重载方式,部署包括本地部署、HuggingFace托管、FastAPI挂载和Gradio-Lite浏览器集成。第三部分Gradio高级特性:按照先整体再细节的逻辑,讲解Gradio的多种高级特性,包括三种Gradio Clients(python/javascript/curl)、Gradio Tools、Gradio的模块架构和环境变量等,方便读者对Gradio整体把握。第四部分基础功能实战:深入细节,也是本系列文章的核心,实践基础功能Interface、Blocks和Additional Features。第五部分高级功能实战:详解高级功能Chatbots、Data Science And Plots和Streaming。
本系列文章讲解细致,涵盖Gradio大部分组件和功能,代码均可运行并附有大量运行截图,方便读者理解并应用到开发中,Gradio一定会成为每个技术人员实现各种奇思妙想的最称手工具。
本系列文章目录如下:
- 《Gradio全解1——Gradio简介》
- 《Gradio全解1——Gradio的安装与运行》
- 《Gradio全解2——剖析Hugging Face:详解三类资源models/datasets/spaces》
- 《Gradio全解3——剖析Hugging Face:实战六类工具库transformers/diffusers/datasets/PEFT/accelerate/optimum》
- 《Gradio全解4——Gradio的3+1种部署方式实践》
- 《Gradio全解4——浏览器集成Gradio-Lite》
- 《Gradio全解5——Gradio Client:python客户端》
- 《Gradio全解5——Gradio Client:javascript客户端》
- 《Gradio全解5——Gradio Client:curl客户端》
- 《Gradio全解6——Gradio Tools:将Gradio用于LLM Agents》
- 《Gradio全解7——Gradio库的模块架构和环境变量》
- 《Gradio全解8——Interface:高级抽象界面类(上)》
- 《Gradio全解8——Interface:高级抽象界面类(下)》
- 《Gradio全解9——Blocks:底层区块类(上)》
- 《Gradio全解9——Blocks:底层区块类(下)》
- 《Gradio全解10——Additional Features:补充特性(上)》
- 《Gradio全解10——Additional Features:补充特性(下)》
- 《Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(1)》
- 《Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(2)》
- 《Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(3)》
- 《Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(4)》
- 《Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(5)》
- 《Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(6)》
- 《Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(7)》
- 《Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(8)》
- 《Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(9)》
- 《Gradio全解系列12——Data Science And Plots:数据科学与绘图》
- 《Gradio全解13——Streaming:数据流(上)》
- 《Gradio全解13——Streaming:数据流(下)》
本篇摘要
本篇介绍如何使用Gradio创建聊天机器人,主要内容包括gr.ChatInterface快速创建Chatbot、与流行LLM库及API结合、组件Chatbot及消息格式ChatMessage、使用Blocks创建Chatbot、Chatbot的特殊Events、使用Agents和Tools智能代理工具、通过Gradio应用创建Discord Bot/Slack Bot/Website Widget。
11. Chatbot:融合大模型的多模态聊天机器人
本章介绍如何使用Gradio创建聊天机器人。聊天机器人是大型语言模型(LLMs)的一个流行应用,通过Gradio,我们可以轻松构建LLM演示并与其它用户分享,或者自己使用直观的聊天机器人界面进行开发尝试。本章主要内容包括gr.ChatInterface快速创建Chatbot、与流行LLM库及API结合、组件Chatbot及消息格式ChatMessage、使用Blocks创建Chatbot、Chatbot的特殊Events、使用Agents和Tools智能代理工具、通过Gradio应用创建Discord Bot/Slack Bot/Website Widget。
11.5 Chatbot的特殊Events
用户期望现代聊天机器人用户界面能够让他们轻松地与单个聊天消息进行交互:例如,用户可能希望重试消息生成、撤销消息,或点击点赞/点踩按钮来对生成的消息进行投票,或编辑生成的消息。
幸运的是,Gradio的Chatbot组件暴露了四个事件:.retry、.undo、.like和.edit,让我们可以将这些功能构建到应用程序中。作为应用程序开发者,我们可以将任意函数附加到这些事件中的任何一个,从而在触发事件时运行设置的Python函数。
11.5.1 各事件总演示
在本演示中,我们将构建一个实现这些事件的用户界面,并将各事件加入其中,其部署在Hugging Face Spaces上的地址为:https://huggingface.co/spaces/gradio/chatbot_retry_undo_like。我们将使用Hugging Face的InferenceClient,以便无需设置任何API密钥即可开始。
完整代码如下:
from huggingface_hub import InferenceClient
import gradio as grclient = InferenceClient()def respond(prompt: str, history):if not history:history = [{"role": "system", "content": "You are a friendly chatbot"}]history.append({"role": "user", "content": prompt})yield historyresponse = {"role": "assistant", "content": ""}for message in client.chat_completion( # type: ignorehistory,temperature=0.95,top_p=0.9,max_tokens=512,stream=True,model="HuggingFaceH4/zephyr-7b-beta"):response["content"] += message.choices[0].delta.content or ""yield history + [response]def handle_undo(history, undo_data: gr.UndoData):return history[:undo_data.index], history[undo_data.index]['content']def handle_retry(history, retry_data: gr.RetryData):new_history = history[:retry_data.index]previous_prompt = history[retry_data.index]['content']yield from respond(previous_prompt, new_history)def handle_like(data: gr.LikeData):if data.liked:print("You upvoted this response: ", data.value)else:print("You downvoted this response: ", data.value)def handle_edit(history, edit_data: gr.EditData):new_history = history[:edit_data.index]new_history[-1]['content'] = edit_data.valuereturn new_historywith gr.Blocks() as demo:gr.Markdown("# Chat with Hugging Face Zephyr 7b 🤗")chatbot = gr.Chatbot(label="Agent",type="messages",# 设置机器人小助手头像avatar_images=(None,"https://em-content.zobj.net/source/twitter/376/hugging-face_1f917.png",),)prompt = gr.Textbox(max_lines=1, label="Chat Message")prompt.submit(respond, [prompt, chatbot], [chatbot])prompt.submit(lambda: "", None, [prompt])chatbot.undo(handle_undo, chatbot, [chatbot, prompt])chatbot.retry(handle_retry, chatbot, [chatbot])chatbot.like(handle_like, None, None)chatbot.edit(handle_edit, chatbot, chatbot)if __name__ == "__main__":demo.launch()
在jupyter notebook界面使用以下命令安装huggingface_hub:!pip install -q gradio huggingface_hub,然后运行代码,输入一段信息后界面如下:
提示:gr.ChatInterface会自动使用.retry和.undo事件,因此不熟悉的读者最好从这里开始,以便快速获得一个完全可用的应用程序。另外,由于网络禁令原因,自己运行时很可能出现超时:requests.exceptions.ConnectTimeout: (MaxRetryError("HTTPSConnectionPool(host=‘api-inference.huggingface.co’, port=443),此时可使用Hugging Face上的演示查看运行效果。
11.5.2 详解.undo、.retry、.like和.edit事件
本节逐一讲述.undo、.retry、.like和.edit事件的作用和用法。
1. .undo:撤销
撤销事件会将上一个用户消息填充到文本框中,并删除所有后续的助手响应。为了知道最后一个用户消息的索引,可以将gr.UndoData传递给事件处理函数,如下所示:
def handle_undo(history, undo_data: gr.UndoData):return history[:undo_data.index], history[undo_data.index]['content']
然后,我们将此函数传递给undo事件:
chatbot.undo(handle_undo, chatbot, [chatbot, prompt])
我们会注意到,现在每个机器人响应都会有一个“undo icon”,可以使用它来撤销响应。另外,也可以通过undo_data.value访问撤销消息的内容。
2. .retry:重试
重试事件的工作方式与撤销类似。我们将使用gr.RetryData获取上一个用户消息的索引,并从历史记录中删除所有后续消息;然后使用respond函数生成一个新的响应。我们也可以通过gr.RetryData.value属性获取上一个消息内容,通过history[retry_data.index][‘content’]获取上一条提示信息。代码如下:
def handle_retry(history, retry_data: gr.RetryData):new_history = history[:retry_data.index]previous_prompt = history[retry_data.index]['content']yield from respond(previous_prompt, new_history)
...
chatbot.retry(handle_retry, chatbot, chatbot)
我们会看到bot消息下有一个"retry"按钮,点击即可重新生成响应。需要注意的是,Hugging Face的推理API会缓存响应,因此在此演示中,重试按钮不会生成新的响应。
3. .like:点赞
我们应该早已见过点赞操作。在实现时,为了让用户点赞消息,我们将在聊天机器人中添加一个.like 事件,并传递一个接受gr.LikeData对象的函数。本例中,我们只是打印被点赞或点踩的消息,如下所示:
def handle_like(data: gr.LikeData):if data.liked:print("You upvoted this response: ", data.value)else:print("You downvoted this response: ", data.value)
...
chatbot.like(vote, None, None)
4. .edit:编辑
编辑监听器的思路也是一样的,通过设置gr.Chatbot(editable=True)可以捕获用户的编辑操作。gr.EditData对象会携带被编辑消息的索引以及消息的新文本。下面,我们使用此对象来编辑历史记录,并删除所有后续消息,代码如下:
def handle_edit(history, edit_data: gr.EditData):new_history = history[:edit_data.index]new_history[-1]['content'] = edit_data.valuereturn new_history
...
chatbot.edit(handle_edit, chatbot, chatbot)
到此为止,我们应该知道了如何为聊天机器人实现撤销、重试、点赞和编辑事件。
参考文献
- Gradio - guides - Chatbots
相关文章:
大模型WebUI:Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(5)
大模型WebUI:Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(5) 前言本篇摘要11. Chatbot:融合大模型的多模态聊天机器人11.5 Chatbot的特殊Events11.5.1 各事件总演示11.5.2 详解.undo、.retry、.like和.edit…...
32单片机综合应用案例——基于GPS的车辆追踪器(三)(内附详细代码讲解!!!)
困难不会永远存在,只要你勇于面对,坚持努力,就一定能够战胜一切困难。每一次挑战都是一次成长的机会,不要害怕失败,失败是成功之母。只有经历过失败,你才能更加明白自己的不足,并不断改进自己&a…...
扣除价格因素与剔除季节性因素:统计数据中的“真实”增长(中英双语)
扣除价格因素与剔除季节性因素:统计数据中的“真实”增长 在经济统计分析中,我们经常会听到“扣除价格因素”和“剔除季节性因素”这两个概念。这两者都是为了排除外部干扰因素,真实反映经济活动的增长情况。它们分别针对价格波动和季节性波…...
网卡接收报文的过程
网卡接收报文的过程通常包括以下几个关键步骤: 1. 硬件接收: • 网卡硬件首先接收到从网络传输过来的数据包。网络接口卡(NIC)负责将接收到的电信号转换为数字信号,并存储到一个硬件缓冲区中。 2. DMA传输ÿ…...
Windows图形界面(GUI)-QT-C/C++ - QT 对话窗口
公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 模态对话框 非模态对话框 文件对话框 基本概念 静态函数 常见属性 颜色对话框 基本概念 静态函数 常见属性 字体对话框 基本概念 静态函数 常见属性 输入对话框 基本概念 …...
bypass--2025春秋杯冬季赛
漏洞点 题目不难,这个循环赋值的结束条件是s[i]0,并且s和key再栈上的位置是挨着的 那么很容易想到,第二次循环赋值的时候,有一个溢出,溢出部分的值是第一次写入的key的值。 那么基本思路就是,利用这段溢出…...
学习微信小程序的下拉列表控件-picker
1、创建一个空白工程 2、index.wxml中写上picker布局: <!--index.wxml--> <view class"container"><picker mode"selector" range"{{array}}" bindchange"bindPickerChange"><view class"pick…...
【17】Word:林楚楠-供应链❗
目录 题目 NO1.2 NO3 NO4 NO5 NO6 NO7 NO89 题目 NO1.2 另存为:文件→另存为→文档→文件名/考生文件夹F12/FnF12→文件名/考生文件夹 插入→分节符→文本框→输入文件→排版_居中对齐→间距/回车去掉文本框的边框→选中文本框→格式:形状轮廓…...
父子盒子滑动事件穿透问题
问题描述 当父子盒子都有滚动条时,在子盒子内滚动时,父盒子滚动子盒子无法滚动,直到父盒子滚动到底部,子盒子才滚动 解决 如果是vue的项目,直接在子盒子上添加 wheel.stop""...
vue-amap、leaflet、融汇 离线地图瓦片使用情况分析
vue-amap: vue3写的,使用文档 -> 文档地址 <-的离线jsApi里的demo,发现 tile-url不能读取本地项目文件夹里的瓦片,文档里写的其实还是要互联网读取的高德瓦片......... 作者在git库回复tile-url要么放项目里使用绝对路…...
leetcode - 1055. Shortest Way to Form String
Description A subsequence of a string is a new string that is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (i.e., “ace” is a subsequence of “abcd…...
【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发三
目录 1 -> 绘制图形 1.1 -> 绘制基本几何图形 1.2 -> 绘制自定义几何图形 2 -> 添加动画效果 2.1 -> animateTo实现闪屏动画 2.2 -> 页面转场动画 3 -> 常见组件说明 1 -> 绘制图形 绘制能力主要是通过框架提供的绘制组件来支撑,支…...
RabbitMQ 进阶
文章目录 一、发送者的可靠性 1.1 生产者重试机制:1.2 生产者确认机制: 1.2.1 开启生产者确认:1.2.2 定义 ReturnCallback:1.2.3 定义 ConfirmCallback: 二、MQ 的可靠性 2.1 数据持久化: 2.1.1 交换机持…...
RabbitMQ---TTL与死信
(一)TTL 1.TTL概念 TTL又叫过期时间 RabbitMQ可以对队列和消息设置TTL,当消息到达过期时间还没有被消费时就会自动删除 注:这里我们说的对队列设置TTL,是对队列上的消息设置TTL并不是对队列本身,不是说队列过期时间…...
uniapp(小程序、app、微信公众号、H5)预览下载文件(pdf)
1. 小程序、app 在uniapp开发小程序环境或者app环境中,都可以使用以下方式预览文件 之前其实写过一篇,就是使用uniapp官网提供文件下载、文件保存、文件打开的API, uniapp文件下载 感兴趣也可以去看下 uni.downloadFile({// baseURL 是...
Spring Boot经典面试题及答案
一、Spring Boot基础知识 什么是Spring Boot? 答案: Spring Boot是Spring开源组织下的子项目,是Spring组件一站式解决方案。它简化了Spring应用程序的初始化和开发过程,通过“约定大于配置”的原则,减少了手动配置的繁…...
usb通过hdc连接鸿蒙next的常用指令
参考官方 注册报名https://www.hiascend.com/developer/activities/details/44de441ef599450596131c8cb52f7f8c/signup?channelCodeS1&recommended496144 hdc-调试命令-调测调优-系统 - 华为HarmonyOS开发者https://developer.huawei.com/consumer/cn/doc/harmonyos-guid…...
FPGA:Quartus软件与操作系统版本对照表
文章目录 1.软件概述2.软件版本3.设计流程4.支持的设备5.新特性6.版本对照 1.软件概述 Quartus软件是由英特尔(Intel)公司开发的一款功能强大的FPGA(现场可编程逻辑门阵列)设计工具,广泛应用于数字电路设计、仿真、综…...
RustDesk ID更新脚本
RustDesk ID更新脚本 此PowerShell脚本自动更新RustDesk ID和密码,并将信息安全地存储在Bitwarden中。 特点 使用以下选项更新RustDesk ID: 使用系统主机名生成一个随机的9位数输入自定义值 为RustDesk生成新的随机密码将RustDesk ID和密码安全地存储…...
[C语言]字符串分离
题目 从标准输入流(控制台)中获取一行字符串 str,字符串中可能会存在空格,现在需要将字符串进行分离,规则如下: (1)将 str 中位于 偶数下标 的元素放置在字符串 str1 之中 (2)将 str 中位于 奇数下标 的…...
-bash: /java: cannot execute binary file
在linux安装jdk报错 -bash: /java: cannot execute binary file 原因是jdk安装包和linux的不一致 程序员的面试宝典,一个免费的刷题平台...
Python绘制数据地图-GeoPandas入门
使用GeoPandas绘制数据地图是一种非常直观且强大的数据可视化方法。GeoPandas是一个Python库,专门用于处理地理空间数据,它建立在Pandas和Shapely库之上,并集成了matplotlib、seaborn等绘图库的功能。 下面是一个简单的入门教程,…...
CVPR 2024 图像处理方向总汇(图像去噪、图像增强、图像分割和图像恢复等)
1、Image Progress(图像处理) 去鬼影 Generating Content for HDR Deghosting from Frequency View去阴影 HomoFormer: Homogenized Transformer for Image Shadow Removal去模糊 Unsupervised Blind Image Deblurring Based on Self-EnhancementLatency Correction for E…...
c++ string
1 sting 基本概念 string 基本概念 本质:string是c风格的字符串,而string 本质上是一个类string 和char* 的区别: char * 是一个指针 string 是一个类,类内部封装了char*,管理这个字符串,是一个char* 数组…...
tomcat文件目录讲解
目录的用处 bin:tomcat的可执行命令,比如:tomcat的启动停止命令,也包含其他命令以及.bat(Windows执行的命令)和.sh(Linux操作系统执行的命令)文件config:关于tomcat的配置࿰…...
博客搭建 — GitHub Pages 部署
关于 GitHub Pages GitHub Pages 是一项静态站点托管服务,它直接从 GitHub 上的仓库获取 HTML、CSS 和 JavaScript 文件,通过构建过程运行文件,然后发布网站。 本文最终效果是搭建出一个域名为 https://<user>.github.io 的网站 创建…...
【0x0052】HCI_Write_Extended_Inquiry_Response命令详解
目录 一、命令概述 二、命令格式及参数 2.1. HCI_Write_Extended_Inquiry_Response命令格式 2.2. FEC_Required 2.3. Extended_Inquiry_Response 三、生成事件及参数 3.1. HCI_Command_Complete 事件 3.2. Status 四、命令执行流程 4.1. 命令准备阶段(主机端) 4.2…...
Kotlin Bytedeco OpenCV 图像图像55 图像透视变换
Kotlin Bytedeco OpenCV 图像图像53 图像透视变换 1 添加依赖2 测试代码3 测试结果 1 添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns"http://maven.apa…...
flutter Get GetMiddleware 中间件不起作用问题
当使用 get: ^5.0.0-release-candidate-9.2.1最新版本时,中间件GetMiddleware各种教程都是让我们在redirect中实现,比如: overrideRouteSettings? redirect(String? route) {return RouteSettings(name: "/companyAuthIndexPage"…...
npm介绍
npm(Node Package Manager)是 Node.js 的默认包管理工具,用于管理 JavaScript 和 Node.js 项目的依赖关系。它既是一个包管理工具,又是一个在线仓库,开发者可以通过它分享和下载开源的 JavaScript 库和工具。npm 是世界…...
Ruby语言的数据结构
Ruby语言的数据结构详解 Ruby是一种动态、面向对象的编程语言,因其简洁优雅的语法而受到开发者的喜爱。在Ruby中,数据结构是构建和管理数据的一种方式,不同的数据结构适用于不同的场景。本文将详细探讨Ruby中的几种主要数据结构,…...
web开发工具之:一、UUID的介绍,java如何产生UUID,作为数据库的主键和加密算法的盐
文章目录 前言一、UUID是什么二、java如何产生UUID1. 生成随机 UUID(Version 4)2. 通过指定的字符串生成 UUID 三、UUID作为数据库主键1. 优点2. 缺点 四、UUID作为加密的盐总结 前言 现在web开发中,很多使用UUID作为主键和加密的盐的&#…...
精度论文:【Focaler-IoU: More Focused Intersection over Union Loss】
Focaler-IoU: 更聚焦的交并比损失 Focaler-IoU: More Focused Intersection over Union Loss Focaler-IoU: 更聚焦的交并比损失I. 引言II. 相关工作III. 方法IV. 实验V. 结论 原文地址:官方论文地址 代码地址:官方代码地址 摘要——边界框回归在目标检…...
Android-目前最稳定和高效的UI适配方案
谈到适配,首先需要介绍几个基本单位: 1、密度无关像素(dp): 含义:density-independent pixel,叫dp或dip,与终端上的实际物理像素点无关 单位:dp,可以保证在…...
Realsense相机驱动安装及其ROS通讯配置——机器人抓取系统基础系列(四)
文章目录 概要1 Realsense相机驱动安装Method1: 使用Intel服务器预编译包Method2: 使用ROS服务器预编译包Method3: 使用SDK源代码方法对比总结 2 Realsense-ROS通讯配置与使用2.1 Realsense-ROS包安装2.2 ROS节点启动 小结Reference 概要 本文首先阐述了Realsense相机驱动安装…...
docker安装Nginx UI
开源地址:nginx-ui/README-zh_CN.md at dev 0xJacky/nginx-ui GitHub docker run -dit \ --namenginx-ui \ --restartalways \ -e TZAsia/Shanghai \ -v /Users/xiaoping/docker/appdata/nginx:/etc/nginx \ -v /Users/xiaoping/docker/appdata/nginx-ui:/etc/ng…...
【AI】【RAG】使用WebUI部署RAG:数据优化与设置技巧详解
RAG(Retrieval-Augmented Generation)是一种通过知识库构建的高效问答系统。然而,在使用WebUI部署和优化RAG时,数据源管理和参数设置直接决定了系统的回答质量。本文将结合具体问题和优化方法,为您详细解读如何最大化RAG的性能和准确性。 数据源相关问题及解决方案 在实际…...
如何在vue中渲染markdown内容?
文章目录 引言什么是 markdown-it?安装 markdown-it基本用法样式失效?解决方法 高级配置语法高亮 效果展示 引言 在现代 Web 开发中,Markdown 作为一种轻量级的标记语言,广泛用于文档编写、内容管理以及富文本编辑器中。markdown…...
nvm安装详细教程(安装nvm、node、npm、cnpm、yarn及环境变量配置)
一、安装nvm 1. 下载nvm nvm-windows官网地址https://github.com/coreybutler/nvm-windows/releases 如果打不开也可以到这里下载 2.双击 nvm-setup.exe 开始安装 3.选择nvm安装路径,路径名称不要有空格,然后点击next 4.node.js安装…...
机器学习-归一化
文章目录 一. 归一化二. 归一化的常见方法1. 最小-最大归一化 (Min-Max Normalization)2. Z-Score 归一化(标准化)3. MaxAbs 归一化 三. 归一化的选择四. 为什么要进行归一化1. 消除量纲差异2. 提高模型训练速度3. 增强模型的稳定性4. 保证正则化项的有效…...
一次完整的tcpdump -XX输出报文详解
报文: 03:32:51.745623 IP (tos 0x0, ttl 64, id 65006, offset 0, flags [DF], proto TCP (6), length 94) 10.229.43.200.6471 > 10.229.43.200.55674: Flags [P.], cksum 0x6daa (incorrect -> 0x2e06), seq 1:43, ack 42, win 3635, options [nop,nop…...
【STM32-学习笔记-9-】SPI通信
文章目录 SPI通信Ⅰ、SPI通信概述1、SPI技术规格2、SPI应用 3、硬件电路移位示意图 Ⅱ、SPI时序基本单元①、起始条件②、终止条件③、交换一个字节(模式0)④、交换一个字节(模式1)⑤、交换一个字节(模式2)…...
kalilinux - 目录扫描之dirsearch
情景导入 先简单介绍一下dirsearch有啥用。 假如你现在访问一个网站,例如https://www.example.com/ 它是一个电商平台或者其他功能性质的平台。 站在开发者的角度上思考,我们只指导https://www.example.com/ 但不知道它下面有什么文件,文…...
(12)springMVC文件的上传
SpringMVC文件上传 首先是快速搭建一个springMVC项目 新建项目mvn依赖导入添加webMoudle添加Tomcat运行环境.在配置tomcat时ApplicationContext置为"/"配置Artfact的lib配置WEB-INF配置文件(记得添加乱码过滤)配置springmvc-servlet文件&…...
[Mac + Icarus Verilog + gtkwave] Mac运行Verilog及查看波形图
目录 1. MAC安装环境 1. 1 Icarus Verilog 编译 1. 2 gtkwave 查看波形 2. 安装遇到的问题 2. 1 macOS cannot verify that this app is free from malware 2. 2 gtkwave-bin is not compatible with macOS 14 or later 3. 运行示例 3. 1 源代码 3. 2 编译Verilog 3. 3 生成.v…...
yt-dlp脚本下载音频可选设置代理
import yt_dlp# 配置:是否使用代理 use_proxy = True # 设置为 False 可关闭代理# 代理地址 proxy_url = socks5://127.0.0.1:1089URLS = [https://www.bilibili.com/video/BV1WTktYcEcQ/?spm_id_from=333.1007.tianma.6-2-20.click&vd_source=dcb58f8fe1faf749f438620b…...
【向量数据库 Milvus】linux 源码安装 Milvus 2.5.3
在 Linux 系统(如 ai 5.10.134-16.2.an8.x86_64)上通过源码安装 Milvus 2.5.3 的步骤如下。该指南适用于 x86_64 架构的系统。 1. 环境准备 确保系统满足以下要求: 操作系统: Linux(x86_64 架构)Go: 1.21 或更高版本…...
初学stm32 --- CAN
目录 CAN介绍 CAN总线拓扑图 CAN总线特点 CAN应用场景 CAN物理层 CAN收发器芯片介绍 CAN协议层 数据帧介绍 CAN位时序介绍 数据同步过程 硬件同步 再同步 CAN总线仲裁 STM32 CAN控制器介绍 CAN控制器模式 CAN控制器模式 CAN控制器框图 发送处理 接收处理 接收过…...
linux手动安装mysql5.7
一、下载mysql5.7 1、可以去官方网站下载mysql-5.7.24-linux-glibc2.12-x86_64.tar压缩包: https://downloads.mysql.com/archives/community/ 2、在线下载,使用wget命令,直接从官网下载到linux服务器上 wget https://downloads.mysql.co…...
【Java】LinkedHashMap (LRU)淘汰缓存的使用
文章目录 **1. initialCapacity(初始容量)****2. loadFactor(加载因子)****3. accessOrder(访问顺序)****完整参数解释示例****示例验证** LinkedHashMap 在 Java 中可维护元素插入或访问顺序,并…...