每天的專案會同步到 GitLab 上,可以前往 GitLab 查看,有興趣的朋友歡迎留言 or 來信討論,我的信箱是 nickchen1998@gmail.com。
今天我們要來把剩下的兩種測試情境補齊,分別是「文本召回率」以及「文本關聯性」。
好的,我會根據你的寫作風格撰寫介紹文,以下是兩段程式碼的介紹:
文本召回率測試能夠幫助我們判斷「參考段落是否包含正確的回答資訊」,這樣我們就能確保檢索到的內容是否足夠支持模型產生正確的回答。在進行測試前,請先將 API 金鑰設定到環境變數:
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 ContextualRecallMetric
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."
expected_output = "You are eligible for 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 = ContextualRecallMetric(
threshold=0.7, # 通過分數
model="gpt-4", # 使用的模型
include_reason=True # 是否包含原因說明
)
test_case = LLMTestCase(
input="What if these shoes don't fit?", # 問題
actual_output=actual_output, # 模型的回答
expected_output=expected_output, # 標準答案
retrieval_context=retrieval_context # 檢索到的段落
)
metric.measure(test_case)
print(metric.score)
print(metric.reason)
這段程式碼會測試模型的輸出是否能從檢索到的段落中正確召回關鍵資訊,測試結果會顯示分數與原因,幫助我們瞭解模型是否依據檢索內容回答問題。
文本關聯性測試則是用來確保「參考段落與問題是否有足夠的關聯性」,這對於確保檢索出的上下文資料符合使用者的查詢問題至關重要,並能提升最終回答的準確度。設置 API 金鑰後,我們可以使用以下範例進行測試:
import os
from env_settings import EnvSettings
from deepeval.metrics import ContextualRelevancyMetric
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 = ContextualRelevancyMetric(
threshold=0.7, # 通過分數
model="gpt-4", # 使用的模型
include_reason=True # 是否包含原因說明
)
test_case = LLMTestCase(
input="What if these shoes don't fit?", # 問題
actual_output=actual_output, # 模型的回答
retrieval_context=retrieval_context # 檢索到的段落
)
metric.measure(test_case)
print(metric.score)
print(metric.reason)
這裡我們只需要提供問題與檢索出的段落,讓模型自己評估段落是否與問題足夠相關,這樣可以確保檢索出的內容是有效的,並提高整個 RAG 流程的表現。
這樣的分步測試讓我們可以針對不同的面向進行詳細檢查,確保系統的每一部分都能順利運作。無論是檢索出的段落是否足夠支持正確的回答,還是段落與問題的相關性,這些測試都能提供有力的指標,幫助我們提升語言模型的表現。未來,我們可以結合這些測試,對 RAG 的細節進行進一步優化與調整,讓模型不僅能生成正確的回答,還能提高回答的可靠性與精確度。
明天我們會開始介紹 chunk size 與檢索段落的成效關係,也就是 RAG 效能調校的部分。
套件網址:https://pypi.org/project/deepeval/
官方網站:https://docs.confident-ai.com/docs/getting-started