吳恩達大模型教程筆記-一-

绝不原创的飞龙發表於2024-10-01

吳恩達大模型教程筆記(一)

【LangChain大模型應用開發】DeepLearning.AI - P1:基於LangChain的大語言模型應用開發1——介紹 - 吳恩達大模型 - BV1iZ421M79T

歡迎參加語言鏈課程。

透過提示LLM開發應用,現在開發AI應用更快,應用需多次提示LM並解析輸出,因此需編寫大量膠水程式碼,Harrison Chase建立的語言鏈簡化此過程,很高興Harrison能來。

與深度學習合作開發此課程,AI教授如何使用此工具,感謝邀請,我真的很高興來到這裡,長鏈最初是一個開源框架,當我與領域內的一群人交談時,他們正在構建更復雜的應用程式,並看到了開發過程中的一些共同抽象。

我們一直對長鏈社群的採納感到興奮,所以期待與這裡的每個人分享,並期待看到人們用它構建什麼,實際上,作為長鏈動力的標誌,但也有數百開源貢獻者,這對快速開發至關重要,團隊以驚人速度釋出程式碼和功能。

所以希望短期課程後,你能快速用Line Chain開發酷應用,也許你甚至決定回饋開源Line Chain,Lang Chain是構建LM應用的開源框架,有兩個不同包,一個是Python。

一個是JavaScript,專注於組合和模組化。

它們有許多可單獨使用或相互結合的獨立元件,這是關鍵價值之一。

另一個關鍵價值是一系列不同的用例,因此,這些模組化元件可以組合成更多端到端應用程式,並且使開始使用這些用例變得非常容易。

我們將涵蓋lang chain的常見元件。

我們將討論模型,我們將討論提示,這是如何讓模型做有用和有趣的事情。

我們將討論索引,資料攝入方式有哪些。

這樣您就可以與模型結合,然後討論端到端用例的鏈條,連同代理商,這些是令人興奮的端到端用例型別,將模型用作推理引擎。

我們也感謝阿尼什·戈拉,與哈里森·蔡斯一起創辦的人是誰,深入思考這些材料,並協助製作這門短課。

在深度學習AI方面,傑夫,路德維希,埃迪舒和迪亞拉作為院長也貢獻了這些材料。

那麼讓我們繼續看下一個影片,在那裡我們將學習空白模型。

【LangChain大模型應用開發】DeepLearning.AI - P10:2——文件載入 - 吳恩達大模型 - BV1iZ421M79T

為了建立一個應用程式,您可以在其中與您的資料聊天,您首先必須將資料載入到可以使用的格式中,這就是長鏈文件載入器發揮作用的地方,我們有80多種不同型別的文件載入器,在這節課中,我們將討論一些最重要的問題。

讓您對這個概念感到滿意,一般來說,我們跳進去吧,文件載入器處理訪問和轉換資料的細節,從各種不同的格式和來源變成標準化的格式,我們可以在不同的地方從類似的網站載入資料,不同資料庫,YouTube。

這些文件可以有不同的資料型別,比如PDF。

html json,然後呢,所以,文件載入器的全部目的是獲取各種資料來源,並將它們載入到標準文件物件中,它由內容和相關的後設資料組成。

連結鏈中有許多不同型別的文件載入器,我們沒有時間把它們都蓋住。

但這裡有一個八十個的粗略分類,另外,我們有很多處理載入非結構化資料的方法,就像來自公共資料來源的文字檔案,比如YouTube。

推特,駭客新聞,還有更多的處理載入非結構化資料,從專有資料來源,您或您的公司可能有像Figma概念,文件載入器還可用於載入結構化資料,表格格式的資料,可能只是在其中一個單元格或行中有一些文字資料。

你還想做的問題,回答,或語義搜尋,所以這裡的來源包括像AirByte這樣的東西,條紋,可空氣。

好了現在,讓我們跳到有趣的東西,實際使用文件載入器,第一批,我們將載入一些我們需要的環境變數,比如openai api鍵,我們要處理的第一類文件是PDF,因此,讓我們從長鏈匯入相關的文件載入器。

我們要用圓周率PDF漂浮物,我們已將一堆PDF檔案裝入工作區的文件資料夾。

所以讓我們選擇一個,把它放在裝載機裡,現在讓我們透過呼叫load方法來載入文件,讓我們看看我們到底裝了什麼,所以這個,預設情況下,將載入文件列表,在這種情況下,這個PDF中有22個不同的頁面。

每一個都是自己獨特的文件,讓我們來看看第一個,看看它是由什麼組成的,文件的第一件事是一些頁面內容,哪個是頁面的內容,這可能有點長,所以讓我們列印出最初的幾百個字元。

另一個真正重要的資訊是與每個文件相關聯的後設資料,這可以使用後設資料元素訪問。

你可以看到這裡有兩個不同的部分,一是源頭資訊,這是PDF,我們從另一個載入的檔案的名稱是頁面欄位,這與PDF的頁面相對應,它是從我們將要看到的下一種文件載入程式載入的,是從YouTube上載入的。

YouTube上有很多有趣的內容,所以很多人使用這個文件載入器可以問問題,他們最喜歡的影片或講座,或者類似的東西。

我們將在這裡進口一些不同的東西,關鍵部分是YouTube音訊載入器,從YouTube影片中載入音訊檔案,另一個關鍵部分是開放的AI耳語解析器,這將使用openai的耳語模型,一種語音到文字模型。

將YouTube音訊轉換為我們可以使用的文字格式。

我們現在可以指定一個URL。

指定儲存音訊檔案的目錄,然後建立通用載入程式作為這個YouTube音訊載入程式的組合,結合openai耳語解析器,然後我們可以呼叫載入器點載入來載入與這個YouTube相對應的文件。

這可能需要幾分鐘。

所以我們要加快速度,現在它已經裝完了。

我們可以看看我們載入的頁面內容,這是YouTube影片的第一部分,現在是暫停的好時機,去選擇你最喜歡的YouTube影片,看看這個轉錄是否適合你。

我們要看的下一組檔案,如何從Internet載入URL,網際網路上有很多非常棒的教育內容,那不是很酷嗎?如果你能和它聊天。

我們將透過從連結鏈匯入基於Web的載入器來實現這一點。

然後我們可以選擇任何URL,我們最喜歡的URL,我們將從這個GitHub頁面中選擇一個標記檔案,併為它建立一個載入器。

然後接下來我們可以呼叫載入器點載入,然後我們可以看看頁面的內容。

在這裡你會注意到有很多空白。

然後是一些初始文字,然後是更多的文字,這是一個很好的例子,說明為什麼您實際上需要對資訊進行一些後處理,使其成為可行的格式。

最後,我們將介紹如何從Concept載入資料,Notion是一個非常受歡迎的個人和公司資料儲存,很多人創造了聊天機器人,與你筆記本上的概念資料庫對話。

您將看到有關如何將資料從概念資料庫匯出為格式的說明,透過它我們可以把它載入到連結鏈中,一旦我們有了那種格式,我們可以使用概念目錄載入器來載入資料,得到我們可以處理的檔案。

如果我們看看這裡的內容,我們可以看到它是降價格式的,這份概念檔案來自混合的員工手冊,我相信很多聽眾都認為,並有一些概念資料庫,他們想與之聊天。

所以這是一個很好的機會去匯出這些資料。

把它帶進來,開始用這種格式工作,這裡的文件載入到此結束,我們已經介紹瞭如何從各種來源載入資料,並將其放入標準化文件介面,然而,這些檔案仍然相當大。

在下一節中,我們將學習如何把它們分成更小的塊,這是相關的,也是重要的,因為當你在做這個檢索增強生成時,您只需要檢索最相關的內容片段,所以您不想選擇我們在這裡載入的整個文件,但只有這一段。

或者一些與你所說的最相關的句子,這也是一個更好的機會來思考資料的來源,我們目前沒有裝載機,但你可能還是想探索誰知道。

也許你甚至可以做一個公關連結。

【LangChain大模型應用開發】DeepLearning.AI - P11:3——文件分割 - 吳恩達大模型 - BV1iZ421M79T

我們剛剛討論瞭如何將文件載入到標準格式,現在我們要討論如何把它們分成更小的塊,這聽起來可能很容易,但這裡有很多微妙之處,對未來產生了巨大的影響,讓我們跳進去吧,將資料載入到文件格式後會發生文件拆分。

但在它進入向量儲存之前,這可能看起來很簡單,你可以根據每個字元的長度或類似的東西來分割塊。

但作為一個例子,為什麼這既棘手又非常重要,讓我們看一下這裡的這個例子,我們有一個關於豐田凱美瑞的句子和一些規格。

如果我們做一個簡單的分裂,我們可以把句子的一部分分成一大塊,句子的另一部分在另一大塊中,然後當我們試圖回答一個問題時。

關於凱美瑞的規格是什麼。

我們實際上在這兩個塊中都沒有正確的資訊,所以它分裂了,所以我們不能正確地回答這個問題,因此,在如何分割大塊時,有很多細微差別和重要性,這樣你就可以把語義上相關的塊放在一起。

車道鏈中所有文字拆分器的基礎都涉及到在塊上拆分,在一些塊大小和一些塊重疊的情況下。

所以我們在下面有一個小圖來顯示它是什麼樣子的,所以塊大小對應於塊的大小,塊的大小可以用幾種不同的方法來測量,我們將在這節課中討論其中的一些,所以我們允許傳入一個length函式來測量塊的大小。

這通常是字元或令牌,塊重疊通常保持為兩個塊之間的一點重疊,就像一扇滑動的窗戶,當我們從一個移動到另一個,這允許相同的上下文在一個塊的末尾,在另一個的開始,並有助於創造一些一致性的概念。

文字拆分器和連結鏈都有一個建立文件和拆分文件的方法,這涉及到引擎蓋下相同的邏輯,它只是暴露了一個稍微不同的介面。

一個接收文字列表,另一個接收檔案列表,在長鏈中有很多不同型別的分配器,我們將在這節課中介紹其中的一些,但我會鼓勵你在業餘時間看看其餘的,這些文字拆分器在一系列維度上有所不同。

它們可以根據如何分割大塊而有所不同,裡面有什麼角色,它們可以根據,他們如何測量塊的長度,是按人物寫的嗎,是用代幣嗎,甚至有些人使用其他較小的模型來確定句子的結尾可能是,用它來分割大塊。

分割成塊的另一個重要部分也是後設資料。

在所有塊中維護相同的後設資料,但也會在相關時新增新的後設資料,所以有一些文字拆分器真正關注於此。

塊的拆分通常可以特定於,我們正在處理的文件型別。

當您在程式碼上分裂時,這一點非常明顯,所以我們有一個語言文字拆分器,它有一堆不同的分隔符。

對於各種不同的語言。

就像蟒蛇,Ruby c,當拆分這些檔案時,它考慮到了這些不同的語言和這些語言的相關分隔符。

當它先劈開的時候,我們將像以前一樣透過載入開啟的ai api金鑰來設定環境。

接下來,我們將匯入兩種最常見的文字拆分器和長鏈。

遞迴字元文字拆分器和字元文字拆分器,我們將首先討論一些玩具用例,只是為了瞭解這些到底是做什麼的,所以我們要設定一個相對較小的26塊大小。

更小的四塊重疊,好讓我們看看這些能做什麼。

讓我們將這兩個不同的文字拆分器初始化為r拆分器和c拆分器,然後讓我們來看看幾個不同的用例。

讓我們載入第一個學期,一直到z,讓我們看看當我們使用各種拆分器時會發生什麼。

當我們用遞迴字元文字拆分器拆分它時。

它最終仍然是一根弦,這是因為它有26個字元長,我們指定了26的塊大小,所以現在甚至不需要在這裡做任何分裂,讓我們用稍微長一點的繩子來做,它比我們指定的塊大小的26個字元長。

這裡我們可以看到建立了兩個不同的塊,第一個以z結尾,那就是兩個六個字,下一個我們可以看到的是以W開頭的,X,Y,Z,這就是四塊重疊,然後它繼續與字串的其餘部分,讓我們看一個稍微複雜一點的字串。

我們在角色之間有一堆空格,我們現在可以看到它分成三塊,因為有空間,所以它佔用了更多的空間,所以如果我們看看重疊,我們可以在第一個中看到,有llm,l和m也出現在第二個中,好像只有兩個角色。

但是由於l和n之間的空間,然後在L之前和M之後,這實際上算作組成塊重疊的四個,現在讓我們嘗試使用字元文字拆分器。

當我們執行它時,我們可以看到,它實際上根本沒有試圖分裂它,那麼這裡發生了什麼,問題是字元文字在單個字元上拆分。

預設情況下,該字元是一個新的行字元,但這裡沒有新的,如果我們將分隔符設定為空白。

我們可以看到會發生什麼,然後呢。

這裡和以前一樣分裂,這是暫停影片並嘗試一些新示例的好點,都是你編的不同的琴絃,然後交換分離器,看看會發生什麼,實驗塊大小和塊重疊也很有趣,並大致瞭解幾個玩具例子中發生了什麼。

所以當我們轉向更多現實世界的例子時,你會對幕後發生的事情有很好的直覺。

現在呢,讓我們用一些更真實的例子來嘗試一下。

我們這裡有很長一段,我們可以看到,就在這裡,我們有這個雙新線符號。

它是段落之間的典型分隔符,讓我們看看這篇課文的長度。

我們可以看到它大約是500,現在讓我們定義兩個文字拆分器,我們將像以前一樣使用字元文字拆分器,以空間為分隔符,然後我們將初始化遞迴字元文字拆分器,在這裡我們傳遞一個分隔符列表。

這些是預設的分隔符,但我們只是把它們放在這個筆記本里,以便更好地顯示發生了什麼。

所以我們可以看到我們有一個雙新行的列表,單新線空間,然後什麼都沒有,一個空字串,這些意味著當你拆分一段文字時,它將首先嚐試用兩條新線來分割它,然後如果它還需要更多地分割單個塊,它將繼續單行新線。

如果它還需要做更多,它繼續到空間。

最後它就會一個字元一個字元地,如果它真的需要這麼做,看看它們在上面的文字中的表現。

我們可以看到字元文字拆分器在空格上拆分。

所以我們以句子中間奇怪的分離而告終。

遞迴文字拆分器首先嚐試在雙新行上拆分,所以這裡它把它分成兩段,即使第一個比指定的450個字元短,這可能是一個更好的分裂,因為現在兩個段落各自是自己的段落在塊中,而不是在句子中間分開。

現在我們把它分成更小的塊,只是為了更好地瞭解發生了什麼,我們還將新增句點分隔符。

這是為了在句子之間分開,如果我們執行這個文字拆分器,我們可以看到句子上的分裂,但經期實際上在錯誤的地方。

這是因為場景下發生的Reg X,為了解決這個問題,我們實際上可以透過檢視後面的內容來指定一個稍微複雜一點的reg x,現在如果我們執行這個,我們可以看到它被分成句子,它是正確地分裂的,句號在正確的地方。

現在讓我們在一個更真實的例子上這樣做。

使用我們在第一個文件載入部分中使用的PDF檔案之一,讓我們把它裝進去,然後讓我們在這裡定義我們的文字拆分器,我們在這裡傳遞length函式,這是用孤,內建的蟒蛇,這是預設值。

但我們只是為了更清楚而具體說明。

幕後發生了什麼,這是計算字元的長度,因為我們現在想使用文件,我們使用拆分文件的方法,我們正在傳遞一份檔案清單。

如果我們將這些檔案的長度與原始頁面的長度進行比較。

我們可以看到已經建立了更多的文件。

因為這種分裂,我們也可以用我們在第一節課中使用的db概念來做類似的事情。

並再次比較原始文件和新拆分文件的連結。

我們可以看到我們有更多的檔案,現在我們已經做了所有的分裂,這是一個很好的點暫停影片和嘗試一些新的例子到目前為止。

我們已經根據角色做了所有的拆分,但還有另一種方法,這是基於代幣,為此,讓我們匯入令牌文字拆分器。

這之所以有用,是因為lms通常有上下文視窗,由令牌計數指定的,因此,瞭解代幣是什麼以及它們出現在哪裡是很重要的,然後我們可以在他們身上分頭行動,對LLM如何看待他們有一個更有代表性的想法。

為了真正瞭解代幣和字元之間的區別,讓我們初始化令牌文字拆分器,塊大小為1,塊重疊為零,因此,這將把任何文字拆分為相關令牌的列表,讓我們建立一個有趣的編造文字。

當我們分開的時候,我們可以看到它分裂成一堆不同的代幣,它們的長度都有點不同,其中的字元數,所以第一個就是foo,然後你有一個空間,然後是酒吧,然後你在B中有一個空格,然後是一個Z,然後是z。

然後是foo,這顯示了在字元上拆分和在令牌上拆分之間的一點區別,讓我們將此應用於上面載入的文件,以類似的方式,以類似的方式,我們可以呼叫頁面上的拆分文件。

如果我們看一下第一份檔案,我們有了新的拆分文件,頁面內容大致是標題,然後我們得到了源的後設資料和它來自的頁面,您可以在這裡看到源的後設資料,塊中的頁面與原始文件中的頁面相同,所以如果我們看看。

只是為了確保第0頁,後設資料,我們可以看到它是一字排開的,這很好,它將後設資料適當地傳遞到每個塊,但也有一些情況,您實際上希望向塊新增更多的後設資料,當你把它們分開的時候,這可以包含文件中的位置等資訊。

這一大塊來自,它在哪裡,相對於文件中的其他事物或概念,一般來說,這些資訊可以在回答問題時使用,提供更多關於這個塊到底要看什麼的上下文,這方面的一個具體例子,讓我們看看另一種型別的文字拆分器。

它實際上將資訊新增到每個塊的後設資料中,您現在可以暫停並嘗試您想出的幾個示例。

此文字拆分器是標記頭文字拆分器,它會做的是,它將根據標頭或任何子標頭拆分標記檔案,然後我將把這些標題作為內容新增到後設資料欄位中,這將被傳遞給任何源於這些分裂的塊。

讓我們先做一個玩具示例,然後玩一下文件,我們有一個標題,然後是第一章的副標題,然後我們得到了一些句子,然後是一個更小的子標題的另一部分。

然後我們跳回到第二章,在那裡的一些句子中,讓我們定義一個要拆分的標題列表,那些標題的名字,首先我們有一個標籤我們稱它為標題一,然後我們有兩個標籤標題二,三個標籤標題三。

然後,我們可以用這些標頭初始化markdown標頭文字拆分器,然後拆分我們上面的玩具示例,如果我們看幾個例子,我們可以看到第一個有內容嗨,我是吉姆嗨,我是喬,現在在後設資料中,我們有標題一。

然後我們把它作為標題和標題二作為第一章。

這是從這裡傳來的。

在上面的示例文件中,讓我們來看看下一個,我們可以看到這裡我們跳到了一個更小的部分,所以我們得到了嗨的內容,我是蘭斯,現在我們不僅有頭球,也是頭球二,也是頭球三,這又一次來自內容和名稱。

在上面的降價文件中。

讓我們在一個現實世界的例子中嘗試一下,在我們使用concept目錄載入器載入concept目錄之前,它載入了檔案來標記。

與標記標頭拆分器相關,所以讓我們載入這些文件,然後將標頭為1的markdown拆分器定義為單個標籤,標題二作為雙重標籤。

我們對文字進行拆分,如果我們看一下它們,我們就會得到拆分。

我們可以看到第一個有一些頁面的內容,現在如果我們向下滾動到後設資料,我們可以看到,我們已經載入了標題一作為blendel的員工手冊,我們現在已經討論瞭如何使用適當的後設資料獲得語義上相關的塊。

下一步是將這些資料塊移動到向量儲存中。

【LangChain大模型應用開發】DeepLearning.AI - P12:4——向量和嵌入 - 吳恩達大模型 - BV1iZ421M79T

我們現在把檔案分成了小的,語義有意義的塊,是時候把這些塊放入索引中了,在那裡我們可以很容易地找回它們,當需要回答關於這個資料庫的問題時,我們將利用嵌入和向量儲存,讓我們看看這些是什麼。

我們在上一節課中簡要介紹過,但我們將重新審視它,原因有幾個。

第一批,這些對於在資料上構建聊天機器人非常重要。

第二,我們要深入一點,我們將討論邊緣情況,這個通用方法實際上可能失敗的地方。

別擔心,我們以後會解決的,但現在讓我們討論向量儲存和嵌入。

這是在文字拆分之後出現的,當我們準備好以易於訪問的格式儲存文件時,什麼是嵌入。

他們拿了一條簡訊,他們建立了文字的數字表示。

具有相似內容的文字將在此數字空間中具有相似的向量。

意思就是,然後我們可以比較這些向量,找到相似的文字片段。

所以在下面的例子中,我們可以看到這兩個關於寵物的句子非常相似。

而關於寵物的句子和關於汽車的句子不是很相似。

作為完整端到端工作流的提醒,我們從檔案開始。

然後我們建立這些文件的較小拆分,然後我們建立這些文件的嵌入。

然後我們把所有這些都儲存在向量儲存中,向量儲存是一個資料庫,您以後可以在其中輕鬆地查詢類似的向量。

當我們試圖找到與手頭問題相關的文件時,這將變得有用。

然後我們就可以回答手頭的問題了,建立嵌入,然後與向量儲存中的所有不同向量進行比較。

然後挑出最相似的末端,然後,我們把這些和大多數相似的塊,把它們和問題一起傳遞給LLM,得到一個答案。

我們稍後會討論所有這些,現在是深入研究嵌入和向量儲存本身的時候了。

開始,我們將再次設定適當的環境變數。

從現在開始我們要處理同一套檔案,這些是CS二十九節課,我們要裝載,這裡有幾個,請注意,我們實際上要複製,第一講,這是為了模擬一些髒資料。

載入文件後,然後,我們可以使用遞迴字元文字拆分器來建立塊。

我們可以看到我們現在已經創造了200多個不同的塊,是時候進入下一個部分併為所有這些建立嵌入了。

在跳入真實世界的示例之前,我們將使用openai來建立這些嵌入。

讓我們用幾個玩具測試用例來嘗試一下。

只是為了瞭解引擎蓋下發生了什麼,我們有幾個例句,其中前兩個非常相似。

第三個是沒有關係的。

然後,我們可以使用嵌入類為每個句子建立嵌入。

然後我們可以使用Numpy來比較它們,看看哪些是最相似的。

我們期望前兩句應該非常相似,然後第一個和第二個與第三個相比不應該幾乎相似。

我們將使用點積來比較兩個嵌入。

如果你不知道什麼是點積,那很好,重要的是要知道越高越好。

這裡,我們可以看到前兩個嵌入有一個相當高的分數點9。6。

如果我們將第一個嵌入與第三個嵌入進行比較。

我們可以看到它在點七明顯較低,如果我們把第二個和第三個比較。

我們可以看到它是正確的大約在點七六。

現在是停頓一下,嘗試一下你自己的句子的好時機,看看點積是什麼。

現在讓我們回到現實世界的例子,現在是為PDF的所有塊建立嵌入的時候了。

然後把它們儲存在一個向量中,儲存我們將在本課中使用的向量儲存是色度,所以讓我們匯入萊恩鏈,它與30多個不同的向量商店整合在一起。

我們選擇色度是因為它在記憶體中是輕量級的。

這使得它很容易站起來開始。

還有其他Vector商店提供託管解決方案,當您試圖持久儲存大量資料時,這可能很有用,或持久存在於雲端儲存中。

我們要把這個向量儲存儲存在某個地方,這樣我們就可以在以後的課程中使用它。

因此,讓我們建立一個名為持久化目錄的變數,我們將在稍後的《色度博士》中使用。

我們也要確保那裡什麼都沒有。

如果那裡已經有東西了,它可以把東西扔掉,我們不希望這種情況發生。

所以讓我們rm破折號rf文件色度,只是為了確保那裡什麼都沒有。

現在讓我們建立向量儲存,所以我們從以分裂方式傳遞的文件中呼叫色度,這些是我們之前建立的分裂傳遞和嵌入。

這是開放的AI嵌入模型,然後傳入持久化目錄,它是一個特定於色度的關鍵字引數,允許我們將目錄儲存到磁碟。

如果我們看看收集數,做完這個之後,我們可以看到它是二百零九,這和我們之前的分裂次數一樣。

讓我們現在開始使用它,讓我們想一個問題,我們可以問這個資料,我們知道這是關於一個課堂講座。

所以讓我們問問是否有任何電子郵件可以尋求幫助,如果我們在課程或材料或類似的事情上需要任何幫助。

我們將使用相似搜尋法,我們將透過這個問題,然後我們也透過k等於三,這指定了我們要返回的文件數。

所以如果我們執行它,我們看看文件的長度,所以我們可以看到它是我們指定的三個。

如果我們看看第一份檔案的內容。

我們可以看到它實際上是關於一個電子郵件地址,CS二二九破折號QA CS,史丹佛,Edu,這是我們可以傳送問題的電子郵件,所有的助教都讀了,這樣做之後,讓我們確保保持向量資料庫。

以便我們可以在以後的課程中使用它,透過執行向量db點持久化。

這涵蓋了語義搜尋的基礎知識,並向我們展示了我們可以僅僅基於嵌入就得到相當好的結果。

但它並不完美,在這裡,我們將討論一些邊緣案例,並展示它可能失敗的地方。

讓我們嘗試一個新問題,他們怎麼說matlab,讓我們執行這個指定k等於五的程式,並得到一些結果。

如果我們看看前兩個結果,我們可以看到它們實際上是相同的,這是因為當我們載入PDF時,如果你還記得我們故意指定,重複條目,這很糟糕,因為我們在兩個不同的塊中得到了相同的資訊。

我們將把這兩個塊傳遞給語言模型,第二條資訊沒有真正的價值,如果有一個不同的,語言模型可以從中學習的不同塊,我們下節課要講的一件事,如何同時檢索相關和不同的塊,這是另一種型別的故障模式,也可能發生。

讓我們來看看這個問題,他們在第三堂課上對迴歸說了什麼。

當我們拿到檔案的時候,直覺上,我們希望他們都是第三講的一部分。

我們可以檢查這一點,因為我們在後設資料中有關於它們來自哪些講座的資訊。

因此,讓我們迴圈所有文件並列印出後設資料。

我們可以看到實際上有一個結果的組合。

第三講的一些,有些是第二節課的,有些是第一節課的,關於為什麼這是失敗的直覺是,第三講。

事實上,我們只需要第三堂課的文件,這是一個結構化的資訊。

但我們只是在做一個基於嵌入的語義查詢。

它為整個句子建立了一個嵌入。

它可能更專注於迴歸,因此,我們得到的結果可能與迴歸非常相關。

所以如果我們看看第五個,做第一堂課的那個,我們可以看到它確實,事實上,提及迴歸,所以它開始注意到這一點,但它沒有意識到這樣一個事實,它只應該查詢第三堂課的檔案,因為再一次,這是一個結構化的資訊。

並沒有真正完美地捕捉到,我們建立的語義嵌入,現在是暫停並嘗試更多查詢的好時機,你還能注意到出現了哪些邊緣情況,你也可以玩改變K,檢索的文件數,正如你可能已經注意到的,在本課中,我們先用了三個。

然後用了五個,你可以試著把它調整成你想要的任何東西,你可能會注意到,當你把它做大的時候,您將檢索更多的文件,但結尾的檔案可能不如開頭的檔案相關,現在我們已經介紹了語義搜尋的基礎知識,以及一些失效模式。

讓我們繼續下一節課。

【LangChain大模型應用開發】DeepLearning.AI - P13:5——檢索 - 吳恩達大模型 - BV1iZ421M79T

在上一課中,我們介紹了語義搜尋的基礎知識,並看到它在大量的用例中工作得很好,但我們也看到了一些邊緣情況,看到了事情可能會出一點問題,在這節課中,我們將深潛回收,並介紹一些克服這些邊緣情況的更先進的方法。

我真的很興奮,因為我認為檢索是一種新的東西,我們談論的很多技術都出現了,在過去的幾個月裡,這是一個前沿的話題,所以你們將站在最前沿,我們找點樂子吧,在這節課中,我們將討論檢索,這在查詢時很重要。

當您有一個查詢進來時。

你想檢索最相關的分裂。

我們在上一課中談到了語義相似性搜尋,但我們將在這裡討論一些不同的、更先進的方法。

我們要討論的第一個問題是最大邊際相關性。

所以這背後的想法是。

如果您總是獲取與查詢最相似的文件,在嵌入空間中,你可能會錯過不同的資訊,就像我們在一個邊緣案例中看到的那樣。

在本例中。

我們有一個廚師問所有的白蘑菇,所以如果我們看看最相似的結果,這將是前兩份檔案,他們有很多類似於子實體查詢的資訊。

全身都是白的,但我們真的想確保我們也能得到其他資訊。

比如它真的有毒,這就是mmr發揮作用的地方,因為它將為一組不同的文件選擇。

mmr背後的想法是我們傳送一個查詢。

然後我們最初得到一組響應,取下劃線k是我們可以控制的引數,為了確定我們得到了多少回應。

這完全基於語義相似性,從那裡,然後,我們處理這組較小的文件,並最佳化。

不僅是基於語義相似性的最相關的,但也有多樣化的,從這組文件中,我們選擇最後一個k返回給使用者。

我們可以做的另一種型別的檢索是我們所說的自我查詢。

因此,當你遇到問題時,這很有用,這些問題不僅僅是關於,要從語義上查詢的內容。

但也要提到一些要對其進行篩選的後設資料,所以讓我們來回答這個問題,1980年拍的關於外星人的電影有哪些?這真的有兩個組成部分,它有一個語義部分,外星人咬了。

所以我們想在我們的電影資料庫中查詢外星人,但它也有一個真正引用每部電影後設資料的部分,這就是年份應該是1980年的事實。

我們能做的就是,我們可以使用語言模型本身將最初的問題分成兩個獨立的東西,篩選器和搜尋詞。

大多數向量儲存支援後設資料篩選器,因此,您可以輕鬆地基於後設資料篩選記錄。

就像1980年。

最後我們將討論壓縮,這對於只提取檢索到的段落中最相關的部分是有用的,例如,在問問題時,你拿回儲存在。

即使只有前一兩句是壓縮的相關部分。

然後,您可以透過語言模型執行所有這些文件,並提取最相關的段。

然後只將最相關的段傳遞到最終的語言模型呼叫中。

這是以對語言模型進行更多呼叫為代價的。

但它也非常有利於將最終答案集中在最重要的事情上。

所以這有點折衷,讓我們看看這些不同的技術在起作用。

我們將從載入環境變數開始,就像我們一直做的那樣。

進口色度和開放AI是多少,就像我們以前用的那樣。

我們可以從收藏中看到,數一數,它有我們之前載入的209份檔案。

現在讓我們來看看最大邊際相關性的例子。

因此,我們將從示例中載入文字,我們有關於蘑菇的資訊,對於本例,我們建立一個小資料庫,我們可以把它當作玩具使用,例。

我們有問題了,現在我們可以進行相似性搜尋,我們將k等於2設定為只返回兩個最相關的文件。

我們可以看到沒有提到它有毒的事實,現在讓我們用mmr執行它,除非透過k等於2,我們還要還兩份檔案,但是讓我們把fetch k設為3,我們把這三份檔案,原來。

我們現在可以看到,有毒的資訊在我們檢索的文件中返回。

讓我們回到上一課的一個例子。

當我們詢問Matlab並得到文件時,這些文件中有重複的資訊來重新整理您的記憶。

我們可以看看前兩份檔案。

只是看看最初的幾個字元,因為它們很長,否則,我們可以看到他們是一樣的,當我們在這些結果上執行mmr時。

我們可以看到第一個和之前一樣。

因為那是最相似的,但當我們進入第二個,我們可以看到它是不同的。

它得到了一些不同的反應。

現在讓我們進入self查詢示例,這是我們有問題的地方。

他們在第三堂課上對迴歸說了什麼,它返回的結果不僅僅是第三次講座。

也是第一個和第二個,如果我們用手把它修好。

我們要做的是指定一個後設資料過濾器,所以我們傳遞這個資訊,我們希望源等於第三個講座。

PDF,然後如果我們看看會被檢索到的檔案,它們都來自那個講座。

我們可以使用語言模型來為我們做到這一點,所以我們不必手動指定,做這件事。

我們將匯入一個語言模型開放AI,我們將匯入一個稱為自查詢檢索器的檢索器。

然後我們將匯入屬性資訊,我們可以在後設資料中指定不同的欄位,以及它們對應於什麼。

後設資料中只有兩個欄位。

來源和頁面,我們填寫名字的描述。

每個屬性的描述和型別,這些資訊實際上將被傳遞給語言模型。

因此,使其儘可能具有描述性是很重要的。

然後,我們將指定有關此文件儲存中實際內容的一些資訊,我們將初始化語言模型,然後,我們將使用from lm方法初始化自查詢檢索器。

並將我們將要查詢的底層向量資料庫傳遞到語言模型中,有關描述和後設資料的資訊,然後我們還將傳遞詳細等於真實的設定。

冗長等於真井,讓我們看看引擎蓋下面是怎麼回事,當LLM推斷應該與任何後設資料篩選器一起傳遞的查詢時。

當我們執行帶有此問題的自查詢檢索器時。

我們可以看到感謝若等於真的,雖然我們正在列印引擎蓋下發生的事情。

我們得到一個迴歸查詢,這是語義位,然後我們得到一個過濾器,在那裡我們有一個平等的比較器,在source屬性和docs值之間。

然後這個路徑,也就是第三個機器學習講座的路徑,所以說,這基本上是告訴我們在迴歸的語義空間中進行查詢,然後做一個篩選,我們只檢視源值為此值的文件。

所以如果我們在文件上迴圈並列印出後設資料,我們應該看到他們都來自第三課。

他們確實如此,這是一個例子,其中可以使用自查詢檢索器準確地篩選後設資料。

我們可以談論的最後一種檢索技術是上下文壓縮,所以讓我們在這裡載入一些相關的模組。

上下文壓縮檢索器,然後是一個LLM鏈條提取器。

接下來要做的是,這將只從每個文件中提取相關的位。

然後將這些作為最終的返回響應傳遞給,我們將定義一個很好的小函式來漂亮地列印文件。

因為它們往往又長又亂,這將使人們更容易看到發生了什麼。

然後我們可以用LLM鏈提取器建立一個壓縮機。

然後我們可以建立上下文壓縮檢索器,透過壓縮機。

然後向量儲存的基檢索器,當我們現在透過這個問題,他們怎麼說matlab。

我們看看壓縮的文件,如果我們看了檔案,我們可以看到兩件事,一個,它們比正常的檔案短得多,但第二,我們仍然有一些重複的事情發生,這是因為在引擎蓋下,我們使用的是語義搜尋演算法。

這就是我們在本課前面使用mmr解決的問題,這是一個很好的例子,說明您可以結合各種技術來獲得最好的結果,為了做到這一點,當我們從向量資料庫建立檢索器時,我們可以將搜尋型別設定為Mr。

然後我們可以重新執行這個,確保我們回來,不包含任何重複資訊的篩選結果集,到目前為止,我們提到的所有附加檢索技術都建立在向量資料庫之上。

值得一提的是,還有其他型別的檢索根本不使用向量資料庫。

取而代之的是其他,更傳統的nlp技術。

這裡,我們要重新建立一個檢索管道,有兩種不同型別的尋回器,和SVM尋回器和一個TF IDF尋回器。

如果你從傳統的NLP或傳統的機器學習中認識到這些術語,那就太好了。

如果你不,也很好,這只是其他一些技術的一個例子。

除了這些,還有很多,我鼓勵你去看看,他們中的一些人。

我們可以很快地透過通常的裝貨和拆分管道。

然後這兩個檢索程式都公開一個from text方法,其中一個接受嵌入模組,即svm檢索器,tf idf尋回器直接接收分裂。

現在我們可以用其他的尋回者,我們進去吧,他們怎麼說matlab,到svm檢索器,我們可以看看頂部的文件,我們回來了,我們可以看到它提到了很多關於Matlab的東西,所以它在那裡取得了一些好的結果。

我們也可以在tf idf尋回器上嘗試一下,我們可以看到結果看起來有點糟糕,現在是停下來嘗試所有這些不同檢索技術的好時機,我想你會注意到他們中的一些人在各種事情上都比其他人好。

所以我鼓勵你們在各種各樣的問題上嘗試一下,自我查詢檢索器尤其是我最喜歡的,所以我建議用越來越複雜的後設資料過濾器來嘗試,甚至可能在有巢狀後設資料結構的地方編造一些後設資料,你可以試著讓LLM推斷。

我覺得這很有趣,我想這是一些更先進的東西,所以我真的很興奮能和你們分享,既然我們已經談到了回收,我們將討論這個過程的下一步。

【LangChain大模型應用開發】DeepLearning.AI - P14:6——問答聊天機器人 - 吳恩達大模型 - BV1iZ421M79T

我們已經討論瞭如何檢索與給定問題相關的文件,下一步就是把那些檔案,接受最初的問題,把它們都傳遞給一個語言模型,並要求它回答這個問題,我們將在這節課中複習這一點,完成這項任務的幾種不同方法。

讓我們開始上這節課吧。

我們將討論如何做問題,使用您剛剛檢索到的文件進行應答,這是在我們完成整個儲存和攝入之後,在我們檢索到相關的分裂後,現在我們需要把它傳遞給一個語言模型來得到答案。

一般的流程是這樣的,問題來了。

我們查閱相關檔案,然後我們透過這些分裂,伴隨著系統提示符。

和人類的問題到語言模型並得到答案,預設情況下,我們只需將所有塊傳遞到同一個上下文視窗中,語言模型的相同呼叫。

然而,我們可以使用一些不同的方法,對此有利弊。

大多數優點來自於這樣一個事實,即有時會有很多檔案,您不能簡單地將它們都傳遞到相同的上下文選單中。

Mapreduce,精煉。

我們將在今天的課上討論其中的一些,讓我們開始編碼。

第一批,我們會像往常一樣輸入環境變數。

然後,我們將載入以前持久化的向量資料庫,我要檢查它是否正確。

我們可以看到它有以前的209份檔案。

我們做一個快速的相似性搜尋,為了確保它對第一個問題起作用,即這門課的主要主題是什麼。

現在我們初始化我們要用來回答問題的語言模型。

我們將使用聊天開放人工智慧模型GPT三點五。

我們要把溫度設為零,當我們想要真實的答案出來時,這真的很好。

因為它的可變性很低,通常只給我們最高的保真度,最可靠的答案。

然後我們將匯入檢索QA鏈,這是在回答問題,由檢索步驟支援。

我們可以透過傳入一個語言模型來建立它。

然後向量資料庫作為檢索器。

然後,我們可以呼叫它,查詢等於我們想要問的問題。

當我們看到結果時,我們得到了答案,這堂課的主要主題是機器學習,另外,這門課可以在討論部分複習統計學和代數。

本季度晚些時候,討論部分還將涵蓋主要講座中教授的材料的擴充套件。

讓我們試著更好地理解一點,引擎蓋下面是怎麼回事,並暴露一些不同的旋鈕,你可以把主要部分,這裡很重要的是我們正在使用的提示符,這是接收文件和問題並將其傳遞給語言模型的提示符。

關於提示的複習。

你可以看到我和安德魯一起上的第一堂課,這裡我們定義一個提示模板。

它有一些關於如何使用以下上下文的說明,然後它有一個上下文變數的佔位符,這就是檔案要去的地方,以及問題變數的佔位符。

我們現在可以建立一個新的檢索,Qn,我們將使用與以前相同的語言模型,在與以前相同的向量資料庫中,但我們將透過幾個新的論點,所以我們得到了返回原始檔,所以我們要把這個等於零設為真。

這將使我們能夠輕鬆地檢查我們檢索的文件。

然後我們還將傳遞一個提示。

相當於QA鏈,我們在上面定義的提示,讓我們嘗試一個新問題:機率,課堂主題。

我們得到一個結果,如果我們檢查裡面的東西,我們可以看到是的,機率被假定為該類的先決條件。

講師假設熟悉基本的機率統計,我們將在討論部分討論一些先決條件,作為複習課程,謝謝你的詢問,當它回應我們時,它也很好,為了更好地瞭解它從哪裡獲得這些資料。

我們可以看看一些被退回的原始檔。

如果你看穿它們,您應該看到,回答的所有資訊都在這些源文件中的一箇中,現在是停下來考慮幾個不同問題的好時機,或者您自己的不同提示模板,看看到目前為止結果是如何變化的。

我們一直在用東西技術,我們預設使用的技術,它基本上只是把所有的文件塞進最後的提示符中,這真的很好,因為它只涉及到對語言模型的一次呼叫,然而,這確實有一個限制,如果檔案太多。

它們可能並不都適合上下文視窗,一種不同型別的技術,我們可以用來做問題,回答文件是這種技術中的mapreduce技術,每個單獨的文件首先被單獨傳送到語言模型以獲得原始答案。

然後這些答案被組成一個最終的答案,最後呼叫一個語言模型。

這涉及到更多的語言模型呼叫,但它確實有優點,因為它可以對任意多的文件進行操作。

當我們透過這個鏈執行前一個問題時,我們可以看到這種方法的另一個侷限性,或者實際上我們可以看到兩個一,慢多了,兩個,結果其實更糟,這個問題沒有明確的答案,根據檔案的給定部分,可能會發生這種情況。

因為它是根據每個文件單獨回答的。

因此,如果有資訊分散在兩個文件中,它並沒有把所有的東西都放在同一個背景下。

這是利用車道鏈平臺獲得感提升的好機會,因為這些鎖鏈裡面發生了什麼。

我們將在這裡演示這一點,如果你想自己用的話。

教材裡會有說明,關於如何獲得API金鑰,一旦我們設定了這些環境變數,我們可以重新執行地圖,減少鏈條,然後我們可以切換到使用者介面,看看發生了什麼。

在引擎蓋下,從這裡我們可以找到我們剛才執行的執行。

我們可以點選它,我們可以看到輸入和輸出,然後我們可以看到孩子跑去很好地分析發生了什麼,在引擎蓋下,第一批,我們有MapReduce文件鏈,這實際上涉及到對語言模型的四個單獨呼叫。

如果我們點選其中一個電話,我們可以看到我們有每個文件的輸入和輸出。

如果我們回去,然後我們可以看到,在它執行這些文件之後,它在最後的鏈條中結合在一起,填充文件鏈,它將所有這些響應塞進最後的呼叫中,點選進入。

我們可以看到我們得到了系統訊息,我們從以前的檔案中得到了四個摘要,然後用你的問題,然後我們就有了答案,我們可以做類似的事情,將鏈型別設定為細化。

這是一種新型的鏈條,讓我們看看引擎蓋下面是什麼樣子,我們可以看到它正在呼叫精煉文件鏈,包括4次連續呼叫,讓我們來看看這個鏈中的第一個呼叫,來看看這裡發生了什麼,在它被髮送到語言模型之前。

我們已經得到了提示,我們可以看到一個由幾個位元組成的系統訊息,這篇文章的上下文資訊如下,是系統訊息的一部分,它是我們提前定義的提示模板的一部分,下一段,這裡的所有文字,這是我們檢索到的檔案之一。

下面是使用者的問題,答案就在這裡,如果我們回去,我們可以在這裡檢視對語言模型的下一個呼叫,我們傳送給語言模型的最後一個提示,是將以前的響應與新資料相結合的序列,然後要求改進回應。

所以我們可以在這裡看到我們得到了最初的使用者問題。

我們就得到了答案,這是和以前一樣的,然後我們說我們只有機會改進現有的答案,如果需要,請在下面提供更多上下文,這是提示模板的一部分,部分說明,剩下的部分是我們檢索列表中第二個文件的文件,然後我們可以看到。

在新的上下文中,我們有更多的指示,改進原始答案以更好地回答問題,然後在下面我們得到了最終的答案,但這只是第二個最終答案,所以它執行了四次,在得到最終答案之前,它會遍歷所有的文件,最終的答案就在這裡。

這門課假定熟悉基本的機率和統計學,但是我們會有複習部分來重新整理先決條件,您會注意到這是一個比地圖縮減鏈更好的結果,這是因為使用細化鏈確實允許您組合資訊,儘管按順序。

它實際上鼓勵了比mapreduce鏈更多的資訊傳遞,這是一個暫停的好機會,嘗試一些問題,嘗試一些不同的鏈條,嘗試一些不同的提示模板,看看它在UI中是什麼樣子的,這裡有很多東西可以玩。

聊天機器人的偉大之處之一,為什麼它們變得如此受歡迎是因為你可以問後續的問題。

你可以要求澄清以前的答案,所以讓我們在這裡做,讓我們建立一個QA鏈,我們就用預設的東西。

我們去問問吧,一個問題是機率,課堂主題。

然後讓我們問它一個後續問題,它提到機率應該是一個先決條件,所以讓我們問,為什麼需要這些先決條件,然後我們得到答案。

這門課的先決條件假定是電腦科學的基礎知識。

以及與之前答案完全無關的基本計算機技能和原理,我們在問機率,這是怎麼回事,基本上,我們使用的鏈沒有任何狀態的概念,它不記得以前的問題或以前的答案是什麼,為此我們需要引入記憶。

【LangChain大模型應用開發】DeepLearning.AI - P15:7——完整功能的聊天機器人 - 吳恩達大模型 - BV1iZ421M79T

我們離擁有一個功能正常的聊天機器人如此之近,我們從裝載檔案開始,然後我們把他們分開,然後我們建立了一個向量儲存,我們談到了不同型別的檢索,我們已經證明了我們可以回答問題,但是我們不能處理後續的問題。

我們不能和它進行真正的對話,好訊息是,我們會解決的,在這節課中,讓我們弄清楚,我們現在要做一個問題來結束,回答聊天,它要做的是看起來和以前非常相似,但我們要加入聊天曆史的概念。

這是您以前與連鎖店交換的任何對話或資訊,這將允許它做什麼,它會允許它將聊天曆史納入上下文嗎,當它試圖回答問題時,所以如果你問一個後續問題,它會知道你在說什麼。

要注意的一件重要的事,到目前為止,我們談到的所有很酷的檢索型別,像自查詢或壓縮,或者類似的東西,你絕對可以在這裡使用它們,我們談到的所有元件都是非常模組化的,可以組合在一起,很好。

我們只是加入了聊天曆史的概念。

讓我們先看看它是什麼樣子,一如既往,我們要載入環境變數。

如果你設定了平臺,開啟它也可能很好,從一開始,會有很多很酷的東西想看,引擎蓋下是怎麼回事。

我們將載入我們的向量儲存,其中包含所有的嵌入,所有的課堂材料。

我們可以在向量儲存上進行基本相似性搜尋。

我們可以初始化我們將用作聊天機器人的語言模型。

然後,這都是以前的。

這就是為什麼我這麼快就瀏覽了一遍,我們可以初始化一個提示模板,建立檢索QA鏈,然後遞進一個問題,得到一個結果。

但現在讓我們做更多,讓我們給它新增一些記憶,所以我們將使用會話緩衝記憶體,它的作用是,它只是簡單地保留一個列表,歷史上聊天訊息的緩衝區,它會把這些和問題一起傳遞給聊天機器人,每次我們要指定記憶體鍵。

聊天曆史記錄,這只是將它與提示符中的一個輸入變數對齊,然後我們將指定返回訊息等於true,這將以訊息列表的形式返回聊天曆史記錄,與單個字串相反,這是最簡單的記憶體型別,可以更深入地研究記憶體。

回到我和安德魯教的第一堂課,我們詳細報導了這件事。

然後呢,現在讓我們建立一種新型的鏈,會話檢索鏈,我們傳入語言模型,我們透過尋回器,我們透過記憶,會話檢索鏈在檢索的基礎上增加了一個新的位,Qa鏈,不僅僅是記憶,尤其是,它增加的是,它增加了一個步驟。

帶著歷史和新的問題,把它濃縮成一個獨立的問題,傳遞到向量儲存,查閱有關檔案,我們將在UI中檢視這一點,在我們執行它,看看它有什麼影響。

但現在讓我們試試,我們可以問一個問題,這是沒有任何歷史的。

看看我們得到的結果,然後我們可以問一個後續問題,這和以前一樣,所以我們要問的是,課堂主題,我們得到一些答案,教師假設學生對機率和統計學有基本的瞭解,然後我們問,為什麼需要這些先決條件,我們得到一個結果。

讓我們看看。

我們得到一個答案,現在我們可以看到答案是指基本的機率和統計作為先決條件,在此基礎上,不要把它與電腦科學混淆。

就像以前一樣。

讓我們來看看UI的引擎蓋下發生了什麼,所以在這裡我們已經可以看到有更多的複雜性。

我們可以看到,現在鏈的輸入不僅有問題。

也是聊天曆史,聊天曆史是從記憶中走來的,這將在鏈被呼叫並登入到日誌系統之前應用。

如果我們看一下痕跡,我們可以看到有兩件獨立的事情在發生,首先是對一個專案的呼叫,然後有人打電話給填充檔案鏈,讓我們來看看第一個電話。

我們可以在這裡看到一個帶有一些說明的提示符,鑑於下面的對話,後續問題,將後續問題改寫為獨立問題。

這裡我們有以前的歷史,所以我們有一個問題,我們首先問的是課堂主題的機率,然後我們就有了幫助答案,然後在這裡我們有一個獨立的問題,要求基本機率和統計作為類的先決條件的原因是什麼。

發生的情況是,獨立的答案隨後被傳遞給檢索器,我們取回四或三份檔案,或者不管有多少,我們指定,然後,我們將這些文件傳遞到填充文件鏈,並試圖回答最初的問題。

所以如果我們調查一下,我們可以看到我們有了系統答案,使用以下上下文來回答使用者的問題。

我們有一堆背景。

然後我們在下面有問題的攤位,然後我們得到一個答案,以下是與手頭問題相關的答案。

它是關於機率和統計作為先決條件,現在是暫停並嘗試這個鏈的不同選項的好時機,您可以傳遞不同的提示模板,不僅僅是為了回答問題,但也因為把它變成了一個獨立的問題。

您可以嘗試不同型別的記憶體,有很多不同的選擇可以離開這裡。

在這之後,我們要把它放在一個漂亮的UI中,會有很多程式碼來建立這個使用者介面,但這是最重要的一點。

尤其是,這是一個完整的演練,基本上整個班,所以我們要載入一個資料庫和檢索鏈,我們要傳遞一份檔案,我們要用PDF載入器載入它,他們會把它載入到文件中,我們要把那些檔案分開,我們將建立一些嵌入。

並將其放在向量儲存中,然後我們要把向量儲存變成尋回器。

我們將在這裡使用相似性和一些K的搜尋線。

我們將其設定為一個引數,我們可以傳入,然後我們將建立會話檢索鏈,這裡要注意的一件重要的事情是,我們不是在記憶中傳遞,我們將從外部管理記憶體,為了方便下面的GUI,這意味著聊天曆史將不得不在鏈外進行管理。

然後我們在這裡有更多的程式碼--我們不會在上面花太多時間,但指出這裡我們在聊天曆史中傳遞到鏈中。

這也是因為我們沒有附加的記憶。

然後我們在這裡擴充套件聊天曆史記錄,有了結果,然後我們就可以把它放在一起了,執行這個來獲得一個漂亮的使用者介面,透過它我們可以與我們的聊天機器人互動,然後呢,我問你一個問題,助教是誰。

助教是保羅,布澱粉。

張凱蒂,你會注意到這裡有幾個標籤,我們也可以點選檢視其他東西。

所以如果我們點選資料庫,我們可以看到我們對資料庫提出的最後一個問題。

以及我們從那裡得到的訊息,這些是檔案。

這些是在分裂發生後,這些是我們檢索到的每個塊,我們可以看到帶有輸入和輸出的聊天曆史記錄。

然後還有一個地方來配置它,在那裡你可以上傳檔案。

我們也可以要求跟進,所以讓我們問問他們的專業是什麼。

我們得到了關於前面提到的他的答案,我們可以看到保羅正在學習機器學習和計算機視覺,凱蒂其實是個神經學家。

這節課基本上就結束了,所以現在是暫停的好時機,再問它一堆問題,在這裡上傳您自己的文件,享受這個端到端的問題回答機器人,配有令人驚歎的筆記本UI,這就結束了與您的資料進行車道鏈聊天的課程,在這門課上。

我們已經介紹瞭如何使用連結鏈從各種文件源載入資料,使用連結鏈,80多個不同的文件載入器,從那裡我們把檔案分成幾塊,並談論許多這樣做的細微差別,然後我們把這些大塊,為它們建立嵌入,把它們放進向量倉庫。

展示瞭如何輕鬆地啟用語義搜尋,但我們也討論了語義搜尋的一些缺點,它可能在某些邊緣失敗的地方出現下一件事,我們涵蓋的是檢索,可能是我最喜歡的部分,在那裡我們討論了許多新的、先進的、非常有趣的檢索演算法。

為了克服這些邊緣情況,我們在下一次會議上把它和llms結合起來,我們把那些檢索到的檔案,我們接受使用者的問題,我們把它交給一個LLM,我們對最初的問題產生一個答案,但還缺一樣東西,這是它的對話方面。

我們就在那裡上完了課,透過在資料上建立一個功能齊全的端到端聊天機器人,我真的很喜歡教這門課,我希望你們喜歡,我要感謝開源領域的每一個人,他為這門課的成功做出了很多貢獻。

就像你看到的所有提示和許多功能一樣,當你們和朗鏈一起建造的時候,並發現新的做事方式、新的技巧和技巧,我希望你在推特上分享你所學到的東西,甚至在連結鏈中開設公關,這是一個變化非常快的領域。

這是一個激動人心的時刻。

【LangChain大模型應用開發】DeepLearning.AI - P16:8——完結 - 吳恩達大模型 - BV1iZ421M79T

這就結束了與您的資料進行長鏈聊天的課程,在這門課上,我們已經介紹瞭如何使用連結鏈從各種文件源載入資料,使用連結鏈,80多個不同的文件載入器,從那裡我們把檔案分成幾塊,並談論許多這樣做的細微差別。

然後我們把這些大塊,為它們建立嵌入,把它們放進向量倉庫,展示瞭如何輕鬆地啟用語義搜尋,但我們也討論了語義搜尋的一些缺點,在某些邊緣情況下它可能會失敗,接下來我們討論的是檢索,可能是我最喜歡的部分。

在那裡我們討論了許多新的、先進的、非常有趣的檢索演算法,為了克服這些邊緣情況,我們在下一次會議上把它和llms結合起來,我們把那些檢索到的檔案,我們接受使用者的問題,我們把它傳給一個LLM。

我們對最初的問題產生一個答案,但還缺一樣東西,這是它的對話方面,這就是我們透過建立一個功能齊全的端到端來完成這個類的地方,透過您的資料聊天機器人,我真的很喜歡教這門課,我希望你們喜歡。

我要感謝開源領域的每一個人,他為這門課做出了很多貢獻,就像你看到的所有提示和許多功能一樣,就像你們和朗鏈一起建造一樣,並發現新的做事方式、新的技巧和技巧,我希望你在推特上分享你將學到的東西。

甚至在連結鏈中開設公關,這是一個變化非常快的領域,這是一個激動人心的時刻。

我真的很期待看到你是如何申請的。

【LangChain大模型應用開發】DeepLearning.AI - P2:2——模型,提示和輸出解析 - 吳恩達大模型 - BV1iZ421M79T

第一課,第一課。

將涵蓋模型,將涵蓋模型,提示和解析器,提示和解析器,所以模型指語言模型,所以模型指語言模型,支撐很多方面,支撐很多方面,提示指建立輸入的風格,提示指建立輸入的風格,然後解析器在另一端。

然後解析器在另一端,涉及將模型輸出解析為更結構化的格式,涉及將模型輸出解析為更結構化的格式,以便下游使用,以便下游使用,所以當你使用lm構建應用時,所以當你使用lm構建應用時,通常會有可重用模型。

通常會有可重用模型,我們反覆提示模型,我們反覆提示模型,解析輸出,解析輸出,因此啟動提供了一組簡單的抽象來執行此類操作,因此啟動提供了一組簡單的抽象來執行此類操作。

所以讓我們深入瞭解一下模型、提示和解析器,所以讓我們深入瞭解一下模型、提示和解析器,要開始,要開始。

這裡是一些起始程式碼,這裡是一些起始程式碼,我將匯入os、openai並載入我的openai金鑰,我將匯入os、openai並載入我的openai金鑰。

openai庫已經安裝在我的jupyter筆記本環境中,openai庫已經安裝在我的jupyter筆記本環境中。

如果你本地執行並且還沒有安裝open ai,如果你本地執行並且還沒有安裝open ai。

你可能需要執行pip,你可能需要執行pip,安裝open ai,安裝open ai。

但我不在這裡做,但我不在這裡做,然後這是一個輔助函式,然後這是一個輔助函式,這實際上與你在聊天,這實際上與你在聊天,Gpt提示工程開發人員,Gpt提示工程開發人員,課程中看到的輔助函式非常相似。

課程中看到的輔助函式非常相似。

我與open eyes一起提供的fulford,我與open eyes一起提供的fulford。

所以使用這個輔助函式你可以說完成1加1是什麼,所以使用這個輔助函式你可以說完成1加1是什麼,這將呼叫try gpc,這將呼叫try gpc,或技術上模型gpt三點五 turbo給你答案。

或技術上模型gpt三點五 turbo給你答案。

像這樣現在為了激勵,像這樣現在為了激勵。

模型提示和解析器的抽象,模型提示和解析器的抽象。

假設你收到一封非英語客戶的電子郵件,假設你收到一封非英語客戶的電子郵件,嗯,嗯,為確保可訪問性,為確保可訪問性。

我將使用的另一種語言是英語海盜語言,我將使用的另一種語言是英語海盜語言,當涉及到r時,當涉及到r時,我會很生氣,我會很生氣。

我的攪拌機蓋子飛掉並把我的廚房牆濺滿了奶昔,我的攪拌機蓋子飛掉並把我的廚房牆濺滿了奶昔,更糟糕的是,更糟糕的是。

保修不包括清理廚房的費用,保修不包括清理廚房的費用,我現在需要你的幫助,我現在需要你的幫助,夥計,夥計。

因此我們將要求這個lm將文字翻譯成美式英語,因此我們將要求這個lm將文字翻譯成美式英語,以冷靜和尊重的語氣,以冷靜和尊重的語氣,因此我將將樣式設定為美式英語,語氣常見且尊重。

因此我將將樣式設定為美式英語,語氣常見且尊重。

為了實際完成這個,為了實際完成這個,如果你之前看過一些提示,如果你之前看過一些提示。

我將使用f字串指定提示,包含指令,我將使用f字串指定提示,包含指令。

然後插入這兩種樣式,然後插入這兩種樣式,因此生成提示說,因此生成提示說。

翻譯文字等,翻譯文字等。

我建議你暫停影片並執行程式碼,我建議你暫停影片並執行程式碼,也嘗試修改提示以檢視是否可以得到不同的輸出,也嘗試修改提示以檢視是否可以得到不同的輸出。

你可以,你可以。

然後提示大型語言模型以獲取響應,然後提示大型語言模型以獲取響應。

讓我們看看響應是什麼,讓我們看看響應是什麼,所以它將英語海盜的訊息翻譯成這種非常禮貌的,所以它將英語海盜的訊息翻譯成這種非常禮貌的。

我真的很沮喪,我的攪拌機蓋飛掉了,我真的很沮喪,我的攪拌機蓋飛掉了。

把我的廚房牆搞得一團糟,把我的廚房牆搞得一團糟,如此順滑的奶昔等,如此順滑的奶昔等,我現在真的需要你的幫助,我現在真的需要你的幫助。

我的朋友那聽起來很好,我的朋友那聽起來很好,所以如果你有不同的客戶用不同的語言寫評論,所以如果你有不同的客戶用不同的語言寫評論。

不僅僅是英語海盜,不僅僅是英語海盜,而是法語,而是法語,德語,德語。

日語等等,日語等等,你可以想象需要生成一整序列的提示來生成這樣的翻譯,你可以想象需要生成一整序列的提示來生成這樣的翻譯。

讓我們看看如何以更方便的方式做到這一點,讓我們看看如何以更方便的方式做到這一點,使用lang chain,使用lang chain。

我將匯入chat openai,我將匯入chat openai,這是lang cha對chat gpt API端點的抽象,這是lang cha對chat gpt API端點的抽象。

因此如果我然後說had等於chat open ai並檢視chat是什麼,因此如果我然後說had等於chat open ai並檢視chat是什麼。

它建立了這個物件如下,它建立了這個物件如下,它使用chat gpt模型,它使用chat gpt模型,也稱為gpt三點五 turbo,也稱為gpt三點五 turbo。

當我構建應用程式時,當我構建應用程式時,我經常會將溫度引數設定為等於零,我經常會將溫度引數設定為等於零。

所以預設溫度是零點七,所以預設溫度是零點七,但讓我實際上重新做一下,溫度,但讓我實際上重新做一下,溫度,等於零點零,等於零點零,現在溫度被設定為零以使其輸出稍微少一些隨機。

現在溫度被設定為零以使其輸出稍微少一些隨機。

現在讓我定義模板字串如下,現在讓我定義模板字串如下。

將文字翻譯成由樣式指定的樣式,將文字翻譯成由樣式指定的樣式,然後這裡是文字,然後這裡是文字。

為了反覆重用此模板,為了反覆重用此模板,讓我們匯入lang chains,讓我們匯入lang chains,聊天提示模板,聊天提示模板。

然後讓我使用上面編寫的模板字串建立提示模板,然後讓我使用上面編寫的模板字串建立提示模板。

從提示模板,從提示模板,你可以實際提取原始提示,你可以實際提取原始提示,它意識到這個提示有兩個輸入變數,它意識到這個提示有兩個輸入變數,樣式和文字,如這裡用花括號所示,樣式和文字,如這裡用花括號所示。

這裡是原始模板,我們實際上也指定了,這裡是原始模板,我們實際上也指定了。

嗯,嗯,它意識到有兩個輸入變數,它意識到有兩個輸入變數。

樣式和文字,樣式和文字,現在,現在,確定風格,確定風格,這是客戶訊息要翻譯成的風格,這是客戶訊息要翻譯成的風格,我將稱之為客戶風格,我將稱之為客戶風格,這是我之前的客戶電子郵件,現在。

這是我之前的客戶電子郵件,現在。

如果我建立自定義訊息,如果我建立自定義訊息,這將生成提示,這將生成提示。

我們將傳遞這個,我們將傳遞這個,一分鐘後的大語言模型以獲取響應,一分鐘後的大語言模型以獲取響應,所以如果你想看型別,所以如果你想看型別,自定義訊息實際上是一個列表,自定義訊息實際上是一個列表,嗯,嗯。

如果你看列表的第一個元素,如果你看列表的第一個元素,這基本上是您期望它建立的最後提示,這基本上是您期望它建立的最後提示。

讓我們將這個提示傳遞給LM,讓我們將這個提示傳遞給LM。

因此我將呼叫聊天,因此我將呼叫聊天,我們之前說過,我們之前說過,嗯,嗯,作為對OpenAI GPT端點的引用,作為對OpenAI GPT端點的引用。

如果我們列印出客戶響應內容,如果我們列印出客戶響應內容,那麼它會給你回,那麼它會給你回,嗯,嗯,從英語海盜翻譯成禮貌的美國英語,從英語海盜翻譯成禮貌的美國英語,當然你可以想象其他用例。

客戶電子郵件是其他語言的,當然你可以想象其他用例,客戶電子郵件是其他語言的。

這兩個可以用於將訊息翻譯成英語,這兩個可以用於將訊息翻譯成英語。

說英語的人理解和回覆,說英語的人理解和回覆,我建議你暫停影片並執行程式碼,我建議你暫停影片並執行程式碼,並嘗試修改提示以檢視您是否可以獲得不同的輸出現在,並嘗試修改提示以檢視您是否可以獲得不同的輸出現在。

希望我們的客戶服務代理用他們的原始語言回覆了客戶,希望我們的客戶服務代理用他們的原始語言回覆了客戶。

所以讓我們說,所以讓我們說,說英語的,說英語的,客戶服務代理出現,客戶服務代理出現,說嘿,說嘿,客戶保修不包括廚房清潔費用,客戶保修不包括廚房清潔費用,因為是你誤用攪拌機,用叉子戳蓋子。

因為是你誤用攪拌機,用叉子戳蓋子,運氣不好,運氣不好,再見,不是很禮貌的資訊,再見,不是很禮貌的資訊,但假設這是客戶服務代理想要的,但假設這是客戶服務代理想要的。

我們將指定,我們將指定,服務訊息將翻譯成這種海盜風格,服務訊息將翻譯成這種海盜風格,我們希望它是用英語海盜語說的禮貌語調,我們希望它是用英語海盜語說的禮貌語調,因為我們之前建立了提示模板。

因為我們之前建立了提示模板。

酷的是,酷的是,我們現在可以重複使用那個提示模板,我們現在可以重複使用那個提示模板,並指定我們想要的服務風格海盜,並指定我們想要的服務風格海盜,文字是此服務回覆,文字是此服務回覆,如果我們這樣做。

如果我們這樣做。

這是提示,這是提示。

如果我們提示,如果我們提示,嗯,chagpt t,嗯,chagpt t。

這是它給我們的回應,這是它給我們的回應,我必須為你進來,保修不包括費用或清潔你的船艙等。

運氣不好,法老,我的心,你可能想知道。

為什麼使用提示模板而不是,你知道,只是一個f字串,答案是,隨著你構建複雜的應用程式,提示可以相當長和詳細。

因此,提示模板是一個有用的抽象,幫助你重用好的提示。

當你能,嗯,這是一個相對較長的提示示例,為線上學習應用程式評分學生的提交。

像這樣的問題可能相當長,你可以要求LM首先解決問題,然後以特定格式輸出。

並將此包裝在lang鏈中,使用提示使重用這樣的提示更容易。

你稍後也會看到lang鏈為一些常見操作提供了提示,如摘要或問答,或連線到SQL資料庫。

或連線到不同的API,因此,透過使用一些lang鏈內建的提示,你可以快速構建一個應用程式,而不需要um。

設計你自己的提示,lang cha的提示庫的另一個方面是它也支援輸出解析,我們稍後會講到這一點,但當你使用一個LLM構建一個複雜的應用程式時,你經常指示LM以特定格式生成其輸出,如使用特定關鍵字。

左側的例子說明了如何使用一個LLM執行稱為鏈式思維,推理,使用稱為React的框架,但不用擔心技術細節,但關鍵是思想是LM在想什麼,因為給LM思考的空間,它往往能得出更準確的結論。

然後行動作為關鍵字來執行具體行動,然後觀察顯示它從該行動中學到了什麼,等等,如果你有一個提示,指示LM使用這些特定關鍵字,思想,行動和觀察,然後可以將這個提示與解析器耦合。

以提取出帶有這些特定關鍵字標記的文字,因此,這共同提供了一個很好的抽象,來指定輸入給LM,並讓解析器正確解釋,讓我們回到一個輸出解析器的例子。

在這個例子中,讓我們看看如何讓lm輸出,並使用lang chain傳遞該輸出。

執行我將使用的示例,將是從產品評論中提取資訊。

並將該輸出格式化為相鄰格式。

這是您希望輸出的技術示例,這是一個Python字典,其中產品是否為禮物,花費的天數,快遞員是5人,價格相當實惠,這是一個期望輸出的例子。

這是一個客戶評價的例子。

以及嘗試達到該JSON輸出的模板,這是一個客戶評價,睡眠模糊效果相當驚人,它有4個設定,蠟燭吹滅器,性別,微風,風城與龍捲風,兩天後到達,及時為妻子週年禮物,我認為我妻子很喜歡,她至今無語。

我一直是唯一使用者等,以下為文字評論模板,從指定資訊提取,這是動圖嗎,這種情況下是,因為這是個動圖,還有送貨日期,送達用了多久,看起來,這次兩天就到了,價格多少,你知道,稍微貴點,鼓風機等。

因此,將評論模板作為輸入的LM,客戶評論,並提取這三個欄位,然後格式化為輸出,嗯,使用以下鍵。

好的,所以這是如何用lang chain包裝的。

讓我們匯入聊天提示模板,我們之前已匯入,技術上這行多餘,但我會再匯入,然後從評審模板建立提示模板。

這是提示模板。

類似我們之前使用提示模板,建立要傳遞給Open Eye的訊息,嗯,端點,處理開放端點,呼叫該端點,然後列印響應,鼓勵你暫停影片並執行程式碼。

就是它,它說,如果為真,這是二,價格值看起來也很準確。

嗯,但請注意,如果我們檢查。

響應的型別,這實際上是一個字串,所以看起來像JSON,看起來像鍵值對,但實際上不是一個字典,這只是一個長字串。

所以我想做的是去響應內容並獲取。

如果鍵的值,應該是真,但執行這個,應該會報錯,因為,嗯。

這實際上是一個字串,這不是Python字典,所以讓我們看看如何使用Lang Chains解析器。

為了做到這一點。

我將匯入,響應模式和結構化輸出解析器從Lang Chain,並告訴它我想要暫停。

透過指定這些響應模式。

所以禮物模式名為禮物,描述是購買的禮物送給別人。

回答真或是,假,如果不是,那麼未知。

等等,所以有一個好的模式,交付模式價格值模式,然後將它們全部放入列表如下。

現在我已經指定了這些模式的啟動,實際上可以給你提示本身,輸出為正,告訴你指令,若列印格式指令,她有精確指令,生成可解析輸出,這是新評論模板。

評論模板含格式指令。

可從模板建立提示。

建立傳遞給OpenAI的訊息。

若想,可檢視實際提示,含提取熔斷器指令,若送貨天數,價格值,這是文字,然後這是格式指令,最後,若呼叫OpenAI端點,看看響應,現在這樣。

若使用建立的輸出解析器。

可傳入輸出字典。

區域列印看起來像這樣。

非字串,可提取與禮物鍵關聯的值,或與送貨天數關聯的值。

或提取與價格值關聯的值。

這是將LM輸出。

解析為Python字典。

使輸出便於下游處理,建議暫停影片並執行程式碼,模型、提示和解析結束,希望你能重用提示模板,輕鬆分享,與合作者,甚至使用Lang Chains內建模板,如你剛見。

常與輸出解析器結合,使輸入提示到特定格式輸出,然後解析器解析該輸出,儲存資料於Python字典。

或其他資料結構,便於下游處理。

希望這在你的應用中很有用。

就這樣,讓我們看下一個影片,Lang Chain如何幫你建更好的聊天機器人,或讓LM,更有效地聊天。

【LangChain大模型應用開發】DeepLearning.AI - P3:3——記憶 - 吳恩達大模型 - BV1iZ421M79T

與這些模型互動時,與這些模型互動時,它們自然不記得你之前說過什麼或之前的對話,它們自然不記得你之前說過什麼或之前的對話,這是一個問題,這是一個問題,當你構建如聊天機器人等應用時,你想與他們交談。

當你構建如聊天機器人等應用時,你想與他們交談,因此,在這一節中我們將涵蓋記憶,因此,在這一節中我們將涵蓋記憶,基本上是如何記住對話的前一部分並將其輸入語言模型。

基本上是如何記住對話的前一部分並將其輸入語言模型,這樣,當你與他們互動時,它們可以有這種對話流程,這樣,當你與他們互動時,它們可以有這種對話流程,是的,是的,lang提供了多種高階選項來管理這些記憶。

lang提供了多種高階選項來管理這些記憶,讓我們深入瞭解一下,讓我們深入瞭解一下,首先匯入API金鑰,首先匯入API金鑰。

然後匯入所需工具,然後匯入所需工具。

以記憶為例,以記憶為例。

使用lag鏈管理聊天或聊天機器人對話,使用lag鏈管理聊天或聊天機器人對話。

為此,為此,我將設定lm為OpenAI的聊天介面,我將設定lm為OpenAI的聊天介面。

溫度為0,溫度為0,並將記憶體用作對話緩衝記憶體,並將記憶體用作對話緩衝記憶體。

稍後您將看到這意味著什麼,稍後您將看到這意味著什麼,嗯,嗯,稍後我將重建對話鏈,稍後我將重建對話鏈。

在這門短課中,在這門短課中,哈里森將更深入探討鏈的本質和土地鏈,哈里森將更深入探討鏈的本質和土地鏈,現在不必太擔心語法的細節,現在不必太擔心語法的細節,但這構建了一個LLM,但這構建了一個LLM。

如果我開始對話,如果我開始對話,對話點預測,對話點預測,給定輸入嗨,給定輸入嗨。

我叫安德魯,我叫安德魯,看看它說什麼 你好,看看它說什麼 你好,很高興見到你等,很高興見到你等,然後假設我問它,然後假設我問它,一加一等於幾,一加一等於幾,嗯,一加一等於二,嗯,一加一等於二。

然後再次問它,然後再次問它,你知道我的名字嗎,你知道我的名字嗎,你的名字是安德魯,你的名字是安德魯,如你之前所說,如你之前所說。

那裡有一點諷刺,那裡有一點諷刺,不確定,不確定,所以如果你想,所以如果你想,可將此變數設為真檢視實際操作,可將此變數設為真檢視實際操作。

執行predict high時,執行predict high時,我叫安德魯,我叫安德魯,這是lang chain生成的提示,這是lang chain生成的提示。

它說以下是人類與AI的對話,它說以下是人類與AI的對話。

健談等,健談等,這是lang chain生成的提示,這是lang chain生成的提示,讓系統有希望和友好對話,讓系統有希望和友好對話,並儲存對話,並儲存對話,這裡是回應,這裡是回應,當你執行這個時。

當你執行這個時。

嗯,嗯,因果的第二三部分,因果的第二三部分,它保持提示如下,它保持提示如下,注意當我念出我的名字時,注意當我念出我的名字時,這是第三個術語,這是第三個術語。

這是我的第三個輸入,這是我的第三個輸入,它已將當前對話儲存如下,它已將當前對話儲存如下。

你好,我叫安德魯,你好,我叫安德魯,1加1等,1加1等,因此,對話的歷史越來越長,因此,對話的歷史越來越長。

實際上在頂部,實際上在頂部,我用記憶體變數儲存了記憶,我用記憶體變數儲存了記憶。

所以如果我列印記憶體緩衝,所以如果我列印記憶體緩衝,它已儲存到目前為止的對話,它已儲存到目前為止的對話。

你也可以列印這個,你也可以列印這個。

記憶體載入記憶體變數,記憶體載入記憶體變數,嗯,嗯,這裡的花括號實際上是一個空字典,這裡的花括號實際上是一個空字典。

有一些更高階的功能你可以使用,有一些更高階的功能你可以使用。

但在這門短課程中我們不會討論它們,但在這門短課程中我們不會討論它們,所以不用擔心,所以不用擔心。

為什麼這裡有一個空的花括號,為什麼這裡有一個空的花括號,但這是lang chain記住的,但這是lang chain記住的。

到目前為止對話的記憶,到目前為止對話的記憶,它只是AI或人類所說的一切,它只是AI或人類所說的一切,我鼓勵你暫停影片並執行程式碼,我鼓勵你暫停影片並執行程式碼。

lang chain儲存對話的方式是使用這個對話緩衝記憶體,lang chain儲存對話的方式是使用這個對話緩衝記憶體。

如果我使用組合,如果我使用組合。

緩衝記憶體指定幾個輸入和輸出,緩衝記憶體指定幾個輸入和輸出,這就是你如何向記憶中新增新東西,這就是你如何向記憶中新增新東西。

如果你想明確地這樣做,記憶,如果你想明確地這樣做,記憶,儲存上下文說你好,儲存上下文說你好。

怎麼了,怎麼了,我知道這不是最令人興奮的對話,我知道這不是最令人興奮的對話。

但我想讓它有一個簡短的例子,但我想讓它有一個簡短的例子,有了這個,這就是記憶的狀態,有了這個,這就是記憶的狀態。

再次讓我實際上顯示,再次讓我實際上顯示,嗯,嗯,記憶體變數現在,記憶體變數現在,如果你想新增額外的,如果你想新增額外的。

嗯資料到記憶體,嗯資料到記憶體,你可以繼續儲存更多上下文,你可以繼續儲存更多上下文,因果繼續不多,因果繼續不多。

只是冷靜地掛著,只是冷靜地掛著,如果你列印出記憶體,如果你列印出記憶體。

你知道現在有更多的內容,你知道現在有更多的內容,所以當你使用大型語言模型進行聊天對話時,所以當你使用大型語言模型進行聊天對話時。

嗯大型語言模型本身實際上是無狀態的,嗯大型語言模型本身實際上是無狀態的。

語言模型本身不記對話,語言模型本身不記對話,每筆交易,每筆交易,每次API呼叫獨立,每次API呼叫獨立。

聊天機器人,聊天機器人,僅因為通常有程式碼提供,僅因為通常有程式碼提供,迄今為止的完整對話作為上下文,迄今為止的完整對話作為上下文。

因此記憶體可以明確儲存,因此記憶體可以明確儲存。

嗨,嗨,我叫安德魯,我叫安德魯,很高興見到你等,很高興見到你等,這種記憶體儲存用作輸入或附加上下文,這種記憶體儲存用作輸入或附加上下文。

以便它們可以生成輸出,以便它們可以生成輸出,就像只有下一個對話回合,就像只有下一個對話回合。

知道之前說了什麼,知道之前說了什麼。

隨著對話變長,隨著對話變長,所需記憶體量變得非常長,所需記憶體量變得非常長,傳送大量令牌到LM的成本也會增加,傳送大量令牌到LM的成本也會增加。

通常按需要處理的令牌數收費,通常按需要處理的令牌數收費。

因此鏈提供了幾種方便的記憶體型別,因此鏈提供了幾種方便的記憶體型別。

以儲存和累積對話,以儲存和累積對話。

我們一直在看對話緩衝記憶體,我們一直在看對話緩衝記憶體,讓我們看看另一種型別的記憶體,讓我們看看另一種型別的記憶體。

我將匯入對話緩衝視窗AR,我將匯入對話緩衝視窗AR。

它只保留一段記憶體,它只保留一段記憶體,我設定記憶體為緩衝視窗記憶體,k等於一,我設定記憶體為緩衝視窗記憶體,k等於一。

變數k等於一,變數k等於一,指定我只想記住一次對話交換,指定我只想記住一次對話交換。

即一次我的回合,即一次我的回合,和一次聊天機器人的發言,和一次聊天機器人的發言。

所以現在如果我讓它儲存上下文嗨,所以現在如果我讓它儲存上下文嗨,怎麼了,怎麼了,不只是掛著,不只是掛著。

如果我檢視記憶體載入變數,如果我檢視記憶體載入變數。

它只記得最近的發言,它只記得最近的發言,注意'嗨'被丟棄,注意'嗨'被丟棄。

怎麼了,怎麼了,它只說人類說不多,它只說人類說不多,只是掛著,只是掛著,AI說酷,AI說酷。

因為k等於一,因為k等於一,這是一個很好的功能,這是一個很好的功能。

因為它讓你跟蹤最近的幾次對話,因為它讓你跟蹤最近的幾次對話。

實踐中你可能不會用k等於一,實踐中你可能不會用k等於一,你會用k設定為較大的數字,你會用k設定為較大的數字。

嗯,但這防止了記憶體無限制增長,嗯,但這防止了記憶體無限制增長。

隨著對話變長,隨著對話變長,如果我們重新執行剛才的對話,如果我們重新執行剛才的對話,我們說嗨,我們說嗨,我叫安德魯,我叫安德魯。

1加1等於幾,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資料庫。

相關文章