天天看點

硬核:手作ChatGPT驅動的AI智能學習夥伴(含代碼)

作者:RolloTomasi

#ai# #chat GPT#

你是否在使用ChatGPT來學習一個主題?

如果是的話,那麼很好。但是你可以做得更好。

今天的任務:使用 #LangChainAI# 和 #streamlit# 建立一個智能學習夥伴。

讓我為你展示如何做到(包含代碼)

場景:準備考試

使用自己的學習材料擷取練習題和答案!

關于解決方案一個抽象的概述:

  • 提取PDF中的文本
  • 生成問題
  • 生成答案

這是一個簡單的應用程式。

現在是代碼時間:

1.1 從PDF加載資料

LangChain提供了開箱即用的文檔加載器,用于從各種文檔類型中提取資料。

我們将使用PyPDFLoader從PDF中提取學習材料并将資料存儲在變量中。

現在您需要拆分文本

硬核:手作ChatGPT驅動的AI智能學習夥伴(含代碼)

我們将以兩種不同的方式拆分資料:

較大的塊用于問題生成

較小的塊用于問題回答

但首先,讓我們談談token。

Tokens

大型語言模型(LLM)通過将正常句子轉化為數值表示來了解單詞。

一個句子被分成tokens。

一個token對應于約4個字元的文本。

是以,100個token ~= 75個單詞

拆分文本有兩個原因:

硬核:手作ChatGPT驅動的AI智能學習夥伴(含代碼)

1. 目前的模型具有有限的token輸入容量。

2. 每個token的處理都有一定的成本。

1.2 為問題生成拆分文本

我們希望LLM具有盡可能多的上下文意識,并且盡可能少地執行操作。

您可以通過增加chunk(文本塊)的大小來實作這一點。

使用GPT-3.5-Turbo-16k模型,您可以使這些chunk相當大(16k個令牌)

當我們加載資料時,它會自動按頁面分割所有文本,這使得直接建立這些大的chunk變得具有挑戰性。

一個簡單的預處理步驟來幫助。

通過執行代碼,所有文本将被合并到一個變量中。

現在讓我們拆分文本

硬核:手作ChatGPT驅動的AI智能學習夥伴(含代碼)

首先,我們将設定chunk_size=10,000和chunk_overlap=200來初始化文本拆分器。

chunk_size是一個塊中可以包含的最大令牌數

chunk_overlap是每個塊發生的重疊量。

硬核:手作ChatGPT驅動的AI智能學習夥伴(含代碼)

1.3 為問題回答拆分文本

在第3步中,我們将使用Retrieval Question Answer Chain來回答我們生成的問題。

為了降本增效,我們将文本拆分成較小的塊。

硬核:手作ChatGPT驅動的AI智能學習夥伴(含代碼)

2. 生成問題

現在,是時候讓模型基于我們的學習材料生成練習題了。

我們首先需要設定大型語言模型

2.1:初始化LLM

我們将使用OpenAI的GPT-3.5-turbo-16k模型。

temperature是一個影響LLM響應創造性的參數:

  • 較高的temperature(例如1.0):生成更多多樣但潛在的無意義輸出。
  • 較低的temperature(例如0.2):産生更加集中和可預測的響應。

我們希望我們的問題在創意方面既有創造性又與學習材料相關。

是以,我們将temperature設定為0.4。

請随意嘗試不同的值,找到最适合您偏好的值。

硬核:手作ChatGPT驅動的AI智能學習夥伴(含代碼)

2.2:問題生成的總結鍊

總結涉及建立文檔的簡潔摘要并提取核心資訊。

然而,在我們的情況下,我們不會使用該鍊來建立摘要,而是用于建立問題。

我們需要自定義的提示

2.2.1:提示

“精煉”總結鍊使用了兩個提示:

第一個提示用于第一塊文本的問題生成。

硬核:手作ChatGPT驅動的AI智能學習夥伴(含代碼)

第二個提示用于所有後續文本塊的問題生成(在精煉過程中)。

硬核:手作ChatGPT驅動的AI智能學習夥伴(含代碼)

2.2.2:初始化總結鍊。

您需要做5件事:

  1. LLM
  2. 鍊類型
  3. 問題提示
  4. 精煉提示
  5. 詳細資訊(可選)
硬核:手作ChatGPT驅動的AI智能學習夥伴(含代碼)

步驟2.3:生成問題

現在是令人興奮的部分:

運作鍊來生成問題!

運作鍊後,“questions”變量将儲存基于學習材料生成的問題。

現在

讓我們回答這些問題

硬核:手作ChatGPT驅動的AI智能學習夥伴(含代碼)

3:生成答案

既然我們有了問題,現在是使用大型語言模型根據學習材料中的資訊來回答問題的時候了。

為了實作這一目标,我們将使用“檢索問題回答鍊”。

我們需要三個元件

  • 檢索器:該元件使用矢量資料庫進行語義相似性搜尋。
  • 大型語言模型:這幾乎與我們在第2.1步中初始化的模型相同,我們将用它來生成答案。
  • 問題:我們在上一步生成的問題。

3.1:設定矢量資料庫

矢量資料庫本質上是一組矢量,其中每個矢量代表文本的數值表示,稱為embedding。

embedding封裝了文本的語義含義。

讓我們來設定它

硬核:手作ChatGPT驅動的AI智能學習夥伴(含代碼)

要設定Chroma矢量資料庫,您需要兩個元件:

embeddings:學習材料的數值表示,将由OpenAI生成。

文檔:需要嵌入的文檔。

硬核:手作ChatGPT驅動的AI智能學習夥伴(含代碼)

3.2:初始化大型語言模型

初始化大型語言模型(LLM),與我們在第2.1步中所做的類似。

我們将對temperature設定進行微小調整。

較低的temperature降低了模型“産生過度聯想”的可能性。

硬核:手作ChatGPT驅動的AI智能學習夥伴(含代碼)

3.3:将問題拆分為清單

我們将從第2.3步生成的問題進行轉換。

它們目前存儲為字元串。

該函數将把問題字元串拆分成一個清單。

硬核:手作ChatGPT驅動的AI智能學習夥伴(含代碼)

3.4:初始化檢索QA鍊

現在我們可以初始化檢索QA鍊以生成答案。

通過初始化RetrievalQA鍊,我們現在準備好運作它并生成問題的答案了。

硬核:手作ChatGPT驅動的AI智能學習夥伴(含代碼)

3.5:運作鍊

我們将在生成的問題清單上運作鍊。

我們還将将問題及其對應的答案儲存到一個簡單的文本檔案中。

硬核:手作ChatGPT驅動的AI智能學習夥伴(含代碼)

4:完成

現在,您已成功生成并儲存了問題和答案!

您可以在文本檔案中檢視内容,并将其用作學習資源或其他您可能考慮的用途。

額外的一步

硬核:手作ChatGPT驅動的AI智能學習夥伴(含代碼)

好了以上就是今天關于如何"玩AI"的内容,如果有其他與AI有關的有趣的好玩的内容,也歡迎大家分享給我。