iT邦幫忙

2025 iThome 鐵人賽

DAY 20
0
AI & Data

RAG × Agent:從知識檢索到智慧應用的30天挑戰系列 第 20

Day 20|實戰 RAGAs:量化檢索與生成的表現

  • 分享至 

  • xImage
  •  

前面指標能介紹的都介紹完了,今天就開始我們的實作吧!
要複習的話可以參考前幾天的內容,就讓我們開始ㄅ~


1. 安裝環境
這邊我們使用 Ollama + Mistral 做評分,不然原先是需要 OpenAI Key,還有我們會使用 HuggingFace Embeddings 用在 RAGAs。

# 評估核心
pip install ragas datasets evaluate

# 本地 LLM:Ollama 的 LangChain
pip install langchain-ollama

# 本地 Embeddings:HuggingFace 的 LangChain
pip install langchain-huggingface

2. 取得 RAG 輸出
先前的文章其實我們就有設定幾項參數(下面這幾項),如果忘記了可以去回去一下之前實戰的內容~

query = "什麼是關鍵基礎設施?"
hits = search_chunks(query, k=4)                 
prompt = build_prompt(query, hits)               
answer = ask_ollama(prompt, model="mistral")    

3. 建立評估資料庫
這邊會將那些指標也就是 Context Precision、Answer Relevance、Answer Faithfulness 需要的欄位加進去存成一個 dataset,其實這步驟你可以考慮不要有,這邊只是為了方便我們解釋才新增的,不過要丟甚麼參數進去評估自己可能要有清楚的條理。

from datasets import Dataset

# 取出檢索到的文字段落
contexts = [h["text"] for h in hits]

# 參考答案:手動撰寫或統整資料後放上去
reference = "關鍵基礎設施是指實體或虛擬資產、系統或網路,其功能一旦停止運作或效能降低,對國家安全、社會公共利益、國民生活或經濟活動有重大影響之虞,經主管機關定期檢視並公告之領域。"

data = {
    "question": [query],
    "contexts": [contexts],
    "answer":   [answer],
    "reference":[reference],
}
dataset = Dataset.from_dict(data)

4. 執行 RAGAS 評估
我們用 Ollama(Mistral) 當評分 LLM,並用 HuggingFace Embeddings。
因為前面已經在用 sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 做檢索嵌入與 Chroma 建立資料庫,在 RAGAS 評估時也沿用同一款模型就好。

這邊針對 LLM 有特別做設定:

  • temperature=0 → 讓輸出穩定,避免隨機性。
  • num_ctx=4096 → 提高上下文長度上限,減少截斷。
    這兩個設定可以有效降低出現 NaN 的機率。

這裡我們使用 evaluate() 來跑 RAGAS 指標。實際上要評估哪些項目,可以依需求挑選並放入 metrics。

from ragas.metrics import context_precision, context_recall
from ragas.metrics import faithfulness, answer_relevancy
from ragas import evaluate

# ollma 設定
from langchain_ollama import OllamaLLM
from ragas.llms import LangchainLLMWrapper
ollama_raw = OllamaLLM(model="mistral", temperature=0, num_ctx=4096)
ollama_llm  = LangchainLLMWrapper(ollama_raw)

# embeddings 設定
from langchain_huggingface import HuggingFaceEmbeddings as LCHuggingFaceEmbeddings
from ragas.embeddings import LangchainEmbeddingsWrapper
lc_hf = LCHuggingFaceEmbeddings(model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
hf_embeddings = LangchainEmbeddingsWrapper(lc_hf)

# 評估
result = evaluate(
    dataset,
    metrics=[context_precision, context_recall, answer_relevancy, faithfulness],
    llm=ollama_llm,
    embeddings=hf_embeddings
)
print(result)

5. 輸出結果
{'context_precision': 0.7500, 'context_recall': 1.0000, 'answer_relevancy': 0.7336, 'faithfulness': 0.5000}
這四個分數各代表:

  • Context Precision (0.75)
    表示檢索到的片段裡有 75% 與問題高度相關。代表檢索雖然有帶到正確的內容,但仍有 25% 不太相關的段落。

  • Context Recall (1.0)
    代表標準答案需要的關鍵資訊全部都有被檢索出來(覆蓋率 100%)。這很理想,顯示知識庫有足夠支撐答案的內容。

  • Answer Relevancy (0.73)
    說明 LLM 的最終回答大致有回到問題重點,但還有些表述或焦點不夠精確(約 73% 的相關性)。

  • Faithfulness (0.50)
    代表答案只有一半內容是真的能在檢索到的片段中找到依據。也就是說,模型有部分內容是自己延伸或猜測出來的。

不過這是我們自己建立的小型 RAG 系統,檢索策略、知識庫內容以及 prompt 設計都還不夠完善,所以分數並不算高。這樣的結果反而很有價值,因為它能幫助我們清楚定位問題,看是在檢索還是生成出現了問題,才能更有效的優化系統。


如果想看相關的資訊都可以在官方的原始文件中找--RAGAs,可以看像是 evaluate、RAGAs 操作指南之類的!
後面我們會開啟新章節,距離完賽也不遠囉><


上一篇
Day 19|RAG 評估指南(2/2):RAG 特定指標(下)
下一篇
Day 21|什麼是 AI Agent?
系列文
RAG × Agent:從知識檢索到智慧應用的30天挑戰22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言