RAG(Retrieval-Augmented Generation)是一種結合資訊檢索和生成式模型的技術,能有效提升生成內容的準確性和相關性。本文將逐步講解如何建構一個 RAG 驅動的生成式 AI 模型,包含從資料蒐集、清理、檢索到生成等完整流程。首先,我們會使用 Python 的 requests 和 beautifulsoup4 從 Wikipedia 抓取特定主題的頁面,並將其整理成可用的資料集。接著,根據使用者輸入的關鍵字,系統會從資料集中檢索相關段落,並將其作為生成模型的輸入提示。最後,我們將介紹如何根據人類評分,動態調整 RAG 的運作模式,以達到最佳的生成效果。
RAG驅動的生成式人工智慧模型開發
在開發RAG(Retrieval-Augmented Generation)驅動的生成式人工智慧模型時,我們首先需要建立一個檢索器(Retriever)來取得相關資訊。本文將介紹如何從零開始建立這樣一個模型,並詳細說明檢索器和生成器的實作細節。
1.2. 準備檢索器
1.2.1. 安裝必要的套件
首先,我們需要安裝兩個必要的Python套件:requests和beautifulsoup4。requests用於傳送HTTP請求以取得Wikipedia檔案,而beautifulsoup4則用於從網頁中提取資訊。
!pip install requests==2.32.3
!pip install beautifulsoup4==4.12.3
1.2.2. 準備資料集
我們將透過抓取Wikipedia頁面來建立資料集。每個檔案都將包含自動或手動標記的標籤,這是向資料集索引邁出的第一步。
import requests
from bs4 import BeautifulSoup
import re
# 定義Wikipedia文章的URL和對應的關鍵字
urls = {
"prompt engineering": "https://en.wikipedia.org/wiki/Prompt_engineering",
"artificial intelligence": "https://en.wikipedia.org/wiki/Artificial_intelligence",
"llm": "https://en.wikipedia.org/wiki/Large_language_model",
"llms": "https://en.wikipedia.org/wiki/Large_language_model"
}
1.2.3. 處理資料
接下來,我們需要對取得的資料進行處理,包括抓取和清理文字。
def fetch_and_clean(url):
# 取得URL的內容
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
# 找到文章的主要內容
content = soup.find('div', {'class': 'mw-parser-output'})
# 移除不相關的部分,如"See also"、"References"等
for section_title in ['References', 'Bibliography', 'External links']:
section = content.find('span', {'id': section_title})
if section:
for sib in section.parent.find_next_siblings():
sib.decompose()
section.parent.decompose()
# 從段落標籤中提取和清理文字
paragraphs = content.find_all('p')
cleaned_text = ' '.join(paragraph.get_text(separator=' ', strip=True) for paragraph in paragraphs)
cleaned_text = re.sub(r'\[\d+\]', '', cleaned_text) # 移除參考文獻標記
return cleaned_text
#### 內容解密:
此函式首先傳送HTTP請求取得指定URL的內容。然後,使用BeautifulSoup解析HTML內容,並提取主要文章內容。移除不相關的部分後,從段落標籤中提取文字,並進行清理,包括移除參考文獻標記。
1.3. 使用者輸入的檢索過程
當使用者輸入查詢時,系統需要識別其中的關鍵字,並檢索相關資訊。
import textwrap
def process_query(user_input, num_words):
user_input = user_input.lower()
# 檢查輸入中是否包含指定的關鍵字
matched_keyword = next((keyword for keyword in urls if keyword in user_input), None)
if matched_keyword:
print(f"Fetching data from: {urls[matched_keyword]}")
cleaned_text = fetch_and_clean(urls[matched_keyword])
# 限制顯示的字數
words = cleaned_text.split()
first_n_words = ' '.join(words[:num_words])
# 將文字格式化以便顯示
wrapped_text = textwrap.fill(first_n_words, width=80)
print("\nFirst {} words of the cleaned text:".format(num_words))
print(wrapped_text)
# 準備生成器的提示
prompt = f"Summarize the following information about {matched_keyword}: {first_n_words}"
wrapped_prompt = textwrap.fill(prompt, width=80)
print("\nPrompt for Generator:")
print(wrapped_prompt)
return first_n_words
else:
print("No relevant keywords found. Please enter a query related to the available keywords.")
return None
#### 內容解密:
此函式首先將使用者輸入轉換為小寫,並檢查是否包含預定義的關鍵字。如果找到匹配的關鍵字,則呼叫fetch_and_clean函式取得和清理相關的Wikipedia頁面內容。然後,限制顯示的字數,並將文字格式化以便顯示。最後,準備生成器的提示,並傳回清理後的文字。
2. 生成器
生成器生態系統包含多個元件,其中一些與檢索器的功能和使用者介面重疊。以下是生成器的主要元件:
2.1. 根據人類評分的自適應RAG選擇
這將根據使用者面板的評分隨時間進行調整。在實際的流程中,此功能可能是一個獨立的程式。
2.2. 輸入
在實際專案中,使用者介面(UI)將管理輸入。這個介面和相關的流程應該與使用者充分協商,理想情況下在工作坊環境中進行,以完全理解他們的需求和偏好。
2.3. 平均評分模擬場景
計算使用者評估分數的平均值和功能。
2.4. 在執行生成器之前檢查輸入
顯示輸入內容。
2.5. 安裝生成式人工智慧環境
安裝生成式人工智慧模型的環境,在本例中為OpenAI,可以是流程中另一個環境的一部分,其他團隊成員可能正在獨立工作、實施和佈署檢索器功能。
2.6. 內容生成
在本程式的此部分,OpenAI模型將處理輸入並提供回應,然後由評估器進行評估。
讓我們開始描述自適應RAG系統。
graph LR;
A[使用者輸入] --> B{包含關鍵字?};
B -->|是| C[檢索相關資訊];
B -->|否| D[顯示無相關結果];
C --> E[清理和格式化文字];
E --> F[準備生成器提示];
F --> G[生成內容];
圖表翻譯: 此圖表展示了從使用者輸入到生成內容的流程。首先,系統檢查輸入是否包含預定義的關鍵字。如果包含,則檢索相關資訊並進行清理和格式化。然後,準備生成器的提示,並最終生成內容。如果輸入不包含關鍵字,則顯示無相關結果。
2.1. 整合 HF-RAG 以增強檔案輸入
在生成式人工智慧模型中,資訊檢索的動態特性以及對上下文相關資料增強的需求,促使我們需要一個能夠適應不同輸入品質的靈活系統。我們引入了一個自適應的 RAG 選擇系統,該系統使用 HF 分數來決定在 RAG 生態系統中實施檔案的最佳檢索策略。自適應功能使我們超越了簡單的 RAG 系統,構成了混合 RAG 系統。
人工評估與 RAG 觸發機制
人工評估員會根據檔案的相關性和品質給予 1 到 5 的平均分數。這些分數會觸發不同的操作模式,如下圖所示:
圖 5.2:自動化 RAG 觸發機制
graph LR
A[評分 1-2] -->|RAG 停用| B[無檢索]
A -->|評分 3-4| C[人類專家反饋增強]
A -->|評分 5| D[關鍵字搜尋 RAG 增強]
C -->|使用 flashcard 或資訊片段| E[最佳化輸出]
D -->|利用 HF 資料| E
圖表翻譯: 上圖展示了根據評分觸發的不同 RAG 模式。當評分為 1-2 時,RAG 功能停用;當評分為 3-4 時,系統會利用人類專家反饋進行增強;當評分為 5 時,系統會啟動關鍵字搜尋 RAG 並利用之前收集的 HF 資料進行增強。
評分與 RAG 模式的對應關係
-
評分 1 至 2:表示 RAG 系統無法提供有效的補償,建議進行系統維護或模型微調。RAG 將被暫時停用,直到系統改進完成。使用者輸入將被處理,但不會進行檢索。
-
評分 3 至 4:啟動人類專家反饋增強模式,利用 flashcard 或資訊片段來最佳化輸出。根據檔案的 RAG 將被停用,但人類專家反饋資料將被用來增強輸入。
-
評分 5:啟動關鍵字搜尋 RAG,並在必要時利用之前收集的 HF 資料,使用 flashcard 或目標資訊片段來最佳化輸出。使用者無需提供新的反饋。
自適應 RAG 系統的實施建議
該程式實施了多種場景之一。評分系統、評分級別和觸發條件將根據不同的專案需求和目標進行調整。建議組織使用者研討會,以決定如何實施自適應 RAG 系統。
2.2. 使用者輸入
C 公司的一名使用者被提示輸入一個問題:
# 請求使用者輸入以進行關鍵字解析
user_input = input("請輸入您的查詢:").lower()
在這個範例程式中,我們將重點關注一個問題和主題:什麼是 LLM?。問題被提出並被模型記憶:
請輸入您的查詢:什麼是 LLM?
程式目標與擴充套件性
該程式是一個驗證概念的範例,旨在為 C 公司希望瞭解 LLM 的使用者提供策略和範例。其他主題可以被新增,該程式可以擴充套件以滿足進一步的需求。建議組織使用者研討會,以決定下一步的行動。
2.3. 平均評分模擬場景
為了本程式的演示,我們假設人類使用者反饋小組已經使用 3.2 節和 3.3 節中提供的功能對混合自適應 RAG 系統進行了一段時間的評估。使用者反饋小組多次對回應進行評分,這些評分會自動計算平均值並儲存在名為 ranking 的變數中。評分結果將幫助管理團隊決定是否降低檔案的排名、提升排名或透過手動或自動化功能來抑制檔案。
我們將從 1 到 5 的評分開始,這將使 RAG 功能停用,以便我們觀察生成模型的原生回應:
# 選擇 1 到 5 之間的分數以執行模擬
ranking = 1
然後,我們將修改這個值以啟動 RAG 功能(無額外的人類專家反饋),使用 ranking = 5。最後,我們將修改這個值以啟動人類反饋 RAG(不檢索檔案),使用 ranking = 3。
模擬環境中的評分觸發
在實際環境中,這些評分將在使用者反饋小組工作坊之後,根據 3.2 節和 3.3 節中描述的功能自動觸發。如果您希望執行 2.1 節中描述的三種場景,請確保初始化 text_input 變數,該變數將被生成式 AI 模型處理以生成回應:
# 初始化生成式 AI 模型模擬的文字輸入
text_input = []
每次切換場景時,請確保重新初始化 text_input。
生成式 AI 模型的輸出變異性
由於生成式 AI 模型的機率性質,其輸出可能會在每次執行中有所不同。
2.4. 無 RAG 模式(評分 1-2)
當生成式 AI 的輸出評分非常低時,所有 RAG 功能將被停用,直到管理團隊能夠分析和改進系統。在這種情況下,text_input 等於 user_input:
if ranking >= 1 and ranking < 3:
text_input = user_input
程式碼解密:
這段程式碼檢查 ranking 的值。如果 ranking 在 1 到 2 之間(包含 1 但不包含 3),則將 user_input 指定給 text_input。這表示在低評分情況下,系統直接使用使用者輸入而不進行任何 RAG 增強。
2.5. 人類專家反饋 RAG 模式(評分 3-4)
在這種場景下,人類專家反饋(見 3.4 節)是由使用者對自動化 RAG 檔案的反饋評分較低(評分 1-2 或 5)所觸發的。專家小組填寫了一張 flashcard,該卡片現在已被儲存為專家級別的 RAG 檔案。
程式首先檢查 ranking,並啟動 HF 檢索:
hf = False
if ranking > 3 and ranking < 5:
hf = True
程式碼解密:
這段程式碼首先將 hf 設為 False。如果 ranking 大於 3 且小於 5,則將 hf 設為 True。這表示當評分在 3 到 4 之間時,系統會啟動人類專家反饋檢索。
2.6. 內容生成
生成式 AI 模型(本例中為 GPT-4o)將生成以下輸出:
GPT-4 回應:
---------------
看起來你正在詢問 "LLM",它代表 "語言模型"。
LLM 是一種設計用於理解和生成類別似人類文字的人工智慧模型。
LLM 的例子包括 OpenAI 的 GPT(生成式預訓練變換器)模型。
---------------
輸出評估
這個輸出無法滿足 C 公司使用者小組在這個特定使用案例中的需求。他們無法將這個解釋與他們的客戶服務問題聯絡起來。此外,許多使用者會因為沒有得到相關的回應而感到沮喪,因為他們已經向管理團隊描述了他們的需求並期望得到相關的回應。接下來,我們將看看人類專家反饋 RAG 能夠提供什麼。