smolagents学习笔记系列(五)Tools-in-depth-guide
这篇文章锁定官网教程中的 Tools-in-depth-guide 章节,主要介绍了如何详细构造自己的Tools,在之前的博文 smolagents学习笔记系列(二)Agents - Guided tour 中我初步介绍了下如何将一个函数或一个类声明成 smolagents 的工具,那么这篇文章将对这部分内容进一步深入。
- 官网链接:https://huggingface.co/docs/smolagents/v1.9.2/en/tutorials/tools
What is a tool, and how to build one?
Tool是Agent系统在LLM中使用最广泛的东西,根据smolagents框架的要求,想要使用tool必须对以下内容进行定义:
- name:工具名,最好是能直接表述工具功能的名字;
- description:功能描述,对这个工具功能的详细表述;
- input types and descriptions:输入类型与描述;
- output type:输出类型;
官网提供了一个将类包装成工具的示例,如果是想通过类的方式定义工具的话需要继承smolagents Tool
,并且要重写 forward
这个函数,目前可以粗略地认为这个函数就是最终执行的函数。该工具的作用是找到 HuggingFace 仓库中以 downloads
为分类指定 task
功能的模型,返回最受欢迎的模型信息。
但是直接运行看不到任何结果,需要在后面加一句输出内容,这里我让这个工具对象执行了 text-classification
:
from smolagents import Toolclass HFModelDOwnloadsTool(Tool):name = "model_download_counter"description = """This is a tool that returns the most downloaded model of a given task on the Hugging Face Hub.It returns the name of the checkpoint."""inputs = {"task": {"type": "string","description": "the task category (such as text-classification, depth-estimation, etc)",}}output_type = "string"def forward(self, task:str):from huggingface_hub import list_modelsmodel = next(iter(list_models(filter=task, sort="downloads", direction=-1)))return model.idmodel_download_tool = HFModelDOwnloadsTool()print(model_download_tool.forward("text-classification"))
运行:
$ (LLM) ~/Desktop/LLM $ python demo.py
cross-encoder/ms-marco-MiniLM-L-6-v2
如果你在运行时报错下面的错:
huggingface_hub.errors.HfHubHTTPError: 401 Client Error: Unauthorized for url: https://huggingface.co/api/models?filter=text-classification&sort=downloads&direction=-1
需要在bash中设置环境变量:
$ export HF_TOKEN="你之前的token码"
Import a Space as a tool
smolagents提供了另一种方式允许你通过 Tool.from_space
这个函数从HuggingFace Hub中直接导入开源的工具,官网的示例用了 FLUX.1-dev
作为示例,如果你直接运行仍然是无法运行的,这个时候需要通过你的 HuggingFace 账户登录 FLUX.1-dev
的仓库:https://huggingface.co/black-forest-labs/FLUX.1-dev
【注意】:如果你没有登录账号,下图中红框是不会出现的。
登录之后会有这么一个页面,点击 Agree and access repository
按钮授权使用。
对示例代码进行修改以显示生成的图像,并且需要将 FLUX.1-schnell
改为 FLUX.1-dev
:
from smolagents import Tool
from PIL import Image
import numpy as np
import cv2image_generation_tool = Tool.from_space("black-forest-labs/FLUX.1-dev",name="image_generator",description="Generate an image from a prompt",api_name="/infer"
)response = image_generation_tool("A sunny beach")
print(response)image = Image.open(response)
image = np.array(image)
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) # PIL 是 RGB,OpenCV 需要 BGRcv2.imshow("Generated Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
上面代码中的 response
返回的是你 本地计算机的一个路径,比如我的是下面内容从 /private/var
开始的一长串内容。
运行:
$ python demo
Loaded as API: https://black-forest-labs-flux-1-dev.hf.space ✔
/private/var/folders/zk/vtzyjvmx7f16zrstmmd3t27w0000gn/T/gradio/9026dfa2d826f1dd7a9c5089e051f2bf775bd3e972b298c9d1801a57f2b68981/image.webp
【注意】:这个可能需要多运行几次,因为涉及到远程GPU资源,如果申请GPU超时了就会返回错误,但是如果你运行次数太多则会报下面的错误提示你GPU使用次数超限,需要你升级到Pro账户。
gradio_client.exceptions.AppError: The upstream Gradio app has raised an exception: You have exceeded your free GPU quota (75s requested vs. 73s left). <a style="white-space: nowrap;text-underline-offset: 2px;color: var(--body-text-color)" href="https://huggingface.co/settings/billing/subscription">Subscribe to Pro</a> to get 5x more daily usage quota.
【Tips】:如果你想直接使用这个图像生成工具,可以在浏览器中直接访问网站:https://black-forest-labs-flux-1-dev.hf.space,这个是 FLUX.1
提供的一个网页,在输入你的prompt后点击 run
即可根据你的提示词生成图像,这个过程是逐步得到的,因此刚开始你会看到一篇马赛克,稍微等待一小会儿即可得到最终结果。
之后官网提到了可以将这个工具作为Agent的输入,先让 Qwen2.5-Coder
对提示词进行改进,然后再调用 FLUX.1
生成图像。
from smolagents import CodeAgent, HfApiModel
from smolagents import Toolimage_generation_tool = Tool.from_space("black-forest-labs/FLUX.1-schnell",name="image_generator",description="Generate an image from a prompt"
)model = HfApiModel("Qwen/Qwen2.5-Coder-32B-Instruct")
agent = CodeAgent(tools=[image_generation_tool], model=model)response = agent.run("Improve this prompt, then generate an image of it.", additional_args={'user_prompt': 'A rabbit wearing a space suit'}
)print(response)
【注】因为我当天的GPU资源用完了,后续恢复后我会补上相应的内容。
Use LangChain tools
在使用 LangChain
这个工具之前需要安装一些依赖:
$ pip install -U langchain-community
$ pip install langchain google-search-results -q
但是很遗憾 ,官网的demo仍然无法直接运行,因为你需要申请一个 Serp API Key
:
- 登录Serp官网:https://serpapi.com/users/welcome;
- 绑定/注册账号、在邮箱中验证、绑定中国区手机号并获得验证码;
- 白嫖一个免费的API;
在获得 Serp API Key 之后需要在环境变量中注册这个Key值:
$ export SERPAPI_API_KEY="你的Serp API Key"
对示例代码进行稍微修改,添加model对象后运行代码:
from smolagents import Tool, CodeAgent, HfApiModel
from langchain.agents import load_toolsmodel = HfApiModel()search_tool = Tool.from_langchain(load_tools(["serpapi"])[0])agent = CodeAgent(tools=[search_tool], model=model)agent.run("How many more blocks (also denoted as layers) are in BERT base encoder compared to the encoder from the architecture proposed in Attention is All You Need?")
运行结果,和之前文章中提到的一样,在默认状态下调用的是 Qwen/Qwen2.5-Coder-32B-Instruct
模型:
Manage your agent’s toolbox
官方提供了一个基于 HuggingFace Hub 的工具箱管理管理功能,但这个功能需要在你已经将工具上传到 Hub 的 Spaces 前提下使用,对于大多数人而言不需要将自己写的工具上传上去,因此这里就放上示例,我也没有运行测试:
from smolagents import HfApiModel
from smolagents import CodeAgent, Tool, load_toolmodel_download_tool = load_tool("{your_username}/hf-model-downloads",trust_remote_code=True
)model = HfApiModel("Qwen/Qwen2.5-Coder-32B-Instruct")agent = CodeAgent(tools=[], model=model, add_base_tools=True)
agent.tools[model_download_tool.name] = model_download_tool
如果你对大家开源的 Tools 感兴趣,可以进入 Spaces 网页: https://huggingface.co/spaces 去查看有哪些可用的工具,网页向下拉就可以看到上面我们使用的 FLUX.1-dev
这个工具,不同的工具有不同的授权和使用方式,需要自己去阅读感兴趣的工具如何使用。
官方demo中其实还介绍了使用 slug
和 mcp
的方式调用工具,但这两种方式我没有用过,如果后续需要的话我会进行补充。
相关文章:
smolagents学习笔记系列(五)Tools-in-depth-guide
这篇文章锁定官网教程中的 Tools-in-depth-guide 章节,主要介绍了如何详细构造自己的Tools,在之前的博文 smolagents学习笔记系列(二)Agents - Guided tour 中我初步介绍了下如何将一个函数或一个类声明成 smolagents 的工具&…...
使用 Apache Dubbo 释放 DeepSeek R1 的全部潜力
作者:陈子康,Apache Dubbo Contributor 2025年1月20日,国产大模型公司深度求索(DeepSeek)正式发布了大语言模型 DeepSeek-R1,并同步开源其模型权重。通过大规模强化学习技术,DeepSeek-R1 显著提…...
【星云 Orbit-F4 开发板】03b. 按键玩法二:独立按键双击双击触发
【星云 Orbit-F4 开发板】03b. 按键玩法二:独立按键双击触发 引言 在嵌入式系统中,按键是常用的输入设备。通过检测按键的状态变化,可以实现多种功能,例如单击、双击、长按等。本文将详细介绍如何使用STM32F103的GPIO引脚检测独…...
ave-form.vue 组件中 如何将产品名称发送给后端 ?
如何将产品名称发送给后端。 在这段代码中,产品名称(productName)的处理和发送主要发生在 save() 方法中。让我逐步分析: 产品ID的选择: <w-form-selectv-model"form.productId"label"涉及产品&q…...
2025年电气工程与智能系统国际学术会议(IC2EIS 2025)
重要信息 官网:www.ic2eis.org(点击了解参会投稿等) 时间:2025年3月14-16日 地点:中国河南省郑州市 简介 2025年电气工程与智能系统国际学术会议(IC2EIS 2025)将于2025年3月14-16日在中国郑州举行。会议旨在为电气…...
Android TextView 使用.9图片文字不展示
参考文章 Android的TextView设置padding无效。 实现如上图效果的时候,选择框使用了.9,代码如下: LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(0,...
【PyTorch][chapter-33][transformer-5] MHA MQA GQA, KV-Cache
主要翻译外网: 解剖Deep Seek 系列,详细见参考部分。 目录: Multi-Head Attention (MHA) KV-Cache KV-Cache 公式 Multi-Query Attention(MQA) Grouped-Query Attention(GQA) Multi-Head Latent Attention …...
MS SQL 2008 技术内幕:T-SQL 语言基础
《MS SQL 2008 技术内幕:T-SQL 语言基础》是一部全面介绍 Microsoft SQL Server 2008 中 T-SQL(Transact-SQL)语言的书籍。T-SQL 是 SQL Server 的扩展版本,增加了编程功能和数据库管理功能,使得开发者和数据库管理员能…...
seacmsv9注入管理员账号密码+orderby+limit
seacmsv9注入管理员账号密码 安装海洋CMS(seacms) 将upload文件夹里的文件全部上传至网页服务器后,执行以下操作: 请运行http://域名/install/index.php进行程序安装 SQL语句尝试注入 http://127.0.0.1/upload/comment/api/index.php?g…...
智能生活综合平台需求规格说明书
一、引言 1.1 编写目的 本需求规格说明书旨在明确智能生活综合平台的功能、性能、用户界面等方面的需求,为平台的开发、测试和部署提供详细的指导,确保平台能够满足用户在社交、购物、教育、医疗、政务等多个领域的智能生活需求,提升用户的…...
应用的负载均衡
概述 负载均衡(Load Balancing) 调度后方的多台机器,以统一的接口对外提供服务,承担此职责的技术组件被称为“负载均衡”。 负载均衡器将传入的请求分发到应用服务器和数据库等计算资源。负载均衡是计算机网络中一种用于优化资源利…...
TDengine 中的数据类型
简介 数据类型是数据库产品中一个非常重要的概念,它决定着能处理不同类型数据的范围。 TDengine 支持了所有通用的数据类型,同时还支持了一些特色数据类型,如地理坐标,未来准备支持 decimal 数据类型,方便银行等场景中…...
网络运维学习笔记(DeepSeek优化版)005网工初级(HCIA-Datacom与CCNA-EI)链路层发现协议与VLAN技术
文章目录 一、链路层发现协议1.1 思科CDP协议1.2 华为LLDP协议 二、VLAN(Virtual Local Area Network,虚拟局域网)技术详解2.1 基本概念2.2 技术特性2.3 接口工作原理2.3.1 Access模式2.3.2 Trunk模式 2.4 厂商配置对比思科配置华为配置 2.5 …...
51 哈希表的实现
目录 一、哈希介绍 (一)直接定值法 (二)哈希冲突 (三)负载因子 (四)将关键字转为整数 (五)哈希函数 1、除法散列法 / 除留余数法 2、乘法散列法&#…...
使用Python实现机器学习小案例:构建房价预测模型
背景 在日常生活中,很多人都希望了解某个区域的房价,特别是在购房时。如果我们能够根据一些已知的房屋特征(如面积、卧室数量、距离市中心的距离等)来预测房价,那将大大提高购房决策的效率。在本文中,我们将通过Python实现一个简单的房价预测模型,并帮助你理解机器学习…...
Layui页面粘贴的方法
一: 在Controller层 注解的注意点 : 1.先写一个大的 RequestMapping () () 里面的的是 : (这些你写的那个实体类的方法,在这取名是什么 比如 用户类 user) 2. 在Controller层 需要写一个 Controller的注解 3. Autowired 就相当与 之前new的 全局的serviceImpl 的方法 4.在…...
js:根据后端返回的数组取出每一个数组的keyword字段然后拼接成一个逗号分隔的字符串
问: 现在有一个el-select, 后端接口返回数据为keyword:xxx,referenceNum:1,tagId:132sf32fasdfaf组成的数组, 现在select是多选, 但是但我选择多个下拉框选项后,后端需要前端返回的数据tagIds字段需要时一个字符串…...
ES 客户端 API 二次封装思想
ES 客户端 API 二次封装思想 网页端 : ip5601 索引创建 数据新增 数据查询 数据删除 因为json串会出现在代码中,为了让用户更容易去添加数据所以去封装它。 思想:为了让json串变得更加容易添加,封装最主要是为了简化正文的…...
《Kettle保姆级教学-日志写入数据库(通过修改kettle.properties一劳永逸)》
目录 一、配置转换属性二、修改kettle.properties文件 一、配置转换属性 双击空白处,进入配置页面 执行转换 可以看到日志已写入数据库 二、修改kettle.properties文件 第一步的方式只能对某个转换/作业生效,怎么做到所有的转换/作业都可以生效呢&…...
SQL注入练习
目录 一、如何绕过 information schema 字段过滤注入 二、如何绕过 order by 语句过滤注入 三、seacmsv9 实现报错注入数据 一、如何绕过 information schema 字段过滤注入 1、使用其他系统表,不同数据库有各自的系统表,可替代information_schema。 …...
【大模型】量化、剪枝、蒸馏
大模型的量化、剪枝和蒸馏是三种常用的模型优化技术,旨在减少模型的复杂性,降低计算资源消耗,并加速推理过程。下面是每种技术的详细介绍: 1. 量化(Quantization) 量化是将浮点数表示的模型参数ÿ…...
Feign 类型转换问题解析:如何正确处理 `ResponseEntity<byte[]>` 返回值
在微服务架构中,Feign 是一种常见的用于服务间调用的客户端,它允许我们通过声明式接口来调用远程服务。使用 Feign 时,我们通常通过接口方法的返回类型来接收服务的响应体。然而,某些情况下,我们会遇到 Feign 无法正确解析响应体类型的问题,尤其是当服务返回一个如 Respo…...
最快安装ESP8266 ESP832 开发板·Arduino环境的方法
直接去官网找这种exe然后直接运行就好他会自动识别安装 请点击此处下载插件安装文件(提取码:49c1) 去官网可以找到最新的,但是这种方法有个弊端你更新不了,所以还要添加链接到首选项 http://arduino.esp8266.com/st…...
最新版本SpringAI接入DeepSeek大模型,并集成Mybatis
当时集成这个环境依赖冲突,搞了好久,分享一下依赖配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instan…...
【工具变量】公司企业数字领导力(2004-2023年)
数据简介:企业数字化领导力是指在数字经济时代,领导者通过战略性地使用数字资产、引领组织变革,使企业在数字化环境中获得持续成功的能力。对于上市公司而言,这种领导力尤为重要,因为它直接关系到企业的战略方向、市场…...
LeetCode 动态规划 环形子数组的最大和
环形子数组的最大和 给定一个长度为 n 的环形整数数组 nums ,返回 nums 的非空 子数组 的最大可能和 。 环形数组 意味着数组的末端将会与开头相连呈环状。形式上, nums[i] 的下一个元素是 nums[(i 1) % n] , nums[i] 的前一个元素是 nums[(…...
毕业项目推荐:基于yolov8/yolo11的野生菌菇检测识别系统(python+卷积神经网络)
文章目录 概要一、整体资源介绍技术要点功能展示:功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出(xls格式)功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…...
基于开源鸿蒙(OpenHarmony)的【智能家居综合应用】系统
基于开源鸿蒙OpenHarmony的智能家居综合应用系统 1. 智能安防与门禁系统1) 系统概述2) 系统架构3)关键功能实现4)安全策略5)总结 2.环境智能调节系统1)场景描述2)技术实现3)总结 3.健康管理与睡眠监测1&…...
C语言【指针篇】(三)
C语言【指针篇】(三) 前言正文1. 数组名的理解2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序5. 二级指针6. 指针数组7. 指针数组模拟二维数组 总结 前言 本文主要基于前面对指针的掌握,进一步学习:数组名的理解、使用指针…...
【嵌入式Linux应用开发基础】网络编程(4):UDP协议
目录 一、UDP 协议概述 二、UDP 协议特点 三、UDP协议的字段格式 四、UDP协议的数据传输过程 五、嵌入式UDP编程核心API 六、UDP 在嵌入式 Linux 中的编程实现 6.1 UDP 服务器代码示例 6.2 UDP 客户端代码示例 七、UDP 协议的应用场景 八、UDP 协议的优缺点 8.1 优点…...
PS渐变工具
渐变工具:(颜色条 起点到终点 为 前景色到背景色) 渐变shift:垂直、水平、45度 渐变工具–》仿色:让渐变变得细腻。仿色值高,过渡柔和,仿色值低,过渡粗糙 渐变工具–》渐变编辑器&am…...
win11系统通过WSL安装ubuntu
Linux 和Windows windows 属于单用户、多任务 Linux属于多用户多任务。Linux一切皆文件 https://blog.csdn.net/ddafei/article/details/142798010 一、启用WSL功能 首先,你需要在Windows上启用WSL功能。 打开“控制面板”。点击“程序” > “启用或关闭Windo…...
Sqoop从入门到使用
安装和配置 修改文件配置:修改文件名将(sqoop-env-template.sh改为sqoop-env.sh) 编辑sqoop-env.sh内部文本,修改调用文件位置 将sqoop-env.sh,配置到全局变量中,方便调用。 查看正常运用 第一类࿱…...
深度学习奠基作 AlexNet 论文阅读笔记(2025.2.25)
文章目录 训练数据集数据预处理神经网络模型模型训练正则化技术模型性能其他补充 训练数据集 模型主要使用2010年和2012年的 ImageNet 大规模视觉识别挑战赛(ILSVRC)提供的 ImageNet 的子集进行训练,这些子集包含120万张图像。最终ÿ…...
解决python项目无法安装openai模块的问题
问题描述: pip install openai Fatal error in launcher: Unable to create process using ‘“e:\private\github\navigation_site.venv\Scripts\python.exe” “E:\private\github\my_project\navigation_site.venv\Scripts\pip.exe” install OpenAI’: ??? 这…...
项目实践 之 pdf简历的解析和填充(若依+vue3)
文章目录 环境背景最终效果前端讲解左侧模块解析右侧上传模块解析前端步骤 后端讲解代码前端 环境背景 若依前后端分离框架 vue最后边附有代码哦 最终效果 前端讲解 左侧模块解析 1、左侧表单使用el-form 注意: 1、prop出现的字段,需要保证是该类所…...
RAGS评测后的数据 如何利用influxdb和grafan 进行数据汇总查看
RAGS(通常指相关性、准确性、语法、流畅性)评测后的数据能借助 InfluxDB 存储,再利用 Grafana 进行可视化展示,实现从四个维度查看数据,并详细呈现每个问题对应的这四个指标情况。以下是详细步骤: 1. 环境准备 InfluxDB 安装与配置 依据自身操作系统,从 InfluxDB 官网下…...
本地部署阿里的万象2.1文生视频(Wan2.1-T2V-1.3B)模型
文章目录 (零)在线体验(一)本地部署(1.1)克隆仓库(1.2)安装依赖(1.2.1)安装 flash-attention(1.2.2)重新安装依赖(1.2.3&a…...
centos设置 sh脚本开机自启动
1. start.sh脚本 #!/bin/bash# 依赖docker,等待xxx容器完全启动 sleep 60curl -X POST "localhost:8381/models?urlmymodel.mar&model_namemymodel&batch_size1&max_batch_delay10&initial_workers1"sudo /usr/local/nginx/sbin/nginx …...
一文读懂什么是K8s Admission Controller
#作者:曹付江 文章目录 1、什么是 Admission Controllers?2、如何创建 Admission Controllers?3、Admission 控制器的最佳实践 K8s 中的操作与安全标准执行机制: 1、什么是 Admission Controllers? Admission contro…...
江协科技/江科大-51单片机入门教程——P[1-3] 单片机及开发板介绍
前言:本节主要的任务是了解一下 51 单片机和所用的普中51开发板。 目录 一、单片机介绍 二、单片机的应用领域 三、STC89C52单片机 四、命名规则 五、单片机内部拆解 六、单片机内部结构图 七、单片机管脚图 八、单片机最小系统 九、开发板介绍 十、开发…...
一周学会Flask3 Python Web开发-Jinja2模板继承和include标签使用
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 不管是开发网站还是后台管理系统,我们页面里多多少少有公共的模块。比如博客网站,就有公共的头部&…...
4.3MISC流量分析练习-wireshark-https
流量分析题目的例题 1.了解wireshark的过滤方式 2.了解tls跟ssl协议基本还原 3.了解xor基本变换方式,获取flag 附件是一个流量包,打开之后有各种流量,但是分析无果,然后丢到kali中使用binwalk进行分析,发现有一个r…...
wifi5和wifi6,WiFi 2.4G、5G,五类网线和六类网线,4G和5G的区别
wifi5和wifi6的区别 是Wi-Fi 5和Wi-Fi 6的选择与路由器密切相关。路由器是创建和管理无线网络的设备,它决定了网络的类型和性能。具体来说: 路由器的标准支持:路由器可以支持不同的Wi-Fi标准,如Wi-Fi 5(802.11ac)和Wi-Fi 6(802.11ax)。支持Wi-Fi 6的路由器能够提供更高…...
【二分查找】P9698 [GDCPC2023] Path Planning|普及
本文涉及的基础知识点 本博文代码打包下载 C二分查找 [GDCPC2023] Path Planning 题面翻译 【题目描述】 有一个 n n n 行 m m m 列的网格。网格里的每个格子都写着一个整数,其中第 i i i 行第 j j j 列的格子里写着整数 a i , j a_{i, j} ai,j。从 0…...
请介绍一下Java的面向对象特性
Java是一种纯面向对象的语言,它支持类、继承、封装和多态等面向对象的基本概念。以下是Java面向对象特性的详细介绍: 一、封装 封装是面向对象编程的核心思想之一,它指的是将对象的属性和方法结合在一起,并隐藏对象的内部实现细…...
使用ZFile打造属于自己的私有云系统结合内网穿透实现安全远程访问
文章目录 前言1.关于ZFile2.本地部署ZFile3.ZFile本地访问测试4.ZFile的配置5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定ZFile公网地址 前言 在数字化的今天,我们每个人都是信息的小能手。无论是职场高手、摄影达人还是学习狂人,每天都在创造…...
Spring 源码硬核解析系列专题(八):Spring Security 的认证与授权源码解析
在前几期中,我们从 Spring 核心到 Spring Boot,再到 Spring Cloud,逐步探索了 Spring 生态的底层原理。作为企业级应用的关键组件,Spring Security 提供了全面的安全解决方案,包括认证(Authentication)和授权(Authorization)。本篇将深入 Spring Security 的源码,剖析…...
Windows 图形显示驱动开发-WDDM 3.2-自动显示切换(七)
亮度数据 为了确保用户不会因为切换而注意到亮度变化,GPU0 和 GPU1 显示的所有亮度属性都必须相同。 此要求可确保在切换 GPU0 至 GPU1 之前的任何亮度级别,在切换至 GPU1 后都可以支持。 为此,GPU0 和 GPU1 的驱动程序必须: 使…...
Android ObjectBox数据库使用与集成指南
ObjectBox其核心特点ObjectBox与 SQLite 和 Realm 的对比Android集成ObjectBox创建ObjectBox实体对象创建ObjectBox操作管理类OBManager在Application初始化ObjectBox插入或更新数据查询数据统计数据分页数据查询删除数据总结今天分享一套Android另一个数据库ObjectBox。Object…...