NoneBot2,基于Python的聊天机器人
NoneBot2,基于Python的聊天机器人
- 第一步,配置python
- 第二步,配置[go-cqhttp](https://github.com/Mrs4s/go-cqhttp)
- 第三步,配置[NoneBot](https://61d3d9dbcadf413fd3238e89--nonebot2.netlify.app/)
NoneBot2 是一个现代、跨平台、可扩展的 Python 聊天机器人框架,它基于 Python 的类型注解和异步特性,能够为你的需求实现提供便捷灵活的支持。
NoneBot2 具有丰富的插件生态系统,可以实现多种功能,例如自动回复、天气查询、消息推送等等。此外,它还提供了完善的文档和示例代码,方便用户快速上手和开发自己的插件。
如果你是一名 Python 程序员,想要开发一个聊天机器人,那么 NoneBot2 绝对是你的不二之选。你可以在官方文档中了解更多关于 NoneBot2 的详细信息和使用方法。
首先,你需要明白的是NoneBot2的运行是需要python运行环境来支持,因此我们首先需要配置好python环境;再有,以QQ聊天机器人举例,NoneBot2本身并不包含与QQ服务器通信的底层协议实现,因此无法独立搭建聊天机器人。与 QQ 服务器通信的底层协议实现可以有多种选择,如 CoolQ HTTP API 协议、Mirai 协议、go-cqhttp 协议等。因此,在使用 nonebot 框架搭建 QQ 机器人时,您还需要选择一个底层协议实现来与 QQ 服务器通信,这里我们以go-cqhttp为例。
综上所述,如果我们要搭建一个属于自己的QQ机器人,需要进行如下几步:
- 要搭建一个安装 Python 是作为 nonebot 运行的基础环境;
- 配置 go-cqhttp 是为了实现与 QQ 服务器的通信,并提供 QQ 机器人的服务;
- 配置 nonebot 是将 go-cqhttp 和 Python 代码连接起来,实现具体的 QQ 机器人功能。
下面将直接用云服务器进行部署,毕竟如果你要开个机器人肯定是24小时一直服务,因此,这里以腾讯云的Centos为例部署。
第一步,配置python
首先你得先按照Python,需要注意的是,NoneBot 仅支持 Python 3.7.3 以上版本,这里以安装Python3.9.9为例:
由于CentOS7原本就安装了Python2,而且这个Python2不能被删除,因为有很多系统命令,比如yum都要用到。所以我们要额外安装Python3,而且系统一般允许多个版本的python同时存在。
我们先来查看python安装位置,一般是位于/usr/bin/python目录下。
$ which python
>> /usr/bin/python
下面介绍安装Python3的方法:
-
安装依赖包(切记安装)
yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
在安装 Python 之前需要安装必要的开发工具和库。
当您运行第一个命令
yum -y groupinstall development tools
时,它会安装一组常用的开发工具,用于在 Linux 系统上构建软件。这些工具包括编译器、链接器和其他用于构建软件的实用程序。接下来的命令
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
安装 Python 所需的其他开发库。这些库提供了压缩和加密功能、数据库访问支持以及 GUI 工具包(如 Tkinter)等功能。通过在安装 Python 之前安装这些工具和库,您可以确保您的系统具备构建和运行 Python 程序所需的所有必要组件。
同时,补充个小知识点:在 yum 命令中,
-y
参数是指定在执行安装或卸载操作时不需要手动确认。如果没有使用-y
参数,则在安装或卸载软件包时,yum 会提示您确认操作,需要手动输入y
才能继续执行操作。使用
-y
参数可以使 yum 命令在执行操作时自动确认,避免了人工交互的过程,方便自动化脚本和批量操作。但是,使用-y
参数也需要注意,因为这样可能会导致不必要的安装或卸载,所以在使用时需要谨慎。 -
下载Python3安装包
大家可根据自己需求下载不同版本的Python3,我下载的是Python3.9.9wget https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tar.xz
-
新建python3存放目录
mkdir /usr/local/python3
-
安装Python3
解压压缩包,进入解压目录,指定安装目录,安装Python3。
tar -xvJf Python-3.9.9.tar.xz # 该命令将 Python 的源代码文件(压缩文件)解压缩到当前目录中。 cd Python-3.9.9 # 将当前工作目录更改为 Python 源代码所在的目录,以便在这个目录下执行后续的命令。 ./configure --prefix=/usr/local/python3 # 运行配置脚本,为 Python 的构建过程设置参数。--prefix 选项指定 Python 的安装目录,这里设置为 /usr/local/python3。这意味着 Python 将被安装到 /usr/local/python3 目录中。 yum install libffi-devel -y # 这个命令会安装 libffi-devel 开发包,该开发包是 Python 某些模块的依赖项。在安装 Python 的某些版本(如 Python 3.7 及以上版本)时,需要先安装此包。 make && make install # 这个命令会构建和安装 Python。make 命令编译源代码,并生成可执行文件。make install 命令将编译好的文件安装到指定的目录中(在这里是 /usr/local/python3)。这样,Python 就已经成功安装到了系统中。
在 Python 3.4 及以后的版本中,pip 被包含在了 Python 的安装包中,因此在安装 Python 3.4 及以后的版本时,pip 也会被一同安装。
如果您使用的是 Python 3.4 及以后的版本,那么在安装完成后,您可以通过在终端中输入
pip
命令来验证 pip 是否已经安装成功。对于早期版本的 Python(例如 Python 2.x 系列和 Python 3.3 及以前的版本),pip 并不会自动安装。您需要手动安装 pip。
yum -y install python-pip
或yum -y install python3-pip
-
创建软链接
ln -s /usr/local/python3/bin/python3 /usr/bin/python3 ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
在 Linux 系统中,通常使用
python
和pip
命令来分别执行 Python 解释器和 pip 包管理器。在您安装了多个版本的 Python 时,可能会出现需要切换 Python 版本的情况。此时,您可以使用软链接来指定默认版本。创建软链接的命令是
ln -s 源文件 目标文件
,其中-s
表示创建软链接。在这里,/usr/local/python3/bin/python3
是您要创建软链接的源文件,而/usr/bin/python3
是软链接的目标文件。这样,当您执行python3
命令时,实际上会调用/usr/local/python3/bin/python3
解释器。同样,
/usr/local/python3/bin/pip3
是源文件,/usr/bin/pip3
是目标文件,执行pip3
命令时,实际上会调用/usr/local/python3/bin/pip3
包管理器。通过创建软链接,您可以轻松地切换不同版本的 Python,并指定默认版本。但是,需要注意的是,软链接只是一个指向源文件的快捷方式,源文件被删除或移动时,软链接也将失效。
-
安装完成,输入python3测试
安装成功
第二步,配置go-cqhttp
go-cqhttp 是一个基于 go 语言开发的,轻量、原生跨平台、高效、可扩展的 QQ 机器人框架,支持多种协议和多个 QQ 用户同时连接,可轻松实现 QQ 消息收发、群消息管理、帐号管理、事件处理等功能。
以腾讯云轻量级服务器centos7为例,配置go-cqhttp的流程如下:
-
在github上下载最新的版本go-cqhttp,根据你的系统选择下载安装包,这里我们选择arm64 Linux
系统类型 可执行文件 压缩文件 Intel 版 Macos Not available go-cqhttp_darwin_amd64.tar.gz M1 版 Macos Not available go-cqhttp_darwin_arm64.tar.gz 32 位 Linux Not available go-cqhttp_linux_386.tar.gz 64 位 Linux Not available go-cqhttp_linux_amd64.tar.gz arm64 Linux Not available go-cqhttp_linux_arm64.tar.gz armv7 Linux Not available go-cqhttp_linux_armv7.tar.gz 32 位 Windows go-cqhttp_windows_386.exe go-cqhttp_windows_386.zip 64 位 Windows go-cqhttp_windows_amd64.exe go-cqhttp_windows_amd64.zip arm64 Windows go-cqhttp_windows_arm64.exe go-cqhttp_windows_arm64.zip armv7 Windows go-cqhttp_windows_armv7.exe go-cqhttp_windows_armv7.zip wget https://github.com/Mrs4s/go-cqhttp/releases/download/v1.0.0-rc4/go-cqhttp_linux_amd64.tar.gz
(一定要注意你的安装目录)
-
解压安装设置并登录机器人QQ
tar -xzvf go-cqhttp_linux_amd64.tar.gz
解压后cd到解压的目录里执行ssh命令
./go-cqhttp
,执行这个命令会在当前文件夹下生成几个文件。重点关注config.yml
文件,你需要在这个文件中设置QQ(和 QQ密码)# go-cqhttp 默认配置文件 account: # 账号相关uin: # QQ账号password: '' # 密码为空时使用扫码登录encrypt: false # 是否开启密码加密status: 0 # 在线状态 请参考 https://docs.go-cqhttp.org/guide/config.html#在线状态relogin: # 重连设置delay: 3 # 首次重连延迟, 单位秒interval: 3 # 重连间隔max-times: 0 # 最大重连次数, 0为无限制 ......
设置好后可以重启go-cqhttp。
-
重启后,第一次登录因为异地需要验证,可以选择扫码登录。
-
如果你的服务器和手机不在同一个局域网内,会提示网络环境复杂
解决办法:在本地电脑调试成功后,会在go-cqhttp所在的文件夹中生成session.token文件,将session.token文件传到云服务器中go-cqhttp所在的文件夹内即可
-
提示登录失败: 密码错误或账号被冻结
解决办法:在运行一次
go-cqhttp
后,可以发现其文件夹内会生成一个device.json文件,将device.josn中的protocol=5改为protocol=2即可
这里你可能会出现其他bug,可以访问其GitHub,查看issue,看看有无解决办法。如下:
https://github.com/Mrs4s/go-cqhttp/issues
-
-
由于我们想要其24小时运营,因此可以给它设置为后台运行,并进行进程守护
-
设置后台运行
nohup ./go-cqhttp
nohup ./go-cqhttp
是一个命令,它的作用是在后台运行 go-cqhttp。nohup
是 Linux 系统中一个命令,用于让命令在后台运行,并且忽略掉 Hangup 信号。Hangup 信号通常是在用户退出登录时发送给当前进程的,如果没有使用nohup
命令,当用户退出登录时,进程也会被关闭。./go-cqhttp
则是一个运行 go-cqhttp 的命令,其中./
表示在当前目录下执行,go-cqhttp
是 go-cqhttp 的可执行文件名。因此,nohup ./go-cqhttp
的作用是在后台运行 go-cqhttp,并且忽略掉 Hangup 信号,这样即使当前用户退出登录,进程也会继续在后台运行。需要注意的是,在使用
nohup
命令运行程序时,程序的输出信息将不再显示在终端上,而是保存在当前目录下的 nohup.out 文件中,您可以使用tail -f nohup.out
命令来实时查看输出信息。 -
进程守护:
pm2 start ./go-cqhttp --name="go-cqhttp" pm2 save pm2 startup
**
pm2
**是一个用于管理 Node.js 进程的工具,它可以帮助我们轻松地启动、停止、重启和监控 Node.js 进程。在这里,我们使用 **pm2
**来启动 go-cqhttp 进程,并将其命名为go-cqhttp
,方便我们后续管理进程。使用 **pm2
启动进程后,可以通过pm2 list
命令查看当前运行的进程列表,也可以通过pm2 stop
、pm2 restart
、pm2 delete
**命令来停止、重启、删除进程。
-
-
测试
接下来我们进行http通信测试,首先需要在
config.yml
配置http通信如果你是本地服务器,配置IP地址以及端口号以127.0.0.1:5700为例,运行go-cqhttp。
-
浏览器访问下面网址,测试使用机器人QQ发送消息给好友
http://127.0.0.1:5700/send_private_msg?user_id=接收消息的好友QQ号码&message=这里输入发送的信息内容
执行成功会返回一段响应数据
{"data":{"message_id":xxxx},"retcode":0,"status":"ok"}
说明发送成功了 -
给qq群发送消息测试,成功同样会返回上面一样的数据"status":"ok”
http://127.0.0.1:5700/send_group_msg?group_id=接收消息QQ群号&message=这里输入发送的信息内容
-
更多详情内容,请访问go-cqhttp相关文档:https://docs.go-cqhttp.org/
第三步,配置NoneBot
直接进入正题,根据以下步骤进行None Bot的配置:
-
下载安装机器人依赖
使用 pip 或 其他包管理工具 安装 nb-cli,nonebot2 会作为其依赖被一起安装
python3 -m pip install nb-cli
如果没有安装的话,可以执行下面这段命令安装nonebot2
python3 -m pip install nonebot2
-
安装cqhttp适配器
python3 -m pip install nonebot-adapter-cqhttp
nonebot 是一个基于 Python 的 QQ 机器人开发框架,它本身只提供了一些高级 API 和插件,方便开发者编写 QQ 机器人的功能。但是,与 QQ 服务器通信的底层协议实现是多种多样的,如 go-cqhttp、Mirai、CoolQ 等,这些协议实现之间的 API 不尽相同。因此,开发 QQ 机器人需要先选择一个合适的协议实现,然后再编写对应的适配器,以便将协议实现和 nonebot 框架连接起来,实现 QQ 机器人的功能。
适配器可以理解为是一个桥梁,它的作用是将底层协议实现和 nonebot 框架连接起来,使它们能够互相通信。在使用 nonebot 框架开发 QQ 机器人时,需要先根据所选的底层协议实现,选择相应的适配器,然后根据适配器提供的 API 编写 QQ 机器人的功能。
举个例子,如果您选择使用 go-cqhttp 作为底层协议实现,那么您需要安装 go-cqhttp,并选择 go-cqhttp 适配器。这个适配器将 go-cqhttp 和 nonebot 框架连接起来,使得您可以通过 nonebot 框架来编写 QQ 机器人的功能,并且 go-cqhttp 可以帮助您与 QQ 服务器通信。
因此,在使用 nonebot 框架开发 QQ 机器人时,需要根据所选的底层协议实现,选择相应的适配器,并将其与 nonebot 框架结合使用,以实现 QQ 机器人的功能。
-
修改go-cqhttp配置
修改配置
config.yml
文件,找到如下位置,修改地址及端口号,后面nonebot机器人安装要用到的...... # 反向WS设置- ws-reverse:# 反向WS Universal 地址# 注意 设置了此项地址后下面两项将会被忽略universal: ws://127.0.0.1:53245/cqhttp/ws# 反向WS API 地址api: ws://127.0.0.1:53245/cqhttp/api# 反向WS Event 地址event: ws://127.0.0.1:53245/cqhttp/event ......
-
新建nonebot qq机器人项目
如果你已经按照推荐方式安装了
nb-cli
,使用它创建一个空项目:nb create
根据引导进行项目配置,完成后会在当前目录下创建一个项目目录,项目目录内包含
bot.py
。如果未安装
nb-cli
,使用你最熟悉的编辑器或 IDE,创建一个名为bot.py
的文件,内容如下(这里以 onebot.v11适配器为例):import nonebot from nonebot.adapters.onebot.v11 import Adapter as ONEBOT_V11Adapternonebot.init() app = nonebot.get_asgi()driver = nonebot.get_driver() driver.register_adapter(ONEBOT_V11Adapter)nonebot.load_builtin_plugins("echo") nonebot.load_from_toml("pyproject.toml")if __name__ == "__main__":nonebot.logger.warning("Always use `nb run` to start the bot instead of manually running!")nonebot.run(app="__mp_main__:app")
-
继续配置编辑
.env.prod
文件端口,这里的53245
就是上面设置的cqhttp端口一致,第四行是超级管理员qqDRIVER=~fastapi HOST=127.0.0.1 # 配置 NoneBot 监听的 IP/主机名 PORT=53245 # 配置 NoneBot 监听的端口 DEBUG=true # 开启 debug 模式 **请勿在生产环境开启** SUPERUSERS=["123456789", "987654321"] # 配置 NoneBot 超级用户 NICKNAME=["awesome", "bot"] # 配置机器人的昵称 COMMAND_START='["/"]' # 配置命令起始字符
在命令行使用如下命令即可运行这个 NoneBot 实例:
# nb-cli nb run # 其他 python3 bot.py
运行后会产生类似如下日志:
09-14 21:02:00 [INFO] nonebot | Succeeded to import "nonebot.plugins.base" 09-14 21:02:00 [INFO] nonebot | Running NoneBot... 09-14 21:02:00 [INFO] uvicorn | Started server process [1234] 09-14 21:02:00 [INFO] uvicorn | Waiting for application startup. 09-14 21:02:00 [INFO] uvicorn | Application startup complete. 09-14 21:02:00 [INFO] uvicorn | Uvicorn running on http://127.0.0.1:53245 (Press CTRL+C to quit)
至此,所有的配置都over了
我们来看一下最终效果:
声明:本博客为基础学习性质,想要更加深入了解请自行研究官方文档
相关文章:

NoneBot2,基于Python的聊天机器人
NoneBot2,基于Python的聊天机器人第一步,配置python第二步,配置[go-cqhttp](https://github.com/Mrs4s/go-cqhttp)第三步,配置[NoneBot](https://61d3d9dbcadf413fd3238e89--nonebot2.netlify.app/)NoneBot2 是一个现代、跨平台、…...

java反射机制及其详解
反射反射机制反射调用优化有时候我们做项目的时候不免需要用到大量配置文件,就拿框架举例,通过这些外部文件配置,在不修改的源码的情况下,来控制文件,就要用到我们的反射来解决 假设有一个Cat对象 public class Cat …...

Leetcode—环形链表
前言:给定一个链表,判断是否为循环链表并找环形链表的入口点 首先我们需要知道什么是双向循环链表,具体如下图所示。 对于链表,我们如何去判断链表是循环链表呢?又寻找入环点呢?我们可以利用快慢指针的方法…...

蓝牙耳机哪个戴的最舒服?久戴不累的蓝牙耳机推荐
在喧嚣的时代中,快节奏和疲惫充斥着我们的生活,于是耳机成为了人们必不可少的东西,无论是闲暇时亦或是正处在工作时,都会将它戴上,出门在外戴耳机变成了常态,所以小编就整理了一期久戴不累的蓝牙耳机。 No…...
25k的Java开发常问的AQS问题有哪些?
前言:面试高频的AQS问题大多。本文将以实战面试角度出发,将面试官喜欢问的一些问题罗列出来。 文章目录 AQSAQS定义底层实现独占锁举例底层实现独占锁超时获取锁共享锁举例共享锁实现原理作者辟谣AQS AQS定义 AQS的全称是AbstractQueuedSynchronizer,也就是抽象队列同步器…...

Grafana 监控面板绘制流程
本篇作者:IoTDB 社区 -- 张洪胤本文以 IoTDB V1.0.1 版本为例本文档介绍了 Apache IoTDB 监控指标通过 Prometheus 的方式进行采集,并且使用 Grafana 的方式进行可视化。1监控指标的 Prometheus 格式说明对于 Metric Name 为 name, Tags 为 K1V1, ..., K…...
一句话设计模式5:责任链模式
责任链模式:步步为营。 文章目录 责任链模式:步步为营。前言一、责任链模式的作用二、如何实现责任链1 既然是责任链,那么就需要一个链路的承载体 ChainBody2 责任链中每一步都是一个抽象类,因为承载体仅仅是构造链路顺序,里面不放置任何具体业务逻辑:步骤抽象类3 具体步骤执行…...

保姆级使用PyTorch训练与评估自己的EVA网络教程
文章目录前言0. 环境搭建&快速开始1. 数据集制作1.1 标签文件制作1.2 数据集划分1.3 数据集信息文件制作2. 修改参数文件3. 训练4. 评估5. 其他教程前言 项目地址:https://github.com/Fafa-DL/Awesome-Backbones 操作教程:https://www.bilibili.co…...

Java--JMH--性能测试--测试软件运行效率/时间--StopWatch
写在前面: 很多时候想要测试代码运行时间,或者比较2个运行的效率。 最简单的方法就是Sytem.currentTimeMillis记录2开始和结束时间来算 但是Java 代码越执行越快,放在后面的方法会有优势,这个原因受留个眼,以后研究。大概有受类加…...

JavaScript Array(数组)对象
数组对象的作用是:使用单独的变量名来存储一系列的值。参数参数 size 是期望的数组元素个数。返回的数组,length 字段将被设为 size 的值。参数 element ...; elementn 是参数列表。当使用这些参数来调用构造函数 Array() 时,新创建的数组的元…...
干货 | 电容在电路35个基本常识
第1个电压源正负端接了一个电容,与电路并联,用于整流电路时,具有很好的滤波作用,当电压交变时,由于电容的充电作用,两端的电压不能突变,就保证了电压的平稳。当用于电池电源时,具有交…...

日读300篇文献的技巧
感觉自己看文章很慢,有时候也抓不住重点。 如果是英文文献的话,可能还要有点难度,毕竟英语渣渣还是需要有中文-》英文的转换过程。 最近在搞毕业论文的时候,发现了一个非常好玩的东西,大大提升了我看文章搞科研&#x…...

C++核心编程
一、内存分区模型概述:C程序在执行时,将内存划分为4个区域程序运行前:代码区:存放函数体的二进制代码,由操作系统管理①共享。共享的目的是对于频繁被执行的程序,在内存中只需有一份代码即可②只读。使其只…...

SpringMVC程序开发
目录 SpringMVC 1、MVC定义 2、MVC和SpringMVC之间的关系 学SpringMVC 1、Spring MVC的创建和连接 浏览器获取前端接口和后端程序连接功能实现 2、获取参数 2.1、传递单个参数/多个参数 2.2、传递对象 2.3、传递表单参数 2.4、后端参数重命名 2.5、RequestBody接收J…...
多版本并发控制MVCC
什么是MVCC? MVCC是一种并发控制方法,一般在数据库管理系统中,实现数据库的并发访问。 可以使用乐观锁和悲观锁来实现。 MVCC的作用? 可以在不加锁的情况下解决读写问题,同时还可以解决脏读,幻读&#…...

JavaScript Date(日期)对象
日期对象用于处理日期和时间。在线实例返回当日的日期和时间如何使用 Date() 方法获得当日的日期。getFullYear()使用 getFullYear() 获取年份。getTime()getTime() 返回从 1970 年 1 月 1 日至今的毫秒数。setFullYear()如何使用 setFullYear() 设置具体的日期。toUTCString()…...

【Python】AES加解密代码,文章还有加密串等你来解密,等你来挑战
🍦🍦写这篇AES文章也是有件趣事,有位小伙伴发了段密文,看看谁解密速度快,学过Python的小伙伴一下子就解开来了,内容也挺有趣的。 🍟🍟原来加解密也可以这么有趣,虽然看起…...
代码随想录【Day34】| 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果
1005. K 次取反后最大化的数组和 题目链接 题目描述: 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。&…...

Java性能调优杀手锏JMH
JMH简介 JMH(Java Microbenchmark Harness)由 OpenJDK/Oracle 里面那群开发了 Java编译器的大牛们所开发,是一个功能强大、灵活的工具,它可以用于检测和评估Java应用程序的性能,主要目的是测量Java应用程序的性能,尤其是在多线程…...

实现excle表上传生成echarts图
代码如下html <!--这是一个网上关于读取Excel最经典的代码--> <!DOCTYPE html> <html><head><meta charset"utf-8"><title>ECharts</title><!-- 引入 echarts.js --><!-- <script src"newjs/js/incubato…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...

UE5 音效系统
一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类,将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix,将上述三个类翻入其中,通过它管理每个音乐…...
raid存储技术
1. 存储技术概念 数据存储架构是对数据存储方式、存储设备及相关组件的组织和规划,涵盖存储系统的布局、数据存储策略等,它明确数据如何存储、管理与访问,为数据的安全、高效使用提供支撑。 由计算机中一组存储设备、控制部件和管理信息调度的…...

【Java多线程从青铜到王者】单例设计模式(八)
wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本,sleep也是可以指定时间的,也就是说时间一到就会解除阻塞,继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒),wait能被notify提前唤醒…...

初探用uniapp写微信小程序遇到的问题及解决(vue3+ts)
零、关于开发思路 (一)拿到工作任务,先理清楚需求 1.逻辑部分 不放过原型里说的每一句话,有疑惑的部分该问产品/测试/之前的开发就问 2.页面部分(含国际化) 整体看过需要开发页面的原型后,分类一下哪些组件/样式可以复用,直接提取出来使用 (时间充分的前提下,不…...