跳至主要內容

Context precision scorer

createContextPrecisionScorer() 函式會建立一個 scorer,評估擷取所得的各段 context 對產生預期輸出的相關程度,以及它們的位置是否恰當。它使用平均精確率(Mean Average Precision,MAP),獎勵將相關 context 放在序列較前位置的系統。

它特別適合以下使用情境:

RAG 系統評估
RAG 系統評估 的直接連結

適合在以下 RAG pipeline 中評估擷取所得的 context:

  • context 的排序會影響模型效能
  • 你需要衡量基本相關性以外的擷取質素
  • 較早出現的相關 context 比較後出現的更有價值

Context window 最佳化
Context window 最佳化 的直接連結

在針對以下情況最佳化 context 選擇時使用:

  • 有限的 context window
  • token 預算限制
  • 多步推理任務

參數
參數 的直接連結

model:

MastraModelConfig
用於評估 context 相關性的語言模型

options:

ContextPrecisionMetricOptions
scorer 的設定選項

必須提供 contextcontextExtractor 其中之一。如兩者皆有提供,會優先使用 contextExtractor

.run() 傳回值
run-returns 的直接連結

score:

number
介乎 0 與 scale 之間的平均精確率分數(預設為 0 至 1)

reason:

string
context precision 評估的易讀說明

評分詳情
評分詳情 的直接連結

平均精確率(MAP)
平均精確率(MAP) 的直接連結

Context Precision 使用平均精確率同時評估相關性和位置:

  1. Context 評估:根據每段 context 對產生預期輸出是否有幫助,將其分類為相關或不相關
  2. 精確率計算:對位置 i 上的每段相關 context,精確率 = relevant_items_so_far / (i + 1)
  3. 平均精確率:將所有精確率值相加,再除以相關項目的總數
  4. 最終分數:乘以 scale 因子,並四捨五入至小數點後兩位

評分公式
評分公式 的直接連結

MAP = (Σ Precision@k) / R

Where:
- Precision@k = (relevant items in positions 1...k) / k
- R = total number of relevant items
- Only calculated at positions where relevant items appear

分數解讀
分數解讀 的直接連結

  • 0.9-1.0:極佳的精確率——所有相關 context 都在序列前方
  • 0.7-0.8:良好的精確率——大部分相關 context 的位置恰當
  • 0.4-0.6:中等的精確率——相關 context 與不相關內容混雜
  • 0.1-0.3:較差的精確率——相關 context 很少或位置不佳
  • 0.0:找不到相關 context

原因分析
原因分析 的直接連結

reason 欄位會說明:

  • 哪些 context 片段被判定為相關/不相關
  • 位置如何影響 MAP 計算
  • 評估使用的具體相關性準則

最佳化分析
最佳化分析 的直接連結

使用結果來:

  • 改善擷取:排序前先篩走不相關的 context
  • 最佳化排序:確保相關 context 優先出現
  • 調整 chunk 大小:在 context 細節與相關性精確度之間取得平衡
  • 評估 embedding:測試不同的 embedding 模型,以改善擷取效果

計算範例
計算範例 的直接連結

context:[relevant, irrelevant, relevant, irrelevant]

  • 位置 0:相關 → 精確率 = 1/1 = 1.0
  • 位置 1:略過(不相關)
  • 位置 2:相關 → 精確率 = 2/3 = 0.67
  • 位置 3:略過(不相關)

MAP = (1.0 + 0.67) / 2 = 0.835 ≈ 0.83

Scorer 設定
Scorer 設定 的直接連結

動態擷取 context
動態擷取 context 的直接連結

const scorer = createContextPrecisionScorer({
model: 'openai/gpt-5.6-sol',
options: {
contextExtractor: (input, output) => {
// Extract context dynamically based on the query
const query = input?.inputMessages?.[0]?.content || ''

// Example: Retrieve from a vector database
const searchResults = vectorDB.search(query, { limit: 10 })
return searchResults.map(result => result.content)
},
scale: 1,
},
})

大型 context 評估
大型 context 評估 的直接連結

const scorer = createContextPrecisionScorer({
model: 'openai/gpt-5.6-sol',
options: {
context: [
// Simulate retrieved documents from vector database
'Document 1: Highly relevant content...',
'Document 2: Somewhat related content...',
'Document 3: Tangentially related...',
'Document 4: Not relevant...',
'Document 5: Highly relevant content...',
// ... up to dozens of context pieces
],
},
})

範例
範例 的直接連結

針對不同查詢評估 RAG 系統擷取 context 的精確度:

src/example-context-precision.ts
import { runEvals } from '@mastra/core/evals'
import { createContextPrecisionScorer } from '@mastra/evals/scorers/prebuilt'
import { myAgent } from './agent'

const scorer = createContextPrecisionScorer({
model: 'openai/gpt-5.6-sol',
options: {
contextExtractor: (input, output) => {
// Extract context from agent's retrieved documents
return output.metadata?.retrievedContext || []
},
},
})

const result = await runEvals({
data: [
{
input: 'How does photosynthesis work in plants?',
},
{
input: 'What are the mental and physical benefits of exercise?',
},
],
scorers: [scorer],
target: myAgent,
onItemComplete: ({ scorerResults }) => {
console.log({
score: scorerResults[scorer.id].score,
reason: scorerResults[scorer.id].reason,
})
},
})

console.log(result.scores)

如要進一步了解 runEvals,請參閱 runEvals 參考文件

如要將此 scorer 加至 Agent,請參閱 Scorer 概覽指南。

與 context relevance 比較
與 context relevance 比較 的直接連結

按需要選擇合適的 scorer:

使用情境Context RelevanceContext Precision
RAG 評估重視使用情況時重視排序時
Context 質素細緻程度二元相關性
偵測遺漏✓ 識別缺漏✗ 不作評估
使用情況追蹤✓ 追蹤運用情況✗ 不作考慮
位置敏感度✗ 不受位置影響✓ 獎勵較前位置