ToolkenGPT:用大量工具增強LLM

8f024a270dedade4b4b2bdebbad5430d.png

深度學習自然語言處理 原創
作者:cola

用外部工具增強大型語言模型(LLM)已經成為解決復雜問題的一種方法。然而,用樣例數據對LLM進行微調的傳統方法,可能既昂貴又局限于一組預定義的工具。最近的上下文學習范式緩解了這一問題,但有限的上下文長度局限于少樣本樣例,導致不能完全挖掘工具的潛力。此外,當有許多工具可供選擇時,上下文學習可能完全不起作用。因此本文提出了一種替代方法ToolkenGPT,它結合了雙方的優勢。

論文:
ToolkenGPT: Augmenting Frozen Language Models with Massive Tools via Tool Embeddings

地址:
https://arxiv.org/abs/2305.11054

介紹

LLM已經成為各種現實世界應用程序的強大工具。隨著這些模型的不斷發展,人們對其與現實世界交互的潛力越來越感興趣,并通過與其他工具集成來增強其功能,如計算器、數據庫等。這些模型掌握和控制各種工具的能力不僅是其智能的標志,還標志著一條有希望的克服其部分基本弱點的道路。包括更新最新的世界知識,減少其幻覺,以及執行符號操作等。

然而,新工具的迅速出現,如高級軟件庫、新穎的API或特定領域的實用程序,為LLM的工具學習任務帶來了額外的豐富和復雜性。這種不斷的演變強調了賦予LLM快速適應和掌握大量新工具的能力的重要性。

表1展示了與LLM的工具集成的兩種主要研究方法。第一種方法涉及微調以學習特定工具。雖然這種方法可以產生很好的結果,但它的計算成本很高,并且缺乏對新工具的適應性。第二種方法依賴于上下文學習,LLM通過提示中提供的上下文樣例來學習如何使用工具。這種方法允許LLM處理新引入的工具。然而,上下文學習有其獨特的局限性,使它不可能在上下文中使用大量的工具。此外,僅通過少量樣本掌握新工具可能具有挑戰性。10749070bb3f6f6495db75668884ab7b.png本文提出ToolkenGPT,一種使LLM能夠掌握大量的工具,而不需要任何微調,同時允許LLM快速適應新工具。ToolkenGPT的關鍵思想是將每個工具表示為一個新token(“toolken”),以增加詞匯表。具體來說,每個工具都與插入到LLM頭部的嵌入相關聯,就像常規的單詞tokens嵌入一樣。在生成過程中,一旦預測到toolken, LLM臨時切換到特殊模式(通過提示)以產生工具要執行的輸入參數,并將輸出注入到生成中(參見圖1)。這種方法為LLM提供了一種有效的方法,只需學習輕量級toolken嵌入即可掌握工具。9ad1dbaa6777aa85a2751bde367015da.png因此,ToolkenGPT結合了微調和上下文學習范式的優勢,同時避免了它們的局限性:與只能容納少量工具和少量樣例的上下文學習相比,ToolkenGPT允許大量工具(通過簡單地在詞匯表中插入各自的工具),并可以使用廣泛的樣例數據來學習toolken嵌入;與微調相比,不僅需要最小的訓練成本,而且還提供了一種方便的方法,通過擴展toolken詞匯表來動態插入任意新工具。

ToolkenGPT掌握大量工具

首先介紹一下工具使用語言建模的背景和符號表示。通常,LLMs對單詞標記序列為,其中每個單詞token來自LLM的詞匯,即,表示第步之前的部分詞token序列。在實踐中,通常設置序列的前綴(稱為提示),以引導LLM生成所需的內容。進一步深入,下一個token的分布被預測為,其中是當前上下文的最后一個隱藏狀態,是單詞token的嵌入矩陣(也稱為語言模型頭)。

給定工具集,我們的目標是使LLM能夠調用這些工具的子集來解決復雜的問題。所提出的靈活公式允許工具通過返回一些可以幫助LLM進行文本生成(例如計算)或影響現實世界環境(例如機器人動作)的結果來發揮作用。要在生成過程中調用工具,LLM首先需要選擇工具,然后輸入參數。在圖1所示的運行示例中,在答案生成過程(“Reasoning model”)中,選擇數學運算符square作為工具,并在“工具模式”中生成一個操作數16作為參數。一旦外部工具收到調用,它就會執行工具并返回結果256,返回Reasoning model。

框架概覽

ToolkenGPT的核心思想是明確地將工具制定為token。每個工具集被參數化為一個工具集嵌入向量,我們將一組工具集嵌入表示為一個矩陣,即。假設我們已經訓練了toolken嵌入,如圖1所示,LLM默認處于推理模式,以生成下一個token。該框架允許LLM統一考慮單詞token和工具token。具體來說,工具嵌入矩陣與連接。因此,LLM預測下一個token的概率如下:0448945f1aa1916d4db52ff4fa04e0d7.png其中下一個token可以是詞token,也可以是工具集,即,且[;]是拼接操作。我們將工具表述為toolken嵌入,自然允許通過擴展toolken嵌入矩陣來快速適應新工具。要執行工具,一旦其toolken被預測為下一個令牌(如圖1中的“mode switch”所示),LLM將切換到“tool mode”,其目的是為工具生成參數。

具體來說,LLM暫停生成并將當前生成的上下文附加到另一個提示符。工具模式下的提示由預測工具的上下文樣例組成,展示如何通過引用特殊語法[tool]中的工具調用來生成工具參數。然后LLM可以在樣例中遵循模式來完成當前工具調用的參數。與之前完全依賴上下文學習進行工具學習的方法相比,所提出框架只將完成論證的簡單工作留給上下文學習。此外,對于單個指定工具的樣例,將有豐富的上下文空間。最后,將參數發送到指定的工具執行,并將返回值發送回推理模式下的文本。

學習工具嵌入

該框架凍結了原始LLM的參數,并使用工具嵌入引入了最小的額外訓練開銷。該嵌入矩陣包含唯一需要優化的參數,但與其他有效的LLM微調方法不同,它不需要梯度流過LLM參數的主體,從而導致非常穩定和高效的訓練。因此,toolken嵌入的微調與LLM推理使用了幾乎相同的GPU內存。每當添加新工具時,toolken嵌入可以方便地擴展,然后,在涉及新工具的工具樣例數據上的后續訓練逐漸細化其嵌入。此外,與只將少數示例消化為訓練信號的上下文學習方法不同,ToolkenGPT能夠從大規模樣例中調整工具嵌入。

本文主要關注通過工具樣例學習工具嵌入,它可以是域內訓練數據,也可以是LLM生成的合成數據。我們首先描述訓練數據的格式和訓練目標,并使用圖1中的相同示例來展示如何將其用于訓練。例如"the area is 256 square feet …"可以標記為token序列s=("the","area","is","2","5","6","square ","feet",…)。為了表明何時預測工具集,我們需要一個混合了詞token和工具集的平行序列,即s'=(“the”,“area”,“is”,“[square]”,“[N/a]”,“[N/a]”,“square”,“feet”,…)。在s中(“2”,“5”,“6”)的子序列是返回的工具結果應該填充的地方,我們選擇s'中對應的第一個token作為工具調用的工具,以下token填充[N/A],表示在損失計算中被忽略。因此,給定一個由配對序列D={(s,s')}組成的數據集,ToolkenGPT的訓練目標為:608e539cf8392d433f8ab58cbb5e8ffe.png

其中在公式1中定義了,是指示函數,表示我們在訓練期間忽略[N/A]標記。因此,我們的訓練過程在很大程度上與推理模式中的推理一致。

獲取配對數據的方法主要有兩種。首先,一些數據集與自然語言序列一起提供了基準事實工具調用。為了將數據用于監督學習,我們對其進行預處理,以獲得訓練所需的成對數據,如上文所述。其次,探索了用LLM合成工具樣例,分享了與自指導類似的想法。對這個過程的直觀解釋是將LLM中的知識提取到新的工具嵌入中。具體來說,我們可以用工具文檔和一些具有特殊語法指示工具調用的樣例來提示LLM,例如,The capital of U.S. is <capital> ("U.S.")="Washington D.C."。在此基礎上,LLM可以生成一些新的用例,這些用例利用給定的工具并使用相同的語法引用工具調用。然后,我們可以輕松地定位工具調用,并將數據處理為用于訓練的成對數據。

實驗

作者將ToolkenGPT應用于三個不同的應用:用于數值推理的算術工具、用于基于知識的問答的數據庫API、用于具具計劃生成的機器人動作。重點關注方法如何準確地調用工具,以及它們如何成功地解決任務。實驗表明,ToolkenGPT可以有效地掌握大量工具,同時利用它們來解決復雜問題,性能有所提高,始終優于先進的提示技術。

數理推理

探索四個基本算術函數(+、?、×、÷)的可用性。此外,為了對更復雜數學問題中的工具處理能力進行基準測試,包括更多可用的工具,即擴展的函數集,并創建一組合成數據。結果表明,通過僅在合成數據上進行訓練,ToolkenGPT顯著優于基線。

數據集

為全面評估工具學習在數值推理方面的能力,策劃了兩個新的測試數據集:

  • GSM8K-XL:現有GSM8K數據集的增強版本。GSM8K是一個包含不同語言的小學數學應用題的數據集,涉及使用4種基本算術運算(+、?、×、÷)進行一系列計算,以得到最終答案。在測試集中,我們放大數字以增加LLMs的計算難度,這導致了GSM8K-XL數據集,具有568個具有更大數字的測試用例。

  • FuncQA:該數據集需要至少13個運算符(如power、sqrt、lcm)來解決,在沒有外部計算器的情況下,人類和LLM都具有挑戰性。將FuncQA分為兩個子集:68個只需一次操作即可求解的單跳問題(one-hop question, FuncQAone)和60個需要少量推理步驟的多跳問題(multi-hop question, FuncQAmulti)。

對比方法

我們為每個可用的數學運算符訓練toolken嵌入。在推理過程中,用4-shot思維鏈的例子來提示LLM。為了進行比較,對以下基線進行了評估:

  • 使用ChatGPT作為基礎LLM。這個基線衡量了LLM用其自身的推理和計算能力回答復雜數值推理問題的能力。

  • 思維鏈(chain -of- thought, CoT)是一種更先進的提示技術。在這種方法中,精心設計了一系列相互關聯的提示,以指導LLM一步步地推理過程。示例中的推理鏈與我們在ToolkenGPT中使用的推理鏈相同,但沒有可用的函數。

  • ReAct通過促使LLM以交錯的方式生成語言推理軌跡和工具調用,將推理和工具相結合。具體來說,不僅僅是提供推理鏈,還引入了特殊的語法來調用操作符。一旦在推理過程中檢測到語法,就會調用該工具來計算結果。

結果分析

表2顯示了所有方法在GSM8K-XL和FuncQA數據集上的性能。在GSM8K-XL數據集上,使用CoT的零樣本ChatGPT和少樣本學習在沒有工具幫助的情況下很難計算大量的數字,而ReAct和ToolkenGPT設法以較大的幅度持續提高準確性。這兩個方法都可以在必要時調用正確的工具,因為工具集只有4個基本操作符。

然而,對于FuncQAone和FuncQAmulti數據集,隨著工具數量的增加,學習調用適用的工具變得具有挑戰性。在ReAct中,盡管所有的工具都列在提示符的開頭,但在有限的上下文中包括每個工具的樣例是不可行的。因此,ReAct很容易受到缺少工具調用、錯誤的工具調用和預測錯誤的參數的影響,特別是對于沒有在上下文中樣例的工具。ToolkenGPT在單跳和多跳場景中都優于所有基線,當有許多工具時,顯示出卓越的工具學習能力。6ca3d1e3d35b3b00c261a307adeffe5c.png

基于知識的問答

由于有限的知識限制,LLM經常犯事實錯誤和幻覺。讓它們能夠訪問知識庫(KBs)是一個有希望的研究方向,以減少它們的幻覺。我們將對知識庫的訪問表述為查詢數據庫的API。因此,每個關系查詢都可以被視為一個工具,其輸入參數是主題實體,輸出是相應的尾部實體。

數據集

KAMEL是一個基于Wikidata的問答數據集。參照ToolFormer采用KAMEL來評估KB查詢工具的使用情況。KAMEL包含了來自Wikidata的243個關系的知識,每個關系都與一個問題模板相關聯,以便將Wikidata中的一個事實轉換為一個問題。這個數據集總共有234個工具。為了分析不同數量工具的性能,我們從原始測試集中抽樣創建了四個子集。每個子集由與不同數量關系相關的問題組成,分別對應于30、60、100和234。每個子集的大小是500。

對比方法

我們設置了兩個不同的框架:

  • ToolkenGPT(sup):從KAMEL的訓練集中每個關系采樣200個示例,并通過監督學習訓練toolken嵌入。該設置表示有足夠的域內訓練數據可用的真實場景。

  • ToolkenGPT(syn):假設域內訓練數據不可用,使用每個關系的文本描述與ChatGPT合成訓練數據,使用潛在的工具winner_of(NOBEL PEACE PRIZE IN 2020)→UNITED NATIONS WORLD FOOD PROGRAMME。平均使用40個示例來訓練每個toolken嵌入。

本文提出以下比較基線:

  • 提示:用LLM的內部知識回答問題。我們在" question:[QUESTION]\nThe answer is"提示符中構建每個問題,并讓LLM繼續這個句子。

  • 上下文學習(ICL):在提出問題之前,我們列出所有可用工具的工具樣例和描述。樣例以特定的語法顯示,以便LLM可以以類似的風格生成以進行解析。

  • 上下文學習(desc):所有可用工具的描述將在上下文中提供,但它們的樣例并不直接顯示。相反,我們展示了測試子集中不包含的工具的樣例。

所有方法的基本模型都是LLaMA-13B。

結果分析

我們在圖2中展示了涉及不同數量關系的4個測試集上的實驗結果。ToolkenGPT(sup)取得了最高的結果,表明在有大量域內訓練數據時,學習toolken嵌入是一種有效的方法。相反,即使上下文學習也會在上下文中看到域內訓練數據,但它仍然不清楚要調用哪些工具。此外,當要使用的工具超過30個時,上下文長度限制會導致性能急劇下降。多工具場景中的失敗揭示了上下文學習范式的根本局限性。ToolkenGPT(syn)在所有子集中也優于所有其他基線。

合成訓練數據通常與數據集具有非常不同的表達風格,但仍然有助于LLM理解這些關系。這一成功反映了該框架的靈活性,即使在沒有域內訓練數據可用的情況下也可以應用。上下文學習(desc)在這項任務中通常失敗,因為LLM很難記憶在上下文中顯示的文本描述并將其映射到關系標識符。該結果證實了LLM在使用不熟悉的工具時存在困難這一猜想。基于這種觀察,我們有理由推測,LLM主要是從它們的標識符中回憶工具,而不是真正從它們的描述中學習使用工具。e460d9917b7a3a6461532ec57c0a6a8e.png

具身計劃生成

最近,有許多研究嘗試利用LLM作為具身智能體的控制器。我們也探索了所提出框架如何應用于具身智能體的計劃生成。與之前提示LLM的方法相比,ToolkenGPT可以通過學習智能體動作和對象的toolken嵌入來更好地理解環境。

數據集

VirtualHome:一個典型家庭活動的仿真平臺,活動程序知識庫由許多可在VirtualHome中執行的任務和計劃組成。從活動程序中得出297個任務的子集。對于每個任務,給模型一個高級目標(例如:“讀書”)、詳細的指令(例如:“我會躺在床上,打開書開始閱讀”,以及對環境的描述,其中包括初始狀態和環境的對象列表(例如:“我在[家庭辦公室]。我可以操作的對象是['郵件','冰箱','電視',…,‘小說’)”。該模型被期望輸出一個可執行的計劃,它是一個動詞-對象指令的有序列表。每個任務都有一個初始狀態圖和最終狀態圖,從而能夠使用模擬器驗證生成的計劃,并將最終狀態與真實狀態進行比較。我們將數據集劃分為包含247個任務的訓練集和包含50個任務的測試集,數據集中總共使用了25個動詞和32個對象。

對比方法

我們認為VirtualHome中的所有動作和對象都是工具。加上一個額外的[END]函數表示計劃的結束,我們總共有58個工具。對于這個數據集,我們不需要圖1中描述的參數生成過程,因為這些工具不接受參數。在推理過程中,ToolkenGPT交替生成動作工具和對象工具,并以[END]工具結束。toolken嵌入在訓練集上進行訓練。將該方法與以下基線進行了比較:

  • 上下文學習:提示LLM并將其輸出解析為計劃。LLM顯示了行動列表、3個樣例計劃和一個具有目標、詳細描述和環境描述的新任務。

  • Translation:使用SentenceRoBERTa-large將動作或對象轉換為具有最高余弦相似度的可用動作或對象。

  • Grounded Decoding:用affordance grounding函數,鼓勵LLM生成有效的動作和對象。

結果分析

我們在表3中列出了結果。盡管使用上下文學習的LLM在上下文中明確列出了所有有效的動作和對象,但有時它不能將其預測作為可接受的指令的基礎。即使動作和對象是有效的,但在VirtualHome中往往違反物理規律,導致成功率較低。ToolkenGPT不僅通過其設計自然地預測有效的動作和對象,而且還通過從更多的訓練任務中學習toolken嵌入來實現最高的成功率。dbd1444dfff1d2f8ddc756e6e6b7ed4c.png圖3展示了一個具體的例子來說明差異。2af47d2abdc3e825e6061b2c8f01a9d8.png

分析

計算損耗

通過實驗比較了ToolkenGPT和微調在計算效率和性能方面的差異。本文在LLaMA-7B上實現了這兩種方法。結果列在表4中。92952856cdc29087c3cae7d04a612385.png對LLMs進行微調后,在FuncQA上的性能略好于ToolkenGPT。即使我們應用了以效率著稱的LoRA,但與訓練工具嵌入相比,微調的時間消耗明顯更長。

消融學習

ToolkenGPT的設計有利于工具選擇和參數完成。為了理解它們各自對性能的貢獻,我們進一步實現了一個將ReAct-style的提示和參數完成的子程序(工具模式)相結合的基線。在工具模式下,LLM只使用所選工具對樣例進行提示,這將提供比ReAct提示更相關的知識。dcd83e39d60b33c02e4f6c4bc92dfd8d.png如表5所示,添加工具模式確實可以通過提高參數補全的準確性來改進普通的ReAct提示方法。然而,ToolkenGPT仍然在很大程度上優于這個改進的基線,這表明toolken嵌入有效地幫助LLM決定何時調用以及調用哪個工具。

訓練數據

因為有兩種不同的訓練數據來源,并且很容易處理或合成更多的數據,所以在KAMEL上擴展實驗。對每個工具的ToolkenGPT(sup)和ToolkenGPT(syn)進行了10/20/40的訓練樣本采樣,并報告了在包含30個工具的測試集上的精度。結果匯總在表6中。98503da116a00044e8c3c2a7a0c0b1d1.png在相同的數據規模預算下,使用監督數據進行訓練可以獲得更好的性能。盡管在大多數合成數據實例中沒有觀察到明顯的錯誤,但合成數據和測試集之間的分布差距可能會阻止toolken嵌入的良好表現。更大的訓練集有利于提高兩個數據源的性能。

總結

提出了ToolkenGPT,一種用大量外部工具來增強LLM的新方法。該方法為每個工具引入了toolken嵌入的概念,使LLM能夠像生成單詞標記一樣輕松地調用和使用不同的工具。該方法克服了當前微調和上下文學習范式的限制,使LLM能夠適應更大的工具集,并使用廣泛的樣例數據來學習工具嵌入。ToolkenGPT能夠快速適應和利用新工具,表明它有能力跟上不斷發展的大規模工具的步伐。


備注:昵稱-學校/公司-方向/會議(eg.ACL),進入技術/投稿群

87648acd8897e9cb5b9bc4ad20564940.png

id:DLNLPer,記得備注呦

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212811.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212811.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212811.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Shell 常用命令詳解-上

Shell 常用命令詳解-上 1.目錄查閱相關命令2.文件操作相關命令 1.目錄查閱相關命令 ll 命令 命令描述&#xff1a;ll命令用于顯示指定工作目錄下的內容。 命令格式&#xff1a;ll [參數] [目錄名]。 參數說明&#xff1a; 參數說明-a顯示所有文件及目錄&#xff08;包括隱藏文…

【機器學習】041_模型開發迭代過程

一、模型開發的一般步驟 1. 明確研究問題 確定問題的組成和結果&#xff0c;明晰問題是分類問題還是回歸問題 2. 決定系統總體架構 ①理解數據&#xff1a;采集&#xff08;爬取&#xff09;數據&#xff0c;生成&#xff08;導入&#xff09;數據&#xff0c;進行數據清洗…

代碼隨想錄二刷 |二叉樹 |101. 對稱二叉樹

代碼隨想錄二刷 &#xff5c;二叉樹 &#xff5c;101. 對稱二叉樹 題目描述解題思路 & 代碼實現遞歸法迭代法使用隊列使用棧 題目描述 101.對稱二叉樹 給你一個二叉樹的根節點 root &#xff0c; 檢查它是否軸對稱。 示例 1&#xff1a; 輸入&#xff1a;root [1,2,2,…

zcms企業官網建站系統源碼搭建-支持頁面自定義

1.支持mysql&#xff0c;sqlite&#xff0c;access三種數據庫。 2.模板和標簽與asp版的zzzcms通用。 3.asp版的zzzcms的access數據庫可直接使用。 4.支持手機站。 &#xff08;增刪改查不做描述&#xff09;&#xff1a; 網站信息 名稱&#xff0c;logo&#xff0c;微信&…

基于OpenCV的流水線包裝箱檢測計數應用(附源碼)

導 讀 本文主要介紹基于OpenCV的流水線包裝箱檢測計數應用,并給出源碼。 資源下載 完整代碼和視頻下載地址: https://github.com/freedomwebtech/rpi4-conveyor-belt-boxces-counter 核心代碼如下(cboxtest.py): import cv2import numpy as npfrom tracker import*cap=c…

【MYSQL】單表查詢

查詢語法&#xff1a; select 字段&#xff08;*表示全字段&#xff09; from 數據表 【where 條件表達式】 【group by 分組字段【having 分組條件表達式】】 【order by 排序字段【asc | desc】】 例子&#xff1a; 教職工表Teacher(Tno, TName, age, sal, mgr, DNo)&#…

C# 圖解教程 第5版 —— 第17章 轉換

文章目錄 17.1 什么是轉換17.2 隱式轉換17.3 顯示轉換和強制轉換17.4 轉換的類型17.5 數字的轉換17.5.1 隱式數字轉換17.5.2 溢出檢測上下文17.5.3 顯示數字轉換 17.6 引用轉換17.6.1 隱式引用轉換17.6.2 顯式引用轉換17.6.3 有效顯式引用轉換 17.7 裝箱轉換17.7.1 裝箱是創建副…

前端發起更改數據請求后再獲取后端數據發現數據并未更改的一個解決辦法

前端發起更改數據請求后再獲取后端數據發現數據并未更改的一個解決辦法 問題再現 async function refuseRefund(id,type){if(confirm(確定拒絕&#xff1f;)){await fetch(http://127.0.0.1:3000/api/refuseRefund, {method: POST,headers: {Content-type: application/json}…

vue項目搭建---1.搭建基礎的框架

目錄 1. pnpm下載1.1 安裝1.2 差異1.3 鏡像源設置 2. 項目2.1 vite創建項目2.2 項目配置2.3 piniavue-routermain.jsstore/index.jsrouter/index.jsvue文件里使用示例 2.4 eslint prettier.eslintrc.js.eslintignore.prettierrc 2.5 樣式2.6 commitizenpackage.json.cz-config…

MySQL - 聚簇索引和非聚簇索引,回表查詢,索引覆蓋,索引下推,最左匹配原則

聚簇索引和非聚簇索引 聚簇索引和非聚簇索引是 InnoDB 里面的叫法 一張表它一定有聚簇索引&#xff0c;一張表只有一個聚簇索引在物理上也是連續存儲的 它產生的過程如下&#xff1a; 表中有無有主鍵索引&#xff0c;如果有&#xff0c;則使用主鍵索引作為聚簇索引&#xff1b;…

【Scala】Scala中的一些基本數據類型的特性 列表、元組、構造器、單例對象、伴生類、伴生對象、抽象類與特質

列表 使用List(“”,“”,“”)去聲明 sliding 和 groued表示迭代器 val iter List("Hadoop", "Spark", "Scala") sliding 2// sliding 和 groued 是有區別的while (iter.hasNext){println(iter.next())}for (elem <- iter){println(elem)}…

極速學習SSM之SpringMVC筆記

文章目錄 一、SpringMVC簡介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特點 二、HelloWorld1、開發環境2、創建maven工程a>添加web模塊b>打包方式&#xff1a;warc>引入依賴 3、配置web.xmla>默認配置方式b>擴展配置方式 4、創建請求控制器5、創建springMVC…

Kafka 最佳實踐:構建可靠、高性能的分布式消息系統

Apache Kafka 是一個強大的分布式消息系統&#xff0c;被廣泛應用于實時數據流處理和事件驅動架構。為了充分發揮 Kafka 的優勢&#xff0c;需要遵循一些最佳實踐&#xff0c;確保系統在高負載下穩定運行&#xff0c;數據可靠傳遞。本文將深入探討 Kafka 的一些最佳實踐&#x…

四. 基于環視Camera的BEV感知算法-環視背景介紹

目錄 前言0. 簡述1. 環視背景介紹2. 環視思路3. 主流基于環視Camera的算法詳解總結下載鏈接參考 前言 自動駕駛之心推出的《國內首個BVE感知全棧系列學習教程》&#xff0c;鏈接。記錄下個人學習筆記&#xff0c;僅供自己參考 本次課程我們來學習下課程第四章——基于環視Camer…

基于Spring+Spring boot的SpringBoot在線電子商城管理系統

SSM畢設分享 基于SpringSpring boot的SpringBoot在線電子商城管理系統 1 項目簡介 Hi&#xff0c;各位同學好&#xff0c;這里是鄭師兄&#xff01; 今天向大家分享一個畢業設計項目作品【基于SpringSpring boot的SpringBoot在線電子商城管理系統】 師兄根據實現的難度和等級…

高云GW1NSR-4C開發板M3硬核應用

1.M3硬核IP下載&#xff1a;Embedded M3 Hard Core in GW1NS-4C - 科技 - 廣東高云半導體科技股份有限公司 (gowinsemi.com.cn) 特別說明&#xff1a;IDE必須是1.9.9及以后版本&#xff0c;1.9.8會導致編譯失敗&#xff08;1.9.8下1.1.3版本IP核可用&#xff09; 以下根據官方…

SQLMap介紹

預計更新SQL注入概述 1.1 SQL注入攻擊概述 1.2 SQL注入漏洞分類 1.3 SQL注入攻擊的危害 SQLMap介紹 2.1 SQLMap簡介 2.2 SQLMap安裝與配置 2.3 SQLMap基本用法 SQLMap進階使用 3.1 SQLMap高級用法 3.2 SQLMap配置文件詳解 3.3 SQLMap插件的使用 SQL注入漏洞檢測 4.1 SQL注入…

vue3中關于echars的使用

今天介紹一個好用的插件echars&#xff0c;一個可視化插件Apache ECharts 一、使用步驟 1、安裝 npm install echarts --save 2、導入 import * as echarts from echarts 3、正式使用 echars的使用非常的簡單&#xff0c;直接點擊官網有現成的代碼的可用 代碼示例 <t…

微服務——服務保護Sentinel

雪崩問題 在單體項目里面&#xff0c;如果某一個模塊出問題會導致整個項目都有問題。 在微服務項目里面&#xff0c;單獨一個服務出問題理論上是不會影響別的服務的。 但是如果有別的業務需要調用這一個模塊的話還是會有問題。 問題產生原因和解決思路 最初那只是一個小小…

k8s之高級調度

1. CronJob 在 k8s 中周期性運行計劃任務&#xff0c;與 linux 中的 crontab 相同 注意點&#xff1a;CronJob 執行的時間是 controller-manager 的時間&#xff0c;所以一定要確保 controller-manager 時間是準確的&#xff0c;另外 cronjobapiVersion: batch/v1 kind: CronJ…