吳恩達大模型教程筆記(六)
LangChain_微調ChatGPT提示詞_RAG模型應用_agent_生成式AI - P21:3. 第二篇 - RAG 指標三元組(RAG Triad of metrics) 中英文字幕 - 吳恩達大模型 - BV1gLeueWE5N
本節課我們將深入探討評估,我們將帶你瞭解如何評估伺服器架設的核心概念,具體來說,我們將介紹三叉戟,用於拉執行三個主要步驟的度量標準,上下文相關性,基於事實的答案無關性,這些是反饋函式可擴充套件框架的示例。
LLM應用的程式化評估,然後,我們將教你如何合成生成評估資料集,給定任何無結構化語料庫,我們現在開始,我將使用筆記本帶你走遍三叉戟,答案相關性,上下文相關性和基於事實的答案無關性。
以理解如何使用真正的鏡頭來檢測幻覺。
到這個點,你已經安裝了真正的鏡頭和Lama索引。
所以我不會顯示那個步驟,對你來說,第一步將是設定OpenAI API金鑰,OpenAI金鑰用於三叉戟的完成步驟,並使用真正的鏡頭實施評估,所以,這裡有一個程式碼片段,它正好這樣做。
我們現在已經設定好了OpenAI金鑰,下一個部分,我將快速回顧使用Lama Index Jerry的查詢引擎構建,Jerry已經在第一課中走你走過了,在詳細程度上,我們將主要建立在那個課程上,現在。
第一步是設定一個真正的物件,從真正的鏡頭,我們將匯入真正的類,然後,我們將設定一個真正的物件,這個類的一個例項,然後,這個物件將被用於重置資料庫,這個資料庫將在後來的某個時候用於記錄提示,響應。
Llama Index應用程式的中間結果,以及各種評估的結果,我們將使用真正的鏡頭,現在,讓我們設定Lama Index讀者,所以,這個程式碼片段從目錄中讀取這個PDF文件。
由Andrew Eng編寫的關於如何在AI中建立職業生涯的文章,然後,將此資料載入到文件物件中。
下一步是將所有內容合併為一個大型文件,而不是每個頁面都有一個文件,這是預設設定,接下來。
我們設定句子索引,利用Llama Index的一些工具,所以你可以看到這裡,我們正在使用OpenAI GPT 3。5 Turbo,設定在零點溫度,一個將被用於完成rag的llm。
嵌入模型被設定為bg small和版本一點五,並且所有內容都正在被句子索引物件索引。
接下來我們設定句子視窗引擎,這是後來將被使用的查詢引擎,從高階rag應用中有效地進行檢索。
現在我們已經為基於句子視窗的rag設定了查詢引擎,讓我們透過實際提問來看看效果。
你如何建立你的ai投資組合,這將返回一個包含最終從lla響應的全物件,檢索的上下文片段,以及一些額外的後設資料。
讓我們來看看最終響應的樣子。
所以這裡你可以看到基於句子視窗拖動產生的最終響應,它表面上提供了一個對這個問題'如何建立你的ai投資組合'的相當好的回答,稍後,我們將看到如何將這種形式的答案與rag三叉戟進行比較。
以建立信心並識別rag這種形式的失敗模式,現在,我們已經有一個看起來在表面上相當好對這個問題的響應的例子,我們將看到如何利用反饋函式,例如,使用三段式評估這種響應方式,同時識別失敗模式。
並建立信心或迭代以改進llm應用。
現在我們已經設定了基於句子視窗的拖放應用,讓我們看看如何使用三段式來評估它,在開始之前,我們將做一些清理工作。
第一步是這個程式碼片段,它讓我們從筆記本內部啟動流體皮膚,從筆記本內部檢視儀表板,稍後你會看到,這將使用儀表板來檢視評估結果的結果,並且進行實驗,檢視不同的應用選擇,並檢視哪個在下一個階段表現更好。
我們初始化為預設提供者openai gpt three point five turbo,以進行我們的評估,這個提供者將被用於實現不同的反饋函式或評估,例如,上下文相關性,答案相關性和錨定性。
現在讓我們深入探討rag triad的每個評估,我們將在幻燈片和筆記本之間來回切換,以便給您提供完整的上下文。
首先,我們將討論答案的相關性。
記住,答案的相關性是檢查的,是否最終的響應與使用者提出的查詢相關,為了給您一個關於答案的相關性可能輸出的具體例子。
這裡是一個例子,使用者提出了問題,如何利他主義在構建職業生涯中有益,這是來自申請材料的響應,並答案的相關性評估產生兩個輸出項,一個是在0到1的尺度上的得分,答案被評估為高度相關,因此它得到了0。9的分數。
第二部分是支援證據或理由,或者是產生這個評分的思考鏈,所以這裡你可以看到,答案本身中找到的支援證據,這表明alammi評估認為它是有意義和相關的答案,我還想利用這個機會來介紹反饋函式的抽象。
答案相關性是反饋函式的一個具體例子,更一般地說,反饋函式提供了一個0到1的分數,在審查llm應用的輸入、輸出和中間結果後,讓我們現在來看看反饋函式的結構。
使用答案相關性反饋函式作為具體例子,第一個元件是提供者,在這個情況下,我們可以看到,我們正在使用openai的llm來實施這些反饋函式,請注意,反饋函式不一定必須使用llm。
我們也可以使用bert模型和其他型別的機制來實施反饋函式,我會在後面的課堂上詳細討論這一點,第二個元件是利用那個提供者,我們將實現一個反饋函式,在這個情況下,那就是相關性反饋函式,我們給它一個名字。
一個人類可讀的名字,將在我們的評估儀表板中顯示,對於這個特定的反饋函式,我們執行它於使用者輸入,使用者查詢,並且它也接受輸入,最終的輸出或響應來自應用,所以,給定使用者問題和rag的最終答案。
這個反饋函式將使用llm提供者,如openai gpt 3。5,來計算對問題的響應的相關性得分,此外,它還將提供支援證據或思考鏈的論證,以證明那個得分。
現在,讓我們回到筆記本,看看程式碼的詳細情況,現在,讓我們看看如何在程式碼中定義問題答案相關性反饋函式。
現在,讓我們看看如何從true和well定義問題答案相關性反饋函式在程式碼中,我們將匯入反饋類,然後,我們設定問題答案相關性反饋函式的不同部分,我們已經在討論中設定。
首先,我們有提供者,它是openai gpt 3。5,我們設定這個特定的反饋函式,其中,相關得分也將增強思考鏈論證,就像我在幻燈片中所示的,我們給這個反饋函式一個人類可理解的名字,我們叫它答案元素。
這將在儀表板中顯示,使使用者能夠理解反饋函式正在設定的內容,然後,我們也將反饋函式賦予輸入訪問權,那就是提示,以及輸出,在這個設定下,rag應用產生的最終響應是什麼。
在筆記本的後面,我們將看到如何將這個反饋函式應用到一組記錄上,獲取與答案相關的評估分數,以及為那個特定答案提供鏈式思考理由,那是在評估中被判斷為適當的分數。
接下來我們將深入探討的下一個反饋函式是上下文相關性,記得上下文相關性是檢查的,給定查詢的檢索過程有多好,我們將從向量資料庫中檢視每片檢索的上下文,並評估這塊上下文與所問問題的相關性如何。
讓我們看一個簡單的例子,使用者提示中的問題在這裡是,如何在職業生涯中受益於利他主義,這是檢索到的兩片上下文,在評估上下文相關性後,這些片檢索的上下文 each 都會得到一個介於零和一的分數。
你可以在這裡看到,左邊的上下文獲得了相關性得分為零點五,右邊的上下文獲得了相關性得分為零點七,因此,它被評估為與這個特定查詢更相關,然後,平均上下文,相關性得分。
是這些檢索的上下文片段相關性得分的平均值,也得到了報告,現在讓我們看看反饋函式對於上下文相關性的結構,這個結構的各種部分與答案元素的結構相似,我們幾分鐘前就審查過了。
有一個提供者是open ai,並且反饋功能是利用那個提供者來實現上下文相關性反饋功能的,與這個特定反饋函式輸入的不同之處在於,除了使用者輸入或提示之外,我們還將這個反饋函式分享,一個指向檢索上下文的指標。
那就是在rag應用執行過程中的中間結果,我們為每個檢索的上下文片段返回一個分數,評估這個上下文與被詢問的查詢的相關性或質量如何,然後,我們將這些分數聚合並平均所有檢索的上下文片段,以獲取最終分數。
你現在會發現,在答案相關性反饋函式中,我們只使用了原始輸入,在這個反饋函式中,提示和rag的最終響應,我們正在使用使用者輸入或提示以及中間結果,檢索上下文集,為了評估這兩個例子之間的檢索質量。
反饋函式的全部力量透過使用輸入得以利用,透過評估rag的應用程式的輸出和中間結果來評估其質量。
現在我們已經設定了上下文選擇,我們有條件在程式碼中定義上下文相關性反饋函式,你會發現這基本上是我走過並解釋的程式碼片段。
在幻燈片上,我們仍然在使用openai,作為提供者,Gpt三點五作為評估llm,我們正在呼叫問題陳述或上下文相關性反饋函式,它獲取輸入提示,一組檢索到的上下文片段。
它對每個檢索到的上下文片段執行評估函式,單獨,為它們每個人獲取一個得分,然後,將它們平均起來,以報告一個最終的聚合得分。現在,還有一個你可以使用的變體,如果你喜歡。
除了為每個檢索的上下文報告相關的得分外,你還可以增強它以鏈式思考推理,這樣,評估的llm不僅可以提供得分,還可以提供對其評估得分的論證或解釋,這可以透過使用u s相關性和鏈式思考推理方法實現,推理方法。
如果我給你一個具體的例子,你可以在這裡看到問題或使用者提示,你可以看到,這是一個問題或使用者提示,如何利他主義在構建職業生涯中受益。
這是檢索到的上下文片段的一個例子,並從安德魯關於這個話題的文章中刪除一段,你可以看到上下文相關性反饋函式給出了一個得分為0。7,以0到1的尺度來評估這個檢索到的上下文片段。
因為我們還在評估中引用了鏈式思考推理,它提供了這個得分為0。7的論證,現在讓我為您展示設定上下文相關性反饋函式的程式碼片段,我們以與前一個反饋函式相同的方式啟動它,利用llm提供者為評估,如果你記得。
這就是'開啟'的意思,AI GPT 3。5。
然後,我們定義了基於的反饋函式,這個定義結構上非常類似於上下文相關性的定義。
基於的度量帶有鏈式思考理由。
解釋分數,就像我在幻燈片上討論的那樣,我們給它起了名字叫做基於的,這是很容易理解的。
並且它獲得了RAG應用程式檢索的上下文集的訪問權,與上下文相關性和最終輸出或回應的rag類似,然後,最終回應中的每一句都得到一個基於分數的錨定,這些被聚合平均,以產生對完整回應的最終錨定測試分數。
在這裡的語境選擇,是與設定語境相關性反饋函式時使用的相同語境選擇。
如果你記得,僅僅從rag的檢索步驟中獲取一組檢索到的上下文片段,然後可以訪問該列表中的每個節點,從該節點中恢復上下文的文字,然後繼續處理那個,同時進行上下文相關性和錨定性評估。
我們現在已經準備好開始執行拉格應用評估。
我們已經設定了所有三個反饋函式,答案相關性,上下文相關性和錨定性,我們所需的只是一個可以進行應用和評價的評估集,並檢視它們的表現,並如果存在迭代和進一步改進的機會,讓我們現在來看看評估和迭代的工作流程。
以改進llm應用,我們將從之前課程中引入的基本拉格 llama index 開始,我們已經已經使用真鏡頭拉格三叉戟對其進行了評估。
我們將稍微關注與上下文大小相關的失敗模式,然後,我們將迭代這個基本拉格使用高階拖放技術,下一個是 llama index 句子視窗拉格,我們將重新評估這個新的先進拖放與真鏡頭拉格三叉戟,專注於這些問題。
我們是否在特定上下文中看到改進。
其他指標如何,我們專注於上下文相關性,是因為常常會出現失敗模式,因為上下文太小,一旦你增加到某個點,你可能看到上下文相關性的改進,此外,當上下文相關性提高時,我們常常發現錨定性也有所提高。
因為在完成步驟中,llm有足夠的相關上下文來產生總結,如果沒有足夠的相關上下文,它傾向於利用其內部知識從預訓練資料集中,來嘗試填補這些空白,這導致錨定性的喪失,最後,我們將嘗試不同視窗大小。
以找出哪種視窗大小產生最佳評估指標,記住,如果視窗大小太小,可能沒有足夠的相關上下文來獲得好的上下文相關性和錨定性得分,如果視窗大小變得太大,另一方面,不相關的上下文可能會滲入最終響應。
導致在錨定性或答案元素方面的不高分。
我們已經走過了三個評估或反饋函式的例子,上下文相關性和相關性與錨定性在我們的筆記本中,所有 three 都是使用 llm 評估實現的,我想指出,反饋函式可以以不同的方式實現。
我們常常看到實踐者從真實事件開始,這可能是昂貴的來收集,但仍然是一個良好的起點,我們還看到人們利用人類來做評估,這也是有幫助和有意義的,但在實踐中,真實事件難以擴充套件,只是為了給你一個具體的例子。
想象一個摘要用例,當有大段文字時,然後llm生成一個摘要,人類專家將給這個摘要打分,指示其質量如何,這也可以用於其他用例,如聊天機器人或甚至分類用例,人類的惡行在某些方面與事實類似。
就像當llm產生輸出時,或應用產生輸出時,那個應用的人類使用者將對那個輸出進行評分,它多好,與真實事件相比,這是因為,這些人類使用者可能不像產生精心編輯的真實事件的那些人那樣專家,在主題上,儘管如此。
這是一個非常有意義的評估,它將比真實值規模更大,但我們對它的信心程度較低,從研究文獻中得出的一個非常有趣的結果是,如果你問一組人類對一個問題進行評分,大約有八十 percent 的協議,有趣的是。
當你使用 for 評估時,法律評估與人類評估之間的協議也大約是八十二十,五 percent 標記,因此,這表明 llm 評估與人類評估相當,對於它們已被應用的基準資料集。
所以反饋函式為我們提供了一種程式化方式,以便擴大評估。
除了您看到的 lm 閥,反饋函式還提供,我們可以實現傳統的自然語言處理指標,如Rouche分數和Blue分數。
它們在某些情況下可能會有所幫助,但它們有一個弱點,那就是它們非常語法化,它們尋找兩個文字片段中單詞的重疊。
例如,如果你有一個傾向於河岸的文字片段,而另一個傾向於金融銀行,從語法上看,它們可能會被視為相似,這些引用可能會被傳統自然語言處理評估視為相似的引用,而,周圍的上下文將被用於提供更有意義的評估。
當你在使用像gpt這樣的大規模語言模型時,四,或者是像bird模型這樣的中型語言模型時,並且要進行你的評估時。
在本課程中我們已經給了你三個反饋函式和評價的例子,不相關性,上下文,相關性和基於上下文的真實性,真實的鏡頭提供了一個更廣泛的評價集,以確保你構建的應用程式誠實。
無害且有益,所有這些都在開源庫中可用,我們鼓勵你嘗試它們,在你完成課程並構建你的llm應用程式時。
現在我們已經設定了所有反饋功能,我們可以設定一個物件來開始記錄。
它將用於記錄在各種記錄上的應用程式執行。
在這裡,我們可以看到正在匯入這個真lama類,建立了這個真recorder物件,這個真lama類的物件,這是我們的真lens與lama index的整合。
它接受了我們從lama index earlier建立的句子視窗引擎,設定應用程式ID,並使用我們 earlier 創造的 rag triad 的三個反饋函式。
這個真recorder物件將在稍後用於執行lama index應用程式,以及這些反饋函式的評估,並將所有記錄儲存在本地資料庫中。
現在讓我們在這個設定中載入一些評估問題,評估問題已經在這個文字檔案中設定好了,然後我們只需執行這個程式碼片段來載入它們。
讓我們快速看一下我們將用於評價的這些問題。
可以看到構建人工智慧職業生涯的關鍵是什麼等,這個檔案,你可以自己編輯並新增你可能想要得到答案的問題,Andrew,你也可以直接向問題列表新增問題,讓我們看看val questions列表。
你可以看到這個問題已經被新增到末尾,去新增你自己的問題,現在,我們已準備好進入這個筆記本中最激動人心的一步,用這個程式碼片段,我們可以在每個問題上執行句子視窗引擎,我們在剛剛看過的eval問題列表中。
然後使用真recorder,我們將每個記錄與rag triad進行比較,我們將記錄提示,響應,中間結果和評估結果在真資料庫中。
你可以在這裡看到,每當。
對於每個記錄的步驟執行完成時,都有一個對於記錄的雜湊,未知,當記錄被新增時,這裡有一個指示,表明那個步驟執行有效,此外,答案相關性的反饋已經完成,等等,對於上下文相關性等等,現在,我們完成了記錄。
我們可以在筆記本中檢視日誌,透過執行,透過獲取記錄和反饋,並且執行這段程式碼。
片段,我並不希望你一定要閱讀這裡所有的資訊。
我想強調的主要點是,你可以看到應用程式的深度儀器化。
大量的資訊透過真記錄器被日誌。
以及關於提示響應的資訊。
評估結果和其他資訊可以幫助識別應用程式的失敗模式,並且用於應用程式迭代和改進的資訊。
所有這些資訊都是可靈活的json格式。
所以它們可以被匯出並消費由下游過程後續處理。
讓我們來看看一些更人性化的提示格式,包含此程式碼的響應和反饋函式評估。
你可以看到,對於每個輸入,提示或問題,我們看到輸出和他們在各自上下文中的相關性得分,基於的事實性和答案的相關性。
並且對於列表中的每個問題,都會對其進行這樣的評估。
下劃線問題。
點文字,你可以在這裡看到,最後一個問題是,我怎麼能在,'Ai'是我在列表末尾手動新增的問題。
在執行評估時,你可能會看到一個nan,這可能是因為API呼叫失敗的結果。
你需要重新執行它,以確保執行成功完成。
我剛剛向你展示了評估的記錄級檢視,提示,回答和評估,現在,讓我們在領導者板上獲取聚合檢視。
這聚合了所有這些個記錄,併產生了該資料庫中十個記錄的平均得分,所以你可以在領導者板上看到,對所有十個記錄的聚合檢視,我們曾經說過id到f one,平均上下文相關性是零點五六,同樣。
他們的平均得分對於紮根性和相關性和延遲,在所有被問到拉格應用的十個記錄中,然後成本是這些十個記錄的總成本,以美元計,獲取這個聚合檢視很有用,以便看到您的應用程式的效能如何。
以及延遲和成本的水平,除了筆記本介面之外,True lens 還提供了一個本地流線圖應用儀表板,透過它可以檢視您正在構建的應用程式,檢視評估結果,深入到記錄級別。
檢視以獲取應用程式效能的聚合和詳細評估檢視。
因此,我們可以使用真女兒的儀表板方法啟動儀表板,這設定在一個特定URL的本地資料庫,現在,一旦我點選這個,這可能會在一些視窗中顯示。
這不是在這個框架內的,讓我們花幾分鐘時間來瀏覽這個儀表板,你可以在這裡看到,應用程式效能的總體檢視,應用程式已處理並評估了11條記錄,平均延遲為3。555秒,我們有總成本,被LLAMPS處理的總令牌數。
然後,對於上下文相關性的RAG三元組,我們有得分,接地性得分為0。56,答案相關性得分為0。86,上下文相關性得分為0。92,我們可以在這裡選擇應用程式,以獲取更詳細的記錄級別檢視。
對於每個記錄,你可以看到使用者輸入。
提示,響應,這些後設資料,時間戳。
然後,對於答案相關性、上下文相關性和接地性的得分,已經被記錄下來,還包括延遲,總令牌數,和總成本,讓我為包含LLM指示評估的行選擇一行,指示說嗯,DEM。
RAG應用程式做得很好,讓我們點選箭頭後選擇這一行。
我們可以向下滾動,並從表中獲取該行的不同元件的詳細檢視。
所以,這裡的問題。
提示是成為AI好的第一步是什麼,RAG的最終響應是學習基礎的技術技能,在這裡,你可以看到答案相關性被視為1,在0到1的尺度上。
這是一個相關的,非常不相關的答案,相對於所問的問題,在這裡,你可以看到上下文相關性,平均上下文相關性得分為0。8,對於檢索到的兩個上下文部分,它們分別得到了0。8的分數,你可以看到思考鏈。
LM評估為什麼給這個特定的響應得分為0。8,以及在檢索步驟,然後,在這裡,你可以看到接地性評估,這是最終答案的一個從句,嗯,它得到了1的分數,在這裡,你可以看到得分的原因。
在檢索步驟,然後是在這裡,你可以看到接地性評估,這是最終答案的一個部分,嗯,它得到了1的分數,在這裡,你可以看到得分的原因。
你可以看到,這是一句陳述句,支援證據證明了它,因此,它在0到1的評分尺度上獲得了滿分1分,或者在0到10的評分尺度上獲得了滿分10分,在0到10的評分尺度上。
所以,之前我們透過幻燈片討論的那種推理和資訊。
現在,你在筆記本中可以看到,非常整潔地體現在這個溪流中,本地應用程式,執行在你的機器上。
你也可以獲得一個詳細的時間線檢視,以及獲取到完整的JSON物件。
現在,讓我們看一個例子,布條沒有做得那麼好,當我瀏覽評估時,我看到這一行有一個低的基礎,得分為0。5分,所以,讓我們點選那個,它會帶來這個例子。
問題是,利他主義如何有益於構建職業生涯,回答是。
如果向下滾動到基礎評估,然後,最終響應中的兩句話都有低,圓整了得分,讓我們選擇其中一個,看看為什麼基礎得分低,所以你可以看到,整體響應被分解為四個陳述,並且前兩個是好的。
但後兩個沒有在檢索的語境片段中提供足夠的支援證據,特別是如果你看看這個最後一個,Allam的最後輸出說,此外,實踐利他主義可以貢獻到個人的滿足感和目的感,這可以增強動力和整體福祉。
最終有益於職業生涯的成功,雖然這可能確實如此,在檢索的語境片段中找不到支援證據,來支撐那個陳述,這就是為什麼我們的評估給這個得分給了低分,你可以在儀表板上玩一玩,探索一些其他不太成功的例子。
比如a la,最後的布條輸出,沒有做得那麼好,以瞭解一些非常常見的失敗模式,當您使用rag應用程式時,一些這些將會在我們進入關於更先進rag技術的研討會時得到解決。
這些技術在處理這些失敗模式方面做得更好,第二課就結束在這裡。
在下一課中,我們將走遍基於句子視窗的檢索機制和先進的rag技術,並也將向您展示如何評估這個高階技術,利用rag三叉戟和真矛。
LangChain_微調ChatGPT提示詞_RAG模型應用_agent_生成式AI - P22:4. 第三篇 - 句子視窗檢索(Sentence Window Retrieval) 中英文字幕 - 吳恩達大模型 - BV1gLeueWE5N
在這節課中,我們將深入研究一種高階的拉格技術,我們的句子視窗檢索方法。
在這種方法中,我們基於較小的句子進行檢索,以更好地匹配相關上下文,然後,根據擴充套件的上下文視窗合成句子,讓我們看看如何為某些上下文設定它,標準的拉格管道使用相同的文字幹來同時進行嵌入和合成。
問題是,嵌入基礎檢索通常與較小的片段工作得很好,而llm需要更多的上下文和大的片段來合成一個好的答案,句子視窗檢索做的就是稍微分離這兩個。
我們首先對較小的片段或句子進行嵌入,並將其儲存在向量資料庫中,我們還為每個片段新增了前後出現的句子的上下文,在檢索時,我們檢索與問題最相關的句子,使用相似性搜尋,然後,將句子替換為完整的周圍上下文。
這允許我們擴大實際上被饋入概要的上下文,為了回答問題,這個筆記本將介紹構建一個使用單個索引的句子視窗檢索器所需的各種元件,各種元件將在最後詳細覆蓋。
Anion將展示如何實驗引數和評估與真實錯誤相關的效能,這是同樣的設定,你在之前的課程中已經使用過,所以確保安裝了相關的包,例如。
llama index和true lines email用於這個快速啟動,你需要一個類似於之前許可證的開放ai金鑰,這個開放ai金鑰用於嵌入,嗯,Lens,以及評估部分。
現在我們設定並檢查我們的文件,以便用於迭代和實驗,類似第一課,我們鼓勵你上傳你自己的pdf檔案,以及之前,我們將載入如何在人工智慧中構建職業生涯的電子書。
它是之前的同一份文件,所以我們看到它是一份文件列表,共有四十一頁,物件模式是文件物件,這裡是從第一頁的一些樣本文字。
接下來的部分將將這些合併為一個文件,因為它有助於使用更先進的檢索器時提高整體文字分割的準確性。
現在讓我們設定句子視窗檢索方法,我們將詳細解釋如何設定這個,我們將從視窗大小為三,top k值為六開始,首先,我們將匯入我們稱為句子視窗節點解析器的物件。
句子視窗節點解析器是一個物件,它將文件分成單獨的句子,然後,為每個句子片段新增周圍上下文的增強,這裡我們演示如何節點解析器與一個小例子工作,我們看到我們的文字,它有三個句子,被分成了三個節點。
每個節點包含一個句子,包含一個包含更大句子周圍上下文的後設資料,我們將在這裡展示第二個節點的後設資料看什麼樣子,你看到這個後設資料包含原始句子,但也包含在它前後出現的句子,我們鼓勵你嘗試自己的文字,例如。
讓我們試試這樣。
對於這個樣本文字,讓我們看看周圍的後設資料,對於第一個節點,由於視窗大小為三,我們有兩個額外的相鄰節點出現在前面,當然,嗯,在它後面沒有,因為它是第一個節點,所以我們看到有原始句子或你好。
但也是fubar和ta,下一步實際上是構建索引,並且我們首先會做是設定一個lone,在這個情況下我們將使用open,嗯,具體來說。
Gpt t three five five turbo with the temperature zero dot one。
下一步是設定一個service contacts物件,哪個,作為提醒,是一個包含所有必要聯絡以用於索引的包裝物件,包括l one嵌入模型和節點解析器。
請注意,我們指定的嵌入模型是bg small模型,我們實際上從hugging face下載並本地執行它,這是一個緊湊,快速且準確於其大小的嵌入模型,我們也可以使用其他嵌入模型,例如。
一個相關模型是bg large,我們在下面的註釋程式碼中有這個模型,下一步是設定向量儲存索引與源文件,因為我們已經定義了節點解析器作為服務上下文的一部分,這將做是它會取源文件。
將其轉換為一系列附加了周圍上下文的句子,並嵌入它,並載入到向量排序中,我們可以將索引儲存到磁碟上,以便您可以後來載入它而不必重建它。
如果您已經構建了索引,儲存了它,並且您不想重建它,這裡有一個有用的程式碼塊,允許您從現有的檔案載入索引,如果存在,否則它將構建它,索引現在構建好了,下一步是設定並執行Android查詢。
我們將定義我們稱為後設資料替換後處理器的東西,這取儲存在後設資料中的值,並替換節點的文字為該值。
因此,這是在獲取筆記併傳送筆記到大綱之前完成的,我們將首先解釋這是如何工作的。
使用我們使用句子視窗節點解析器建立的節點,我們可以測試這個後處理器。
請注意,我們備份了原始節點,讓我們再看一下第二個節點,太好了,讓我們在這些節點上應用後處理器,如果我們現在檢視第二個節點的文字,我們可以看到它已經被替換為一個完整的上下文。
包括在當前節點之前和之後的句子,下一步是新增句子變換重新排序模型,這取查詢並檢索節點,並按相關性重新排序節點,使用專門為任務設計的模型,一般來說,您將使初始相似度top k更大。
然後重新排序器將恢復節點並返回一個小的top end,所以過濾出一個較小的集,一個重新排序器的例子是bg reanker base,這是基於bg嵌入的重排序器。
這串字串代表從hugging face命名的模型,您可以在hugging face上找到更多關於模型的詳細資訊,讓我們看看這是如何重新排序的,我們將輸入一些玩具資料。
然後看看重新排序器如何實際重新排序,原始節點到一個新的節點集,讓我們假設原始查詢是我想要一隻狗,並且原始節點的得分是這是隻貓,但得分是0。6,然後這是隻狗,得分是0。4,直覺上。
您將期望第二個節點實際上有一個更高的得分,所以它與查詢匹配得更好,這就是重新排序器可以發揮作用的地方,在這裡我們看到重新排序器正確地浮出水面並已知關於狗的資訊,並給它了一個高的相關性得分。
現在讓我們將此應用於我們之前提到的實際查詢。
我們要求的相似度top k大於top end值,我們選擇了為重新排序器,以便給重新排序器一個公平的機會來浮出水面正確的資訊,我們設定了top k為6和top end等於2。
這意味著我們首先獲取最相似的6個片段,使用句子檢索,然後我們過濾出使用句子重新排序器最相關的兩個冠軍。
現在,我們已經設定好了完整的查詢引擎,讓我們執行一個基本的示例,讓我們對這個資料集提一個問題。
我們獲取到關於在ai領域建立職業生涯的關鍵是什麼,然後我們得到響應,我們看到最終的響應是,在ai領域建立職業生涯的關鍵是。
學習基礎的技術技能,參與專案並找到實習機會。
現在,我們已經將句子視窗查詢引擎設定好了,讓我們把所有的東西都放在一起,我們將大量的程式碼放入這個筆記本細胞中,但是請注意,這與util y檔案中的函式本質上是一樣的。
我們有用於構建我們之前在這本筆記本中展示的句子視窗索引的功能,它包括由節點解析器使用句子的能力,從文件中提取句子並增強其周圍上下文,它包含設定句子上下文或使用服務上下文物件的功能。
它還包括使用源文件和服務聯絡人設定向量排序索引的功能,包含行和擊球模型,並且沒有解析器,這個部分的實際內容是獲取句子視窗查詢引擎,我們展示了它包括獲取句子視窗檢索器。
使用後設資料替換後處理器實際上替換節點為周圍上下文,然後最後使用重排模組過濾出頂級結果。
我們使用as查詢和模組將所有這些結合起來。
首先,讓我們呼叫構建句子視窗索引函式,使用源文件,鷹,以及儲存目錄,然後,讓我們呼叫第二個函式來獲取查詢和偉大的含義,你現在準備好嘗試句子視窗檢索了,在下一節關於棕櫚的章節中。
我們將向您展示如何實際執行評估,使用句子視窗檢索器,以便您可以評估結果,並實際上玩出引數,看看這對您引擎效能有何影響,在這些例子之後,我們鼓勵你新增自己的問題,甚至找到屬於自己的評估基準。
只是為了玩一玩,看看一切都如何工作,謝謝傑瑞,現在,你已經設定了句子視窗檢索器,讓我們看看如何用三段式評估它,並比較其效能與基本三段式,帶有實驗跟蹤,現在,讓我們看看如何評估和迭代於句子視窗大小引數。
為了在評估指標之間做出正確的權衡,應用程式的質量和執行應用和評價的成本,我們將逐漸增加句子視窗的大小,從第一個版本開始,使用船員鏡頭和破布三叉戟評估這些連續的應用版本,跟蹤實驗以選擇最佳的句子視窗大小。
隨著我們進行這個練習,我們將想要了解標記使用或成本的權衡,隨著視窗大小的增加,標記使用和成本會增加,在許多情況下,上下文的相關性會同時增加,在開始增加視窗大小時,我們預期會提高上下文的相關性,因此。
也會間接提高錨定性,那個的原因之一是當檢索步驟沒有產生足夠的相關上下文時,在完成步驟中的llm傾向於透過利用預訓練階段的,現有知識來填補這些空白,而不是明確依賴於檢索到的上下文片段。
這種選擇可能會導致更低的接地分數,因為回憶,接地性意味著最終響應的元件應該可以追溯到檢索到的上下文片段,因此,我們期待的是,隨著您不斷增大句子視窗大小,上下文的相關性會增加到某個點,接地性也會增加。
然後,從那一點之外,我們將看到上下文的相關性是增減不一的,紮根性也很可能遵循類似的模式,此外,上下文相關性和紮根性之間還存在一個非常有趣的關係,你可以在實踐中看到,當上下文相關性低時,紮根性也往往較低。
這是因為,因為llm通常會嘗試填充檢索到的上下文片段中的缺口,透過利用預訓練階段的知識,這導致了紮根性的減少,即使答案實際上在語境相關性增加時變得相當相關,基礎性也傾向於在某個點上增加。
但如果上下文大小變得太大,即使上下文相關性很高,可能出現基礎性的降低,因為llm可能會被過大的上下文所淹沒,並回歸到訓練階段的預存知識庫。
現在讓我們嘗試句子視窗的大小,我會帶你透過一個筆記本來載入一些問題進行評估,然後逐漸增加句子視窗大小,並觀察這對該rag的影響,首先,評估三叉戟指標。
我們載入一套預先生成的評估問題,在這裡,你可以看到一些這些問題,從這份列表中,接下來,我們執行評估,對於預載入的評估問題集合中的每個問題,然後,使用真正的記錄器物件,我們記錄提示,響應,應用的中間結果。
以及真資料庫中的評估結果,現在讓我們調整句子視窗大小引數,看看那個的影響,對不同的三角形評估指標,我們將首先重置真資料庫,使用這段程式碼片段,我們將句子視窗大小設定為一,你會發現在這條指令中。
所有其他的一切都與以前相同,然後,我們使用獲取句子視窗查詢引擎設定句子視窗引擎,與這個索引相關聯,接下來,我們已準備好以句子視窗大小設定為一的方式設定真正的記錄器。
這設定了拉格三重奏的所有反饋函式定義,包括答案相關性,上下文相關性和錨定性,現在,我們已經一切就緒,可以執行評估,對於設定,以句子視窗大小設定為一,和所有相關的提示,響應,中間結果。
並且這些反饋函式的評估結果,我們將登入到真實資料庫,哦,K,現在執行得非常好,讓我們在儀表板上檢視它,你將看到,這個指令啟動了一個本地託管的流let應用,並且你可以點選。
連結來到達修剪它,所以,應用排行榜展示了我們透過二十一個記錄執行的所有聚合指標,並使用真實長矛進行了評估,這裡的平均延遲是4。5秒,7秒,總成本大約是兩分錢,處理總token的數量大約是9,000個。
你可以看到評估指標,應用在無關性和紮根性方面表現良好,但在上下文相關性方面,它表現較差,現在,讓我們深入探討由應用程式處理的個別記錄。
評估,如果我滾動到右側,我可以看到一些例子,在這些指標上,應用程式表現不佳,所以讓我選擇這行。
然後,我們可以。
更深入地檢查它對他的影響。
所以,這裡的問題是在專案選擇和執行的背景下。
解釋準備就緒和準備、發射、瞄準的方法之間的差異。
提供每個方法可能更有益的例子,"你可以在這裡詳細看到從布條中收集到的整體反應"。
"然後如果我們往下滾動","我們可以看到接地性的總分"。
"上下文相關性和答案相關性"。
"在這個例子中,檢索到了兩段上下文","並且對於檢索的上下文的一部分","上下文相關性相當低","讓我們深入探討那個例子,仔細看看","在這裡,透過這個例子,你將看到上下文的部分非常小。",記住。
我們正在使用一個句子視窗的大小為一,這意味著我們在開始和結束時各新增了一句額外的句子,在檢索的上下文周圍,這將產生一個相對較小的缺失重要資訊的上下文片段,這將使其與被問的問題相似相關,如果你看接地性。
你會看到這兩個檢索到的上下文片段都在最終總結中,接地的,得分相當低,讓我們選擇得分更高的接地性得分,它有更多的理由,如果我們看看這個例子。
在這裡,我們看到在開始有一些句子,對於這些句子,檢索到的上下文中有很好的支援證據,因此這裡的得分很高,它是在0到10的尺度上的10分,但對於這些句子在這裡,沒有支援證據,因此接地性得分是0。
讓我們拿一個具體的例子,也許這個,我認為它經常在執行成本相對較低的情況下使用,並且快速迭代和適應的能力比前期規劃更重要,這感覺像是一個可能的文字,這可能作為對問題的響應的一部分有用。
然而它不在檢索到的上下文中,所以它不是由檢索到的上下文支援的任何證據,這可能是模型在訓練階段學到的一部分,要麼是從同一文件,安德魯在這裡的職業建議文件,或者是關於AI職業建議的其他來源,討論同樣的主題。
模型可能學到了類似的資訊,但它不是基於那個的,句子不是由檢索到的上下文支援的,在這個特定情況下,所以這是一個普遍問題,並且句子視窗太小,上下文相關性往往較低,因此,接地性也變得緩慢。
因為LLM開始使用其訓練階段的預存知識,來開始回答問題,而不是僅僅依賴提供的上下文,現在我已經展示了一個失敗模式,當句子視窗設定為1時。
我想走通幾個步驟,看看指標如何改善,隨著我們改變句子視窗大小,以快速瀏覽筆記本,我將重新載入評估問題,但在這種情況下,只設定一個問題,模型有問題的問題,這個問題,我們剛剛用句子視窗大小設定為1時走過。
這個問題,我們剛剛討論過,然後,我想將這個與句子視窗大小為的句子一起執行,他說兩個、三個Discord片段將要。
設定句子視窗大小為的rag,設定三個,並且也設定真記錄器,我們現在已經設定了反饋函式的定義,除了句子視窗大小設定為三的rag之外。
接下來,我們將使用那個井來執行評估,對於我們詳細審查的特定評估問題,使用句子視窗大小為一,在那裡,我們觀察到成功執行的失敗模式。
現在,讓我們看看這個句子視窗引擎的結果,設定為三,在真鏡頭儀表板中,你可以在這裡看到結果,我在一個記錄上執行它,那是有問題的記錄,當我們看句子視窗大小為一時,你可以看到上下文的相關性大大增加。
它從零點五七增加到零點九現在,如果我選擇應用程式並檢視這個例子。
在更詳細的情況下,現在,我們來看看與句子視窗大小為一時我們檢視的同一個問題。
現在,我們處於三。
這裡是完整的最終響應現在,如果你看檢索到的上下文片段。
你會注意到,這個特定的檢索上下文與早期我們寫的上下文相似。
但現在它有了擴充套件,因為更大的句子視窗大小,如果你看這個部分的得分。
我們將看到,這個上下文獲得了一個上下文相關性得分為零點九,這比早期獲得分數為零點八的較小上下文更高,這個例子表明,隨著句子視窗大小的擴大,即使是相對良好的檢索上下文也可以變得更好。
一旦完成這些顯著改進的上下文部分,接地得分會上升很多,我們看到,透過在這些高度相關的上下文中找到支援證據,接地得分實際上上升到一,因此,將句子視窗大小從一增加到三,導致了rag三叉戟評估指標的顯著改進。
接地性和上下文相關性都顯著提高。
以及答案相關性。
現在,我們可以看句子視窗設定為五。
如果你看這裡的指標,有幾件事需要注意,一個是總標記數增加了,這可能會對成本產生影響,如果我們增加記錄的數量,這就是我之前提到的一種權衡,隨著句子視窗大小的增加,它變得更加昂貴,因為更多的標記被處理,嗯。
在評估期間,由LMS處理,另一個值得注意的事情是,儘管上下文相關性和答案無關性保持不變,紮根性實際上隨著句子視窗大小的增加而下降,這可能發生在某個點之後,因為隨著上下文大小的增加。
LLM在完成步驟中可能會被過多的資訊所淹沒,在摘要過程中,它可能會開始引入自己已有的知識,而不是僅在檢索到的上下文片段中的資訊,所以,讓我們在這裡總結一下,結果,當我們從一句增加到三句,再到五句時。
三句,對於我們特定的評估來說,三句的大小是最佳選擇,我們看到上下文相關性和答案相關性,以及紮根性的增加,當我們從一句增加到三句時,然後,在增加到五句時,紮根性步驟可能會有所減少或退化。
當你在筆記本中嘗試時,增加到五句的大小,我們鼓勵你使用更多的記錄重新執行它,在這兩步中,檢查個別記錄,哪些對特定指標如上下文相關性或紮根性造成問題,並獲取一些直覺,建立一些直覺,瞭解失敗模式的原因。
並知道如何解決它們,在下一節中,我們將看另一個高階拖放技術,自動合併,以解決一些失敗模式。
不相關的上下文可能會滲入最終響應,導致,嗯,不。
LangChain_微調ChatGPT提示詞_RAG模型應用_agent_生成式AI - P23:5. 第四篇 - 自動合併檢索(Auto-merging Retrieval) 中英文字幕 - 吳恩達大模型 - BV1gLeueWE5N
在這節課中,我們將深入研究另一個高階拉格技術,自動重排。
原始方法的問題,是你正在檢索一堆碎片化的上下文塊,以便將其放入lm上下文選單中,碎片化更嚴重,在這裡,如果你的塊大小越小,我們使用自動合併啟發式將較小的塊合併為大的父塊,以幫助確保上下文的連貫性。
讓我們看看如何設定它,在這個部分,我們將討論自動合併和檢索,標準拉格管道的問題,是你正在檢索一堆碎片化的上下文塊,以便將其放入lm上下文視窗中,並且碎片化更嚴重,你的父塊大小越小,例如。
你可能會返回兩個或更多的檢索父塊,大致相同的部分,但實際上對這些塊的順序沒有保證,這可能會阻礙專輯對這一檢索上下文的合成能力,在它的上下文視窗中。
所以,自動合併檢索做的事情是首先,找到連線更大父塊的較小塊層次,在檢索時,每個父塊可以有一些子塊,如果連線到一個父塊的較小塊集超過了某個百分比閾值,那麼我們將較小的塊合併為大的父塊,因此。
我們檢索更大的父塊來幫助確保更連貫的上下文,現在讓我們看看如何設定它。
這個筆記本將介紹構建自動檢索所需的各種元件,與llama索引一起,各個元件將詳細覆蓋,類似於之前的部分,最後,Monohan將展示如何實驗引數和評估與真實錯誤相關的效能,類似於之前。
我們將載入openai api金鑰,我們將使用我們utifile中的便利輔助函式來載入它。
與之前的課程類似,我們還將使用如何構建人工智慧職業生涯的pdf,與之前類似,我們鼓勵您嘗試自己的檔案。
我們載入四個文件物件,並將它們合併為一個大型文件,這使得我們更適應於文字,與我們的高階檢索方法混合。
我們現在準備好設定我們的自動合併重排器,這將包括幾個不同的部分,第一步是定義我們稱為層次節點解析器的東西,為了使用自動合併檢索器,我們需要按照層次化的方式解析我們的節點。
這意味著節點被解析並按減小的尺寸排序,幷包含對其父節點關係的引用,在這裡,我們將演示節點解析器如何與一個小例子一起工作。
我們建立了一個玩具解析器,使用小塊大小來演示,請注意,我們使用的塊大小是二,四,八,五,十二,和一二八,你可以更改樹幹大小為任何你喜歡的遞減順序,我們以四倍因子來做這件事,現在讓我們從文件中獲取音符集。
這實際上返回所有有關節點,這返回所有葉節點,中間節點,以及父節點,有,所以,葉節點、中間節點和父節點之間將有相當程度的資訊內容和重疊,中間和父節點,如果我們只想檢索葉子節點。
我們可以在lama索引中呼叫一個函式,稱為間隙葉子節點,我們可以看看那看起來什麼樣子。
在這個例子中,我們在原始節點的集合中呼叫葉子節點,我們檢視第三十一個節點以檢視文字,我們看到文字主幹實際上相當小,這是一個葉子節點的例子,因為葉子節點是最小的一塊大小為一百二十八個標記。
這就是你如何增強數學背景的方法,為了找出你需要知道的重要內容,現在我們已經展示了葉節點的樣子,我們也可以探索世界之間的關係,我們可以列印出上述節點的父節點,並觀察到它是包含葉節點文字的更大部分。
但也更更具體地,父節點包含512個標記,而具有包含128個標記的4個葉節點。
有4個葉節點,因為每次樹幹大小都被一個因子四分開,這是第三十一葉節點的父節點看起來的樣子,現在我們已經展示了節點的層次結構,我們現在可以構建我們的索引,我們將使用openai lone。
特別是gpt t three point five turbo,我們還將定義一個包含l one嵌入模型的服務上下文物件,以及層次化節點解析器,與前面的筆記本一樣,我們將使用bg small和嵌入模型。
下一步是構建我們的索引,"索引的工作方式是,我們實際上在葉子節點上構建一個向量索引"。"所有其他中間節點和父節點都被儲存在啟動塢中","並在檢索時動態地檢索","但實際上。
我們在最初的頂部抓取的是什麼","K嵌入查詢特指葉節點","這就是我們在這個程式碼中定義的儲存聯絡人物件的嵌入方式。"。
"預設情況下,它被初始化為記憶體文件儲存","我們稱儲存聯絡人為碼頭儲存點"。"向記憶體文件儲存中新增文件,以新增所有這個儲存的所有節點",然而,當我們在這裡建立我們的向量儲存索引,叫做自動合併索引時。
我們只傳遞向量索引的葉節點,這意味著特別是葉節點使用嵌入模型嵌入,並且也進行了索引,但我們也傳遞了儲存上下文以及服務上下文,因此,向量索引知道包含所有節點的底層儲存。
最後,我們持久化這個索引,如果你已經構建了這個索引,並且想要從儲存中載入它,你可以只是複製和貼上這段程式碼,這將重建索引。
如果它不存在,就從儲存中載入它,最後一步,現在我們已經定義了自動合併索引,是設定檢索器和執行查詢引擎,自動合併檢索器控制著湧現的邏輯,如果給定父母的子節點被大多數檢索出來,它們將被替換為父母,相反。
為了使這種合併工作良好,我們為葉節點設定了一個大的top k,並記住葉節點也有一個較小的塊大小為一二八,為了減少標記使用,在合併完成後,我們應用一個重新排序器,例如,我們可能會檢索前十二個合併。
並將結果限制為前十個,然後重新排序為前六個,重新排序器的頂部可能看起來更大,但請記住,基礎的塊大小隻有一百二十八個標記。
然後,位於那個之上的下一個父級是五百十二個標記,我們匯入了一個名為自動版本檢索的類,然後,我們定義了一個句子變換重新排序模組,我們將自動合併檢索器和重寫模組結合在一起,整合到我們的檢索查詢引擎中。
它處理檢索和合成。
現在,我們已經設定好了所有這些,並且要新增,讓我們實際測試網路和AI的重要性,例如問題,我們得到了一個響應。
我們看到它說網路在AI中很重要,因為它允許個人有一個強大的專業網路,下一步是把所有的都放在一起。
"我們將建立兩個高階函式,用於自動合併索引。","除了那個自動合併查詢引擎之外","這基本上捕獲了我們剛剛向你展示的所有步驟","並首先構建自動合併索引的功能"。
"我們將使用層次節點解析器來解析出子節點的層次結構。","向父節點","將挑戰服務環境","我們將從葉節點建立向量儲存的索引","但也連結到所有節點的文件儲存"。
"第二個功能自動合併查詢引擎利用我們的自動合併檢索器",能夠動態地將葉子節點合併到父節點中,並且使用我們的排名模組,然後將其與整體重試查詢引擎結合,因此,我們使用構建自動合併索引函式來構建索引。
使用原始來源股票位元,lm設定為大於等於3。5渦輪。
以及合併索引作為儲存目錄,然後對於查詢引擎,我們呼叫基於索引的獲取自動查詢引擎,以及我們設定相似度top k等於6,下一步,pop將展示如何評估自動合併檢索器,並且迭代引數使用tri。
我們鼓勵你也嘗試自己提出問題,並且迭代自動合併或檢索的引數,例如,當你改變主幹大小時發生什麼,或者top k或top end對於重新排序,玩一玩,看看結果是什麼,傑裡,真的很棒。
現在,你已經設定了自動合併檢索器,讓我們看看如何用拉格三角來評估它,並與基本拉格進行實驗跟蹤的比較,讓我們設定這個自動合併的新索引,你會注意到它有兩層,最底層的塊,葉節點將具有512塊的大小。
在層次結構中的上一層是2488塊的大小,這意味著每個父節點將有四個512標記的葉節點,設定這個的其他部分與傑裡 earlier 向你展示的完全相同,你可能想要嘗試兩層或新興結構的一個原因,是它更簡單。
建立索引所需的工作更少,以及在檢索步驟中,工作量需要的更少,因為如果第三層檢查效能相似,它就可以消失,然後理想情況下,我們希望與一個更簡單的結構工作,現在,我們已經使用兩層或合併結構建立了索引。
讓我們為這個設定設定自動合併引擎,我保持頂部k的值與以前相同,這是十二,並且重新排序步驟也將有相同的,一個相等的六,這將讓我們能夠更直接地比較這個應用設定,並且傑瑞之前設定的三層合併層次應用。
現在讓我們使用自動合併引擎設定真正的記錄器,我們將給這個應用一個想法,即應用零。
現在讓我們載入一些評估問題,我們從之前設定的生成問題點文字檔案中載入,現在我們可以為每個問題定義這些評估問題的執行,在大約問題中,我們將設定一些事情,以便真正的記錄器物件。
當使用rannie alls呼叫時,我們將記錄提示,響應和評估結果,利用查詢引擎。
現在,我們的評估已經完成,讓我們看一下排行榜。
我們可以在這裡看到應用零的指標,上下文相關性似乎較慢,其他兩個指標更好,這是用我們的兩級層次,以512作為葉節點塊大小,並且父節點為2048個標記,所以對於葉節點無錯誤標記。
現在我們可以執行真正的儀表板,並檢視,記錄級別的評估結果在細節層次下一層。
讓我們檢視應用排行榜。
在這裡,處理24個記錄後,聚合級別的上下文相關性非常低,儘管應用在無關性和錨定性方面做得更好,我可以選擇應用。
現在讓我們看應用零的個別記錄,並檢視各種記錄的評估得分,你可以在這裡滾動到右側並檢視答案相關性、上下文相關性和錨定性的得分,讓我們選擇上下文相關性低的記錄,所以這裡有一個,如果你點選它。
你會看到更詳細的檢視,問題下方討論的詳細資訊是。
預算對資源管理的重要性,在這裡是成功執行ai專案的響應。
如果你往下滾動,你可以看到上下文相關性的更詳細檢視。
有六篇檢索上下文。
每個都被評分為在評估得分中特別低,介於零和0。2之間,如果你選擇任何一項並點選它,你會看到對提出的問題不特別相關的響應,你也可以向上滾動並探索一些其他記錄,你可以選擇,例如,得分好的分數。
你可以向上滾動並探索一些其他記錄,你可以選擇,例如,得分高的分數,像這樣一個,探索一下'如何'這個應用。
在各個問題上的表現如何。
以及它的優勢在哪裡,它的失敗模式在哪裡,以便建立一些關於什麼在起作用的直覺。
以及什麼不在起作用,現在讓我們比較之前的應用與傑裡 earlier 引入的秋季合併設定。
我們現在將在層次結構中添有三層,從葉節點的級別開始,以一到八個標記符,所以,在每個層次中,每個父母有四個孩子,現在讓我們為這個應用設定查詢引擎,設定,真正的記錄者,與前一個應用相同的所有步驟。
最後,我們處於執行評估的位置。
現在我們有一個設定好了。
我們可以在這裡快速檢視排行榜,你可以看到相對於f零,應用一在記錄數相同的情況下處理的標記數大約是一半,而且總成本也大約是一半,這是因為記住這有三層在層次結構中。
而且塊大小是一百二十八個標記而不是五百十二,這是ab零的最小葉節點標記大小,所以這導致了成本降低通知,而且上下文相關性增加了大約百分之二十,部分原因是這是因為,這個。
很可能在這個新的app設定中做得更好,我們還可以深入挖掘並詳細檢視app一。
像以前,我們可以檢視單個記錄,讓我們選擇之前看過的同一個,零號標籤是關於預算重要性的問題。
現在,你可以看到上下文相關性做得更好,紮根性也顯著提高,如果你在這裡選擇一個樣本示例響應,你會發現實際上它正在非常具體地談論為資源預算,所以,這種情況有所改善,而且在總體水平上也有改善,現在。
我將總結一些關鍵要點,來自第四課,我們帶領你透過了一種評估和迭代與自動檢索的方法,高階拉格技術,特別是我們展示瞭如何與不同層次的結構迭代,層次的數量,子節點的數量和塊大小,對於這些不同版本,你可以。
你可以用拉格來評估它們,透過三角和跟蹤實驗來選擇最適合您用例的結構,需要注意的是,你不僅會得到與三段式相關的指標作為評估的一部分,而且對記錄級別的深入分析。
可以幫助你獲得關於與某些文件型別最相容的超引數有什麼樣的直覺,例如,根據文件的性質,如僱傭合同與發票,你可能發現不同的分塊大小和層次結構,最適合,最後,還要注意的是自動合併與句子視窗檢索是互補的。
一種思考方式是,假設你有一個具有自動合併的父節點的四個子節點,你可能發現,孩子編號一和孩子編號四對於查詢非常相關,被問到的那個,然後這些就會被合併在自動合併正規化下,相比之下。
句子視窗化可能不會導致這種合併,因為它們不在文字的連續部分中,這就結束了第四課,我們觀察到,使用高階架子技術如句子視窗化和自動合併等,檢索,增強評價和實驗跟蹤迭代的力量,你可以顯著提高你的拉格應用。
此外。
儘管課程主要專注於這些兩種技術和與之相關的拖拽三角進行評估,你還可以玩一些其他的評估,為了確保你的llm應用誠實,無害且健康,這一頁列出了一些在真鏡頭中可用的一些,我們鼓勵你去玩真鏡頭,探索筆記本。
LangChain_微調ChatGPT提示詞_RAG模型應用_agent_生成式AI - P24:6. 終篇 - 結論(Conclusion) 中英文字幕 - 吳恩達大模型 - BV1gLeueWE5N
恭喜完成課程,希望學會如何構建,評估迭代Rag應用,使其更生產就緒,需學習這些核心開發原則,成為搖滾明星,AI工程師,構建強大LM軟體系統,減少LLM幻覺將是每個開發者的首要任務,隨領域發展。
我們很高興看到貝葉斯模型越來越好,更大規模評估變得更便宜,更易獲取,下一步,建議深入瞭解資料管道,檢索策略和LLM提示以提高RAG效能,我們展示的兩種技術只是冰山一角,應研究從塊大小到檢索技術的一切。
如混合搜尋到基於行的,推理,如思維鏈,等,評估排名,從機架三元組開始,下一步是LLM應用,鼓勵深入評估LLM,及其驅動的應用,包括評估模型置信度,校準,不確定性,可解釋性,隱私,公平性和毒性。
在良性和對抗性環境中。
LangChain_微調ChatGPT提示詞_RAG模型應用_agent_生成式AI - P25:《基於LangChain的大語言模型應用開發》1——介紹 - 吳恩達大模型 - BV1gLeueWE5N
歡迎參加這個關於大型語言模型語言鏈的短課程。
透過提示大型語言模型或大型語言模型來開發應用,現在比以往任何時候都更快地開發人工智慧應用成為可能,但是,一個應用可能需要多次提示語言模型並解析輸出,因此,需要編寫大量的膠水程式碼。
哈里森·查塞創造的語言鏈極大地簡化了這個開發過程,我很高興有哈里森在這裡,他是與深度學習一起合作建立了這個短課程的人,AI教我們如何使用這個驚人的工具,謝謝你們邀請我,我非常興奮能來到這裡。
長鏈最初是一個用於構建所有型別應用的開源框架,它起源於我與該領域的許多人的談話,他們正在構建更復雜的應用,並看到了他們在開發過程中使用的一些共同抽象,我們對鏈鏈社群的採納感到非常興奮,因此。
期待在這裡與大家分享它,並期待看到人們用它建造什麼,是的,實際上,作為語言鏈動量的標誌,它不僅有許多使用者,而且還有數百的貢獻者到開源中,這對其快速發展起到了關鍵作用,這個團隊以驚人的速度釋出程式碼和特性。
所以,希望短課程結束後,您將能夠快速構建一些非常酷的應用程式使用鏈鏈,誰知道,也許您甚至決定貢獻回開源的語言鏈努力,鏈鏈是一個用於構建LM應用的開源開發框架,我們有兩個不同的包,一個Python的。
一個JavaScript的,它們專注於組合和模組化。
所以它有許多可以單獨使用或與其他元件結合使用的個體元件,這就是一個關鍵價值主張。
然後,另一個關鍵價值主張是許多不同的使用案例,所以,將這些模組元件組合成更端到端的應用的各種方式,並在這個課程中使用它們非常容易。
我們將覆蓋鏈鏈的常見元件。
所以我們會討論模型,我們會討論提示,這是您如何讓模型做有用和有趣的事情的方式。
我們會討論索引,這是資料攝入的方式。
以便您可以將其與模型結合,然後我們會討論鏈,這是一種更端到端的使用案例,以及代理,這是一種非常令人興奮的端到端使用案例,它使用模型作為推理引擎。
我們也感謝阿尼什·戈拉,他是與哈里森·查塞一起創立蘭奇的聯合創始人,也為這些材料投入了大量思考,幫助建立了這個短課程。
在深度學習和AI方面,傑夫,路德維希,埃德迪舒和迪亞拉作為院長,也對這些材料做出了貢獻。
因此,讓我們繼續看下一個影片,在那裡,我們將學習關於空白模型的內容。
LangChain_微調ChatGPT提示詞_RAG模型應用_agent_生成式AI - P26:2——模型,提示和輸出解析 - 吳恩達大模型 - BV1gLeueWE5N
在第一節課中。
我們將學習模型,提示和解析器,所以模型指的是語言模型,它支撐了其中的大部分,提示指的是建立輸入的風格,這些輸入將被傳遞給模型,然後解析器在相反的一端,它涉及到將這些模型的輸出解析為更結構化的格式。
以便你可以在下游做 things,所以當你使用 lm 構建一個應用時,他們往往會使用可重用的模型,我們反覆提示一個模型,解析輸出,因此,啟動提供了一種簡單的抽象方式來執行這種操作,所以,讓我們開始。
看一看模型的提示和暫停,所以,要開始。
這裡有一些起始程式碼,我將匯入os,import openai並載入我的openai秘密鍵,openai庫已經安裝在我的jupyter notebook環境中。
如果你在本地執行這個,並且還沒有安裝open ai。
你可能需要執行那個pip,安裝open ai。
但我在這裡不會去做那個,然後這裡是一個助手函式,這實際上非常類似於你可能在聊天中看到的助手函式,Gpt prom工程為開發者,與我一起提供的課程是fulford。
因此,使用此助手函式,您可以說完成什麼等於一加一。
這將呼叫try gpc,或技術上,模型gpt三點五渦輪以給您一個回答,現在像這樣來激勵線鏈。
模型提示和暫停的抽象。
假設你收到一封來自非英語客戶的電子郵件。
嗯,為了確保這是可訪問的,我將使用的其他語言是英語海盜語言。
當涉及到R時,我會大發脾氣,那蓋子飛開了,把我的廚房牆壁灑滿了奶昔。
而且事情變得更糟,保修不覆蓋清理廚房的成本。
我現在需要你的幫助,夥計,所以我們將讓這個lm將文字翻譯成美式英語。
以平靜和尊重的語氣,所以我將設定樣式為美式英語,以常見和尊重的語氣,因此,為了實際完成這個任務。
如果你以前見過一點提示,我將使用f字串來指定提示,包含指示。
將三引號分隔的文字翻譯成樣式為style。
然後插入這兩種風格,因此,這生成一個提示說。
翻譯文字,等等。
我鼓勵您暫停影片並執行程式碼,也嘗試修改提示,看看是否能得到不同的結果。
你可以。
然後,嗯,提示大型語言模型獲取響應。
讓我們看看響應是什麼,所以它將英語海盜的資訊翻譯成這種非常禮貌的。
我真的很沮喪,我的攪拌機蓋子飛走了。
在廚房牆上造成了一團糟,所以,果汁,等等,我現在真的很需要你的幫助。
聽起來非常友好的朋友,所以,如果你有不同的客戶用不同的語言寫評論。
不僅僅是英語海盜,但法語,德語。
日語等等,你可以想象需要生成一系列提示來生成這樣的翻譯。
讓我們看看如何更方便地做到這一點,使用lang chain。
我將匯入chat openai,這是lang cha對chat gpt api端點的抽象。
如果我然後說等於chat openai並看什麼chat是。
它建立了這個物件如下,它使用chat gpt模型,也被稱為gpt 3。5 turbo。
當我構建應用程式時,我會經常設定溫度引數等於零。
所以預設溫度是0。7,但我實際上重新做那個,溫度,等於0。0,現在,溫度被設定為0,以使其輸出稍微不那麼隨機。
現在,讓我定義模板字串如下。
將文字翻譯成風格,風格由三重動作定義,然後這裡是文字。
為了重複使用此模板,我將匯入lang chains,Chat prompt template。
然後,讓我使用上面寫的模板字串建立提示模板。
從提示模板,實際上可以從中提取原始提示,它意識到這個提示有兩個輸入變數,風格和文字,在這裡以括號顯示。
並且這裡是我們實際上指定的原始模板,也列印出來。
嗯,它意識到有兩個輸入變數。
風格和文字,現在,讓我們指定風格,這是我想要客戶訊息翻譯成的風格,所以我將稱此為客戶風格,這是我的先前客戶電子郵件,現在這樣。
如果我建立自定義訊息,這將生成提示。
我們將將這個,在一分鐘後傳遞給大型語言模型以獲取響應,所以如果你想檢視型別,自定義訊息實際上是一個列表,嗯。
如果你看列表的第一個元素,這是大約您期望建立此訊息時將生成的提示。
讓我們將這個提示傳遞給lm。
所以我將呼叫聊天,我們之前說過,嗯,作為對openai gpt端點的參考。
如果我們列印出客戶響應的內容,那麼它將返回,嗯,這是從英語海盜翻譯成禮貌的美國英語的文字,當然,你可以想象其他用例,其中客戶電子郵件是其他語言。
這兩個可以用於為英語翻譯訊息。
以理解和回覆,我鼓勵你暫停影片並執行程式碼,也嘗試修改提示,看看能否得到不同的結果現在。
讓我們希望我們的客戶服務代表以原始語言回覆了客戶。
所以讓我們說,英語說者,客戶服務代表起身,說嗨那裡,客戶保修不涵蓋您廚房清潔費用的費用,因為它是你濫用攪拌機的錯誤,透過叉子在蓋子上,運氣不好,再見,不是一個很禮貌的訊息。
但讓我們說這是客戶服務代表想要的。
我們將指定,服務訊息將被翻譯成這個海盜風格,所以我們想要它以英語海盜的語氣說,語氣禮貌,因為我們之前建立了那個提示模板。
有趣的是,我們現在可以重用那個提示模板,並指定我們想要輸出的是這個海盜服務風格,並且文字是這個服務回覆,如果我們這樣做。
這就是提示。
如果我們提示,嗯 chagpt t。
這就是它給我們返回的響應,我必須為你來,保修不覆蓋費用或清潔你的廚房等。
運氣不好,法老,熱心腸,所以你可能會好奇。
我們為什麼使用提示模板而不是,你知道,只是一個f字串,答案是因為你在建立複雜的應用程式時,提示可以非常長且詳細。
因此,提示模板是一種有用的抽象,可以幫助你重複使用好提示。
當你可以,嗯,這是一個相對較長的提示示例,為了評估線上學習應用程式中的學生提交。
像這樣的問題可以非常長,在其中,你可以要求lm首先解決這個問題,然後,輸出格式為某種格式,輸出格式也為某種格式。
並將此包裹在lang chain中,提示使得重複使用這樣的提示變得更加容易。
你也看到後來,語言鏈為某些常見操作提供了提示,例如,摘要或問題解答,或者連線到SQL資料庫。
或者連線到不同的API,因此,透過使用一些內建在語言鏈中的提示,你可以快速得到一個應用程式工作,而不需要。
設計和構建自己的提示,語言鏈的提示庫的另一個方面是它也支援輸出解析,我們將在下一分鐘講到,但是,當你在使用llm構建複雜的應用時,你經常指示lm以特定的格式生成其輸出,例如,使用特定的關鍵詞。
左邊的這個例子展示瞭如何使用llm執行被稱為鏈式思考的事情,推理,使用被稱為react框架的框架,但不用擔心技術細節,但關鍵的是,想法是lm正在思考的,因為透過給lm留出思考的空間。
它往往可以得出更準確的結論,然後使用行動作為關鍵詞來執行特定的行動,然後觀察來顯示從那個行動中學到的東西,就這樣,如果你有一個提示,它指示lm使用這些特定的關鍵詞,思考,行動和觀察。
然後這個提示可以與一個解析器結合,來提取出被標記為這些特定關鍵詞的文字,這樣一起就給出了一個非常漂亮的抽象,來指定lm的輸入,然後,也要有一個解析器正確地解釋lm給出的輸出,因此。
讓我們回到看到使用lang chain的輸出解析器的例子。
在這個例子中,讓我們看看如何讓您的lm輸出為json,並使用line chain傳遞該輸出。
為了執行我將使用的示例,將是從產品評論中提取資訊並將該輸出格式化為相鄰格式。
所以,這裡是您希望輸出格式化的技術示例。
這是一個Python字典,其中表示產品是否為禮物,對映為false,它花費的天數,送貨員是五,並且價格價值相當實惠,所以,這是一個想要的輸出示例。
這裡是一個客戶評論。
以及一個嘗試獲取json輸出的模板,所以,這是一個客戶評論,它說睡眠模糊非常棒,它有四個設定,蠟燭吹風機,性別,微風,風城和龍捲風,兩天後到達,正好趕上我妻子的生日禮物,我認為我的妻子非常喜歡。
到目前為止她都沉默了,我一直在使用它,等等,這裡是根據以下文字的評論模板,從資訊中提取,這是否是禮物,所以在這種情況下將是yes,因為這是禮物,嗯,而且也是送貨天數,它花了多長時間送達,看起來。
在這種情況下它兩天後到達,什麼價格價值,你知道,在跳躍期間稍微貴一些,吹風機等。
所以,評論模板是lm要作為輸入的,一個客戶評論,並提取這三個欄位,然後格式化輸出為json,嗯,使用以下鍵。
好的,所以,這就是如何將此包裝在lang chain中。
讓我們匯入聊天提示模板,我們實際上 earlier 就已經匯入了這個,所以從技術上講,這行程式碼是多餘的,但我還是會再次匯入它,然後從評論模板建立提示模板,放在頂部。
這就是提示模板。
現在,類似於我們 earlier 對提示模板的使用,讓我們建立要傳遞給 open eye 的訊息,嗯,終點,對待 open air 終點,呼叫那個端點,然後讓我們列印出響應,我鼓勵你暫停影片並執行程式碼。
這就是它,它說,如果為真,這是二,而且價格值看起來也很準確。
嗯,但請注意,如果我們檢查型別。
響應中的這一部分,實際上這是一個字串,所以它看起來像json,並且看起來像有鍵值對,但實際上它不是一個字典,這只是一個長長的字串。
所以我真正想做的是去響應內容中獲取鍵的值。
如果鍵,這應該是真的,但我執行這個,這應該生成一個錯誤,因為。
這實際上是一個字串,這不是一個Python字典,所以讓我們看看如何使用lang chains在解析器中。
為了做到這一點。
我將匯入,響應schema和結構化輸出解析器從lang chain,並且我將告訴它。
我想要暫停,透過指定這些響應schema。
所以禮物方案的名稱是禮物,這裡是描述:該物品購買用於為他人購買禮物。
回答真或是,假,如果不是如此未知。
等等,所以有一個好方案,配送一個方案價格值方案,然後讓我們將這三個都放入一個列表如下。
現在我已經指定了這些啟動的方案,實際上可以給您提示本身,透過擁有積極的輸出,告訴你它想要你傳送給lm的指令,所以如果我要列印格式指令,她對lm有非常精確的指令,這將導致它生成輸出,輸出解析器可以處理。
所以這裡是一個新的評論模板。
並且評論模板包括lang chain生成的格式指令。
因此我們可以從評論模板中建立兩個提示。
然後建立將傳遞到openai端點的訊息。
如果你想,你可以檢視實際的提示,這是給出提取保險絲的指令,如果交貨日期,價格值,這裡是文字,然後這裡是格式化指令,最後,如果我們呼叫open ai端點,讓我們看看我們得到的響應,現在是這個。
現在如果我們使用我們建立的輸出解析器。
那麼你可以 earlier 將此傳遞給一個輸出字典。
按區域列印看起來像這樣,請注意這是大寫字母的字典。
不是字串,這就是我為什麼現在可以提取與鍵 gift 相關的值並得到 true,或與交付日期相關的值並得到 two。
或你也可以提取與價格值相關的值。
所以這是一種聰明的方法來處理你的 lm 輸出。
並將其解析為 Python 字典。
以使輸出在下游處理中更容易使用,我鼓勵你暫停影片並執行程式碼,這就是關於模型的全部,使用這些工具進行提示和解析,希望你能夠重用自己的自定義提示模板,很容易,與他人分享提示模板,與你合作的人。
甚至可以使用內建於提示模板的語言鏈,正如你剛剛看到的,這些通常可以與輸出解析器結合使用,以便將輸入提示以特定格式輸出。
然後,解析器暫停該輸出以將資料儲存在Python字典中,或者一些其他資料結構,使它對下游處理更加方便。
我希望這在您許多應用中都有用處。
那麼,讓我們去看下一個影片,在那裡,我們將看到如何利用lanking幫助您構建更好的聊天機器人,或者有一個lm,進行更有效的聊天。
LangChain_微調ChatGPT提示詞_RAG模型應用_agent_生成式AI - P27:3——記憶 - 吳恩達大模型 - BV1gLeueWE5N
當你與這些模型互動,它們自然不會記得你之前說過什麼或之前的對話,這是一個問題,當你構建像聊天機器人這樣的應用程式時,你想與他們進行對話,因此,在這一節中我們將涵蓋記憶。
基本上是如何記住對話的前一部分並將其輸入語言模型,這樣他們就可以在你與他們互動時有這種對話流程,是的,所以lang提供了多種複雜的選項來管理這些記憶,讓我們深入瞭解一下,所以讓我先匯入我的API金鑰。
然後讓我匯入一些我需要使用的工具。
讓我們以管理聊天或聊天機器人的對話為例。
使用lag chain來管理。
所以要做這件事,我將將lm設定為openai的聊天介面。
溫度等於0,並且我將使用記憶作為對話緩衝記憶。
稍後你會看到這是什麼意思,嗯,然後我將再次構建對話鏈。
在這門短課程中,Harrison將更深入地探討鏈和lag chain到底是什麼,所以現在不要過於擔心語法的細節,但這構建了一個llm,如果我開始對話,對話點預測,給定輸入嗨。
我的名字是安德魯,讓我們看看它說什麼 你好,很高興見到你 是的 等等,然後假設我問它,1加1等於幾,嗯 1加1等於2,然後再次問它,你知道我的名字嗎,你的名字是安德魯,正如你之前提到的。
有一點諷刺的味道,不確定,所以如果你想,你可以將verbals變數設定為真,看看當執行預測高時lang chain實際上在做什麼。
我的名字是安德魯,這是lang chain生成的提示,它說以下是人類和AI之間的對話。
作為健談和等等。
所以這是lang chain生成的提示,讓系統,有一個希望和友好的對話,並且它必須儲存對話,儲存對話,這裡是回應,當你執行這個時。
嗯,因果的第二三部分,它保持提示如下,注意當我念出我的名字時,這是第三個術語。
這是我的第三個輸入,它已將當前對話儲存如下。
你好,我叫安德魯,1加1等,因此,對話的歷史越來越長。
實際上在頂部,我用記憶體變數儲存了記憶。
所以如果我列印記憶體緩衝,它已儲存到目前為止的對話。
你也可以列印這個。
記憶體載入記憶體變數,嗯,這裡的花括號實際上是一個空字典。
有一些更高階的功能你可以使用。
但在這門短課程中我們不會討論它們,所以不用擔心。
為什麼這裡有一個空的花括號,但這是lang chain記住的。
到目前為止對話的記憶,它只是AI或人類所說的一切,我鼓勵你暫停影片並執行程式碼。
lang chain儲存對話的方式是使用這個對話緩衝記憶體。
如果我使用組合。
緩衝記憶體指定幾個輸入和輸出,這就是你如何向記憶中新增新東西。
如果你想明確地這樣做,記憶,儲存上下文說你好。
怎麼了,我知道這不是最令人興奮的對話。
但我想讓它有一個簡短的例子,有了這個,這就是記憶的狀態。
再次讓我實際上顯示,嗯,記憶體變數現在,如果你想新增額外的。
嗯資料到記憶體,你可以繼續儲存更多上下文,因果繼續不多。
只是冷靜地掛著,如果你列印出記憶體。
你知道現在有更多的內容,所以當你使用大型語言模型進行聊天對話時。
嗯大型語言模型本身實際上是無狀態的。
語言模型本身不記對話,每筆交易,每次API呼叫獨立。
聊天機器人,僅因為通常有程式碼提供,迄今為止的完整對話作為上下文。
因此記憶體可以明確儲存。
嗨,我叫安德魯,很高興見到你等,這種記憶體儲存用作輸入或附加上下文。
以便它們可以生成輸出,就像只有下一個對話回合。
知道之前說了什麼。
隨著對話變長,所需記憶體量變得非常長,傳送大量令牌到LM的成本也會增加。
通常按需要處理的令牌數收費。
因此鏈提供了幾種方便的記憶體型別。
以儲存和累積對話。
我們一直在看對話緩衝記憶體,讓我們看看另一種型別的記憶體。
我將匯入對話緩衝視窗AR。
它只保留一段記憶體,我設定記憶體為緩衝視窗記憶體,k等於一。
變數k等於一,指定我只想記住一次對話交換。
即一次我的回合,和一次聊天機器人的發言。
所以現在如果我讓它儲存上下文嗨,怎麼了,不只是掛著。
如果我檢視記憶體載入變數。
它只記得最近的發言,注意'嗨'被丟棄。
怎麼了,它只說人類說不多,只是掛著,AI說酷。
因為k等於一,這是一個很好的功能。
因為它讓你跟蹤最近的幾次對話。
實踐中你可能不會用k等於一,你會用k設定為較大的數字。
嗯,但這防止了記憶體無限制增長。
隨著對話變長,如果我們重新執行剛才的對話,我們說嗨,我叫安德魯。
1加1等於幾,我叫什麼名字。
因為k等於一,它只記得最後交流。
哪個是一加一,答案是1,加等於2,然後它忘記了,這個早期交流。
現在說抱歉,我沒有訪問這些資訊。
我希望你會暫停影片,在左邊的程式碼中改為true,並重新執行此對話,verbose等於true。
然後你會看到實際使用的提示。
當你呼叫lm時,希望你能看到記憶。
我叫什麼名字,記憶已經丟失這個交流,我學到,我叫什麼名字,這就是為什麼現在說不知道,我叫什麼名字。
使用對話令牌緩衝記憶,記憶將限制儲存的令牌數。
因為許多lm定價基於令牌,這更直接地對映到lm呼叫的成本。
如果我設定最大令牌限制等於五十,實際上讓我插入一些註釋。
比如對話是人工智慧是什麼驚人的反向傳播,美麗的教堂是什麼迷人的,我用abc作為所有這些國家術語的第一個字母,我們可以跟蹤何時說了什麼。
如果我以高令牌限制執行,它幾乎有整個對話,如果我增加令牌限制到一百,現在它有整個對話,人工智慧的標誌是什麼,如果我減少它,那麼你知道它切掉了對話的早期部分,以保留對應最近交流的令牌數。
但受限於不超過令牌限制,如果你想知道為什麼我們需要指定,因為不同的lm使用不同的計數令牌方式,所以這告訴它使用聊天openai lm使用的計數令牌方式。
我鼓勵你暫停影片並執行程式碼,並嘗試修改提示以檢視是否可以得到不同的輸出,最後,這裡有一種我想說明的最後一種記憶,即對話摘要緩衝記憶。
想法不是限制記憶到固定數量的令牌。
基於最近的陳述,而是基於最相關的陳述,或固定對話次數。
用語言模型寫對話摘要。
讓那成為記憶,示例如下。
我將建立某人日程的字串,你知道與產品團隊的會議,你需要PPT演示等,這是長字串說。
你的日程是什麼,你知道,中午在義大利餐廳結束,與客戶,帶上膝上型電腦,展示最新電影演示,因此讓我使用對話摘要。
緩衝,記憶體,嗯,最大標記限制為400。
在這種情況下,很高的標記限制,我將要。
我們以'你好'開始的一些對話術語,怎麼了,沒,就掛著,嗯,酷。
今天日程上有什麼,回答是。
你知道那長長的日程,現在這段記憶包含了很多文字。
實際上讓我們看看記憶變數,包含全部文字,400個標記足夠儲存,但若減少最大標記數,比如100個標記,記住儲存全部對話歷史,若減少標記數至100,實際上使用了OpenAI的lm端點,因為我們說過。
讓lm生成對話摘要,所以摘要是人類和AI閒聊,通知人類早會,blah blah blah,嗯,與對AI感興趣的客戶午餐會議,因此,如果我們進行對話,使用此LM,讓我建立對話鏈,與之前相同,嗯。
假設我們要問。
你知道輸入,展示什麼好呢?我說詳細為真,所以這是提示,Dlm認為對話已討論這些,因為那是對話總結,僅一點注意,如果你熟悉openai聊天API端點,有一個特定系統訊息,在這個例子中。
這不是使用官方OpenAI系統訊息,只是將其作為提示的一部分,但它仍然工作得很好,考慮到這個提示,你知道,輸出基本上很有趣,發展正在展示我們最新的NLP能力,好的,那很酷,好吧,你知道,給酷演示提建議。
讓你思考,如果見客戶,我會說,夥計,若開源框架可用,助我建酷NLP應用,好東西,比如,有趣的是,看記憶體發生了什麼,注意,這裡整合了最新AI系統輸出,我詢問的演示不會好,已整合到系統訊息中,嗯。
你知道到目前為止的對話概要,緩衝記憶體,它試圖做的是保持訊息的顯式儲存,直到我們指定的標記數為止,所以你知道這部分顯式儲存,或嘗試限制在一百個標記,因為這是我們要求的。
然後任何超出部分它將使用lm生成摘要,這就是上面所見的,儘管我已用聊天示例,說明了這些不同記憶,這些記憶對其他應用也有用,在那裡你可能不斷收到文字片段,或不斷收到新資訊,例如。
如果你的系統反覆線上搜尋事實,但你想保持總記憶量,不要讓列表任意增長,我建議你暫停,影片並執行程式碼,你看到幾種記憶體。
嗯,包括基於交換次數或標記數的緩衝記憶體,或可總結超過一定限制標記的記憶體。
實際上,該鏈還支援其他型別的記憶體,最強大的是向量資料記憶體。
如果你熟悉詞嵌入和文字嵌入。
向量資料庫實際上儲存這樣的嵌入(如不知道,別擔心)。
別擔心,哈里森稍後會解釋,然後檢索最相關文字塊,使用這種向量資料庫儲存記憶。
Lankan也支援實體記憶,適用於你想記住特定人或特定實體的細節時。
比如談論特定朋友,可以讓Lang Chain記住關於那個朋友的事實,這應該以明確方式作為實體。
在使用Lang Chain實現應用時,也可以使用多種型別的記憶。
如使用影片中看到的對話記憶型別之一,另外,還有實體記憶以回憶個人。
這樣你可以記住對話的概要,以及關於對話中重要人物的重要事實的明確儲存方式。
當然,除了使用這些記憶型別,開發人員將整個對話儲存在傳統資料庫中也不罕見,某種鍵值儲存或SQL資料庫。
因此可以回顧整個對話,用於審計或系統改進。
這就是記憶體型別,希望您覺得有用。
構建自己的應用,現在讓我們繼續下一影片,學習語言鏈的關鍵構建塊。
LangChain_微調ChatGPT提示詞_RAG模型應用_agent_生成式AI - P28:4——鏈 - 吳恩達大模型 - BV1gLeueWE5N
在這堂課中。
哈里森將教授土地鏈最重要的關鍵構建塊,即鏈,鏈通常結合了一個lm大型語言模型和一個提示,以及這個構建塊,你也可以將這些構建塊放在一起,來完成對你文字或其他資料的一系列操作,我對此充滿期待。
讓我們立即開始吧。
我們將像以前那樣載入環境變數,然後,我們還將載入我們將要使用的一些資料。
嗯,這些鏈條的一部分力量在於,你可以同時執行它們過許多輸入。
在這裡。
我們將載入一個pandas資料框,pandas資料框只是一個包含大量不同資料元素的資料結構。
如果你不熟悉pandas,不要害怕,主要的。
主要的觀點在這裡是我們正在載入一些我們可以後來使用的資料,因此,如果我們看進去這個pandas資料框。
我們可以看到有一個產品列,然後有一個評論列,而且這些行中的每一行都是一個我們可以開始透過鏈傳遞的不同資料點。
所以第一個我們要覆蓋的鏈是lom鏈。
而且這是一個簡單但真的很強大的鏈,它支撐了許多未來將要覆蓋的鏈。
所以我們要匯入三樣不同的東西。
我們將匯入openai模型,所以我們將匯入聊天提示模板,所以這就是提示,然後我們將匯入llm鏈,所以首先我們要做的第一件事是,我們將初始化我們要使用的語言模型。
所以我們將初始化chat open ai,使用高溫度。
以便我們可以得到一些有趣的描述,現在我們將初始化一個提示。
這個提示將接受一個名為產品的變數,它將要求llm生成什麼。
描述生產該產品的最佳名稱是什麼,最後,我們將將這些兩件事結合起來形成一個鏈,因此,這就是我們所說的llm鏈,它相當簡單,它就是llm和提示的組合。
但現在這條鏈將讓我們能夠透過提示進入llm。
以序列化的方式,因此,如果我們有一個產品叫做皇后尺寸床單套裝。
我們可以透過使用chain run將這個透過鏈,而這將會做的就是它將提示在底層格式化。
然後它將整個提示傳遞給llm,因此,我們可以看到,我們得到了這個假設公司的名稱。
稱為皇家床品,所以這裡是一個暫停的好時機,你可以輸入你想要的任何產品描述,你可以看到鏈將輸出什麼結果。
所以LLM鏈是最基本的鏈型別。
而且這將在未來被廣泛使用,所以我們可以看到這將如何在下一種型別的鏈中使用。
這將是序列鏈,所以序列鏈將執行一系列鏈一個接一個。
所以首先你將匯入簡單的序列鏈。
這工作得很好,當我們有隻期望一個輸入並返回一個輸出的子鏈時。
所以這裡我們將首先建立一個鏈。
該鏈使用LLM和一個提示,這個提示將接受產品。
並將返回描述該公司的最佳名稱,這將是第一個鏈。
然後我們將在第二個鏈中建立第二個鏈,我們將輸入公司名稱,然後輸出該公司的二十字描述。
所以你可以想象這些鏈如何想要一個接一個執行。
其中第一個鏈的輸出,公司名稱將被傳遞給第二個鏈。
我們可以很容易地這樣做,透過建立一個簡單的序列鏈。
其中我們有那裡描述的兩個鏈,我們將稱這個整體為簡單鏈,現在,你可以執行這個鏈過任何產品描述。
所以如果我們用它與上面的女王尺寸床套。
我們可以執行它,我們可以看到它首先輸出皇家床品。
然後它將將其傳遞給第二個鏈,它產生了關於該公司可能關於的描述,簡單序列鏈在只有一個輸入和一個輸出時工作得很好。
但是,當有多個輸入或輸出時怎麼辦,所以我們可以透過使用普通的序列鏈來做到這一點。
讓我們匯入它,然後你將建立一系列我們將使用的鏈。
一個接一個,我們將使用上面的資料,其中包含評論,我們首先將取第一個鏈。
嗯,評論並翻譯成英語。
與第二個鏈,我們將建立該評論的總結為一句話。
這將使用之前生成的英語評論。
第三個鏈將檢測評論最初使用的語言。
所以如果你注意到這在使用來自原始評論的review變數。
最後,第四個鏈將接受多個輸入。
所以這將接受總結變數,我們在第二個鏈中計算的,和語言變數,我們在第三個鏈中計算的,它將要求對總結的回應以指定的語言。
請注意,所有這些子鏈都有一個重要的事情,即,那是否輸入鍵和輸出鍵需要精確到細節,所以這裡我們在進行審查,這是一個將在開始時傳遞的變數。
我們可以看到,我們明確設定了輸出鍵為英語評論。
然後,它在下面的提示中被使用,在那裡,我們以相同的變數名稱輸入英語評論,並將該鏈的輸出鍵設定為摘要。
我們可以看到,它在最終鏈中被使用,第三個提示輸入原始變數和輸出語言,再次在最終提示中被使用。
準確地對齊這些變數名稱非常重要。
因為有許多不同輸入和輸出在進行,如果你有任何鍵錯誤,你應該肯定檢查它們是否對齊。
所以,簡單的序列鏈可以輸入多個鏈。
其中每個鏈都有一個輸入和一個輸出,以看到這種表示的視覺化,我們可以看到這張幻燈片,其中一個鏈輸入另一個鏈。
在這裡,我們可以看到序列鏈的視覺描述。
與上述鏈相比,您會發現鏈中的每一步都可以輸入多個輸入變數。
這是有用的,當你有更復雜的下游鏈需要由多個先前的鏈組成時。
現在我們有了所有這些鏈,我們可以輕鬆地將它們組合在序列鏈中。
所以你會發現這裡,我們將我們建立的四個鏈傳遞給鏈,變數將建立輸入變數,其中包含一個人類輸入。
這是評論,然後我們想要返回所有中間輸出。
所以,英語評論,摘要,然後是後續訊息,現在我們可以執行一些資料。
所以讓我們選擇一條評論並透過整體鏈傳遞它。
我們可以看到,原始評論看起來像是法語。
我們可以看到英語評論作為翻譯,我們可以看到該評論的摘要,然後,我們可以看到後續訊息在原始語言的法語中,您應該在這裡暫停影片並嘗試輸入不同的結果,我們已經覆蓋了llm鏈和序列鏈。
但如果你想要做更復雜的事情,一個常見的但基本的操作是將輸入路由到一個鏈,取決於輸入的確切型別,這是一個很好的想象方式。
這是你如果有多個子鏈的情況,每個子鏈都專門用於處理一種型別的輸入,你可能有一個路由器鏈。
它首先決定將輸入傳遞給哪個子鏈,然後,將輸入傳遞給該鏈。
以具體例子來說,讓我們看看我們是如何在不同型別的鏈之間路由的,取決於似乎到來的主題。
所以,我們有這裡不同的提示,根據主題的型別,一個提示對於回答物理問題很有用,第二個提示對於回答數學問題很有用,第三個對於歷史,然後第四個對於電腦科學,讓我們定義所有這些提示模板。
當我們有了這些提示模板。
然後我們可以提供更多關於它們的資訊,我們可以為每個一個命名。
然後描述,這是對物理的描述,一個是用於回答物理問題的。
這資訊將被傳遞給路由器鏈。
所以路由器鏈可以決定何時使用此子鏈。
現在讓我們匯入這裡需要的其他型別的鏈。
我們需要一個多提示鏈,這是一種特定型別的鏈,用於在多個不同提示模板之間路由。
正如你看到的所有選項都是提示模板本身。
但這只是您可以路由之間的一種東西,您可以路由任何型別的鏈。
我們在這裡實現的其他類是llm路由器鏈,這使用語言模型本身在子鏈之間路由。
這是上面描述和名稱將被使用的地方。
我們還匯入了一個路由器輸出解析器,這解析輸出為可以下游遊用於確定應使用哪個鏈的字典。
以及該鏈的輸入應是什麼,現在可以開始使用它了,讓我們匯入並定義我們將使用的語言模型。
我們現在建立目的地鏈,這些是路由器鏈將呼叫的鏈。
正如你看到的,每個目的地鏈本身都是一個語言模型鏈。
一個llm鏈,除了目的地鏈。
我們還需要一個預設訓練,這是當路由器無法決定應使用哪個子鏈時將被呼叫的鏈,例如,上面的例子可能在輸入問題與物理無關時被呼叫,如數學、歷史或電腦科學。
現在,我們定義llm用於在不同鏈之間路由的模板,這包含要完成的任務的指示,以及輸出應遵循的特定格式,讓我們將這些部分放在一起來構建路由器鏈。
首先,我們建立完整的路由器模板,透過格式化它來使用我們上面定義的目的地,這個模板靈活於許多不同型別的目的地。
你可以在這裡暫停並新增不同型別的目的地。
在這裡,而不是隻是物理。
數學、歷史和電腦科學,你可以在這裡暫停並新增不同型別的目的地。
所以,在這裡,而不是隻是物理,數學、歷史和電腦科學,你可以新增一個不同的主題,如英語或拉丁語,接下來,我們從這個模板中建立提示模板,然後,我們透過傳遞llm建立路由鏈。
並總體路由提示說明,在這裡我們有路由輸出解析器,這很重要,因為它將幫助這條鏈決定將某些鏈路由到何處,最後,將所有部分放在一起,我們可以建立總體鏈,這有一個定義在這裡的路由器鏈。
它包含我們要在這裡傳遞的目的地鏈,我們還在這裡傳遞預設鏈,我們現在可以使用這條鏈。
所以讓我們問你一些問題,如果我們問它關於物理的問題。
我們應該希望看到它被路由到包含輸入的物理鏈上。
什麼是黑體輻射,然後,它將被傳遞到下面的鏈中。
我們可以看到響應非常詳細,充滿了許多物理細節,你應該在這裡暫停影片並嘗試輸入不同的內容,你可以嘗試使用我們上面定義的所有其他特殊鏈型別,例如,如果我們問它一個數學問題。
我們應該看到它被路由到數學鏈,然後傳遞到那裡。
我們也可以看到當我們輸入問題時會發生什麼。
這與任何子鏈都不相關,在這裡我們問它一個生物學問題。
我們可以看到它選擇的鏈是None,這意味著它將被傳遞到預設鏈,預設鏈本身只是一個對語言模型的通用呼叫,幸運的是,語言模型對生物學知道很多,所以現在我們已經覆蓋了這些基本的構建塊,我們可以幫助它。
型別的鏈,我們可以開始將它們組合起來建立非常有趣的應用程式,例如,在下一節中。