LLM大模型实践18-评估(上)——存在一个简单的正确答案
准备数据
products_and_category = {
"电脑和笔记本": [
"TechPro 超极本",
"BlueWave 游戏本",
"PowerLite Convertible",
"TechPro Desktop",
"BlueWave Chromebook"
],
"智能手机和配件": [
"SmartX ProPhone"
],
"专业手机": [
"MobiTech PowerCase",
"SmartX MiniPhone",
"MobiTech Wireless Charger",
"SmartX EarBuds"
],
"电视和家庭影院系统": [
"CineView 4K TV",
"SoundMax Home Theater",
"CineView 8K TV",
"SoundMax Soundbar",
"CineView OLED TV"
],
"游戏机和配件": [
"GameSphere X",
"ProGamer Controller",
"GameSphere Y",
"ProGamer Racing Wheel",
"GameSphere VR Headset"
],
"音频设备": [
"AudioPhonic Noise-Canceling Headphones",
"WaveSound Bluetooth Speaker",
"AudioPhonic True Wireless Earbuds",
"WaveSound Soundbar",
"AudioPhonic Turntable"
],
"相机和摄像机": [
"FotoSnap DSLR Camera",
"ActionCam 4K",
"FotoSnap Mirrorless Camera",
"ZoomMaster Camcorder",
"FotoSnap Instant Camera"
]
}
找出相关产品和类别名称
def find_category_and_product_v1(user_input,products_and_category):
"""
从用户输入中获取到产品和类别
参数:
user_input:用户的查询
products_and_category:产品类型和对应产品的字典
"""
delimiter = "####"
system_message = f"""
您将提供客户服务查询。\
客户服务查询将用{delimiter}字符分隔。
输出一个 Python 列表,列表中的每个对象都是 Json 对象,每个对象的格式如下:
'类别': <电脑和笔记本, 智能手机和配件, 电视和家庭影院系统, \
游戏机和配件, 音频设备, 相机和摄像机中的一个>,
以及
'名称': <必须在下面允许的产品中找到的产品列表>
其中类别和产品必须在客户服务查询中找到。
如果提到了一个产品,它必须与下面允许的产品列表中的正确类别关联。
如果没有找到产品或类别,输出一个空列表。
根据产品名称和产品类别与客户服务查询的相关性,列出所有相关的产品。
不要从产品的名称中假设任何特性或属性,如相对质量或价格。
允许的产品以 JSON 格式提供。
每个项目的键代表类别。
每个项目的值是该类别中的产品列表。
允许的产品:{products_and_category}
"""
few_shot_user_1 = """我想要最贵的电脑。"""
few_shot_assistant_1 = """
[{'category': '电脑和笔记本', \
'products': ['TechPro 超极本', 'BlueWave 游戏本', 'PowerLite Convertible', 'TechPro
Desktop', 'BlueWave Chromebook']}]
"""
messages = [
{'role':'system', 'content': system_message},
{'role':'user', 'content': f"{delimiter}{few_shot_user_1}{delimiter}"},
{'role':'assistant', 'content': few_shot_assistant_1 },
{'role':'user', 'content': f"{delimiter}{user_input}{delimiter}"},
]
return get_completion_temperature_v3(messages)
在一些查询上进行评估
# 第一个评估的查询
customer_msg_0 = f"""如果我预算有限,我可以买哪款电视?"""
products_by_category_0 = find_category_and_product_v1(customer_msg_0,
products_and_category)
print(products_by_category_0)
customer_msg_1 = f"""我需要一个智能手机的充电器"""
products_by_category_1 = find_category_and_product_v1(customer_msg_1,
products_and_category)
print(products_by_category_1)
customer_msg_2 = f"""
你们有哪些电脑?"""
products_by_category_2 = find_category_and_product_v1(customer_msg_2,
products_and_category)
products_by_category_2
输出回答正确,但格式有误。
customer_msg_3 = f"""
告诉我关于smartx pro手机和fotosnap相机的信息,那款DSLR的。
我预算有限,你们有哪些性价比高的电视推荐?"""
products_by_category_3 = find_category_and_product_v1(customer_msg_3,
products_and_category)
print(products_by_category_3)
更难的测试用例
customer_msg_4 = f"""
告诉我关于CineView电视的信息,那款8K的,还有Gamesphere游戏机,X款的。
我预算有限,你们有哪些电脑?"""
products_by_category_4 = find_category_and_product_v1(customer_msg_4,products_and_category)
print(products_by_category_4)
修改指令以处理难测试用例
def find_category_and_product_v2(user_input,products_and_category):
"""
从用户输入中获取到产品和类别
添加:不要输出任何不符合 JSON 格式的额外文本。
添加了第二个示例(用于 few-shot 提示),用户询问最便宜的计算机。
在这两个 few-shot 示例中,显示的响应只是 JSON 格式的完整产品列表。
参数:
user_input:用户的查询
products_and_category:产品类型和对应产品的字典
"""
delimiter = "####"
system_message = f"""
您将提供客户服务查询。\
客户服务查询将用{delimiter}字符分隔。
输出一个 Python列表,列表中的每个对象都是 JSON 对象,每个对象的格式如下:
'类别': <电脑和笔记本, 智能手机和配件, 电视和家庭影院系统, \
游戏机和配件, 音频设备, 相机和摄像机中的一个>,
以及
'名称': <必须在下面允许的产品中找到的产品列表>
不要输出任何不是 JSON 格式的额外文本。
输出请求的 JSON 后,不要写任何解释性的文本。
其中类别和产品必须在客户服务查询中找到。
如果提到了一个产品,它必须与下面允许的产品列表中的正确类别关联。
如果没有找到产品或类别,输出一个空列表。
根据产品名称和产品类别与客户服务查询的相关性,列出所有相关的产品。
不要从产品的名称中假设任何特性或属性,如相对质量或价格。
允许的产品以 JSON 格式提供。
每个项目的键代表类别。
每个项目的值是该类别中的产品列表。
允许的产品:{products_and_category}
"""
few_shot_user_1 = """我想要最贵的电脑。你推荐哪款?"""
few_shot_assistant_1 = """
[{'category': '电脑和笔记本', \
'products': ['TechPro 超极本', 'BlueWave 游戏本', 'PowerLite Convertible', 'TechPro
Desktop', 'BlueWave Chromebook']}]
"""
few_shot_user_2 = """我想要最便宜的电脑。你推荐哪款?"""
few_shot_assistant_2 = """
[{'category': '电脑和笔记本', \
'products': ['TechPro 超极本', 'BlueWave 游戏本', 'PowerLite Convertible', 'TechPro
Desktop', 'BlueWave Chromebook']}]
"""
messages = [
{'role':'system', 'content': system_message},
{'role':'user', 'content': f"{delimiter}{few_shot_user_1}{delimiter}"},
{'role':'assistant', 'content': few_shot_assistant_1 },
{'role':'user', 'content': f"{delimiter}{few_shot_user_2}{delimiter}"},
{'role':'assistant', 'content': few_shot_assistant_2 },
{'role':'user', 'content': f"{delimiter}{user_input}{delimiter}"},
]
return get_completion_temperature_v3(messages)
在难测试用例上评估修改后的指令
customer_msg_3 = f"""
告诉我关于smartx pro手机和fotosnap相机的信息,那款DSLR的。
另外,你们有哪些电视?"""
products_by_category_3 = find_category_and_product_v2(customer_msg_3,
products_and_category)
print(products_by_category_3)
回归测试:验证模型在以前的测试用例上仍然有效
customer_msg_0 = f"""如果我预算有限,我可以买哪款电视?"""
products_by_category_0 = find_category_and_product_v2(customer_msg_0,
products_and_category)
print(products_by_category_0)
收集开发集进行自动化测试
msg_ideal_pairs_set = [
{"customer_msg":"""如果我预算有限,我可以买哪种电视?""",
"ideal_answer":{
"电视和家庭影院系统":set(
["CineView 4K TV", "SoundMax Home Theater", "CineView 8K TV", "SoundMax Soundbar", "CineView OLED TV"]
)}
},
{"customer_msg":"""我需要一个智能手机的充电器""",
"ideal_answer":{
"智能手机和配件":set(
["MobiTech PowerCase", "MobiTech Wireless Charger", "SmartX EarBuds"]
)}
},
{"customer_msg":f"""你有什么样的电脑""",
"ideal_answer":{
"电脑和笔记本":set(
["TechPro 超极本", "BlueWave 游戏本", "PowerLite Convertible", "TechPro Desktop", "BlueWave Chromebook"
])
}
},
{"customer_msg":f"""告诉我关于smartx pro手机和fotosnap相机的信息,那款DSLR的。\
另外,你们有哪些电视?""",
"ideal_answer":{
"智能手机和配件":set(
["SmartX ProPhone"]),
"相机和摄像机":set(
["FotoSnap DSLR Camera"]),
"电视和家庭影院系统":set(
["CineView 4K TV", "SoundMax Home Theater","CineView 8K TV",
"SoundMax Soundbar", "CineView OLED TV"])
}
},
{"customer_msg":"""告诉我关于CineView电视,那款8K电视、\
Gamesphere游戏机和X游戏机的信息。我的预算有限,你们有哪些电脑?""",
"ideal_answer":{
"电视和家庭影院系统":set(
["CineView 8K TV"]),
"游戏机和配件":set(
["GameSphere X"]),
"电脑和笔记本":set(
["TechPro Ultrabook", "BlueWave Gaming Laptop", "PowerLite Convertible", "TechPro Desktop", "BlueWave Chromebook"])
}
},
{"customer_msg":f"""你们有哪些智能手机""",
"ideal_answer":{
"智能手机和配件":set(
["SmartX ProPhone", "MobiTech PowerCase", "SmartX MiniPhone", "MobiTech Wireless Charger", "SmartX EarBuds"
])
}
},
{"customer_msg":f"""我预算有限。你能向我推荐一些智能手机吗?""",
"ideal_answer":{
"智能手机和配件":set(
["SmartX EarBuds", "SmartX MiniPhone", "MobiTech PowerCase", "SmartX ProPhone", "MobiTech Wireless Charger"]
)}
},
{"customer_msg":f"""有哪些游戏机适合我喜欢赛车游戏的朋友?""",
"ideal_answer":{
"游戏机和配件":set([
"GameSphere X",
"ProGamer Controller",
"GameSphere Y",
"ProGamer Racing Wheel",
"GameSphere VR Headset"
])}
},
{"customer_msg":f"""送给我摄像师朋友什么礼物合适?""",
"ideal_answer": {
"相机和摄像机":set([
"FotoSnap DSLR Camera", "ActionCam 4K", "FotoSnap Mirrorless Camera", "ZoomMaster Camcorder", "FotoSnap Instant Camera"
])}
},
{"customer_msg":f"""我想要一台热水浴缸时光机""",
"ideal_answer": []
}
]
通过与理想答案比较来评估测试用例
import json
def eval_response_with_ideal(response,
ideal,
debug=False):
"""
评估回复是否与理想答案匹配
参数:
response: 回复的内容
ideal: 理想的答案
debug: 是否打印调试信息
"""
if debug:
print("回复:")
print(response)
# json.loads() 只能解析双引号,因此此处将单引号替换为双引号
json_like_str = response.replace("'",'"')
# 解析为一系列的字典
l_of_d = json.loads(json_like_str)
# 当响应为空,即没有找到任何商品时
if l_of_d == [] and ideal == []:
return 1
# 另外一种异常情况是,标准答案数量与回复答案数量不匹配
elif l_of_d == [] or ideal == []:
return 0
# 统计正确答案数量
correct = 0
if debug:
print("l_of_d is")
print(l_of_d)
# 对每一个问答对
for d in l_of_d:
# 获取产品和目录
cat = d.get('category')
prod_l = d.get('products')
# 有获取到产品和目录
if cat and prod_l:
# convert list to set for comparison
prod_set = set(prod_l)
# get ideal set of products
ideal_cat = ideal.get(cat)
if ideal_cat:
prod_set_ideal = set(ideal.get(cat))
else:
if debug:
print(f"没有在标准答案中找到目录 {cat}")
print(f"标准答案: {ideal}")
continue
if debug:
print("产品集合:\n",prod_set)
print()
print("标准答案的产品集合:\n",prod_set_ideal)
# 查找到的产品集合和标准的产品集合一致
if prod_set == prod_set_ideal:
if debug:
print("正确")
correct +=1
else:
print("错误")
print(f"产品集合: {prod_set}")
print(f"标准的产品集合: {prod_set_ideal}")
if prod_set <= prod_set_ideal:
print("回答是标准答案的一个子集")
elif prod_set >= prod_set_ideal:
print("回答是标准答案的一个超集")
# 计算正确答案数
pc_correct = correct / len(l_of_d)
return pc_correct
我们使用上述测试用例中的一个进行测试,首先看一下标准回答:
print(f'用户提问: {msg_ideal_pairs_set[7]["customer_msg"]}')
print(f'标准答案: {msg_ideal_pairs_set[7]["ideal_answer"]}')
再对比 LLM 回答,并使用验证函数进行评分
response = find_category_and_product_v2(msg_ideal_pairs_set[7]["customer_msg"],
products_and_category)
print(f'回答: {response}')
eval_response_with_ideal(response,
msg_ideal_pairs_set[7]["ideal_answer"])
在所有测试用例上运行评估,并计算正确的用例比例
import time
score_accum = 0
for i, pair in enumerate(msg_ideal_pairs_set):
# time.sleep(20)
print(f"示例 {i}")
customer_msg = pair['customer_msg']
ideal = pair['ideal_answer']
# print("Customer message",customer_msg)
# print("ideal:",ideal)
response = find_category_and_product_v2(customer_msg,
products_and_category)
# print("products_by_category",products_by_category)
score = eval_response_with_ideal(response,ideal,debug=False)
print(f"{i}: {score}")
score_accum += score
n_examples = len(msg_ideal_pairs_set)
fraction_correct = score_accum / n_examples
print(f"正确比例为 {n_examples}: {fraction_correct}")
相关文章:
LLM大模型实践18-评估(上)——存在一个简单的正确答案
准备数据 products_and_category { "电脑和笔记本": [ "TechPro 超极本", "BlueWave 游戏本", "PowerLite Convertible", "TechPro Desktop", "BlueWave Chromebook" ], "智能手机和配件": [ "…...
力扣-数组-704 二分查找
解析 经典二分,重点在于左闭右闭区间约定好后,根据定义更新边界 代码 class Solution { public:int search(vector<int>& nums, int target) {int left 0, right nums.size() - 1;while(left < right){int mid (left right) / 2;if(…...
K8S 快速实战
K8S 核心架构原理: 我们已经知道了 K8S 的核心功能:自动化运维管理多个容器化程序。那么 K8S 怎么做到的呢?这里,我们从宏观架构上来学习 K8S 的设计思想。首先看下图: K8S 是属于主从设备模型(Master-Slave 架构),即有 Master 节点负责核心的调度、管理和运维,Slave…...
C#集合操作优化:高效实现批量添加与删除
在C#中,对集合进行批量操作(如批量添加或删除元素)通常涉及使用集合类型提供的方法和特性,以及可能的循环或LINQ查询来高效地处理大量数据。以下是一些常见的方法和技巧: 批量添加元素 使用集合的AddRange方法&#x…...
Unity|小游戏复刻|见缝插针1(C#)
准备 创建Scenes场景,Scripts脚本,Prefabs预制体文件夹 修改背景颜色 选中Main Camera 找到背景 选择颜色,一种白中透黄的颜色 创建小球 将文件夹里的Circle拖入层级里 选中Circle,位置为左右居中,偏上&…...
【Redis】持久化机制
目录 前言: RDB 触发RDB持久化方法有俩种: 1.手动触发 2.自动触发 RDB文件的优缺点: AOF: AOF工作机制:编辑 编辑重写机制: 前言: Redis是一个内存数据库,将数据存储在内存中&…...
AWScurl笔记
摘要 AWScurl是一款专为与AWS服务交互设计的命令行工具,它模拟了curl的功能并添加了AWS签名版本4的支持。这一特性使得用户能够安全有效地执行带有AWS签名的请求,极大地提升了与AWS服务交互时的安全性和有效性。 GitHub - okigan/awscurl: curl-like acc…...
5_高并发内存池项目内存优化、页号与Span映射关系使用基数树优化及测试性能与malloc、free比较
申请/释放 内存大小申请方式释放方式x≤256KB(32页)向ThreadCache申请释放给ThreadCache32页<x≤128页向PageCache申请释放给PageCachex>128页向堆申请释放给堆 一、解决大于256KB的大块内存申请 (一)申请大于256…...
深入剖析C++中cin的原理、应用与进阶实践
一、引言 1.1 研究背景与目的 在 C 编程领域,cin 作为标准输入流对象,扮演着举足轻重的角色,是实现程序与用户交互的关键工具。它允许程序从标准输入设备(通常是键盘)读取数据,并将其存储到程序变量中&am…...
我国的金融组织体系,还有各大金融机构的分类,金融行业的组织
中国金融组织体系介绍 中国金融组织体系是一个复杂而多层次的系统,涵盖了各种类型的金融机构和监管机构。以下是关于中国金融组织体系的详细介绍,包括一行三会等金融监管机构,各大金融机构的分类、涉及的银行以及行业组织。 (一…...
十三、数据的输入与输出(4)
数据的输出 write.table()函数 write.table()函数的基本格式如下所示。 write.table(x, file "", quote TRUE, sep "", eol "\n", na "NA", dec ".", row.names TRUE, c…...
基于Java Web的网上房屋租售网站
内容摘要 本毕业设计题目为《基于Java Web的网上房屋租售网站》,是在信息化时代下充分利用互联网对传统房屋租售方式进行创新,在互联网上进行房屋租售突破了传统方式的局限性。对于房屋租售的当事人都提供了极大的便利。本稳针对了实际用户需求…...
【MySQL — 数据库增删改查操作】深入解析MySQL的create insert 操作
数据库CRUD操作 1 CRUD简介 CURD是对数据库中的记录进行基本的增删改查操作: 2. Create 新增 语法 INSERT [INTO] table_name[(column [,column] ...)] VALUES(value_list)[,(value_list)] ... # value 后面的列的个数和类型,要和表结构匹配…...
问题修复记录:Linux docker 部署 dify,无法调用宿主机本地服务
使用docker compose启动Dify后,在其中配置本地xinfrence中的模型,报错: get xinference model extra parameter failed, url: http://127.0.0.1:9997/v1/models/bge-m3, error: HTTPConnectionPool(host=‘127.0.0.1’, port=9997): Max retries exceeded with url: /v1/mo…...
【橘子ES】Kibana的分析能力Analytics简易分析
一、kibana是啥,能干嘛 我们经常会用es来实现一些关于检索,关于分析的业务。但是es本身并没有UI,我们只能通过调用api来完成一些能力。而kibana就是他的一个外置UI,你完全可以这么理解。 当我们进入kibana的主页的时候你可以看到这样的布局。…...
如何理解json和json字符串
如何理解网络传输的json到底是什么数据 网络传输的其实是对应的 json字符串 对象,前端接收后会将 json字符串 解析成 json对象 json类型字符串和json对象或者json数组是不一样的,json类型字符串本质是字符串,而json对象是json类型的数据&…...
项目上线后,是否会进行复盘?
是的,定期复盘在软件测试项目里极为关键,我会按以下步骤开展复盘工作: 复盘周期确定 短期项目:针对周期较短(如 1 - 2 个月)的项目,会在项目结束后的一周内进行复盘,确保大家对项目…...
基于 WEB 开发的手机销售管理系统设计与实现内容
标题:基于 WEB 开发的手机销售管理系统设计与实现 内容:1.摘要 摘要:随着智能手机的普及和电子商务的快速发展,手机销售行业面临着越来越多的挑战和机遇。为了提高销售效率和管理水平,本文设计并实现了一个基于 WEB 的手机销售管理系统。该系…...
SpringBoot篇 单元测试 理论篇
1.单元测试概念介绍 简单来说,单元测试是对软件中的最小可测试单元进行检查和验证。在 Java 中,单元测试的最小单元是类。Spring Boot 提供了 spring-boot-starter-test 依赖,包含了 JUnit、Mockito、Hamcrest 等常用的测试框架1。࿰…...
并发编程 - 线程同步(一)
经过前面对线程的尝试使用,我们对线程的了解又进一步加深了。今天我们继续来深入学习线程的新知识 —— 线程同步。 01、什么是线程同步 线程同步是指在多线程环境下,确保多个线程在同时使用共享资源时不会发生冲突或数据不一致问题的技术,保…...
Nginx 性能优化技巧与实践(二)
五、性能优化之负载均衡篇 5.1 负载均衡算法介绍 Nginx 作为一款强大的 Web 服务器和反向代理服务器,其负载均衡功能是提升 Web 服务性能和可靠性的关键。Nginx 支持多种负载均衡算法,每种算法都有其独特的原理和特点,适用于不同的业务场景…...
解密AIGC三大核心算法:GAN、Transformer、Diffusion Models原理与应用
在当今数字化时代,人工智能生成内容(AIGC)技术正以前所未有的速度改变着我们的生活和工作方式。从创意无限的文本生成,到栩栩如生的图像创作,再到动听的音乐旋律,AIGC的魔力无处不在。而这一切的背后&#…...
qml Dialog详解
1、概述 Dialog是QML(Qt Modeling Language)中用于显示对话框的组件,它提供了一个模态窗口,通常用于与用户进行重要交互,如确认操作、输入信息或显示警告等。Dialog组件具有灵活的布局和样式选项,可以轻松…...
GL C++显示相机YUV视频数据使用帧缓冲FBO后期处理,实现滤镜功能。
一.前言: GitHub地址:GitHub - wangyongyao1989/WyFFmpeg: 音视频相关基础实现 系列文章: 1. OpenGL Texture C 预览Camera视频; 2. OpenGL Texture C Camera Filter滤镜; 3. OpenGL 自定义SurfaceView Texture C预览Camera视…...
一文了解树与森林基础
文章目录 树和森林1树的存储结构1.1双亲表示法1.2孩子表示法1.3孩子兄弟表示法 2树、森林与二叉树的转换2.1森林与二叉树的转换2.2 树与二叉树的转换 3树和森林的遍历3.1树的遍历3.2森林的遍历3.3 树和森林的遍历与二叉树的遍历关系 4树的应用——并查集4.1并查集及其相关操作4…...
在Docker 容器中安装 Oracle 19c
在 Docker 容器中安装 Oracle 19c 是可行的,但它相较于其他数据库(如 MySQL、PostgreSQL 等)会复杂一些,因为 Oracle 数据库有一些特定的要求,如操作系统和库的依赖,以及许可证问题。 不过,Ora…...
Java TCP协议(2)
TCP可靠传输 五. 流量控制 用来控制发送方的窗口大小,通过接收方返回来的ACK进行反制。 接收方把自己能够处理的数据量主动告诉发送方,从而让发送方动态调整窗口大小。 如果窗口大小为0表示没有空间去接收数据了,主机A就不发数据了…...
JS基础-操作数组(7)
一.增删改查 1.改 重新赋值 2.增 arr.puch() 末尾追加 arr.unshift() 开头追加 a)案例:数组筛选 3.删除 arr.pop() 删除最后一个元素 arr.shift() 删除第一个元素 splice() 删除指定元素...
(长期更新)《零基础入门 ArcGIS(ArcScene) 》实验七----城市三维建模与分析(超超超详细!!!)
城市三维建模与分析 三维城市模型已经成为一种非常普遍的地理空间数据资源,成为城市的必需品,对城市能化管理至关重要。语义信息丰富的三维城市模型可以有效实现不同领域数据与IS相信息的高层次集成及互操作,从而在城市规划、环境模拟、应急响应和辅助决策等众多领域公挥作用、…...
大数据技术笔记
大数据技术概述 本章初步介绍大数据领域技术涉及的一些基础理论,如分布式、存储、网络等知识。 分布式理论 大数据意味数据量大,那么存储和计算数据的节点就不大可能只有一个,而是采用分而治之的思想在多个节点中存储和计算,提…...
【JAVA 基础 第(20)课】JDBC JAVA 连接 MySql 数据库
pom.xml 导入 MySql jar 包 <!-- 导入Mysql数据库链接jar包 --> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.30</version> </dependency> 数据库驱动、连接封装成…...
如何将使用unsloth微调的模型部署到ollama?
目录 一、将模型保存为gguf格式 二、下载llama.cpp 三、生成 llama-quantize 可执行文件 四、使用llama-quantize 五、训练模型 六、将模型部署到ollama 一、将模型保存为gguf格式 在你的训练代码 trainer.train() 之后添加: model.save_pretrained_gguf(&q…...
Go语言中的值类型和引用类型特点
一、值类型 值类型的数据直接包含值,当它们被赋值给一个新的变量或者作为参数传递给函数时,实际上是创建了原值的一个副本。这意味着对新变量的修改不会影响原始变量的值。 Go中的值类型包括: 基础类型:int,float64…...
grafana新增email告警
选择一个面板 比如cpu 新增一个临界点表达式 input选A 就是A的值达到某个临界点 触发告警 我这边IS ABOVE0.15就是cpu大于0.15%就触发报警,这个值怎么填看指标的值显示 这里要设置一下报警条件 这边随便配置下 配置标签和通知,选择你的邮件 看下告警…...
基于Spring Security 6的OAuth2 系列之六 - 授权服务器--自定义授权页面
之所以想写这一系列,是因为之前工作过程中使用Spring Security OAuth2搭建了网关和授权服务器,但当时基于spring-boot 2.3.x,其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0,结果一看Spring Security也升级…...
MyBatis-Plus的插件
一、分页插件 1.自带的 启动类 在启动类里配置分页相关内容 package com.qcby;import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inne…...
基于Redis实现短信验证码登录
目录 1 基于Session实现短信验证码登录 2 配置登录拦截器 3 配置完拦截器还需将自定义拦截器添加到SpringMVC的拦截器列表中 才能生效 4 Session集群共享问题 5 基于Redis实现短信验证码登录 6 Hash 结构与 String 结构类型的比较 7 Redis替代Session需要考虑的问题 8 …...
HarmonyOS Next构建工具 lycium 原理介绍
HarmonyOS Next构建工具 lycium 原理介绍 背景介绍 HarmonyOS Next中很多系统API是以C接口提供,如果要使用C接口,必须要使用NAPI在ArkTS与C间交互,这种场景在使用DevEco-Studio中集成的交叉编译工具,以及cmake构建工具就完全够用…...
蓝桥杯例题一
不管遇到多大的困难,我们都要坚持下去。每一次挫折都是我们成长的机会,每一次失败都是我们前进的动力。路漫漫其修远兮,吾将上下而求索。只有不断努力奋斗,才能追逐到自己的梦想。不要害怕失败,害怕的是不敢去尝试。只…...
MySQL可直接使用的查询表的列信息
文章目录 背景实现方案模板SQL如何查询列如何转大写如何获取字符位置如何拼接字段 SQL适用场景 背景 最近产品找来,想让帮忙出下表的信息,字段驼峰展示,每张表信息show create table全部展示,再逐个粘贴,有点太耗费时…...
输入网址到网页显示,发生了什么--讲述
输入www.baidu.com作为网址, 孤身的人-HTTP 浏览器要做的第一步就是 解析URL,根据url里面的资源路径,确认服务器资源和路径,生成http请求消息,包括请求消息(请求行 消息头 请求体) 举例&am…...
npm install 报错:Command failed: git checkout 2.2.0-c
[TOC](npm install 报错:Command failed: git checkout 2.2.0-c) npm install 报错:Command failed: git checkout 2.2.0-c export NODE_HOME/usr/local/node-v14.14.0-linux-x64 npm config set registry https://registry.npmmirror.com 使用如上环…...
[Day 15]54.螺旋矩阵(简单易懂 有画图)
今天我们来看这道螺旋矩阵,和昨天发的题很类似。没有技巧,全是循环。小白也能懂~ 力扣54.螺旋矩阵 题目描述: 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: …...
react antd点击table单元格文字下载指定的excel路径
在使用 Ant Design (antd) 的 Table 组件时,如果想点击表格单元格中的文字来触发下载指定路径的 Excel 文件,可以通过以下步骤实现: 1. 确保有一个可供下载的 Excel 文件:需要有一个服务器端点或者一个可以直接访问的 URL…...
什么是数据结构
数据结构 如何有效的存储数据。 数据存储方式 物理结构又称存储结构 在内存中存储状态,数据可以选择集中存放(顺序存储结构),也可以选择分散存放(链式存储结构)。 逻辑结构 数据之间的逻辑关系&#…...
把 PVE 下的机械硬盘(非SSD系统盘)分配给虚拟机使用
PVE 挂在硬盘 参考 Ubuntu 24.04 LTS 空闲硬盘挂载到 文件管理器的 other locations。 在 PVE shell 中根据上面教程挂在硬盘 新建分享目录 参考 Proxmox VE(PVE)添加硬盘做存储 虚拟机新增硬盘 虚拟机 关机,按下图新增硬盘 新增硬盘…...
HTML5 Web Worker 的使用与实践
引言 在现代 Web 开发中,用户体验是至关重要的。如果页面在执行复杂计算或处理大量数据时变得卡顿或无响应,用户很可能会流失。HTML5 引入了 Web Worker,它允许我们在后台运行 JavaScript 代码,从而避免阻塞主线程,保…...
把网站程序数据上传到服务器的方法和注意事项
将网站程序数据上传到服务器是一个常见的网站开发和部署流程。主要涉及到FTP上传、FileZilla、rsync(在Linux下)、或其他相关的文件同步工具。以下是一般步骤和方法: 使用FTP: 1. 选择FTP客户端软件: - 常见的FTP客户端包括FileZilla(开源)、…...
YOLOv5训练自己的数据及rknn部署
YOLOv5训练自己的数据及rknn部署 一、下载源码二、准备自己的数据集2.1 标注图像2.2 数据集结构 三、配置YOLOv5训练3.1 修改配置文件3.2 模型选择 四、训练五、测试六、部署6.1 pt转onnx6.2 onnx转rknn 七、常见错误7.1 训练过程中的错误7.1.1 cuda: out of memory7.1.2 train…...
李沐vscode配置+github管理+FFmpeg视频搬运+百度API添加翻译字幕
终端输入nvidia-smi查看cuda版本 我的是12.5,在网上没有找到12.5的torch,就安装12.1的。torch,torchvision,torchaudio版本以及python版本要对应 参考:https://blog.csdn.net/FengHanI/article/details/135116114 创…...