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

DeepSearch复现篇:QwQ-32B ToolCall功能初探,以Agentic RAG为例

DeepSearch复现篇:QwQ-32B ToolCall功能初探,以Agentic RAG为例

作者:CyPaul Space

原文地址:https://zhuanlan.zhihu.com/p/30289363967

全文阅读约3分钟~

背景

今天看到

论文:Search-R1: Training LLMs to Reason and Leverage Search Engines with Reinforcement Learning

论文地址:https://arxiv.org/pdf/2503.09516

这篇论文,发现其想法和前段时间自己的一个小实验不谋而合;

当然,特别指出,我只是测试基座模型(具体是QwQ-32B)的工具调用能力(不涉及微调训练),人家还专门针对工具调用和反思推理进行了再训练(具体是强化学习,但是我个人觉得SFT应该也会有差不多的效果); 所以也把自己的简单实践分享出来,具体如下:

引言

阿里最近新发布的

QwQ-32B:https://qwenlm.github.io/zh/blog/qwq-32b/

在推理模型中集成了与 Agent 相关的能力,使其能够在使用工具的同时进行批判性思考,并根据环境反馈调整推理过程。

特别地,我们可以在模型文件夹中的added_tokens.json文档中看到特别增加的工具调用和工具响应的特殊token

{"</think>": 151668,"</tool_call>": 151658,"</tool_response>": 151666,"<think>": 151667,"<tool_call>": 151657,"<tool_response>": 151665
}

所以,我们可以以Agentic RAG作为一个具体的场景,测试其端到端的检索增强的生成式问答的效果;

作为对比,我们特别强调下Agentic RAG和当前普遍的RAG实践的范式区别:

  • RAG:当前的绝大部分RAG项目实践本质上还是工作流:即"通过预定义的代码路径编排 LLM 和工具的系统"(人为事先定义的“写死的”工作流),由许多相互关联但脆弱的工作流组成:路由、分块、重排序、查询解释、查询扩展、源上下文化和搜索工程等;关于RAG的更多介绍可以参看本人之前的一个分享:高阶RAG(检索增强的生成式问答)雕花实践万字分享

评价:人为编排的工作流corner case太多,跟自动驾驶场景类似,你没办法一般化所有的场景,最后往往发现编排“工作流”上限有限;特别是在需要多轮检索等复杂场景下,效果更受限;

  • Agentic RAG:端到端,做减法,我只需要给模型配一个联网检索的api工具(本次案例中,具体是基于tavily的联网api,有一定的免费额度),剩下的全部由模型自己搞定(Less structure, more intelligence, Less is More),包括但不限于:

    • 意图理解(联网判断)

    • 问题改写或拆分

    • 接口调用

    • 流程编排(含是否多步检索,如何多步检索)

    • 引用溯源

    • ...

一个补充:Anthropic 关于Agent 模型定义: 类似于Deep Search,Agent必须在内部执行目标任务:它们"动态指导自己的过程和工具使用,控制完成任务的方式"

整体流程框架图

图片

整体逻辑:

  1. 将用户问题适配到提示词模版 -> 调用模型generate新tokens,若生成中未出现<tool_call>...</tool_call>, 则直接输出返回

  2. 若出现<tool_call>...</tool_call>, 则表明模型推理过程中发起了一个工具调用申请,解析它,执行web_search,并将接口调用结果返回包装成<tool_response>...</tool_response>的格式续拼在大模型上下文中,再次请求大模型generate

  3. 重复执行,直到没有更多<tool_call>(或达到请求上限)或出现<|im_end|>

整体逻辑其实和Search-R1论文中的流程(如下所示)基本一致:

图片

Search-R1推理流程.png

关键点说明

1、提示词框架模版:

user_question = input('请输入你的问题:')
max_search_times = 5prompt = f"""You are Qwen QwQ, a curious AI built for retrival augmented generation.
You are at 2025 and current date is {date.today()}.
You have access to the web_search tool to retrival relevant information to help answer user questions.
You can use web_search tool up to {max_search_times} times to answer a user's question, but try to be efficient and use as few as possible.
Below are some guidelines:
- Use web_search for general internet queries, like finding current events or factual information.
- Always provide a final answer in a clear and concise manner, with citations for any information obtained from the internet.
- If you think you need to use a tool, format your response as a tool call with the `action` and `action_input` within <tool_call>...</tool_call>, like this:\n<tool_call>\n{{ "action": "web_search", "action_input": {{ "query": "current stock price of Tesla" }} }}\n</tool_call>.
- After using a tool, continue your reasoning based on the web_search result in <tool_response>...</tool_response>.
- Remember that if you need multi-turn web_search to find relevant information, make sure you conduct all search tasks before you provide a final answer.
---
User Question:{user_question}"""

2、新增(自定义的)停止符

当检测到模型在自回归生成过程中触发了<tool_call>(.?)</tool_call>\s$格式(正则匹配)后,停止生成:

from transformers import (AutoModelForCausalLM,AutoTokenizer,StoppingCriteria,StoppingCriteriaList
)tool_call_regex = r"<tool_call>(.*?)</tool_call>\s*$"
end_regex = r"<\|im_end\|\>\s*$"# 同时监测: <tool_call> 或 <|im_end|>
class RegexStoppingCriteria(StoppingCriteria):def __init__(self, tokenizer, patterns):self.patterns = patternsself.tokenizer = tokenizerdef __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs) -> bool:decoded_text = self.tokenizer.decode(input_ids[0])for pattern in self.patterns:if re.search(pattern, decoded_text, re.DOTALL):return Truereturn Falsestopping_criteria = StoppingCriteriaList([RegexStoppingCriteria(tokenizer,patterns=[tool_call_regex, end_regex])
])model.generate(..., topping_criteria=stopping_criteria) # 加上停止符

3、网络搜索api

本次实践中设置的搜索api为tavily,有一定的免费额度,方便实验和复现

详细实践

其他废话不多说了,详细实践代码详见:

DeepSearch复现篇:QwQ-32B ToolCall功能初探,以Agentic RAG为例.ipynb

原文地址:https://github.com/Paul33333/experimental-notebook/blob/main/DeepSearch复现篇:QwQ_32B_ToolCall功能初探,以Agentic_RAG为例.ipynb

测试案例效果

我们下面直接看测试的效果;

测试问题:请给我详细介绍下阿里最近开源发布的QwQ-32B模型的相关信息

生成结果截图展示如下(声明:截图不完整,完整生成详见notebook):

图片

生成结果之思考+工具调用部分.png

评价:可见,由推理模型自身完成了意图理解(是否联网搜索)&搜索关键词生成(问题改写或拆分,搜什么),而且其还特别思考了潜在的多轮搜索的场景(如果第一次搜索结果不够详细,可能需要进一步细化搜索词...),最后其成功触发了一次web search,然后我们响应其接口调用,并在接口返回结果包在<tool_response>...</tool_response>格式后续拼在上下文中

图片

生成结果之最后报告部分1.png

图片

生成结果之最后报告部分2.png

评价:本案例中,推理模型完成了一次的搜索接口调用,并根据搜索结果的反馈,直接生成了最后的输出报告(并未真正触发多轮搜索),一方面可能是案例的问题,但也有可能是基座模型不足以触发多轮搜索(本人也尝试了其他测试问题,均未真正触发多轮搜索),所以针对基座推理模型做智能体,确实还是有必要像Search-R1一样去做后训练进行针对性微调!

后续展望

基于:

  1. 具备使用工具的推理基座模型 (模型)

  2. 精心设计的合成(或人工整理)的再训练数据 (数据)

  3. 细分场景下的再次强化训练或SFT (算法)

    1. 只需要再掩码掉工具接口响应返回的输出tokens对应的损失(loss)即可

的再训练(针对智能体的SFT或强化学习)路线,应该会成为2025年智能体开发和部署的主流路线;

即post training用于智能体的训练,然后直接将模型用于端到端的推理(模型即产品)

再训练预先考虑了各种行动和边缘情况,使部署变得更简单,不再需要人为编排设计工作流。

【推荐阅读】:model-is-the-product: https://vintagedata.org/blog/posts/model-is-the-product

相关文章:

DeepSearch复现篇:QwQ-32B ToolCall功能初探,以Agentic RAG为例

DeepSearch复现篇&#xff1a;QwQ-32B ToolCall功能初探&#xff0c;以Agentic RAG为例 作者&#xff1a;CyPaul Space 原文地址&#xff1a;https://zhuanlan.zhihu.com/p/30289363967 全文阅读约3分钟~ 背景 今天看到 论文&#xff1a;Search-R1: Training LLMs to Reason …...

项目实战-贪吃蛇大作战【补档】

这其实算是一个补档&#xff0c;因为这个项目是我在大一完成的&#xff0c;但是当时没有存档的习惯&#xff0c;今天翻以前代码的时候翻到了&#xff0c;于是乎补个档&#xff0c;以此怀念和志同道合的网友一起做项目的日子 ₍ᐢ ›̥̥̥ ༝ ‹̥̥̥ ᐢ₎♡ 这里面我主要负责…...

power bi获取局域网内共享文件

power bi获取局域网内共享文件 需求&#xff1a; 数据源并不一定都是在本地&#xff0c;有可能在云端&#xff0c;也有可能在其他服务器&#xff0c;今天分享如果数据源在另外一台服务器&#xff0c;如何获取数据源的方法。 明确需求&#xff1a;需要通过PowerBI获取局域网中的…...

100%提升信号完整性:阻抗匹配在高速SerDes中的实践与影响

一个高速信号SerDes通道&#xff08;例如PCIe、112G/224G-PAM4&#xff09;包含了这些片段&#xff1a; 传输线连通孔&#xff08;PTH or B/B via&#xff09;连接器高速Cable锡球&#xff08;Ball and Bump&#xff09; 我们会希望所有的片段都可以有一致的阻抗&#xff0c;…...

第六章:Tool and LLM Integration

Chapter 6: Tool and LLM Integration 从执行流到工具集成&#xff1a;如何让AI“调用真实世界的技能”&#xff1f; 在上一章的执行流框架中&#xff0c;我们已经能让多个代理协作完成复杂任务。但你是否想过&#xff1a;如果用户要求“查询实时天气”或“打开网页搜索”&…...

prompt提示词编写技巧

为什么学习prompt编写 目的&#xff1a;通过prompt的编写&#xff0c;提升LLM输出相关性、准确性和多样性&#xff0c;并对模型输出的格式进行限制&#xff0c;满足我们的业务需求。 学过提示词工程的人&#xff1a;像“专业导演”&#xff0c;通过精准指令控制 AI 输出&#…...

Nginx配置SSL详解

文章目录 Nginx配置SSL详解1. SSL/TLS 基础知识2. 准备工作3. 获取SSL证书4. Nginx SSL配置步骤4.1 基础配置4.2 配置说明 5. 常见配置示例5.1 双向认证配置5.2 多域名SSL配置 6. 安全优化建议7. 故障排查总结参考资源下载验证的完整实例 Nginx配置SSL详解 1. SSL/TLS 基础知识…...

网络安全之红队LLM的大模型自动化越狱

前言 大型语言模型&#xff08;LLMs&#xff09;已成为现代机器学习的重要支柱&#xff0c;广泛应用于各个领域。通过对大规模数据的训练&#xff0c;这些模型掌握了多样化的技能&#xff0c;展现出强大的生成与理解能力。然而&#xff0c;由于训练数据中难以完全剔除有毒内容&…...

【技术笔记】通过Cadence Allegro创建一个PCB封装(以SOT23为例)

【技术笔记】通过Cadence Allegro创建一个PCB封装&#xff08;以SOT23为例&#xff09; 一、焊盘创建二、PCB封装设计三、丝印位号及标识添加 更多内容见专栏&#xff1a;【硬件设计遇到了不少问题】、【Cadence从原理图到PCB设计】 一、焊盘创建 首先要找到元器件的相关手册&…...

新环境注册为Jupyter 内核

1. ​​确认环境是否已注册为内核​​ 在终端运行以下命令&#xff0c;查看所有已注册的内核&#xff1a; jupyter kernelspec list2. ​​为自定义环境注册内核 步骤 1&#xff1a;激活目标虚拟环境 conda activate your_env_name # 替换为你的环境名步骤 2&#xff1a;安装…...

[Spring] Seata详解

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…...

使用JDK的数据校验和Spring的自定义注解校验前端传递参数的两种方法

第一种&#xff1a;JDK的数据校验注解 PostMapping("/test")public String test(QueryParam param, RequestHeader(value "App_key") String App_key,RequestHeader(value "App_secret") String App_secret) throws IOException {param.setApp…...

JS错误处理的新方案 (不使用try-catch)

错误处理一直是JavaScript开发者需要认真对待的问题&#xff0c;传统的try-catch语法虽然简单直观&#xff0c;但在异步代码中使用时存在诸多限制。 try-catch的局限性 传统try-catch模式在现代JavaScript开发中面临的问题&#xff1a; 1. 异步错误捕获的缺陷 try-catch无法…...

前端实现商品放大镜效果(Vue3完整实现)

前端实现商品放大镜效果&#xff08;Vue3完整实现&#xff09; 前言 在电商类项目中&#xff0c;商品图片的细节展示至关重要。放大镜效果能显著提升用户体验&#xff0c;允许用户在不跳转页面的情况下查看高清细节。本文将基于Vue3实现一个高性能的放大镜组件&#xff0c;完整…...

redis未授权访问漏洞学习

一、Redis常见用途 1. Redis介绍 全称与起源: Redis全称Remote Dictionary Service(远程字典服务)&#xff0c;最初由antirez在2009年开发&#xff0c;用于解决网站访问记录统计的性能问题。发展历程: 从最初仅支持列表功能的内存数据库&#xff0c;经过十余年发展已支持多种…...

阿里qiankun微服务搭建

主服务 chat vue3 ts vite 子服务 ppt react 18 vite 子服务 agent 主服务 npm i vite-plugin-qiankun mian.ts import ./style/base.scss import virtual:svg-icons-register import { createApp } from vue import { createPinia } from piniaimport App from ./App.vue im…...

【CodeSprint】第二章-2.1 简单模拟

第二章 2.1 简单模拟 ✏️ 关于专栏&#xff1a;专栏用于记录 prepare for the coding test。 1. 简单模拟 简单模拟题目不需要复杂算法&#xff0c;直接按照题意一步步模拟即可。 1.1 促销计算 题目描述 某百货公司为了促销&#xff0c;采用购物打折的优惠方法&#xff1a…...

Golang实现函数默认参数

golang原生不支持默认参数 在日常开发中&#xff0c;我们有时候需要使用默认设置&#xff0c;但有时候需要提供自定义设置 结构体/类&#xff0c;在Java我们可以使用无参、有参构造函数来实现&#xff0c;在PHP中我们也可以实现(如 public function xxx($isCName false, $sec…...

【Python Web开发】03-HTTP协议

文章目录 1. HTTP协议基础1.1 请求-响应模型1.2 请求方法1.3 请求和响应结构1.4 状态码 2. Python 发送 HTTP 请求2.1 urllib库2.2 requests 库 3. Python 构建 HTTP 服务器3.1 http.server模块3.2 Flask 框架 4. HTTP 协议的安全问题5. 缓存和性能优化 HTTP&#xff08;Hypert…...

提高营销活动ROI:大数据驱动的精准决策

提高营销活动ROI:大数据驱动的精准决策 大家好,我是Echo_Wish。今天我们来聊聊如何通过大数据来提高营销活动的ROI(投资回报率)。我们都知道,随着市场的日益竞争,营销的成本不断增加,如何在这片红海中脱颖而出,不仅需要精准的营销策略,还需要依靠先进的技术,尤其是大…...

前端excel导出

在数据可视化和管理日益重要的今天&#xff0c;前端实现 Excel 导出功能已经成为众多项目中的刚需。 一、Excel 导出的常见场景​ 数据报表导出&#xff1a;在企业管理系统、数据分析平台中&#xff0c;用户经常需要将系统中的数据以 Excel 表格的形式导出&#xff0c;便于离…...

pymsql(SQL注入与防SQL注入)

SQL注入&#xff1a; import pymysql# 创建数据库连接 返回一个对象 conn pymysql.connect(host"localhost", # MySQL服务器地址 本地地址 127.0.0.1user"root", # 用户名 &#xff08;账号&#xff09;password"155480", # 密码database&qu…...

基于Springboot + vue + 爬虫实现的高考志愿智能推荐系统

项目描述 本系统包含管理员和学生两个角色。 管理员角色&#xff1a; 个人中心管理&#xff1a;管理员可以管理自己的个人信息。 高校信息管理&#xff1a;管理员可以查询、添加或删除高校信息&#xff0c;并查看高校详细信息。 学生管理&#xff1a;管理员可以查询、添加或…...

delphi使用sqlite3

看了一下delphi调用sqlite3最新版本的调用&#xff0c;网上说的都很片面&#xff0c;也没有完整的资料了。 我自己研究了一下&#xff0c;分享出来。 在调用demo中&#xff0c;官方也给了一个demo但是功能很少&#xff0c;没有参考价值。 1.定义&#xff1a; 首先把sqlite3…...

高压开关柜局部放电信号分析系统

高压开关柜局部放电信号分析系统 - 开发笔记 1. 项目概述 这个项目是我在2025年实现的高压开关柜局部放电信号分析系统&#xff0c;目的是通过采集分析局部放电信号&#xff0c;判断设备的工作状态和潜在故障。系统包含从信号模拟生成、特征提取、到深度学习模型训练的全流程…...

ai环境conda带torch整体迁移。

conda打包好的GPU版torch环境&#xff0c;其实很简单&#xff0c;就是conda装好的torch环境env整体打包&#xff0c;然后到新机器上再解压到env路径。 打开搭建好的环境&#xff0c;找自己路径&#xff0c;我默认的是这个。 cd/root/anaconda3/envs/ 然后整个文件夹打包。tar -…...

电价单位解析与用电设备耗电成本计算

一、电价单位 元/kWh 的解析 定义&#xff1a; 元/kWh 表示每千瓦时电能的费用&#xff0c;即1度电的价格。例如&#xff0c;若电价为0.5元/kWh&#xff0c;则使用1千瓦的电器1小时需支付0.5元。 电价构成&#xff1a; 中国销售电价由四部分组成&#xff1a; 上网电价&#xf…...

辛格迪客户案例 | 华道生物细胞治疗生产及追溯项目(CGTS)

01 华道&#xff08;上海&#xff09;生物医药有限公司&#xff1a;细胞治疗领域的创新先锋 华道&#xff08;上海&#xff09;生物医药有限公司&#xff08;以下简称“华道生物”&#xff09;是一家专注于细胞治疗技术研发与应用的创新型企业&#xff0c;尤其在CAR-T细胞免疫…...

C++(初阶)(十三)——继承

继承 继承概念示例 定义格式 继承和访问方式继承方式访问方式实例 继承类模板基类和派生类之间的转换继承中的作用域隐藏规则选择题 派生类的默认成员函数默认成员函数派生类中的实现 实现一个不能被继承的类继承与友元继承与静态成员多继承及其菱形继承问题虚继承多继承指针偏…...

S09-电机运行时间

感谢粉丝网友的支持&#xff0c;也欢迎你们的讨论和分享。昨天我们简单讨论了一下标准功能块的重要性&#xff0c;仅仅是拿电机块举了一个例子&#xff0c;有粉丝问能否把电机运行时间做到块里面&#xff0c;完善一下功能呢&#xff1f;那是绝对当然的100%可以的啊&#xff01;…...

大语言模型(LLMs)微调技术总结

文章目录 全面总结当前大语言模型&#xff08;LLM&#xff09;微调技术1. 引言2. 为什么需要微调&#xff1f;3. 微调技术分类概览4. 各种微调技术详细介绍4.1 基础微调方法4.1.1 有监督微调&#xff08;Supervised Fine-Tuning, SFT&#xff09;4.1.2 全参数微调&#xff08;F…...

python练习:求数字的阶乘

求数字的阶乘 eg:5的阶乘 54321 """ 求数字的阶乘 eg:5的阶乘 5*4*3*2*1 """count 1 for i in range(1,6):count count * iprint(count)运行结果&#xff1a;...

综合练习一

背景 某银行监管系统&#xff0c;需要设计并实现用户登入记录功能&#xff0c;每个用户登入系统时&#xff0c;系统自动记录登入用户的账户、登入时间、登入失败成功与否信息等&#xff0c;普通用户只能登入登出&#xff0c;管理员可以登入后查看日志及分析统计信息等。 用户…...

List--链表

一、链表 1.1 什么是List&#xff1f; 在C语言中&#xff0c;我们需要使用结构体struct来进行List(链表&#xff09;的实现&#xff1a; struct ListNode {DataType Data;//DataType是任意类型的变量定义struct ListNode* next;//指向下一个结点的指针变量 }; 与之前的vect…...

SpeedyAutoLoot

SpeedyAutoLoot自动拾取插件 SpeedyAutoLoot.lua local AutoLoot CreateFrame(Frame)SpeedyAutoLootDB SpeedyAutoLootDB or {} SpeedyAutoLootDB.global SpeedyAutoLootDB.global or {}local BACKPACK_CONTAINER BACKPACK_CONTAINER local LOOT_SLOT_CURRENCY LOOT_SLOT…...

编程日志4.23

栈的C顺序表实现 #include<iostream> #include<stdexcept> using namespace std; //模板声明&#xff0c;表明Stack类是一个通用的模板&#xff0c;可以用于存储任何类型的元素T template<typename T> //栈的声明 //Stack类的声明&#xff0c;表示一个栈的…...

打印所有字段

package com.volvo.midend.vehicle;import com.volvo.midend.vehicle.dto.out.vista.VistaDemoVO;import java.lang.reflect.Field;public class TestAllFiled {// 递归打印类的所有字段public static void printAllFields(Class<?> clazz, int indentLevel) {// 根据缩…...

4G FS800DTU上传图像至巴法云

目录 1 前言 2 准备工作 2.1 硬件准备 2.2 软件环境 2.3 硬件连接 3 实现方案 4 巴法云平台账号创建与设备联网配置 4.1 创建账号 4.2 进入巴法云 4.3 获取联网参数 4.4 连接巴法云 5 拍照上传至巴法云 6 ESP32-CAM程序 7 总结 1 前言 巴法云(Bemfa Cloud)是一个…...

一键叠图工具

写了个拼图小工具 供大家测试 APP安卓的 测试下载 点击下载 百度网盘: https://pan.baidu.com/s/17B5KVIMMZlOAsF7a16KNug?pwd1234 提取码: 1234 拼图步骤&#xff1a;选图--选择变亮或变暗--滤镜发色 在正式开始之前&#xff0c;我们来定义几条原则先&#xff08;熟悉…...

【OSG学习笔记】Day 12: 回调机制——动态更新场景

UpdateCallback 在OpenSceneGraph&#xff08;OSG&#xff09;里&#xff0c;UpdateCallback是用来动态更新场景的关键机制。 借助UpdateCallback&#xff0c;你能够实现节点的动画效果&#xff0c;像旋转、位移等。 NodeCallback osg::NodeCallback 是一个更通用的回调类&…...

快速上手Prism WPF 工程

1、Prism 介绍 ​定位​&#xff1a; Prism 是 ​微软推出的框架&#xff0c;专为构建 ​模块化、可维护的复合式应用程序​ 设计&#xff0c;主要支持 WPF、Xamarin.Forms、UWP 等平台。​核心功能​&#xff1a; ​模块化开发​&#xff1a;将应用拆分为独立模块&#xff0c…...

Dockerfile讲解与示例汇总

容器化技术已经成为应用开发和部署的标准方式,而Docker作为其中的佼佼者,以其轻量、高效、可移植的特性,深受开发者和运维人员的喜爱。本文将从实用角度出发,分享各类常用服务的Docker部署脚本与最佳实践,希望能帮助各位在容器化之路上少走弯路。 无论你是刚接触Docker的…...

MATLAB Coder代码生成(工业部署)——MATLAB技巧

MATLAB Coder是MATLAB生态中用于将算法代码转换为C/C++代码的核心工具,其生成的代码可直接部署到嵌入式硬件、工业控制器或企业级应用中,尤其在智能制造、物联网和实时控制领域具有广泛应用。 通过 MATLAB Coder,可以轻松地将 MATLAB 代码转换为高效的 C/C++ 代码,适用于嵌…...

3、CMake语法:制作和使用动态库和静态库

动态库和静态库 1 动态库和静态库简介1.1 静态库静态库文件类型.lib 文件.pdb 文件 1.2 动态库动态库文件类型 1.3 总结 2. 制作和使用静态库2.1 CMake指定输出的路径 2.2 VS利用第三方库编译静态库 2.3 使用静态库CMake链接静态库VS链接静态库 3. 制作和使用动态库3.1 CMake指…...

使用双端队列deque模拟栈stack

使用双端队列deque模拟栈stack 今天的内容有点简单~ 众所周知&#x1f913;&#x1f446;&#xff0c;栈作为一个先进后出的结构&#xff0c;在计算机的世界确实能够发挥很多的作用。 而我们C祖师爷本贾尼是第一批把这个结构作为实实在在的容器做进std的人~ 那为了更好的了解…...

Spring系列四:AOP切面编程第三部分

&#x1f40b;AOP-JoinPoint 1.通过JoinPoint可以获取到调用方法的签名 2.其他常用方法 ●代码实现 1.com.zzw.spring.aop.aspectj.SmartAnimalAspect Aspect //表示是一个切面类 Component //会将SmartAnimalAspect注入到容器 public class SmartAnimalAspect {//给Car配置…...

为什么使用ThreadLocal后要调用remove()方法呢?

ThreadLocalMap中包含一个数组&#xff0c;每个节点对应的类名叫Entry&#xff0c;这个类继承WeakReference<ThreadLocal<?>>&#xff0c;entry中有两个属性&#xff1a;key和value。特别需要指出的是key来自于父类中的threadLocal对象。 为了避免内存泄露&#…...

如何在idea 中写spark程序

在 IntelliJ IDEA 中编写 Spark 程序可以通过以下步骤进行&#xff1a; 1. **安装 Scala 插件**&#xff1a;首先确保已经安装了 Scala 插件。在 IntelliJ IDEA 中选择 File -> Settings -> Plugins -> 搜索 Scala -> 安装插件。 2. **创建新项目**&#xff1a;在…...

国产全兼容ADS131E08芯片---LHA7878

LHA787X是一系列多通道同步采样、24位A-∑模数转换器(ADC)&#xff0c;内置可编程增益放大器(PGA)、内部基准和振荡器。凭借ADC的宽动态范围、可扩展数据传输速率以及内部故障检测监测计&#xff0c;LHA787X受到工业电源监测和保护以及测试和测量应用的青睐。真正的高阻抗输入支…...

免费LUT网站

FREE LUTs | Color Lookup Tables - Presetpro.com...