每天的專案會同步到 GitLab 上,可以前往 GitLab 查看,有興趣的朋友歡迎留言 or 來信討論,我的信箱是 nickchen1998@gmail.com。
在正式進入 RAG 相關的細節之前,我們要先來介紹一下 DeepEval 這個套件,這個套件可以協助我們做一些有關語言模型的測試,下方列舉一些常用情境:
上述這些是筆者目前比較常用到的一些情境,而 DeepEval 總共內建了 14 種測試情境,可以應用在不的狀況當中,有了這些測試的工具以及情境,我們就可以在後面針對 RAG 的任何調整有比較完整的測試比較,下面就讓我們快速介紹一下該怎麼使用這個工具。
ref: https://www.supa.so/post/retrieval-augmented-generation-techniques-and-use-cases-2024
雖然現在才正式介紹似乎有點晚了,但我們還是快速的來補齊一下該有的基本概念。
RAG(Retrieval-Augmented Generation)是一種結合資料檢索與生成模型的方法,下麵我們針對圖片中的每個步驟做簡單的介紹:
RAG 的流程將檢索的資料與語言生成相結合,能夠提供更精確且上下文相關的回答。
首先,一套完整的問答流程,大約分為以下三大步驟:
基於這三點,我們把測試的情境拆成兩大塊各自進行測試,只要兩邊都通過,代表組合起來就沒問題,可以看一下下面這張圖:
可以看到圖片當中,我們將測試分為「以回答為出發點進行測試」以及「以檢索為出發點進行測試」,而今天我們要介紹的就是「以回答為出發點進行測試」的情境,至於會使用到的測試工具就是「忠誠度」以及「關聯性」這兩個。
前面有簡單提到,忠誠度測試會針對「我們的回答是否來自於檢索出來的段落」,如果分數越高,表示著我們的模型可以正確的參考我們所檢索出的段落來進行回答,可以確保他不會回答得過於自由導致回答錯誤。
在開始測試前,我們需要先把我們的 OpenAI 的金曜設定到環境變數當中:
import os
from env_settings import EnvSettings
env_settings = EnvSettings()
os.environ["OPENAI_API_KEY"] = env_settings.OPENAI_API_KEY
完成設定金鑰後,就讓我們快速來看一下官方給的範例:
import os
from env_settings import EnvSettings
from deepeval.metrics import FaithfulnessMetric
from deepeval.test_case import LLMTestCase
env_settings = EnvSettings()
os.environ["OPENAI_API_KEY"] = env_settings.OPENAI_API_KEY
actual_output = "We offer a 30-day full refund at no extra cost."
retrieval_context = ["All customers are eligible for a 30 day full refund at no extra cost."]
metric = FaithfulnessMetric(
threshold=0.7, # 通過分數
model="gpt-4", # 使用模型
include_reason=True # 測試結果是否包含原因
)
test_case = LLMTestCase(
input="What if these shoes don't fit?", # 輸入的問題
actual_output=actual_output, # LLM 實際輸出的回答
retrieval_context=retrieval_context # 檢索出的段落列表
)
metric.measure(test_case)
print(metric.score)
print(metric.reason)
程式碼當中都有補上每個參數的使用說明,我們看一下下面的執行結果:
至於關聯性的部分,則是可以協助我們測試「回答與問題的關聯性」,分數越高則表示回答與問題的關聯性越高,可以確保回答的內容是符合問題且有一定的品質。
import os
from env_settings import EnvSettings
from deepeval.metrics import AnswerRelevancyMetric
from deepeval.test_case import LLMTestCase
env_settings = EnvSettings()
os.environ["OPENAI_API_KEY"] = env_settings.OPENAI_API_KEY
actual_output = "We offer a 30-day full refund at no extra cost."
metric = AnswerRelevancyMetric(
threshold=0.7,
model="gpt-4",
include_reason=True
)
test_case = LLMTestCase(
input="What if these shoes don't fit?",
actual_output=actual_output
)
metric.measure(test_case)
print(metric.score)
print(metric.reason)
可以看到與忠誠度的測試非常相似,只是這次我們不需要提供檢索出的段落,而是直接提供問題以及回答,讓模型自己去判斷回答的品質,下面是執行結果:
今天我們快速介紹了「忠誠度」與「關聯性」這兩個測試情境,明天我們會介紹勝下的兩個,分別是「文本召回率」以及「文本關聯性」,而詳細的公式則可以去官方網站查看下面附上網址。
套件網址:https://pypi.org/project/deepeval/
官方網站:https://docs.confident-ai.com/docs/getting-started