当前位置: 首页 > news >正文

从Gradio App创建Discord Bot/Slack Bot/Website Widget(2)——从Gradio App创建Slack Bot

从Gradio App创建Discord Bot/Slack Bot/Website Widget(2)——从Gradio App创建Slack Bot

  • 本篇摘要
  • 18. 从Gradio App创建Discord Bot/Slack Bot/Website Widget
    • 18.2 从Gradio App创建Slack Bot
      • 18.2.1 运作原理及前置条件
        • 1. 运作原理
        • 2. 前置条件
      • 18.2.2 创建Slack App
        • 1. 创建工作区workspace
        • 2. 创建Slack App
        • 3. 授权并获取OAuth Tokens
        • 4. 生成socket-token
        • 5. 订阅app_mention事件
      • 18.2.3 编写Slack Bot代码
        • 1. 基础及详细代码
        • 2. 运行及代码解读
      • 18.2.4 将机器人添加到Slack工作区
        • 1. 新建频道channel
        • 2. 将机器人加入频道
      • 18.2.5 操作机器人
        • 1. 使用Slack Bot
        • 2. 功能及扩展
    • 参考文献

本章目录如下:

  1. 《从Gradio App创建Discord Bot/Slack Bot/Website Widget(1)——从Gradio App创建Discord Bot》
  2. 《从Gradio App创建Discord Bot/Slack Bot/Website Widget(2)——从Gradio App创建Slack Bot》
  3. 《从Gradio App创建Discord Bot/Slack Bot/Website Widget(3)——从Gradio App创建Website Widget》

本篇摘要

本章从Gradio App分别创建Discord Bot/Slack Bot/Website Widget。

18. 从Gradio App创建Discord Bot/Slack Bot/Website Widget

为了拓展Gradio App的应用范围,本章讲解从Gradio App分别创建Discord Bot/Slack Bot/Website Widget。

18.2 从Gradio App创建Slack Bot

我们可以将Gradio应用部署为Slack机器人,让Slack工作区中的成员直接与之互动。Slack官网地址https://slack.com,Slack可以将人员、项目、应用和AI代理整合在一起,进行人员组织协作、项目管理、工具集成并可使用人工智能Slack AI及智能代理Agentforce提供服务。

18.2.1 运作原理及前置条件

本小节简述从Gradio App创建Slack Bot的运作原理和前置条件。

1. 运作原理

该Slack Bot会监听频道中提及它的消息,当收到消息时(可包含文本或文件),它会通过Gradio内置API将内容发送至已部署的Gradio应用,并将API返回的响应作为回复。得益于Gradio API的高度灵活性,您可以轻松创建支持文本、图片、音频、实时流、聊天记录等丰富功能的Slack机器人。

2. 前置条件

首先,安装最新版gradio和slack-bolt库:

pip install --upgrade gradio slack-bolt~=1.0

然后,确保已部署可运行的Gradio应用(可运行于本地或Hugging Face Spaces)。本示例将使用与第一节相同的Gradio Playground Bot:abidlabs/gradio-playground-bot,该应用接收图片/文本后能生成对应的Gradio应用代码,源码不再重复。现在,让我们开始构建吧!

18.2.2 创建Slack App

前置工作完成后,开始创建Slack应用,步骤如下:

1. 创建工作区workspace

访问api.slack.com/apps,创建账户或使用已有邮箱登录后,界面如下:
在这里插入图片描述
在创建App之前需先创建工作区,点击"create a workspace",之后还需再点一遍确认。然后输入工作区名称gradio_union_slack(根据自己需要修改),设置自己的名称和照片,跳过邀请同事,填写当前团队工作(随意),最后点击使用免费版本完成创建。

2. 创建Slack App

访问api.slack.com/apps,选择“Create An App -> From Scratch”,为应用命名GradioPlaygroundBot,选择或新建要开发应用的目标工作区,比如之前创建的工作区gradio_union_slack,然后点击“Create App”,出现如下界面:
在这里插入图片描述

3. 授权并获取OAuth Tokens

点击左侧导航栏"OAuth & Permissions",滚动至"Scopes",在Bot Token Scopes点击“Add an OAuth Scope”并添加以下机器人令牌权限:

  • app_mentions:read(读取提及消息):查看会话中直接提及@GradioPlaygroundBot的消息(需应用已加入该会话);
  • chat:write(聊天消息写入):以GradioPlaygroundBot身份发送消息;
  • files:read(文件读取):查看已添加GradioPlaygroundBot的频道和会话中的共享文件;
  • files:write(文件写入):以GradioPlaygroundBot身份上传、编辑和删除频道和会话中的文件。

添加完成到,滚动到同一页面顶部,点击“Install to gradio_union_slack”:
在这里插入图片描述
在下面可以看到添加的权限,可以看什么以及可以做什么:
在这里插入图片描述
点击"Allow"后跳转回"OAuth & Permissions"页面,并得到Bot User OAuth Token:xoxb-XXX,保存它到本地文件以便后续使用。

4. 生成socket-token

点击左侧菜单栏"Socket Mode",点击切换键“Enable Socket Mode”开启该功能,如下图:
在这里插入图片描述

在弹出的对话框中,为Socket令牌命名(如gradio_socket_token),点击“Generate”并复制保存生成的令牌:xapp-XXX,稍后会用到。如下图:
在这里插入图片描述

5. 订阅app_mention事件

进入左侧导航栏的"Event Subscription"菜单,点击切换键toggle以启用事件"Enable Events",然后在“Subscribe to bot events”点击“Add Bot User Event”,订阅app_mention机器人事件,最后别忘记点击右下角的“Save changes”。如下图:
在这里插入图片描述

Slack App创建及设置完成,下面开始编写Slack Bot代码!

18.2.3 编写Slack Bot代码

本小节编写Slack Bot基础及详细版代码,然后运行它,并对其代码进行详细解读。

1. 基础及详细代码

首先,编写一个基础版Slack机器人来验证基础功能。将以下Python代码保存为bot.py文件,并替换前文获取的两个令牌Bot OAuth Token和App Socket Token:

from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandlerSLACK_BOT_TOKEN = "xoxb-XXX"
SLACK_APP_TOKEN = "xapp-XXX"
app = App(token=SLACK_BOT_TOKEN)@app.event("app_mention")
def handle_app_mention_events(body, say):user_id = body["event"]["user"]say(f"Hi <@{user_id}>! You mentioned me and said: {body['event']['text']}")if __name__ == "__main__":handler = SocketModeHandler(app, SLACK_APP_TOKEN)handler.start()

若运行正常,输出如下:

⚡️ Bolt app is running!

现在可以添加Gradio专用代码了,我们将使用Gradio的Python客户端来调用前文提到的Gradio Playground Bot,以下是更新后的bot.py文件内容:

from gradio_client import Client, handle_file
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
import os, re, httpxSLACK_BOT_TOKEN = "xoxb-XXX"
SLACK_APP_TOKEN = "xapp-XXX"
app = App(token=SLACK_BOT_TOKEN)
gradio_client = Client("abidlabs/gradio-playground-bot")def download_image(url, filename):headers = {"Authorization": f"Bearer {SLACK_BOT_TOKEN}"}response = httpx.get(url, headers=headers)image_path = f"./images/{filename}"os.makedirs("./images", exist_ok=True)with open(image_path, "wb") as f:f.write(response.content)return image_pathdef slackify_message(message):   # Replace markdown links with slack format and remove code language specifier after triple backtickspattern = r'\[(.*?)\]\((.*?)\)'cleaned = re.sub(pattern, r'<\2|\1>', message)cleaned = re.sub(r'```\w+\n', '```', cleaned)return cleaned.strip()@app.event("app_mention")
def handle_app_mention_events(body, say):# Extract the message content without the bot mentiontext = body["event"]["text"]bot_user_id = body["authorizations"][0]["user_id"]clean_message = text.replace(f"<@{bot_user_id}>", "").strip()# Handle images if presentfiles = []if "files" in body["event"]:for file in body["event"]["files"]:if file["filetype"] in ["png", "jpg", "jpeg", "gif", "webp"]:image_path = download_image(file["url_private_download"], file["name"])files.append(handle_file(image_path))break# Submit to Gradio and send responses back to Slackfor response in gradio_client.submit(message={"text": clean_message, "files": files},):cleaned_response = slackify_message(response[-1])say(cleaned_response)if __name__ == "__main__":handler = SocketModeHandler(app, SLACK_APP_TOKEN)handler.start()
2. 运行及代码解读

运行后输出如下:

Loaded as API: https://abidlabs-gradio-playground-bot.hf.space ✔
⚡️ Bolt app is running!

代码解读:

  1. 首先,引入相关库和定义TOKEN,再通过SLACK_BOT_TOKEN定义SLACK应用app和Gradio客户端gradio_client;
  2. 然后,定义图像下载函数download_image和将信息整理为Slack格式的函数slackify_message,其逻辑简单不再赘述;
  3. 先看主程序中SocketModeHandler处理器,它使用SLACK_APP_TOKEN标识开启app的Soket模式,然后使用start启动;
  4. 当app事件app_mention触发时,调用函数handle_app_mention_events。它首先清理信息,去掉提及机器人的标识符;然后判断是否有附件及其文件类型,当符合要求时下载文件;再者将信息和文件发给gradio_client获得回复response;最后将response整理成slack格式,通过say发送到显示界面。

通过代码解读可以看到,本例定义的app通过SLACK_BOT_TOKEN与Slack中创建的App关联,而SLACK_APP_TOKEN则定义了app的Socket模式及传输权限。首先通过命令python bot.py启动handler.start(),此时app会通过SLACK_BOT_TOKEN关联到GradioPlaygroundBot,并通过SLACK_APP_TOKEN与Channel建立Socket通道;然后,当在Slack的频道中提及GradioPlaygroundBot时,消息会经由Socket传递到bot.py中定义的app,然后由事件app_mention触发函数handle_app_mention_events进行处理;最后将回复response进行Slack格式化处理,通过函数say发送到channel另一端的Slack窗口进行显示。

18.2.4 将机器人添加到Slack工作区

在Slack工作区中,除了定义App,还需要创建用于消息传输的频道Channels。现在,在您想要使用机器人的Slack工作区中新建或进入现有频道channel,步骤如下:

1. 新建频道channel

选择工作区后,点击工作区侧边栏"Channels"下的标有Add channels的"+"按钮,如下图:
在这里插入图片描述

选择“Create a new channel”,新建channel时,只需输入名称并邀请成员即可创建。当然除了新建channel,也可以使用现有的channel,从截图可以看到之前已创建的channel。

2. 将机器人加入频道

最后邀请您的机器人加入频道,步骤如下:在新频道中输入/invite @您的机器人名称;或者直接@您的机器人名称,系统会提示"You mentioned
@GradioPlaygroundBot
, but they’re not in this channel.",是否将机器人加入channel,选择add them即可。添加后效果如下图:
在这里插入图片描述

18.2.5 操作机器人

现在我们已经拥有Slack版的Gradio Bot,如何使用及扩展它呢?

1. 使用Slack Bot

大功告成!现在您可以在机器人所在的任意频道中@提及它,选择性地附加图片,机器人就会用生成的Gradio应用代码进行回复!
现在,我们可以在Slack工作区的任意频道中**@提及**你的机器人,并选择性地附加图片,发送消息后,机器人就会用生成的Gradio应用代码进行回复。比如上传一张图片并配文:@GradioPlaygroundBot make this app:
在这里插入图片描述
由于没有设置ANTHROPIC_API_KEY(每天可能有一次免费调用),可以看到机器人只回复“Generating Gradio app based on the image…”。此时只需将Gradio Playground Bot的程序复制到自己的Hugging Face Spaces中并设置好ANTHROPIC_API_KEY,然后更改gradio_client的地址,Slack窗口收到的正常回复类似下图:
在这里插入图片描述
点击底部的超链接即可在Gradio playground中试运行生成的代码!

2. 功能及扩展

该机器人将实现以下功能:
✓ 监听被提及的消息
✓ 处理所有附加图片
✓ 将文本和图片发送至您的Gradio应用
✓ 将响应内容实时传回Slack频道

这只是一个基础示例——我们可以扩展它来处理更多文件类型、添加错误处理机制或集成不同的Gradio应用!如果我们基于Gradio应用开发了Discord机器人,可以在X(Twitter)上分享并 @Gradio官方账号:https://x.com/Gradio,官方将很乐意帮开发者推广应用!

参考文献

  1. 🚀 Creating Discord Bots with Gradio 🚀
  2. 🚀 Creating a Slack Bot from a Gradio App 🚀
  3. 🚀 Creating a Website Chat Widget with Gradio 🚀

相关文章:

从Gradio App创建Discord Bot/Slack Bot/Website Widget(2)——从Gradio App创建Slack Bot

从Gradio App创建Discord Bot/Slack Bot/Website Widget&#xff08;2&#xff09;——从Gradio App创建Slack Bot 本篇摘要18. 从Gradio App创建Discord Bot/Slack Bot/Website Widget18.2 从Gradio App创建Slack Bot18.2.1 运作原理及前置条件1. 运作原理2. 前置条件 18.2.2 …...

基于STM32G474的SPI获取MT6816编码器绝对角度配置指南

前言&#xff1a;最近上手使用了一款编码器芯片&#xff0c;也是先艰难阅读了一下全英文版本的编码器的规格手册&#xff0c;然后通过SPI读取了一下绝对值角度。虽然发现使用起来还是挺简单的&#xff0c;但使用后还是会产生一个对其原理层面的好奇&#xff0c;比如磁编码器内部…...

深入学习ReentrantLock

ReentrantLock 0. 前言&#xff1a;为什么需要 ReentrantLock&#xff1f;1. 基础概念与核心特性1.1 什么是 ReentrantLock&#xff1f;1.2 ReentrantLock vs. synchronized1.3 核心特性详解1.3.1 可重入性 (Reentrancy)1.3.2 公平性选择 (Fairness Choice)1.3.3 可中断获取锁 …...

Spring Boot 集成金蝶 API 演示

✨ Spring Boot 集成金蝶 API 演示&#xff1a;登录 / 注销 Cookie 保存 本文将通过 Spring Boot 完整实现一套金蝶接口集成模型&#xff0c;包括&#xff1a; ✅ 普通登录✅ AppSecret 登录✅ 注销✅ Cookie 保存与复用 &#x1f4c5; 项目结构 src/ ├── controller/ │…...

适用于 HAL 的 AIDL

目录 设计初衷 注意 编写AIDLHAL接口 查找AIDLHAL接口 扩展接口 将现有HAL从HIDL转换为AIDL AIDL与HIDL之间的主要差异 针对HAL的供应商测试套件(VTS)测试 Android 11 中引入了在 Android 中使用 AIDL 实现 HAL 的功能, 从而可以在不使用 HIDL 的情况下实现 Android 的部分…...

49、Spring Boot 详细讲义(六)(SpringBoot2.x整合Mybatis实现CURD操作和分页查询详细项目文档)

项目文档:银行借据信息CURD操作和分页查询 一、项目概述 1. 项目简介 本项目旨在使用Spring Boot框架整合MyBatis连接Mysql数据库实现借据信息的增加、删除、修改和查询功能,同时支持分页查询,并提供对应的Restful风格的接口。 2.环境准备 2.1.工具和软件准备 JDK(建议…...

C# 运行web项目

1、web项目直接点击顶部运行...

GPU服务器声音很响可以怎么处理

当GPU服务器运行时噪音过大&#xff0c;通常是由于高负载下散热风扇高速运转所致。以下是分步骤的解决方案&#xff0c;帮助您有效降低噪音并保持设备稳定运行&#xff1a; 一、排查噪音来源 定位声源 • 使用 声级计 或手机分贝检测APP&#xff0c;确定最大噪音位置&#xff0…...

Java如何选择ojdbc驱动

如何选择ojdbc驱动&#xff1f; 取决于短板。 如果JDK版本高&#xff0c;数据库版本低&#xff0c;根据Oracle数据库版本选择。如果JDK版本低&#xff0c;数据库版本高&#xff0c;根据Java版本选择。 Oracle官网OJDBC驱动和受支持的JDK版本 23ai 21c 19c 驱动类型选择 oj…...

【微思就业推荐 】T岗位-北京,福州,厦门等地

到微思学习&#xff0c;免费推荐就业&#xff01;学员内推&#xff01; 原创 厦门微思网络 2025年04月 有哪些大公司在招OCP认证人才&#xff1f; 有哪些大公司在招聘拥有HCIE认证的人才 ① 委托单位&#xff1a;润欣商业管理(厦门)有限公司 央企-华润资产的子公司 岗位&am…...

Linux 命令全解析:从零开始掌握 Linux 命令行

Linux 作为一款强大的开源操作系统&#xff0c;广泛应用于服务器、嵌入式系统以及超级计算机领域。掌握 Linux 命令行技能&#xff0c;是每一位开发者和系统管理员的必备能力。本文将从基础开始&#xff0c;为你详细介绍常用的 Linux 命令&#xff0c;以及它们的使用场景和示例…...

2025年4月份生活有感

今天在5000B培训的下午&#xff0c;一起入所来的小伙伴&#xff0c;有个申请了深圳大学的博士&#xff0c;已录取。哎&#xff0c;想起了当年申博时候信心和决心不足&#xff0c;导致后面匆匆的拿了offer去工作。看到同事的选择还是非常羡慕&#xff0c;想到自己5月份的婚礼&am…...

鸿蒙系统开发状态更新字段区别对比

在鸿蒙系统开发中&#xff0c;状态管理是构建响应式UI的核心机制&#xff0c;主要通过装饰器&#xff08;Decorators&#xff09;实现字段的状态观测与更新。根据鸿蒙的版本&#xff08;V1稳定版和V2试用版&#xff09;&#xff0c;支持的装饰器及其特性有所不同。以下是主要状…...

CEPH OSD_SLOW_PING_TIME_FRONT/BACK 警告处理

ceph config set mgr mon_warn_on_slow_ping_time 2000说明&#xff1a;mon_warn_on_slow_ping_time 该值默认为0&#xff0c;那么只要 osd 心跳超过 mon_warn_on_slow_ping_ratio of osd_heartbeat_grace. 也就是超过 mon_warn_on_slow_ping_ratio和mon_warn_on_slow_ping_rat…...

HTML应用指南:利用POST请求获取全国小菜园门店位置信息

小菜园作为一家以徽菜为主的快餐品牌&#xff0c;自2013年成立以来&#xff0c;凭借其独特的烹饪理念和精致的东方口味菜品&#xff0c;在中国市场上迅速崛起。该品牌强调少油少盐、减少调味品使用&#xff0c;旨在传承并发扬徽州风味的独特魅力。这种健康且不失美味的烹饪方式…...

Python在去中心化物联网中的应用:数据安全、智能合约与边缘计算的融合

Python在去中心化物联网中的应用:数据安全、智能合约与边缘计算的融合 在万物互联的时代,传统物联网(IoT)架构依赖于集中式服务器来管理数据、设备互联与身份认证。然而,随着设备数量激增,中心化架构的可扩展性、安全性和隐私问题逐渐暴露。去中心化物联网(DeIoT)通过…...

CEPH配置优化建议

一、硬件配置优化 磁盘选择&#xff1a; SSD 与 HDD 搭配&#xff1a;使用 SSD 作为 OSD 日志盘&#xff08;Journal&#xff09;或元数据存储&#xff0c;HDD 作为数据盘。推荐 SSD 与 HDD 的比例为 1:3~5&#xff0c;具体根据业务负载调整。 RAID 禁用&#xff1a;避免使用硬…...

深度学习入门:神经网络的学习

目录 1 从数据中学习1.1 数据驱动1.2 训练数据和测试数据 2损失函数2.1 均方误差2.2 交叉熵误差2.3 mini-batch学习2.4 mini-batch版交叉熵误差的实现2.5 为何要设定损失函数 3 数值微分3.1 数值微分3.3 偏导数 4 梯度4.1 梯度法4.2 神经网络的梯度 5 学习算法的实现5.1 2层神经…...

机器学习_决策树

决策树的特点 可以处理非线性的问题可解释强&#xff0c;没有θ模型简单&#xff0c;模型预测效率高 if else不容易显示的使用函数表达&#xff0c;不可微 决策树的生成和预测 生成&#xff1a;通过大量数据生成一颗非常好的树&#xff0c;用这棵树来预测新来的数据。 预测&…...

深入理解UML动态图:系统行为建模全景指南

目录 前言1. 动态图概述2. 用例图&#xff08;Use Case Diagram&#xff09;2.1 定义与作用2.2 应用价值2.3 实践建议 3. 顺序图&#xff08;Sequence Diagram&#xff09;3.1 定义与特征3.2 应用优势3.3 建模建议 4. 活动图&#xff08;Activity Diagram&#xff09;4.1 定义与…...

Linux驱动开发进阶(九)- SPI子系统BSP驱动

文章目录 1、前言2、SPI总线注册3、SPI设备注册4、SPI驱动注册5、SPI BSP驱动 1、前言 学习参考书籍以及本文涉及的示例程序&#xff1a;李山文的《Linux驱动开发进阶》本文属于个人学习后的总结&#xff0c;不太具备教学功能。 2、SPI总线注册 驱动源码文件&#xff1a;dri…...

wabpack学习记录

wabpack学习记录 前言 项目写了不少 对webpack了解甚少 只记住一些 必要的概念以及指令 所以像深究一下具体是什么 可以做什么 如何做等 package.json 文件详解 name: 项目的名称。 version: 项目的版本号。 description: 项目的描述。 author: 项目的作者或维护者信息。 l…...

计算机视觉——基于 Yolov8 目标检测与 OpenCV 光流实现目标追踪

1. 概述 目标检测&#xff08;Object Detection&#xff09;和目标追踪&#xff08;Object Tracking&#xff09;是计算机视觉中的两个关键技术&#xff0c;它们在多种实际应用场景中发挥着重要作用。 目标检测指的是在静态图像或视频帧中识别出特定类别的目标对象&#xff0…...

React 更新 state 中的数组

更新 state 中的数组 数组是另外一种可以存储在 state 中的 JavaScript 对象&#xff0c;它虽然是可变的&#xff0c;但是却应该被视为不可变。同对象一样&#xff0c;当你想要更新存储于 state 中的数组时&#xff0c;你需要创建一个新的数组&#xff08;或者创建一份已有数组…...

[250415] OpenAI 推出 GPT-4.1 系列,支持 1M token

目录 OpenAI 推出 GPT-4.1 系列 OpenAI 推出 GPT-4.1 系列 OpenAI 宣布&#xff0c;新一代 GPT-4.1 模型系列正式发布&#xff0c;包括 GPT-4.1, GPT-4.1 mini 和 GPT-4.1 nano 三款模型&#xff0c;该系列模型在各项性能指标上全面超越 GPT-4o 和 GPT-4o mini&#xff0c;尤其…...

分布式锁+秒杀异步优化

文章目录 问题思路setnx实现锁误删问题和解决方案Redis Lua脚本问题引出解决方案 setnx实现的问题Redission快速入门redission可重入锁原理 秒杀优化(异步优化)异步秒杀思路秒杀资格判断Redis消息队列 问题 比如我们两个机器都部署了我们项目&#xff0c;这里nginx使用轮询的方…...

数据服务化 VS 数据中台:战略演进中的价值重构

在企业数据战略的演进历程中&#xff0c;数据中台曾被视为解决数据孤岛的 “万能钥匙”&#xff0c;而数据服务化的兴起则标志着企业从 “数据资源囤积” 向 “数据价值释放” 的深刻转型。两者的核心差异不仅在于技术架构&#xff0c;更在于对数据资产的定位与使用理念的根本分…...

PL/SQL登录慢,程序连接Oracle 提示无法连接或无监听

PL/SQL登录慢&#xff0c;程序连接Oracle 提示无法连接或无监听 错误提示&#xff1a;ORA-12541: TNS: 无监听程序 的解决办法&#xff0c; 现象&#xff1a;PL/SQL登录慢&#xff0c;程序连接Oracle 提示无法连接或无监听 监听已经正常开起&#xff0c;但还是PL/SQL登录慢或…...

【JAVAFX】自定义FXML 文件存放的位置以及使用

情况 1&#xff1a;FXML 文件与调用类在同一个包中&#xff08;推荐&#xff09; 假设类 MainApp 的包是 com.example&#xff0c;且 FXML 文件放在 resources/com/example 下&#xff1a; 项目根目录 ├── src │ └── sample │ └── Main.java ├── src/s…...

DDoS(分布式拒绝服务)攻击

DDoS(分布式拒绝服务)攻击 这是一份全面系统的 DDoS&#xff08;分布式拒绝服务攻击&#xff09;知识总结&#xff0c;适合用于学习、报告、讲稿或者面试准备。内容涵盖定义、原理、危害、利用、工具、防护策略等。 一、什么是DDoS DDoS&#xff08;Distributed Denial of Se…...

scikit-learn初探

KFold k交叉验证&#xff0c;k-1个作为训练集&#xff0c;剩下的作为测试集 split split(X, yNone, groupsNone)X&#xff1a; (n_samples, n_features)的矩阵&#xff0c;行数为n_samples&#xff0c;列数为n_features y&#xff1a;(n_samples,)为列向量&#xff0c;表示监…...

深入解析 sklearn 中的多种特征编码方式:功能、适用场景与选择建议

标题&#xff1a;深入解析 sklearn 中的多种特征编码方式&#xff1a;功能、适用场景与选择建议 摘要&#xff1a; 在机器学习中&#xff0c;特征编码是数据预处理的重要环节&#xff0c;直接影响模型的性能和效果。本文详细介绍了 sklearn 及其生态中&#xff08;含第三方库…...

windows10 wsl2 安装ubuntu和docker

见 弃用Docker Desktop&#xff1a;在WSL2中玩转Docker之Docker Engine 部署与WSL入门-阿里云开发者社区 如果启动docker时报下面这个错&#xff0c; 那是因为systemctl没有启用 sudo systemctl start docker System has not been booted with systemd as init system (PID 1)…...

一文读懂WPF系列之依赖属性与附加属性

依赖属性与附加属性 依赖属性对比C#属性WPF依赖属性&#xff08;Dependency Properties&#xff09;优先级计算与值决策​​回调与验证机制​​WPF 自带的依赖属性自定义依赖属性 附加属性本质与定义​​与依赖属性的区别​​附加属性的典型应用场景自定义附加属性注意事项 属性…...

1×1卷积与GoogleNet

11卷积 卷积核的尺寸等于1的卷积核 11卷积有什么用 1. 通道混合与特征转换 背景&#xff1a;在卷积神经网络中&#xff0c;输入数据通常有多个通道&#xff08;例如RGB图像有3个通道&#xff0c;经过卷积层后通道数可能会增加&#xff09;。不同通道的特征图可能包含了不同的…...

Handsontable 表格组件的使用

文章目录 1. 安装 Handsontable2. 创建一个基本表格3. 主要配置3.1、 data 数据3.2、 columns 指定列配置 4. Handsontable 高级功能4.1、 添加排序4.2、 过滤数据4.3、 选中行高亮4.4、 只读单元格4.5、 校验数据 5. Handsontable 与 Vue结合6. 总结 Handsontable 是一个强大的…...

消息中间件面试题

前言 本章内容来自B站黑马程序员java大厂面试题与小林coding 如有侵权立即删除 博主学习笔记&#xff0c;如果有不对的地方&#xff0c;海涵。 如果这篇文章对你有帮助&#xff0c;可以点点关注&#xff0c;点点赞&#xff0c;谢谢你&#xff01; 1.通用篇 1.1 什么是消息…...

数据结构与算法--1.判断数组中元素是否有重复

在C语言中&#xff0c;我们可以使用类似的方法来实现判断数组中是否有重复值的功能。由于C语言没有内置的哈希集合&#xff08;如Python的set或C的unordered_set&#xff09;&#xff0c;我们需要自己实现一个简单的哈希表或使用其他方法。 方法一&#xff1a;暴力法&#xff…...

硬件工程师面试常见问题(1)

第一问&#xff1a;单片机上电后没有运转&#xff0c;首先要检查什么&#xff1f; &#xff08;1&#xff09;单片机供电是否正常& 电路焊接检查 用万用表测量对应引脚的供电电压&#xff0c;检查对不对。 &#xff08;2&#xff09;单片机复位是否释放 用万用表测量复位引…...

测试100问:web测试和APP测试的区别

哈喽&#xff0c;大家好&#xff0c;我是十二&#xff0c;那今天要为大家分享的是高频面试题&#xff1a;web测试和 App测试的区别。 从功能测试方面来讲&#xff0c;web测试和 App测试在测试的流程以及测试用例的设计上是没有区别的&#xff0c;那主要的区别包含以下三个方面&…...

Leetcode 3518. Smallest Palindromic Rearrangement II

Leetcode 3518. Smallest Palindromic Rearrangement II 1. 解题思路2. 代码实现 题目链接&#xff1a;Leetcode 3518. Smallest Palindromic Rearrangement II 1. 解题思路 这一题是题目Leetcode 3517. Smallest Palindromic Rearrangement I的升级版本&#xff0c;其主要的…...

Golang|订单相关

文章目录 秒杀写库策略确保缓存的订单数据不丢失 秒杀写库策略 在我们的抽奖函数中&#xff0c;抽中奖品、减库存成功返回给前端后就应该生成订单写入数据库 但是这里有问题&#xff0c;我们的抽奖函数是支持高并发的&#xff0c;并发量大的情况下mysql无法支持这么大并发量的写…...

Python+Playwright:编写自动化测试的避坑策略

PythonPlaywright&#xff1a;编写自动化测试的避坑策略 前言一、告别 time.sleep()&#xff0c;拥抱 Playwright 的智能等待二、选择健壮、面向用户的选择器&#xff0c;优先使用 data-testid三、严格管理环境与依赖&#xff0c;确保一致性四、分离测试数据与逻辑&#xff0c;…...

P12130 [蓝桥杯 2025 省 B] 移动距离

P12130 [蓝桥杯 2025 省 B] 移动距离 - 洛谷 题目描述 小明初始在二维平面的原点&#xff0c;他想前往坐标 (233, 666)。在移动过程中&#xff0c;他只能采用以下两种移动方式&#xff0c;并且这两种移动方式可以交替、不限次数地使用&#xff1a; 水平向右移动&#xff0c;…...

关于 人工智能(AI)发展简史 的详细梳理,按时间阶段划分,涵盖关键里程碑、技术突破、重要人物及挑战

以下是关于 人工智能&#xff08;AI&#xff09;发展简史 的详细梳理&#xff0c;按时间阶段划分&#xff0c;涵盖关键里程碑、技术突破、重要人物及挑战&#xff1a; 字数&#xff1a;约2500字 逻辑结构&#xff1a;时间线清晰&#xff0c;分阶段描述技术突破、关键事件与挑战…...

Formality:Bug记录

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 本文记录博主在使用Synopsys的形式验证工具Formality中遇到的几个Bug。 Bug复现 情况一 // 例1 module dff (input clk, input d_in, output d_out …...

react-07React提交表单数据调用同一方法(高阶函数,函数柯里化概念)

1.高阶函数与函数柯里化概念 高阶函数&#xff1a;符合其中之一&#xff0c;那该函数为高阶函数 1.A函数&#xff0c;接收的参数是一个函数&#xff0c;那么A就是高阶函数2.A函数&#xff0c;调用的返回值是一个函数&#xff0c;那么A就是高阶函数 常见的高阶函数&#xff1a…...

js ES6箭头函数的作用

前置知识 1、箭头函数语法简洁&#xff0c;相较于传统的函数表达式&#xff0c;箭头函数的语法更为简洁&#xff0c;尤其适用于简单的函数。 2、解决this取向问题&#xff0c;在传统函数中&#xff0c;this 的值取决于函数的调用方式&#xff0c;这可能会导致一些难以理解和调…...

淘宝商品数据高并发采集方案:API 接口限流机制与分布式调用实战

一、引言 在电商领域&#xff0c;对淘宝商品数据进行采集是一项常见且重要的任务。随着业务规模的扩大&#xff0c;高并发采集需求日益凸显。然而&#xff0c;淘宝 API 接口存在限流机制&#xff0c;为了高效且合规地完成数据采集&#xff0c;需要采用分布式调用的策略。本文将…...

python爬虫 线程,进程,协程

0x00 线程 线程是一个执行单位&#xff0c;是在一个进程里面的&#xff0c;是共享进程里面的提供的内存等资源&#xff0c;使用多个线程时和使用多个进程相比&#xff0c;多个线程使用的内存等资源较少。进程像一座“房子”&#xff08;独立资源&#xff09;&#xff0c;线程是…...