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

【大模型理论篇】Search-R1: 通过强化学习训练LLM推理与利⽤搜索引擎

        最近基于强化学习框架来实现大模型在推理和检索能力增强的项目很多,也是Deep Research技术持续演进的缩影。之前我们讨论过《R1-Searcher:通过强化学习激励llm的搜索能⼒》,今天我们分析下Search-R1【1】。

1. 研究背景与问题

        ⼤模型(LLM)在⾃然语⾔理解和⽣成⽅⾯展现出了很强的能⼒,但在复杂推理和获取外部最新信息⽅⾯仍然⾯临挑战。传统的LLM在以下⽅⾯存在局限
性:
         当前LLM与搜索引擎集成的主要⽅法:
  1. 检索增强⽣成(RAG):基于输⼊查询检索相关段落,并将它们与查询⼀起输⼊到LLM中⽣成响应。虽然简单,但常常检索不到相关信息或⽆法提供⾜够有⽤的上下⽂。
  2. 将搜索引擎作为⼯具:通过提⽰或微调LLM来使⽤搜索引擎作为⼯具。基于提⽰的⽅法泛化能⼒弱,而基于训练的⽅法依赖⼤规模⾼质量的标注轨迹。

        OpenAI在4月11日开源BrowseComp, 这是专门用于智能体浏览器功能的测试基准。这个测试基准非常有难度,连OpenAI自己的GPT-4o、GPT-4.5准确率只有0.6%和0.9%几乎为0,即便使用带浏览器功能的GPT-4o也只有1.9%。但OpenAI最新发布的Agent模型Deep Research准确率高达51.5%。

        将强化学习(RL)应⽤于搜索和推理场景⾯临三个主要挑战:

1. RL框架和稳定性:如何有效地将搜索引擎集成到LLM的RL⽅法中,同时确保优化稳定性,特别是在引⼊检索上下⽂时。
2. 多轮交错推理和搜索:理想情况下,LLM应能进⾏迭代推理和搜索引擎调⽤,根据问题复杂性动态调整检索策略。
3. 奖励设计:为搜索和推理任务设计有效的奖励函数是⼀个基本挑战,尚不清楚简单的基于结果的奖励是否⾜以引导LLM学习有意义和⼀致的搜索⾏为。

2. Search-R1框架概述

        Search-R1是⼀个强化学习框架,使⼤模型能够在推理过程中与搜索引擎进⾏交互,从而提⾼解决复杂问题的能⼒。该框架可以看作是DeepSeek-R1 Zero的扩展,它不仅专注于参数化推理,还引⼊了搜索增强的RL训练,以增强基于检索的决策能⼒。
         核⼼创新点
1. 搜索引擎作为环境的⼀部分:将搜索引擎建模为环境的⼀部分,使采样的轨迹序列能够交错LLM的token⽣成与搜索引擎检索。Search-R1兼容各种RL算法,包括PPO和GRPO,并应⽤检索token掩码以确保优化稳定。
2. 多轮检索和推理⽀持:⽀持多轮检索和推理,通过特定tokens(<search> 和 </search>) 显式触发搜索调⽤。检索内容⽤<information> 和 </information> tokens包围,而LLM推理步骤⽤<think>和</think> tokens包装。最终答案使⽤<answer>和</answer> tokens格式化。
3. 简单的基于结果的奖励函数:采⽤简单的基于结果的奖励函数,避免基于过程的奖励的复杂性。结果表明,这种最小奖励设计在搜索和推理场景中是有效的。

3. 强化学习在Search-R1中的应⽤

        Search-R1框架通过将强化学习应⽤于LLM与搜索引擎的交互中,解决传统⽅法的局限性。以下是强化学习在Search-R1中的具体应⽤⽅式:

3.1 RL⽬标函数

        Search-R1使⽤搜索引擎R扩展了传统的强化学习⽬标函数:

        其中π是策略LLM,π 是参考LLM,r是奖励函数,D 是KL散度。与传统的RL⽅法不同,Search-R1明确将轨迹y建模为π(·|x;R),即包含搜索引擎检索结果的交互式推理过程。

3.2 检索令牌损失掩码

        为了解决检索token优化可能导致的不稳定问题,Search-R1引⼊了检索token损失掩码机制:
掩码函数I(y )确保只对LLM⽣成的令牌进⾏优化,而不包括检索内容。
        当I(y )=1时,y 是LLM⽣成的token;当I(y )=0时,y 是检索token。 应⽤检索token掩码的模型性能⼀致优于⽆掩码变体。

3.3 基于PPO的Search-R1

        Proximal Policy Optimization (PPO)是⼀种流⾏的actor-critic RL⽅法。Search-R1的PPO变体针对包含搜索引擎调⽤的推理场景进⾏了优化:
        其中A 是使⽤⼴义优势估计(GAE)计算的优势估计。

3.4 基于GRPO的Search-R1

        Group Relative Policy Optimization (GRPO)通过利⽤多个采样输出的平均奖励作为基线来提⾼策略优化稳定性:

3.5 强化学习⽅法的⽐较

        PPO和GRPO在Search-R1中各有优势:
收敛速度:GRPO收敛速度更快,因为PPO依赖于需要预热的critic模型。
训练稳定性:PPO提供更稳定的训练⾏为,GRPO在训练较多步骤后可能出现奖励崩溃。
最终性能:两种⽅法达到的最终训练奖励相当,也就是说它们在优化Search-R1⽅⾯都是有效的。

4. 系统架构与⼯作流程

        Search-R1的系统架构通过创新的设计实现了LLM与搜索引擎的深度融合,下⾯详细介绍其核⼼组件和⼯作流程。

4.1 多轮搜索引擎调⽤⽣成

        Search-R1采⽤了⼀个迭代框架,LLM在⽂本⽣成和外部搜索查询之间交替进⾏。具体过程如下:
1. 系统指导LLM在需要外部检索时使⽤特定的搜索调⽤标记(<search>和 </search>)来封装搜索查询。
2. 当系统在⽣成序列中检测到这些token时,会提取搜索查询,查询搜索引擎,并检索相关结果。
3. 检索到的信息被封装在特殊的检索标记(<information>和</information>)内,并附加到正在进⾏的展开序列中,作为下⼀个⽣成步骤的附加上下⽂。
4. 这个过程迭代进⾏,直到:(1)达到最⼤动作数,或(2)模型⽣成最终响应,该响应被封装在指定的答案标记(<answer>和</answer>)之间。

4.2 训练模板

        为了训练Search-R1,设计了⼀个简单的模板,指导初始LLM遵循预定义的指令。如下所⽰:
Answer the given question. You must conduct reasoning inside <think> and </think> first every time you get new information. After reasoning, if you find you lack some knowledge, you can call a search engine by <search> query </search>, and it will return the top
searched results between <information> and </information>. You can search as many times as you want. If you find no further external knowledge needed, you can directly provide the answer inside <answer> and </answer> without detailed illustrations. For example,
<answer> xxx </answer>. Question: question.
        这个模板将模型的输出结构化为三个部分:推理过程、搜索引擎调⽤功能和答案。我们刻意限制了约束条件仅为这种结构化格式,避免任何内容特定的偏⻅,例如强制反思性推理和搜索引擎调⽤或⽀持特定的问题解决⽅法。确保模型在RL过程中的⾃然学习动态保持可观察和⽆偏⻅。

4.3 响应⽣成的交互过程

        Search-R1的交互过程可以通过以下伪代码表⽰:
        
算法 1: LLM Response Rollout with Multi-Turn Search Engine Calls
输⼊ : 输⼊查询 x, 策略模型 π, 搜索引擎 R, 最⼤动作预算 B
输出 : 最终响应 y
1: 初始化展开序列 y ←
2: 初始化动作计数 b ← 0
3: while b < B do
4:         初始化当前动作 LLM 展开序列 yb ←
5:         while True do
6:                 ⽣成响应token yt π(·|x, y + yb)
7:                 将yt 附加到展开序列 yb ← yb + yt
8:                 if yt in [</search>, </answer>, <eos>] then break
9:                 end if
10:         end while
11:         y ← y + yb
12:         if <search> </search> detected in yb then
13:                 提取搜索查询q ← Parse(yb, <search>, </search>)
14:                 检索搜索结果d = R(q)
15:                 将d 插⼊到展开 y ← y + <information>d</information>
16:         else if <answer> </answer> detected in yb then
17:                 return 最终⽣成的响应 y
18:         else
19:                 请求重新思考y ← y+ "My action is not correct. Let me rethink."
20:         end if
21:         增加动作计数 b ← b + 1
22: end while
23: return 最终⽣成的响应 y

4.4 奖励建模

        奖励函数作为训练信号,指导RL中的优化过程。Search-R1采⽤了基于规则的奖励系统,仅包含最终结果奖励,评估模型响应的正确性。例如,在事实推理任务中, 正确性可以使⽤基于规则的标准(如精确字符串匹配)进⾏评估:

        其中a_pred 是从响应y中提取的最终答案,a_gold 是标准答案。与其他⽅法不同,Search-R1没有引⼊格式奖励,因为学习的模型已经表现出很强的结构⼀致性。此外, 也避免训练神经奖励模型,这⼀决定基于LLM对⼤规模RL中特定形式奖励的敏感性,以及重新训练这些模型引⼊的额外计算成本和复杂性。

5. 训练与评测⽅法

        Search-R1的训练与评测涉及多个数据集、基线⽅法和实验设置,下⾯将详细介绍相关内容。

5.1 数据集

        Search-R1在七个基准数据集上进⾏了评估,这些数据集分为两类:
        1. 通⽤问答:NQ、TriviaQA和PopQA
        2. 多跳问答:HotpotQA、2WikiMultiHopQA、Musique和Bamboogle
        这些数据集涵盖了各种搜索与推理挑战,使能够对Search-R1进⾏全⾯评估。

5.2 基线⽅法

        为了评估Search-R1的有效性,将其与以下基线进⾏了⽐较:
        1. 不使⽤检索的推理:
                直接推理
                思维链推理(CoT)
        2. 使⽤检索的推理:
                检索增强⽣成(RAG)
                IRCoT
                Search-o1
        3. 基于微调的⽅法:
                监督微调(SFT)
                不使⽤搜索引擎的RL微调(R1)
        这些基线涵盖了检索增强和微调⽅法的⼴泛范围,使能够全⾯评估Search-R1在零样本和学习检索设置中的表现。

5.3 实验设置

        实验使⽤两种类型的模型:Qwen-2.5-3B(基础/指令)和Qwen-2.5-7B(基础/指令)。对于检索,使⽤2018年Wikipedia转储作为知识来源,E5作为检索器。为确保公平⽐较,所有基于检索的⽅法都设置为检索3个段落。
        对于训练,将NQ和HotpotQA的训练集合并,形成了⼀个统⼀的数据集,⽤于训练Search-R1和其他基于微调的基线。评估在七个数据集的测试或验证集上进⾏,以评估域内和域外性能。精确匹配(EM)被⽤作评估指标。
主要超参数设置
  • PPO变体:策略LLM学习率为1e-6,值LLM学习率为1e-5。训练500步,策略和价值模型的预热⽐例分别为0.285和0.015。
  • GRPO训练:策略LLM学习率为1e-6,每个提⽰采样5个响应。模型训练500步,学习率预热⽐例为0.285。
  • 通⽤设置:使⽤8个H100 GPU,总批量⼤小为512,最⼤序列⻓度为4,096个标记,最⼤响应⻓度为500。
  • 奖励计算:使⽤精确匹配(EM)计算结果奖励。

6. 实验结果与分析

        Search-R1在多个数据集上的实验结果表明其优于基线⽅法,并为模型⾏为提供了重要⻅解。

6.1 主要性能结果

        在七个数据集上与基线⽅法的⽐较结果表明:
        Search-R1在所有数据集上持续优于强基线⽅法,使⽤Qwen2.5-7B和Qwen2.5-3B分别实现了41%和20%的平均相对改进。
        Search-R1优于不使⽤检索的LLM推理的RL训练(R1),这也比较符合预期,因为将搜索引⼊LLM推理提供了对相关外部知识的访问,提⾼了整体性能。 Search-R1对基础和指令调整模型都有效,表明DeepSeek-R1-Zero⻛格的RL与基于结果的奖励可以成功应⽤于搜索推理。
较⼤的模型在学习如何进⾏搜索⽅⾯表现更好,7B模型的Search-R1与3B模型相⽐显⽰出更⼤的"性能差距"。

6.2 不同RL⽅法的⽐较

        对PPO和GRPO作为基础RL⽅法的Search-R1评估表明:
        GRPO在所有情况下的收敛速度都快于PPO。这是因为PPO依赖于critic模型,在有效训练开始前需要⼏个预热步骤。
        PPO展⽰了更⼤的训练稳定性。GRPO在训练多步后导致奖励崩溃,而PPO保持稳定。
        PPO和GRPO的最终训练奖励是可⽐的。尽管在收敛速度和稳定性上存在差异,但两种⽅法都达到了类似的最终训练奖励和性能,表明两者都适⽤于优化SearchR1。

6.3 基础模型与指令模型的对⽐

        对基础LLM和指令调整LLM的训练动态分析表明:
        指令调整模型收敛更快,与基础模型相⽐初始性能更⾼。 不过两种模型类型的最终训练奖励在训练后保持⾼度相似。这表明虽然⼀般后训练加速了推理加搜索场景中的学习,但RL可以随着时间有效地弥补差距,使基础模型达到可⽐的性能。

6.4 响应⻓度和有效搜索研究

        使⽤Qwen2.5-7b-base模型对Search-R1的响应⻓度和有效搜索引擎调⽤次数进⾏了分析,关键趋势如下:
1. 早期阶段(前100步):响应⻓度急剧减少,而训练奖励略有增加。在此阶段,基础模型学会消除过多的填充词,并开始适应任务需求。
2. 后期阶段(100步后):响应⻓度和训练奖励都显著增加。此时,LLM学会频繁调⽤搜索引擎,由于检索到的段落,导致响应更⻓。随着模型更有效地利⽤搜索结果,训练奖励⼤幅提⾼。
3. 随着训练的进⾏,LLM学会更多次地调⽤搜索引擎。

6.5 检索token损失掩码

        对Qwen2.5-7b-base模型进⾏的实验表明,应⽤检索token掩码可以使LLM有更⼤的改进,缓解意外的优化效果,确保更稳定的训练。使⽤检索token损失掩码训练的Search-R1持续优于没有掩码的变体。

7. 参考材料

【1】Search-R1: Training LLMs to Reason and Leverage Search Engines with Reinforcement Learning

相关文章:

【大模型理论篇】Search-R1: 通过强化学习训练LLM推理与利⽤搜索引擎

最近基于强化学习框架来实现大模型在推理和检索能力增强的项目很多&#xff0c;也是Deep Research技术持续演进的缩影。之前我们讨论过《R1-Searcher:通过强化学习激励llm的搜索能⼒》&#xff0c;今天我们分析下Search-R1【1】。 1. 研究背景与问题 ⼤模型&#xff08;LLM&a…...

错误码code:9568282 error: install releaseType target not same怎么处理?

目录 1.背景 2.解决方案 1.背景 当前是由于应用从4.1版本升级到5.0版本,然后安装应用会报错9568282 ,如果签名是一致的&#...

qt联动其他库实现一个客户端(本章主要是概述如何实现)

一.服务器功能 1.能连接多个客户端通信 2.负责统计与手机客户端的数据 3.遇到客户端请求数据时能检索数据库并发送对应数据 4.服务器需要能连接到公网 5.服务器需要有账号密码登录功能 6.服务器要有日志与管理员系统能统计信息 二.客户端 1.客户端需要有登录界面 2.客户端需要…...

爱普生FC1610AN5G手机中替代传统晶振的理想之选

在 5G 技术引领的通信新时代&#xff0c;手机性能面临前所未有的挑战与机遇。从高速数据传输到多任务高效处理&#xff0c;从长时间续航到紧凑轻薄设计&#xff0c;每一项提升都离不开内部精密组件的协同优化。晶振&#xff0c;作为为手机各系统提供稳定时钟信号的关键元件&…...

SpringMVC基础二(RestFul、接收数据、视图跳转)

ReauestMapping ReauestMapping注解用于映射url到控制器类或一个特定的处理程序方法。可用于类或方法上&#xff0c;用于类上&#xff0c;表示类中的所有响应请求的方法都是以该地址作为父路径。 创建一个新项目&#xff1a;设置为web项目 编写web.xml&#xff08;此配置也几…...

BERT - 段嵌入(Segment Embedding)

1. 段嵌入&#xff08;Segment Embedding&#xff09;的作用 在BERT模型中&#xff0c;段嵌入的主要作用是区分不同的句子。具体来说&#xff1a; 单句任务&#xff1a;所有位置的段嵌入都是0。 句子对任务&#xff1a;第一个句子的所有位置使用段嵌入0&#xff0c;第二个句子…...

Kaggle-Disaster Tweets-(二分类+NLP+模型融合)

Disaster Tweets 题意&#xff1a; 就是给出一个dataframe包含text这一列代表着文本&#xff0c;文本会有一些词&#xff0c;问对于每条记录中的text是真关于灾难的还是假关于灾难的。 比如我们说今天作业真多&#xff0c;这真是一场灾难。实际上这个灾难只是我们调侃而言的。…...

关于哈希冲突的讨论

文章目录 1. 什么是哈希冲突&#xff1f;2. 为什么会产生哈希冲突&#xff1f;3. 如何解决哈希冲突&#xff1f;4. 为什么哈希算法一定会产生冲突&#xff1f;5. 存在不发生冲突的哈希算法吗&#xff1f;6. 为什么不用无冲突的哈希算法&#xff08;如完美哈希&#xff09;&…...

傅利叶发布首款开源人形机器人N1:开发者可实现完整复刻

2025年4月11日&#xff0c;上海——通用机器人公司傅利叶正式发布首款开源人形机器人 Fourier N1&#xff0c;并同步开放涵盖物料清单、设计图纸、装配指南、基础操作软件在内的完整本体资源包。作为傅利叶 “Nexus 开源生态矩阵” 的首个落地项目&#xff08;“N1” 即 “Nexu…...

2020年INS SCI1区TOP:平衡复合运动优化算法BCMO,深度解析+性能实测

目录 1.摘要2.算法原理3.结果展示4.参考文献5.代码获取 1.摘要 元启发式算法因其强大的鲁棒性和简便的编程方式&#xff0c;在优化领域中发挥着重要作用。本文提出了一种基于平衡复合运动优化算法BCMO&#xff0c;其核心思想是在解空间中平衡个体的复合运动特性。通过概率选择…...

2022年全国职业院校技能大赛 高职组 “大数据技术与应用” 赛项赛卷(3卷)任务书

2022年全国职业院校技能大赛 高职组 “大数据技术与应用” 赛项赛卷&#xff08;3卷&#xff09;任务书 背景描述&#xff1a;模块A&#xff1a;大数据平台搭建&#xff08;容器环境&#xff09;&#xff08;15分&#xff09;任务一&#xff1a;Hadoop HA安装部署任务二&#x…...

Express中间件(Middleware)详解:从零开始掌握(4)

下面我将为你提供四个实战项目的完整实现代码&#xff0c;每个项目都展示了Express中间件的实际应用场景。 1. API网关实现 const express require(express); const rateLimit require(express-rate-limit); const helmet require(helmet); const morgan require(morgan)…...

Ubuntu22环境下,Docker部署阿里FunASR的gpu版本

番外: 随着deepseek的爆火,人工智能相关的开发变得异常火爆,相关的大模型开发很常见的agent智能体需要ASR语音识别的功能,阿里开源的FunASR几乎是把一个商业的项目放给我们使用了。那么我们项目中的生产环境怎么部署gpu版本的语音识别服务呢?经过跟deepseek的一上午的极限…...

vue springboot 案例 收集

vue springboot 案例 收集 SpringbootVue前后端分离项目-管理系统 https://blog.csdn.net/m0_56308072/article/details/130893828...

Windows环境下本地部署deepseek-r1或其他大模型 【保姆级教程】

目录 背景准备工作开始部署下载olloma安装olloma下载deepseek-r1模型使用如何使用 结束语 背景 最近deepseek本地部署的概念越来越火&#xff0c;勾起了我学习的兴趣。 我就在思考如何使用家用机或者平时打游戏的机器来本地部署deepseek&#xff0c;给自己开发个智能体来辅佐…...

ubuntu20.04系统安装apollo10.0系统

文章目录 前言一、安装基础软件1、更新相关软件2 安装 Docker Engine 二、获取 GPU 支持1、安装显卡驱动2、安装 Nvidia container toolkit 三、安装 Apollo 环境管理工具1、安装依赖软件2、在宿主机添加 Apollo 软件源的 gpg key&#xff0c;并设置好源和更新3、安装aem 四、安…...

图片文本识别OCR+DeepSeekapi实现提取图片关键信息

用到的技术&#xff1a; 通过腾讯OCR文字识别&#xff0c;deepseek的api实现 目录 需求分析&#xff1a; 文字识别&#xff08;OCR&#xff09;具体实现步骤 起步工作 代码编写 deepseek整合消息&#xff0c;返回文本关键信息 起步工作 编写工具类 具体调用实现 具体…...

minio改成https+域名访问

思路有两个&#xff1a; 方式一&#xff1a;通过nginx反向代理&#xff0c;将https配置在nginx&#xff0c;内部的MinIO还是使用HTTP&#xff1b;方式二&#xff1a;MinIO服务端直接配置成HTTPS&#xff1b; 注意&#xff1a; 私钥需要命名为&#xff1a;private.key 公钥需要…...

unity与usb串口通信(web版)

一、本文介绍在web环境下unity与usb串口进行通信的代码 本篇使用本地服务器作为unity与串口的中介&#xff0c;unity发送数据到服务器&#xff0c;服务器发送给串口收到响应并解析返回给uinty。 使用websocket协议。 注&#xff1a; 1.我的硬件是检测磁阻液位&#xff0c;用…...

UE5每次都打开上一次的工程文件 , 如何取消?

点击左上角 - 文件 点击 打开项目 取消勾选 - 启动时固定加载上次打开的项目...

AI大模型与人类未来的协作图景:从工具到“数字共生体”

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:技术跃迁与文明重塑的十字路口 2020年代以来,人工智能特别是**AI大语言模型(Large Language Models, LLMs)**的迅猛发展,正在从根本上改变人类与技术的关系。从最初的“智能写作助手”到今日…...

C++ I/O 性能优化指南

在高性能计算和大规模数据处理中&#xff0c;I/O 性能优化是提升系统整体效率的关键环节。C 作为一种高性能编程语言&#xff0c;提供了丰富的工具和机制来优化 I/O 操作。本文将详细介绍在 Linux 环境下&#xff0c;如何通过代码层面的优化、系统调用的选择以及多线程技术等手…...

Idea忽略已提交文件

全局忽略 项目根目录下新增.gitignore文件&#xff0c;写入想要忽略的信息&#xff0c;以下可参考 **/src/main/resources/application-local.yamltarget/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/**/target/ !**/src/test/**/target/### IntelliJ IDEA ### .idea/mod…...

Mamba原理及在low-level vision的工作[持续更新]

文章目录 Mamba原理选择性扫描&#xff08;Selective Retain Information&#xff09;&#xff1a;选择有关/无关信息状态空间模型&#xff08;SSM&#xff09;Mamba的选择性保留信息Mamba的扫描操作&#xff08;The Scan Operation&#xff09; 硬件感知&#xff08;Hardware-…...

openlayers入门02 -- 地图控件

地图控件 1.视图跳转控件&#xff08;ZoomToExtent&#xff09; 视图跳转控件用于将地图快速跳转到指定的范围。示例&#xff1a; // 视图跳转控件&#xff08;extent这里用的是学校的经纬度范围&#xff0c;可以按照需要修改&#xff09; const ZoomToExtent new ol.contro…...

Python 装饰器(Decorator)

文章目录 代码解析1. 装饰器定义 timer(func)2. 应用装饰器 timer **执行流程****关键点****实际应用场景****改进版本&#xff08;带 functools.wraps&#xff09;** 这是一个 Python 装饰器&#xff08;Decorator&#xff09; 的示例&#xff0c;用于测量函数的执行时间。下…...

UE的AI判断队伍归属的机制:IGenericTeamAgentInterface接口

从官方论坛老哥那学来的&#xff0c;优点在于使用项目设置&#xff0c;像配置碰撞一样&#xff0c;能配置碰撞通道对其他碰撞通道的反应&#xff0c;如阻挡&#xff0c;忽略&#xff0c;重叠&#xff0c;全局配置队伍归属&#xff0c;也能配置当前队伍对其他队伍的身份识别&…...

安宝特新闻丨Vuzix Core™波导助力AR,视角可调、高效传输,优化开发流程

Vuzix Core™ 光波导技术 近期&#xff0c;Vuzix Core™光波导技术赋能AR新视界&#xff01;该系列镜片支持定制化宽高比调节及20至40视场角范围&#xff0c;可灵活适配各类显示引擎。通过创新的衍射光波导架构&#xff0c;Vuzix Core™实现了光学传输效率与图像质量的双重突破…...

基于springboot留守儿童网站的设计与实现 docx

收藏关注不迷路&#xff01;&#xff01; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff08;免费咨询指导选题&#xff09;&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更多…...

AST 技术进行 JavaScript 反混淆实战

一、AST 技术核心原理 抽象语法树&#xff08;AST&#xff09; 是代码的“骨架”&#xff0c;它把代码拆解成一个个节点&#xff0c;就像把一棵大树拆成树枝、树叶一样。通过分析和修改这些节点&#xff0c;我们可以精准地还原代码的逻辑。 二、实战案例 1&#xff1a;还原字…...

基于ECharts+Spark的疫情防控数据分析平台(源码+lw+部署文档+讲解),源码可白嫖!

摘要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;特别是近几年来&#xff0c;新冠疫情出现以来&#xff0c;疫情防控数据分析平台当然不能排除在外。我本次开发的疫情防控数据分析平台是在…...

wireshark过滤器表达式的规则

1.抓包过滤器语法和实例 抓包过滤器类型Type&#xff08;host、net、port&#xff09;、方向Dir&#xff08;src、dst&#xff09;、协议Proto&#xff08;ether、ip、tcp、udp、http、icmp、ftp等&#xff09;、逻辑运算符&#xff08;&&与、|| 或、&#xff01;非&am…...

使用 Python 扫描 Windows 下的 Wi-Fi 网络实例演示

使用 Python 扫描 Windows 下的 Wi-Fi 网络 代码实现代码解析 1. 导入库2. 解码混合编码3. 扫描 Wi-Fi 网络4. 运行函数 这是我当前电脑的 wifi 连接界面。 这个是运行的效果图&#xff1a; 代码实现 我们使用了 Python 的 subprocess 模块来调用 Windows 的内置命令 netsh…...

Redis 字符串(String)详解

1. 什么是字符串类型 在 Redis 中&#xff0c;字符串&#xff08;String&#xff09; 是最基本的数据类型。它可以包含任何数据&#xff0c;比如文本、JSON、甚至二进制数据&#xff08;如图片的 Base64 编码&#xff09;&#xff0c;最大长度为 512 MB。 字符串在 Redis 中不…...

【Taro3.x + Vue3】搭建微信小程序

IOS环境为例 打开终端环境有多种办法&#xff0c;例举一个&#xff1a;在访达里新建一个文件夹&#xff0c;鼠标右键选择。 一、先安装Taro的环境 npm install -g tarojs/cli安装完成后&#xff0c;可以输入命令检验是否安装成功&#xff1a; taro --version二、创建项目 …...

P8668 [蓝桥杯 2018 省 B] 螺旋折线

题目 思路 一眼找规律题&#xff0c;都 1 0 9 10^9 109说明枚举必然超时&#xff0c;找规律&#xff0c;每个点找好像没有什么规律&#xff0c;尝试找一下特殊点&#xff0c;比如&#xff1a;对角线上的点 4 16 36(右上角&#xff09; 4k^2&#xff0c;看在第几层&#xff08;…...

【14】数据结构之哈夫曼树篇章

目录标题 哈夫曼树哈夫曼树的定义哈夫曼树的构造哈夫曼编码哈夫曼树的实现 哈夫曼树 哈夫曼树的定义 路径&#xff1a;从一个结点到另一个结点的路线树的路径长度&#xff1a;从树根到树中每个结点的路径长度之和结点的权&#xff1a;在一些应用中&#xff0c;赋予树中结点的…...

初识SpringAI(接入硅基流动deepseek)

①创建项目 ②application.yml spring:application:name: pgs-aiai:openai:api-key: sk-vrozloxjpjgkozaggtodbmwyfmubmxqpdpbvbbxpcgleanugbase-url: https://api.siliconflow.cn/chat:options:model: deepseek-ai/DeepSeek-V3 api-key&#xff1a;去硅基流动官网生成你的密钥…...

两个有序序列合并算法分析

一 问题背景 合并两个有序序列是常见操作,例如在归并排序中。传统方法需要额外空间,时间复杂度为 O(n)。但若要求原地合并(不占用额外内存),则需借助 手摇算法(或称内存反转或三次反转算法)。 二 手摇算法原理 手摇算法通过三次反转操作,实现数组片段的原…...

Robot---SPLITTER行星探测机器人

1 背景 先给各位读者朋友普及一个航天小知识&#xff0c;截止到目前为止&#xff0c;登陆火星的火星车有哪些&#xff1f;结果比较令人吃惊&#xff1a;当前只有美国和中国登陆过火星。 “勇气”号&#xff08;Spirit&#xff09;&#xff1a;2004年1月4日&#xff0c;美国国家…...

kafka的topic扩容分区会对topic任务有什么影响么

在 Kafka 中对 Topic 进行扩容分区会对相关任务产生多方面的影响&#xff0c;下面为你详细介绍&#xff1a; 积极影响 增强并发处理能力&#xff1a;Kafka 中数据是以分区为单位进行并行处理的&#xff0c;增加分区数量意味着可以让更多的消费者并行消费数据。比如&#xff0…...

每日一题(小白)模拟娱乐篇27

由题意可以得知这是一道暴力模拟的题目&#xff0c;我们只需要根据题意说的模拟整个过程即可。首先需用循环接收n个数字&#xff0c;每次判断这个数字是否出现过&#xff0c;若没有出现则为对应的负值&#xff0c;若出现过则需要将这个坐标减去之前坐标的值再减一返回&#xff…...

进行性核上性麻痹患者,饮食 “稳” 健康

进行性核上性麻痹作为一种复杂且罕见的神经系统退行性疾病&#xff0c;给患者的身体机能和日常生活带来严重挑战。在积极接受专业治疗的同时&#xff0c;合理的饮食安排对于维持患者营养状况、缓解症状及提升生活质量起着关键作用。以下为患者提供一些健康饮食建议。 首先&…...

GitLab之搭建(Building GitLab)

GitLab之搭建 “ 在企业开发过程中&#xff0c;GitLab凭借其强大的版本管理、CI/CD集成和项目管理功能&#xff0c;成为许多团队的首选工具。本文将探讨GitLab的基础介绍、搭建过程、权限管理、代码审查以及团队知识管理等方面。通过详细的步骤和实用的技巧&#xff0c;旨在帮…...

R 语言科研绘图第 38 期 --- 饼状图-玫瑰

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

array和list在sql中的foreach写法

在MyBatis中&#xff0c;<foreach>标签用于处理集合或数组类型的参数&#xff0c;以便在SQL语句中动态生成IN子句或其他需要遍历集合的场景。以下是array和list在SQL中的<foreach>写法总结。 <if test"taskIds ! null and taskIds.length > 0">…...

国内MCP服务有哪些?MCP服务器搜索引擎哪家好?

随着MCP&#xff08;Model Context Protocol&#xff09;协议的广泛应用&#xff0c;国内出现了越来越多的MCP服务提供商&#xff0c;这些服务覆盖了从开发工具、数据科学到金融、游戏等多个领域。 如果你对MCP协议和相关开发感兴趣&#xff0c;可以访问AIbase&#xff08;htt…...

二叉树的应用

目录 一、二叉树遍历算法的应用 二、树的存储结构 1、双亲表示法 2、孩子表示法 带双亲的孩子链表 3、孩子兄弟表示法&#xff08;左孩子、右兄弟&#xff09;较为普遍 三、森林与二叉树的转换 四、哈夫曼树 哈夫曼&#xff08;Huffman&#xff09;树的构造 一、二叉树…...

【LaTeX】

基本使用 \documentclass 类型&#xff1a;文章&#xff08;article&#xff09;、报告&#xff08;report&#xff09;、书&#xff08;book&#xff09; 中文的文章是ctexart&#xff0c;中文字体是UTF8 \documentclass[UTF8]{ctexart} []说明可以省略不写的意思&#xf…...

Java基础 - 泛型(基本概念)

文章目录 基本概念参数化类型类型安全和编译时检查 为什么需要泛型&#xff1f;解决类型安全问题避免重复代码提高可读性和维护性 泛型&#xff08;Generics&#xff09;是编程语言中一种支持参数化类型的特性&#xff0c;允许在定义类、接口、方法时使用类型参数&#xff08;T…...