LLM Agent:PaSa

阅读原文

LLM Agent:PaSa

以 PaSa(Paper Search)为例,接下来将介绍由 LLM 驱动的先进的论文搜索智能体。PaSa 能够自主做出一系列决策,包括调用搜索工具、阅读论文以及选择相关参考文献,最终为复杂的学术查询获取全面且准确的结果。

学术论文搜索是一项极具挑战性的信息检索任务,它需要涉及长尾的专业知识,达到全面的综述级别的覆盖范围,并且具备处理细粒度查询的能力。例如,考虑这样一个查询:“哪些研究专注于使用基于价值的方法,特别是基于上置信界(UCB)算法的非平稳强化学习?” 虽然像谷歌学术(Google Scholar)这种搜索系统对于一般性的查询很有效,但在处理这些复杂查询时往往力不从心。因此,研究人员常常要花费大量时间来进行文献综述。

大语言模型(LLMs)的发展激发了众多利用大语言模型来增强信息检索的研究,特别是通过优化或重新组织搜索查询来提高检索质量。然而,在学术搜索中,这个过程远不止简单的检索。人类研究人员不仅会使用搜索工具,还会进行更深入的活动,比如阅读相关论文以及核查参考文献,以便进行全面且准确的文献综述。

PaSa,旨在模仿人类行为以实现全面而准确的学术论文搜索。如下图所示,PaSa 由两个大型语言模型(LLM)智能体组成:Crawler(爬虫)和 Selector(选择器)。

Crawler 负责处理用户的查询请求,并且可以访问论文队列中的论文。它能够自主调用搜索工具、拓展参考文献,或者停止对当前论文的处理。Crawler 收集到的所有论文都会被添加到论文队列中。Selector 则会阅读论文队列中的每一篇论文,以判断该论文是否符合用户查询中所指定的标准

对于给定的用户查询,Crawler 可以通过利用搜索工具或从当前论文中提取引用来自主收集相关论文,并将这些论文添加到一个不断增长的论文队列中。Crawler 会迭代处理论文队列中的每一篇论文,通过导航参考文献网络来发现更多相关论文。Selector 则仔细阅读论文队列中的每一篇论文,以确定其是否满足用户查询的要求。PaSa 在 AGILE 框架(一种为 LLM 智能体设计的强化学习框架)中进行了优化。

有效的训练需要高质量的学术搜索数据。人类科学家已经创建了大量高质量的学术论文,其中包含对广泛研究主题的全面综述。PaSa 构建了一个合成但高质量的学术搜索数据集 AutoScholarQuery

尽管 AutoScholarQuery 仅提供了查询和论文答案,而没有展示科学家收集论文的具体路径,但仍可以利用它进行强化学习训练以改进 PaSa。此外,PaSa 设计了一种新的会话级 PPO(近端策略优化)训练方法,以应对论文搜索任务的独特挑战:

  1. 奖励稀疏:AutoScholarQuery 中的论文是通过参考文献收集的,因此它只是实际合格论文集的一个较小子集
  2. 轨迹过长:Crawler 的完整轨迹可能涉及数百篇论文,这对于直接输入到 LLM 上下文来说过长

为了评估 PaSa,除了 AutoScholarQuery 的测试集外,还开发了基准数据集 RealScholarQuery。其包含 50个 真实世界的学术查询及其标注的相关论文,用于评估 PaSa 在真实场景中的表现。

该研究的主要贡献总结如下:

  • PaSa:一个全面且准确的论文搜索智能体,它能够自主使用在线搜索工具、阅读整篇论文,以及在参考文献网络中进行导航
  • 两个用于复杂学术搜索的高质量数据集:AutoScholarQuery、RealScholarQuery
  • 尽管 PaSa 仅在合成数据上进行训练,但它在现实世界中取得了显著的性能表现。基于 70 亿参数大语言模型构建的 PaSa 显著优于所有基线模型

8.1、数据集

8.1.1、AutoScholarQuery

为了构建 AutoScholarQuery,收集了 ICLR 2023、ICML 2023、NeurIPS 2023、ACL 2024 以及 CVPR 2024 上发表的所有论文。对于每篇论文的 “相关工作” 部分,提示 GPT-4o 生成学术查询,这些查询的答案对应于 “相关工作” 部分中引用的参考文献。所使用的提示内容如下。

对于每个查询,仅保留可以在 arXiv 网站上检索到的论文,并使用 arXiv 编号作为数据集中文章的唯一标识符。AutoScholarQuery 采用源论文的发表日期作为查询日期。在训练和测试过程中,只考虑在查询日期之前发表的论文。

最终的 AutoScholarQuery 数据集在训练集、开发集和测试集中分别包含 33,551、1,000 和 1,000 个实例。每个实例由一个查询、相关的论文集以及查询日期组成,每个数据集中的查询均来自不同的源论文。下图展示了 AutoScholarQuery 中的一些示例。

为了评估 AutoScholarQuery 数据集的质量,抽取了 100 个 查询-论文(query-paper)对,并评估了每个查询以及相应论文的合理性和相关性。一个合格的查询应该是有意义且明确无误的,一篇合格的论文应该符合学术查询的要求。作者手动检查了每一对数据,确定 94.0% 的查询是合格的。在这些合格的查询中,93.7% 的查询所对应的论文被认为是相关且合适的。

8.1.2、RealScholarQuery

为了在更接近现实的场景中评估 PaSa 构建了真实学术查询数据集,这是一个由 50 个真实世界研究查询组成的测试数据集。在推出 PaSa 的演示版本后,邀请了几位人工智能研究人员使用该系统。从他们提供的查询中随机抽取了一部分查询,并手动过滤掉了过于宽泛的主题(例如,“多模态大语言模型”、“视频生成”)。最终,收集到了 50 个细粒度且贴近现实的查询。

对于每个查询,首先手动收集相关的论文。随后,使用多种方法来检索更多的论文,这些方法包括 PaSa、谷歌搜索、谷歌学术、ChatGPT(启用搜索功能的 GPT-4o),以及搭配 GPT-4o 进行查询改写的谷歌搜索。这些方法得到的结果被汇总到一个候选论文库中。最后,专业的注释人员会对每个查询的所有候选论文进行审查,挑选出那些符合该查询特定要求的论文,从而形成最终的相关论文集。

8.2、方法

8.2.1、概述

PaSa 系统由两个 LLM 智能体组成:Crawler 和 Selector。Crawler 读取用户的查询内容,生成多个搜索查询,并检索相关的论文。检索到的论文会被添加到一个论文队列中。Crawler 进一步处理论文队列中的每一篇论文,以识别值得进一步探索的关键参考文献,并将任何新的相关论文添加到论文列表中。Selector 对论文列表中的每一篇论文进行全面审查,以评估其是否满足用户的查询要求。

总之,Crawler 旨在最大限度地提高相关论文的召回率,而 Selector 则注重在识别符合用户需求的论文时的精确率。

8.2.2、Crawler

用强化学习(RL)的术语来说,Crawler 执行的是基于词元(token)级别的马尔可夫决策过程(MDP)。行动空间 A A A 对应于大语言模型的词表,其中每个词元都代表一个行动。LLM 充当策略模型。智能体的状态由当前 LLM 的上下文和论文队列来定义。Crawler 通过三个已注册的函数来运行,具体内容见下表。当一个行动与某个函数名称匹配时,相应的函数就会被执行,进而修改智能体的状态。

如下图所示,智能体首先接收用户的查询,将其纳入自身的上下文,并开始采取行动。如果生成的词元是 [search],大语言模型会继续生成一个搜索查询,然后智能体调用一个搜索工具来检索论文,这些论文随后会被添加到论文列表中。如果词元是 [Expand],LLM 会继续从当前上下文中的论文提取一个子章节名称。接下来,智能体使用解析工具提取该子章节中的所有引用论文,并将它们添加到论文列表中。如果标记是 [Stop],智能体就会将其上下文重置为用户查询以及论文队列中下一篇论文的信息。这些信息包括标题、摘要以及所有章节和子章节的提纲。

Crawler 使用多样且互补的查询执行多次 [search] 操作。此外,Crawler 能够评估其行动的长期价值。值得注意的是,当它在参考文献网络中进行更深入的探索时,即使探索路径上的中间论文与用户查询不相符,也能发现许多相关的论文

Crawler 的训练过程包括两个阶段。在第一阶段,为训练数据的一小部分生成轨迹,然后进行模仿学习。在第二阶段,应用强化学习。

模仿学习数据生成

PaSa 以会话为单位生成用于模仿学习的训练数据。会话有两种类型:搜索会话(从状态 S q S_q Sq 开始)和拓展会话(从状态 S q + p S_{q + p} Sq+p 开始)。

对于从 S q S_q Sq 开始的搜索会话,从 AutoScholarQuery 的训练集中采样用户查询,并提示 GPT-4o 生成相应的搜索查询。提示模板见下表。

会话轨迹的构建方式是,在每个查询前添加一个 [Search] 词元,将这些查询连接起来,并在末尾添加一个 [Stop] 词元,如下表所示。总共生成了 3011 条搜索会话轨迹。

>

对于从 S q + p S_{q + p} Sq+p 开始的拓展会话,使用谷歌搜索生成的查询。然后,从搜索结果中采样论文,并获得初始状态,该状态既包括查询也包括一篇论文。为了构建会话轨迹,检查论文的每个子部分。如果该子部分引用了自动学术查询数据集训练集中与该查询对应的至少一篇论文,则选择该子部分。否则,以 10% 的概率选择该子部分,以增加轨迹的多样性。将选定的部分填入上表中的模板,完成会话轨迹的构建。总共构建了 9978 条拓展会话轨迹。

下面将描述强化学习训练的具体实现细节。

a、奖励设计

PaSa 在 AutoScholarQuery 的训练集上进行强化学习训练,其中每个实例都由一个查询 q q q 和相应的论文集 P P P 组成。从一个查询 q q q 开始,Crawler 生成一个轨迹 τ = ( s 1 , a 1 , ⋯ , s T , a T ) \tau = (s_1, a_1, \cdots, s_T, a_T) τ=(s1,a1,,sT,aT) 。在每个时间步 t t t ,将当前的论文队列记为 Q t Q_t Qt 。在采取行动 a t a_t at 后,Crawler 将一组新的论文 ( p 1 , p 2 , ⋯ , p n t ) (p_1, p_2, \cdots, p_{n_t}) (p1,p2,,pnt) 添加到论文队列中。如果 a t = [ S t o p ] a_t = [Stop] at=[Stop] ,则这组论文为空。

在状态 s t s_t st 下执行行动 a t a_t at 的奖励定义为:

r ( s t , a t ) = α × ∑ i = 1 n t I ( q , p i , t ) − c ( a t ) r(s_t, a_t) = \alpha \times \sum_{i = 1}^{n_t} \mathbb{I}(q, p_i, t) - c(a_t) r(st,at)=α×i=1ntI(q,pi,t)c(at)

其中,如果 p i p_i pi 与查询 q q q 匹配且不在 Q t Q_t Qt 中,则 I ( q , p i , t ) = 1 \mathbb{I}(q, p_i, t) = 1 I(q,pi,t)=1 ,否则 I ( q , p i , t ) = 0 \mathbb{I}(q, p_i, t) = 0 I(q,pi,t)=0 。这里, α \alpha α 是奖励系数, c ( a t ) c(a_t) c(at) 是行动 a t a_t at 的成本。

指示函数 I ( q , p i , t ) \mathbb{I}(q, p_i, t) I(q,pi,t) 可以通过检查 p i p_i pi 是否属于 P − Q t P - Q_t PQt 来确定。然而,需要注意的是,AutoScholarQuery 数据集可能只包含真实论文集的一个子集,因为参考文献通常只强调有限数量的关键引用。如果 Crawler 仅仅根据与 AutoScholarQuery 数据集中论文的匹配情况来获得奖励,这可能会导致训练过程中的奖励稀疏问题。为了缓解这个问题,将 Selector 作为 Crawler 的辅助奖励模型。修正后的 I ( q , p i , t ) \mathbb{I}(q, p_i, t) I(q,pi,t) 定义为:

I ( q , p i , t ) = { 1 , if( Selector ( q , p i ) = 1 or  p i ∈ P )and  p i ∉ Q t 0 , otherwise \mathbb{I}(q, p_i, t) = \begin{cases} 1, & \text{if($\text{Selector}(q, p_i) = 1$ or $p_i \in P$ )and $p_i \notin Q_t$ } \\ 0, & \text{otherwise} \end{cases} I(q,pi,t)={1,0,ifSelector(q,pi)=1 or piP and pi/Qt otherwise

这里,如果 Selector 判定论文 p i p_i pi 符合查询 q q q ,则 Selector ( q , p i ) = 1 \text{Selector}(q, p_i) = 1 Selector(q,pi)=1 ,否则 Selector ( q , p i ) = 0 \text{Selector}(q, p_i) = 0 Selector(q,pi)=0

b、强化学习训练

使用强化学习训练 Crawler 的一个关键挑战是,对于给定的查询,采样一个完整的轨迹需要花费大量时间。这是因为每个 [Search] 或 [Expand] 行动都会向论文列表中添加多篇论文,导致最终的论文队列中可能有数百甚至数千篇论文。

为了解决这个问题,将一个会话(session)定义为一个子轨迹,从一个会话的初始状态开始,以 [Stop] 行动结束。如此确定了两种类型的会话初始状态: S q S_q Sq ,只包含一个查询;以及 S q + p S_{q + p} Sq+p ,由一个查询和一篇论文组成。

形式上,将 Crawler 建模为一个策略 π θ ( a t ∣ s t ) \pi_{\theta}(a_t \mid s_t) πθ(atst) 。将整个轨迹 τ \tau τ 划分为一系列的会话: ( τ t 1 : t 2 − 1 , τ t 2 : t 3 − 1 , ⋯ ) (\tau_{t_1:t_2 - 1}, \tau_{t_2:t_3 - 1}, \cdots) (τt1:t21,τt2:t31,)

每个会话是 τ t i : t i + 1 − 1 = ( s t i , a t i , ⋯ , s t i + 1 − 1 , a t i + 1 − 1 ) \tau_{t_i:t_{i + 1} - 1} = (s_{t_i}, a_{t_i}, \cdots, s_{t_{i + 1} - 1}, a_{t_{i + 1} - 1}) τti:ti+11=(sti,ati,,sti+11,ati+11) ,其中初始状态 s t i s_{t_i} sti 要么属于 S q S_q Sq 类型,要么属于 S q + p S_{q + p} Sq+p 类型,并且最终行动 a t i + 1 − 1 a_{t_{i + 1} - 1} ati+11 是 [STOP]。

从这些会话初始状态中采样这样一个子轨迹在计算上是高效的。在 PPO 训练期间,在时间步 t ∈ [ t i , t i + 1 ) t \in [t_i, t_{i + 1}) t[ti,ti+1) ,使用蒙特卡罗采样来估计会话中的回报:

R ^ t = ∑ k = 0 t i + 1 − 1 − t γ 0 k [ r ( s t + k , a t + k ) + γ 1 ∑ j = 1 n t + k V ^ ϕ ( S q + p j ) − β ⋅ log ⁡ π θ ( a t ∣ s t ) π s f t ( a t ∣ s t ) ] \hat{R}_t = \sum_{k = 0}^{t_{i + 1} - 1 - t} \gamma_0^k \left[ r(s_{t + k}, a_{t + k}) + \gamma_1 \sum_{j = 1}^{n_{t + k}} \hat{V}_{\phi}(S_{q + p_j}) - \beta \cdot \log \frac{\pi_{\theta}(a_t|s_t)}{\pi_{sft}(a_t|s_t)} \right] R^t=k=0ti+11tγ0k[r(st+k,at+k)+γ1j=1nt+kV^ϕ(Sq+pj)βlogπsft(atst)πθ(atst)]

这里, γ 0 \gamma_0 γ0 是会话内的折扣因子, γ 1 \gamma_1 γ1 是跨会话的折扣因子。 V ^ ϕ ( ⋅ ) \hat{V}_{\phi}(\cdot) V^ϕ() 是用于近似状态值的价值函数模型。在执行 a t + k a_{t + k} at+k 后,论文队列会更新,以包含新找到的论文 ( p 1 , p 2 , ⋯ , p n t + k ) (p_1, p_2, \cdots, p_{n_{t + k}}) (p1,p2,,pnt+k) 。由于 Crawler 随后会启动新的会话来处理这些额外的论文,它们相关的未来奖励应该纳入到回报估计中。

此外,在每个词元上引入一个从学习到的策略 π θ \pi_{\theta} πθ 到通过模仿学习得到的初始策略 π s f t \pi_{sft} πsft 的每个词元的 KL 散度惩罚项,以减轻过度优化问题。这个项由系数 β \beta β 进行缩放。

然后,优势函数可以近似为:

A ^ ( s t , a t ) = R ^ t − V ^ ϕ ( s t ) \hat{A}(s_t, a_t) = \hat{R}_t - \hat{V}_{\phi}(s_t) A^(st,at)=R^tV^ϕ(st)

最后,策略目标和价值目标可以分别表示为:

L p o l i c y ( θ ) = E τ ′ ∼ π θ o l d [ min ⁡ ( π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) A ^ ( s t , a t ) , clip ( π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) , 1 − ϵ , 1 + ϵ ) A ^ ( s t , a t ) ) ] \mathcal{L}_{policy}(\theta) = \mathbb{E}_{\tau' \sim \pi_{\theta}^{old}} \left[ \min \left( \frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta}^{old}(a_t|s_t)} \hat{A}(s_t, a_t), \text{clip} \left( \frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta}^{old}(a_t|s_t)}, 1 - \epsilon, 1 + \epsilon \right) \hat{A}(s_t, a_t) \right) \right] Lpolicy(θ)=Eτπθold[min(πθold(atst)πθ(atst)A^(st,at),clip(πθold(atst)πθ(atst),1ϵ,1+ϵ)A^(st,at))]

L v a l u e ( ϕ ) = E τ ′ ∼ π θ o l d [ max ⁡ ( ( R ^ t − V ^ ϕ ( s t ) ) 2 , ( R ^ t − V ^ ϕ c l i p ( s t ) ) 2 ) ] \mathcal{L}_{value}(\phi) = \mathbb{E}_{\tau' \sim \pi_{\theta}^{old}} \left[ \max \left( (\hat{R}_t - \hat{V}_{\phi}(s_t))^2, (\hat{R}_t - \hat{V}_{\phi}^{clip}(s_t))^2 \right) \right] Lvalue(ϕ)=Eτπθold[max((R^tV^ϕ(st))2,(R^tV^ϕclip(st))2)]

其中,

V ^ ϕ c l i p ( s t ) = clip ( V ^ ϕ ( s t ) , V ϕ o l d ( s t ) − ϵ , V ϕ o l d ( s t ) + ϵ ) \hat{V}_{\phi}^{clip}(s_t) = \text{clip} \left( \hat{V}_{\phi}(s_t), V_{\phi}^{old}(s_t) - \epsilon, V_{\phi}^{old}(s_t) + \epsilon \right) V^ϕclip(st)=clip(V^ϕ(st),Vϕold(st)ϵ,Vϕold(st)+ϵ)

这里, π θ o l d \pi_{\theta}^{old} πθold V ϕ o l d V_{\phi}^{old} Vϕold 用于采样, τ ′ \tau' τ 是会话轨迹。然后将这些组合成统一的强化学习损失:

L R L ( θ , ϕ ) = L p o l i c y ( θ ) + η ⋅ L v a l u e ( ϕ ) \mathcal{L}_{RL}(\theta, \phi) = \mathcal{L}_{policy}(\theta) + \eta \cdot \mathcal{L}_{value}(\phi) LRL(θ,ϕ)=Lpolicy(θ)+ηLvalue(ϕ)

其中 η \eta η 是价值目标的系数。

8.2.3、Selector

Selector 接受两个输入:一个学术查询和一篇研究论文(包括其标题和摘要),生成两个输出:

  1. 一个单一的决策词元 d d d,取值为 “True” 或 “False”,表示该论文是否满足查询要求
  2. 一个理由 r = ( r 1 , r 2 , ⋯ , r m ) r = (r_1, r_2, \cdots, r_m) r=(r1,r2,,rm),包含 m m m 个词元,用于支持这一决策。这个理由有两个作用:
    • 通过联合训练模型来生成决策和解释,从而提高决策的准确性
    • 在 PaSa 的应用中提供推理依据,进而增强用户的信任度

为了提高 Crawler 的训练效率,决策词元会在理由之前给出,这使得 Selector 在 Crawler 的训练过程中可以充当一个单词元奖励模型。此外,决策词元的词元概率可用于对搜索结果进行排序。决策和理由的顺序并不影响选择智能体的性能。

PaSa 通过进行模仿学习来优化 Selector。训练数据的收集和训练细节如下。

选择智能体的实现细节

首先从 AutoScholarQuery 的训练集中采样用户查询。对于 AutoScholarQuery 训练集中的每个用户查询及其对应的一篇论文,提示 GPT-4o 生成一个决策词元以及理由(提示内容见下表)。

剔除那些决策词元为 “False” 的数据,因为这与 AutoScholarQuery 的标签相矛盾。剩余的数据将作为正样本 <用户查询,论文> 对保留下来。

接下来,使用基于 GPT-4o 的 PaSa-GPT-4o 模拟部分论文搜索过程。在这个模拟中,每篇论文都有 50% 的概率被添加到论文队列中。如果某篇论文没有被 GPT-4o 选中,并且也不在 AutoScholarQuery 的训练集中,那么对应的 <用户查询,论文> 对将被标记为负样本。

最终的训练数据集由 19,812 个 <用户查询,论文> 对组成,每个对都带有由 GPT-4o 生成的决策词元以及理由,这些数据对均取自 AutoScholarQuery 训练集中的 9000 个实例。

论文选择提示

下表展示了用于 PaSa 的 Selector 和 GPT-4o 判断一篇论文是否符合用户查询要求的提示内容。

下表呈现了用于与 GPT-4o 配合自动生成 AutoScholarQuery 的提示模板。对于每篇论文,提取其 “相关工作” 部分,将其输入到 GPT-4o 中,并使用该提示从 “相关工作” 部分中提取学术查询及其相应的论文答案。

参考文献

  1. PaSa: An LLM Agent for Comprehensive Academic Paper Search

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22482.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux提权之脏牛Dirty COW CVE-2016-5195 (四)

CVE-2016-5195&#xff08;Dirty Cow脏牛&#xff09; 脏牛提权的利用方式不同于其他的内核溢出提权&#xff0c;这里单独记录 脏牛是一个非常经典的内核提权漏洞&#xff0c;存在Linux内核中已经有长达9年的时间&#xff0c;在2007年发布的Linux内核版本中就已经存在此漏洞&…

基于SpringBoot+vue+uniapp的智慧旅游小程序+LW示例参考

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

【微服务】深入解析spring aop原理

目录 一、前言 二、AOP 概述 2.1 什么是AOP 2.2 AOP中的一些概念 2.2.1 aop通知类型 2.3 AOP实现原理 2.3.1 aop中的代理实现 2.4 静态代理与动态代理 2.4.1 静态代理实现 三、 jdk动态代理与cglib代理 3.1 jdk动态代理 3.1.1 jdk动态代理模拟实现 3.2 CGLIB 代理…

vxe-table 如何实现跟 Excel 一样的数值或金额的负数自动显示红色字体

vxe-table 如何实现跟 Excel 一样的数值或金额的负数自动显示红色字体&#xff0c;当输入的值为负数时&#xff0c;会自动显示红色字体&#xff0c;对于数值或者金额输入时该功能就非常有用了。 查看官网&#xff1a;https://vxetable.cn gitbub&#xff1a;https://github.co…

C++:dfs,bfs各两则

1.木棒 167. 木棒 - AcWing题库 乔治拿来一组等长的木棒&#xff0c;将它们随机地砍断&#xff0c;使得每一节木棍的长度都不超过 5050 个长度单位。 然后他又想把这些木棍恢复到为裁截前的状态&#xff0c;但忘记了初始时有多少木棒以及木棒的初始长度。 请你设计一个程序…

MATLAB学习之旅:从入门到基础实践

在当今科技飞速发展的时代,MATLAB作为一款强大的数学软件,犹如一把神奇的钥匙,能够打开众多领域的大门。无论是工程计算、数据分析,还是算法开发、可视化呈现,MATLAB都展现出了无与伦比的魅力。今天,就让我们踏上这段奇妙的MATLAB学习之旅,从最基础的部分开始,逐步探索…

verilog笔记

Verilog学习笔记&#xff08;一&#xff09;入门和基础语法BY电棍233 由于某些不可抗拒的因素和各种的特殊原因&#xff0c;主要是因为我是微电子专业的&#xff0c;我需要去学习一门名为verilog的硬件解释语言&#xff0c;由于我是在某西部地区的神秘大学上学&#xff0c;这所…

基于SpringBoot的城乡商城协作系统【附源码】

基于SpringBoot的城乡商城协作系统 效果如下&#xff1a; 系统登陆页面 系统管理员主页面 商品信息管理页面 系统用户主页面 社区交流页面 用户充值页面 订单提交页面 商品信息页面 研究背景 随着互联网技术的飞速发展&#xff0c;电子商务在我国城乡地区的普及程度越来越高…

tortoiseSVN 如何克隆项目到本地

导入项目成功&#xff0c;如下图&#xff1a;

1.1 go环境搭建及基本使用

golang下载地址&#xff1a; Download and install - The Go Programming Language (google.cn) 验证安装是否成功&#xff1a; go version 查看go环境 go env 注意&#xff1a;Go1.11版本之后无需手动配置环境变量,使用go mod 管理项目&#xff0c;也不需要把项目放到GO…

使用Ubuntu搭建Java部署环境

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f439;今日诗词:小舟从此逝&#xff0c;江海寄余生&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小…

从零搭建微服务项目Pro(第1-1章——Quartz实现定时任务模块)

前言&#xff1a; 在企业项目中&#xff0c;往往有定时任务发布的需求&#xff0c;比如每天晚9点将今日数据备份一次&#xff0c;或每月一号将上月的销售数据邮件发送给对应的工作人员。显然这些操作不可能是人工到时间点调用一次接口&#xff0c;需要编写专门的模块完成任务的…

深蓝学院自主泊车第3次作业-IPM

目录 1 题目介绍2 求解 1 题目介绍 已知鱼眼相机的参数&#xff0c; image_width&#xff0c;表示图像的宽度image_height&#xff0c;表示图像的高度 ξ \xi ξ&#xff0c;表示鱼眼相机参数 k 1 k_1 k1​、 k 2 k_2 k2​&#xff0c;表示径向相机参数 p 1 p_1 p1​、 p 2 p…

中兴G7615AV5

参考文献&#xff1a; G7615AV5 光猫新版固件通过修改备份配置文件固化Telnet 中兴7615AV5光猫配置指南 前言&#xff1a;&#xff08;不如咸鱼30远程全权搞定&#xff0c;花小钱办大事&#xff09;截至2025年2月22号&#xff0c;这个设备开启Telnet只能去咸鱼找别人远程开&…

记录:Docker 安装记录

今天在安装 ollama 时发现无法指定安装目录&#xff0c;而且它的命令行反馈内容很像 docker &#xff0c;而且它下载的模型也是放在 C 盘&#xff0c;那么如果我 C 盘空间不足&#xff0c;就装不了 deepseek-r1:70b &#xff0c;于是想起来之前安装 Docker 的时候也遇到过类似问…

大数据学习之任务流调度系统Azkaban、Superset可视化系统

一.任务流调度系统Azkaban 1.课程介绍 2.为什么需要工作流调度系统 3.AZKABAN是什么 4.AZKABAN下载 5.制作安装包 6.tar包准备 7.MYSQL配置AZKABAN 8.配置EXECUTOR SERVER 9.配置WEBSERVER 10.单作业实战_yaml语言(今天稍晚更新) 11.单作业实战 12.多作业依赖实战 13.失败自动重…

PiscTrace的开发者版

基于 PiscTrace 架构的视图处理的纯开发板&#xff0c;支持静态图片、实时视频流、摄像头视频流和网络视频流的处理。与 PiscTrace 应用版相比&#xff0c;开发者版通过直接的代码开发&#xff0c;提供了更高的灵活性和可定制性&#xff0c;适用于需要深度定制和复杂处理的应用…

excel中VBA宏的使用方法?

先编写宏代码&#xff1a;&#xff08;随便新建打开一个记事本文档 或者 word文档&#xff09; 然后&#xff1a;

selenium爬取苏宁易购平台某产品的评论

目录 selenium的介绍 1、 selenium是什么&#xff1f; 2、selenium的工作原理 3、如何使用selenium&#xff1f; webdriver浏览器驱动设置 关键步骤 代码 运行结果 注意事项 selenium的介绍 1、 selenium是什么&#xff1f; 用于Web应用程序测试的工具。可以驱动浏览…

USC安防平台之元数据检索

平台基于深度学习技术&#xff0c;支持CPU和NVIDIA GPU推理&#xff0c;支持周界和违法行为实时分析&#xff0c;并存储元数据到流式视频数据库中&#xff0c;可以根据不同的条件搜索&#xff0c;从而提供更强大的安全防范策略和事后调查手段。 平台根据用户自定义规则来检测异…