精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

RAG系列:系統(tǒng)評(píng)估 - 基于LLM-as-judge實(shí)現(xiàn)評(píng)估系統(tǒng)

人工智能
我們基于 LLM-as-judge 自己實(shí)現(xiàn)一套 RAG 系統(tǒng)評(píng)估系統(tǒng),用該評(píng)估系統(tǒng)評(píng)估了基礎(chǔ)版 RAG 系統(tǒng)(V1.0)的 5 個(gè)評(píng)估指標(biāo)的表現(xiàn),可以看到基礎(chǔ)版 RAG 系統(tǒng)(V1.0)這 5 個(gè)指標(biāo)的值都是偏低的。

引言

在 系統(tǒng)評(píng)估 - 五個(gè)主流評(píng)估指標(biāo)詳解 中,我們了解了 RAG 系統(tǒng)評(píng)估的 5 個(gè)主流指標(biāo),它們分別是 上下文召回率(Context Recall)、上下文相關(guān)性(Context Relevance)、答案忠實(shí)度(Faithfulness)、答案相關(guān)性(Answer Relevance)以及答案正確性(Answer Correctness),也簡(jiǎn)單了解了一些 RAG 系統(tǒng)的評(píng)估方法以及主流的評(píng)估系統(tǒng)。

今天我們將基于 LLM-as-judge 自己實(shí)現(xiàn)一套 RAG 系統(tǒng)評(píng)估系統(tǒng),然后通過(guò)該評(píng)估系統(tǒng)評(píng)估我們?cè)?nbsp;基于 DeepSeek + Chroma + LangChain 開(kāi)發(fā)一個(gè)簡(jiǎn)單 RAG 系統(tǒng) 中搭建好的基礎(chǔ)版 RAG 系統(tǒng),以基礎(chǔ)版 RAG 系統(tǒng)這 5 個(gè)評(píng)估指標(biāo)值作為基準(zhǔn),通過(guò)學(xué)習(xí)不同的優(yōu)化方法來(lái)提升這 5 個(gè)指標(biāo)。

因?yàn)槭峭ㄟ^(guò) LLM 來(lái)評(píng)估,所以評(píng)估 LLM 的能力越強(qiáng),理論上評(píng)估就會(huì)越準(zhǔn)確,因此在實(shí)際的業(yè)務(wù)場(chǎng)景中,盡可能選用能力更強(qiáng)的 LLM

為了學(xué)習(xí)方便,本文采用的評(píng)估 LLM 是 Ollama 部署的 qwen2.5 14b。

本文完整代碼地址[1]:https://github.com/laixiangran/ai-learn/blob/main/src/app/rag/03_rag_evaluator/route.ts

下面具體講解下每個(gè)指標(biāo)評(píng)估器的代碼實(shí)現(xiàn):

上下文召回率評(píng)估器實(shí)現(xiàn)

衡量檢索到的上下文是否覆蓋參考答案所需的所有關(guān)鍵信息,避免遺漏關(guān)鍵信息。取值在 0 到 1 之間,數(shù)值越高表示檢索到的上下文覆蓋越全面。計(jì)算公式:上下文召回率 = 上下文覆蓋的關(guān)鍵信息數(shù)量 / 參考答案中關(guān)鍵信息總數(shù)量。例如,參考答案需要 5 個(gè)關(guān)鍵信息,若檢索到的上下文覆蓋其中 4 個(gè)關(guān)鍵信息,則上下文召回率為 0.8。

將參考答案(referenceAnswer)拆分成多個(gè)句子/關(guān)鍵信息(referenceAnswerStatements)。

舉個(gè)例子:

{
  "referenceAnswer": "2024年市場(chǎng)規(guī)模預(yù)計(jì)約488億人民幣,未來(lái)有望達(dá)到千億級(jí)別,顯示行業(yè)持續(xù)增長(zhǎng)的潛力。",
  "referenceAnswerStatements": [
    "2024年市場(chǎng)規(guī)模預(yù)計(jì)約488億人民幣。",
    "未來(lái)有望達(dá)到千億級(jí)別,顯示行業(yè)持續(xù)增長(zhǎng)的潛力。"
  ]
}

代碼實(shí)現(xiàn)如下:

/**
 * 將文本拆分為多個(gè)句子(關(guān)鍵信息)
 * @param text 待拆分的文本
 * @param evaluateLLM 拆分的 LLM
 * @returns
 */
async function statementSplit(text, evaluateLLM) {
  const prompt = `
  你是一個(gè)語(yǔ)言專家,你的任務(wù)是將以下文本拆分為多個(gè)獨(dú)立的句子,每個(gè)句子獨(dú)立表達(dá)一個(gè)完整含義,同時(shí)保留原意的邏輯連貫性。

  說(shuō)明:
  1. 嚴(yán)格按以下JSON格式返回:["句子1", "句子2", ...],不能輸出其他無(wú)關(guān)內(nèi)容。

  文本:
${text}

  回答:

  `;
  const res = await evaluateLLM.invoke(prompt);
  const data = formatToJson(res) || [];
  console.log('statements: ', data);
  return data;
}

逐個(gè)分析每個(gè)句子/關(guān)鍵信息(referenceAnswerStatements)是否可歸因于給定的上下文(retrievedContext)并計(jì)算上下文召回率(contextRecall)。

舉個(gè)例子:

{
  "retrievedContext":[
    "2016 年,美國(guó)教育部撥款40億\n美元用以計(jì)算機(jī)科學(xué)教育普及\n五年計(jì)劃。\n英國(guó):滲透率9.3%\n2024 年,英國(guó)把編程納入5-12 歲\n少兒的必修課。\n芬蘭\n2016年,芬蘭將編程納入小學(xué)教學(xué)大綱",
    ...
],
"referenceAnswer":"2024年市場(chǎng)規(guī)模預(yù)計(jì)約488億人民幣,未來(lái)有望達(dá)到千億級(jí)別,顯示行業(yè)持續(xù)增長(zhǎng)的潛力。",
"referenceAnswerStatements":[
    "2024年市場(chǎng)規(guī)模預(yù)計(jì)約488億人民幣。",
    "未來(lái)有望達(dá)到千億級(jí)別,顯示行業(yè)持續(xù)增長(zhǎng)的潛力。"
]
"contextRecall":{
    "score":1,
    "data":[
      {"score":1,"statement":"2024年市場(chǎng)規(guī)模預(yù)計(jì)約488億人民幣。"},
      {
        "score":1,
        "statement":"未來(lái)有望達(dá)到千億級(jí)別,顯示行業(yè)持續(xù)增長(zhǎng)的潛力。"
      }
    ]
}
}

代碼實(shí)現(xiàn)如下:

/**
 * 上下文召回率評(píng)估器。
 * 實(shí)現(xiàn)步驟:
 * 1. 將參考答案拆分成多個(gè)句子(關(guān)鍵信息);
 * 2. 逐個(gè)分析每個(gè)句子(關(guān)鍵信息)是否可歸因于給定的上下文;
 * 3. 根據(jù)每個(gè)句子(關(guān)鍵信息)的得分,計(jì)算上下文召回率。
 * @param evaluateData 評(píng)估數(shù)據(jù)
 * @param evaluateLLM 評(píng)估 LLM
 * @returns
 */
asyncfunctioncontextRecallEvaluator(evaluateData, evaluateLLM) {
// retrievedContext 檢索到的上下文
// referenceAnswer 參考答案
// referenceAnswerStatements 參考答案拆分出的多個(gè)句子(關(guān)鍵信息)
const { retrievedContext, referenceAnswer, referenceAnswerStatements } =
    evaluateData;
let newStatements = [];
if (!referenceAnswerStatements) {
    newStatements = awaitstatementSplit(referenceAnswer, evaluateLLM);
  } else {
    newStatements = [...referenceAnswerStatements];
  }
const allRes = [];
// 逐個(gè)分析每個(gè)句子(關(guān)鍵信息)是否可歸因于給定的上下文
while (newStatements.length > 0) {
    const statement = newStatements.shift();
    const prompt = `
你是一個(gè)語(yǔ)言專家,你的任務(wù)是分析句子是否可歸因于給定的上下文。

說(shuō)明:
1. 如果句子不能歸因于上下文,則得分為0;
2. 如果句子能夠歸因于上下文,則得分為1;
3. 嚴(yán)格按以下JSON格式返回:{"score": "得分"},不能輸出其他無(wú)關(guān)內(nèi)容。

句子:
${statement}

上下文:
${retrievedContext.join('\n')}

回答:

`;
    const llmRes = await evaluateLLM.invoke(prompt);
    const data = formatToJson(llmRes);
    allRes.push({
      score: data?.score ? +data.score : 0,
      statement,
    });
    console.log('contextRecallEvaluator: ', allRes);
  }
// 根據(jù)每個(gè)句子(關(guān)鍵信息)的得分,計(jì)算上下文召回率
const score =
    allRes.reduce((score, cur) => {
      score += +cur.score;
      return score;
    }, 0) / allRes.length;
return {
    score,
    data: allRes,
  };
}

上下文相關(guān)性評(píng)估器實(shí)現(xiàn)

衡量檢索到的上下文與問(wèn)題之間的相關(guān)性,避免包含無(wú)關(guān)冗余內(nèi)容。取值在 0 到 1 之間,數(shù)值越高表示檢索到的上下文相關(guān)性越高。計(jì)算公式:上下文相關(guān)性 = 上下文中與問(wèn)題相關(guān)的片段數(shù)量 / 上下文中片段總數(shù)量。例如,檢索到的上下文總共有 5 個(gè)片段,與問(wèn)題相關(guān)的片段有 4 個(gè),則上下文相關(guān)性為 0.8。

逐個(gè)分析每個(gè)上下文片段(retrievedContext)是否與問(wèn)題(question)相關(guān)并計(jì)算上下文相關(guān)性(contextRelevance)。

舉個(gè)例子:

{
  "question":"預(yù)計(jì)2024年少兒編程教育市場(chǎng)規(guī)模是多少?未來(lái)潛力如何?",
"retrievedContext":[
    "2016 年,美國(guó)教育部撥款40億\n美元用以計(jì)算機(jī)科學(xué)教育普及\n五年計(jì)劃。\n英國(guó):滲透率9.3%\n2024 年,英國(guó)把編程納入5-12 歲\n少兒的必修課。\n芬蘭\n2016年,芬蘭將編程納入小學(xué)教學(xué)大綱",
    ...
],
"contextRelevance":{
    "score":0.7,
    "data":[
      {
        "score":0,
        "context":"2016 年,美國(guó)教育部撥款40億\n美元用以計(jì)算機(jī)科學(xué)教育普及\n五年計(jì)劃。\n英國(guó):滲透率9.3%\n2024 年,英國(guó)把編程納入5-12 歲\n少兒的必修課。\n芬蘭\n2016年,芬蘭將編程納入小學(xué)教學(xué)大綱"
      },
      ...
    ]
}
}

代碼實(shí)現(xiàn)如下:

/**
 * 上下文相關(guān)性評(píng)估器
 * 實(shí)現(xiàn)步驟:
 * 1. 逐個(gè)分析每個(gè)上下文片段是否與問(wèn)題相關(guān);
 * 2. 根據(jù)每個(gè)上下文片段的得分,計(jì)算上下文相關(guān)性。
 * @param evaluateData 評(píng)估數(shù)據(jù)
 * @param evaluateLLM 評(píng)估 LLM
 * @returns
 */
asyncfunctioncontextRelevanceEvaluator(evaluateData, evaluateLLM) {
// question 問(wèn)題
// retrievedContext 檢索到的上下文
const { question, retrievedContext } = evaluateData;
const newRetrievedContext = [...retrievedContext];
const allRes = [];
// 逐個(gè)分析每個(gè)上下文片段是否與問(wèn)題相關(guān)
while (newRetrievedContext.length > 0) {
    const context = newRetrievedContext.shift();
    const prompt = `
你是一個(gè)語(yǔ)言專家,你的任務(wù)是確定上下文是否與問(wèn)題有關(guān)。

說(shuō)明:
1. 如果上下文與問(wèn)題無(wú)關(guān),則得分為0;
2. 如果上下文與問(wèn)題有關(guān),則得分為1;
3. 嚴(yán)格按以下JSON格式返回:{"score": "得分"},不能輸出其他無(wú)關(guān)內(nèi)容。

問(wèn)題:
${question}

上下文:
${context}

回答:

`;
    const llmRes = await evaluateLLM.invoke(prompt);
    const data = formatToJson(llmRes);
    allRes.push({
      score: data?.score ? +data.score : 0,
      context,
    });
    console.log('contextRelevanceEvaluator: ', allRes);
  }
// 根據(jù)每個(gè)上下文片段的得分,計(jì)算上下文相關(guān)性
const score =
    allRes.reduce((score, cur) => {
      score += +cur.score;
      return score;
    }, 0) / allRes.length;
return {
    score,
    data: allRes,
  };
}

答案忠實(shí)度評(píng)估器實(shí)現(xiàn)

衡量實(shí)際答案是否嚴(yán)格基于檢索到的上下文,避免幻覺(jué)。取值在 0 到 1 之間,數(shù)值越高表示實(shí)際答案越嚴(yán)格基于檢索到的上下文。計(jì)算公式:答案忠實(shí)度 = 上下文能夠推斷出事實(shí)的數(shù)量 / 實(shí)際答案拆解出的事實(shí)總數(shù)量。例如,實(shí)際答案拆解出 5 個(gè)事實(shí),若檢索到的上下文覆蓋其中 4 個(gè)事實(shí),則答案忠實(shí)度為 0.8。

將實(shí)際答案(answer)拆分成多個(gè)句子(answerStatements)。

舉個(gè)例子:

{
  "answer": "根據(jù)提供的上下文信息,2024年少兒編程教育市場(chǎng)的規(guī)模約為488億元人民幣。從長(zhǎng)遠(yuǎn)來(lái)看,隨著越來(lái)越多家長(zhǎng)認(rèn)同編程教育的重要性以及其逐漸滲透進(jìn)入教學(xué)體系內(nèi),該市場(chǎng)有望在未來(lái)5到10年內(nèi)發(fā)展成為一個(gè)千億級(jí)別的大市場(chǎng)。這表明少兒編程教育具有巨大的發(fā)展?jié)摿涂臻g。",
  "answerStatements": [
    "2024年少兒編程教育市場(chǎng)的規(guī)模約為488億元人民幣。",
    "從長(zhǎng)遠(yuǎn)來(lái)看,隨著越來(lái)越多家長(zhǎng)認(rèn)同編程教育的重要性以及其逐漸滲透進(jìn)入教學(xué)體系內(nèi),該市場(chǎng)有望在未來(lái)5到10年內(nèi)發(fā)展成為一個(gè)千億級(jí)別的大市場(chǎng)。",
    "這表明少兒編程教育具有巨大的發(fā)展?jié)摿涂臻g。"
  ]
}

代碼實(shí)現(xiàn)如下:

/**
 * 將文本拆分為多個(gè)句子(關(guān)鍵信息)
 * @param text 待拆分的文本
 * @param evaluateLLM 拆分的 LLM
 * @returns
 */
async function statementSplit(text, evaluateLLM) {
  const prompt = `
  你是一個(gè)語(yǔ)言專家,你的任務(wù)是將以下文本拆分為多個(gè)獨(dú)立的句子,每個(gè)句子獨(dú)立表達(dá)一個(gè)完整含義,同時(shí)保留原意的邏輯連貫性。

  說(shuō)明:
  1. 嚴(yán)格按以下JSON格式返回:["句子1", "句子2", ...],不能輸出其他無(wú)關(guān)內(nèi)容。

  文本:
${text}

  回答:

  `;
  const res = await evaluateLLM.invoke(prompt);
  const data = formatToJson(res) || [];
  console.log('statements: ', data);
  return data;
}

逐個(gè)分析每個(gè)句子(answerStatements)是否可歸因于給定的上下文(retrievedContext)并計(jì)算答案忠實(shí)度(faithfulness)。

舉個(gè)例子:

{
  "retrievedContext":[
    "2016 年,美國(guó)教育部撥款40億\n美元用以計(jì)算機(jī)科學(xué)教育普及\n五年計(jì)劃。\n英國(guó):滲透率9.3%\n2024 年,英國(guó)把編程納入5-12 歲\n少兒的必修課。\n芬蘭\n2016年,芬蘭將編程納入小學(xué)教學(xué)大綱",
    ...
],
"answer":"根據(jù)提供的上下文信息,2024年少兒編程教育市場(chǎng)的規(guī)模約為488億元人民幣。從長(zhǎng)遠(yuǎn)來(lái)看,隨著越來(lái)越多家長(zhǎng)認(rèn)同編程教育的重要性以及其逐漸滲透進(jìn)入教學(xué)體系內(nèi),該市場(chǎng)有望在未來(lái)5到10年內(nèi)發(fā)展成為一個(gè)千億級(jí)別的大市場(chǎng)。這表明少兒編程教育具有巨大的發(fā)展?jié)摿涂臻g。",
"answerStatements":[
    "2024年少兒編程教育市場(chǎng)的規(guī)模約為488億元人民幣。",
    "從長(zhǎng)遠(yuǎn)來(lái)看,隨著越來(lái)越多家長(zhǎng)認(rèn)同編程教育的重要性以及其逐漸滲透進(jìn)入教學(xué)體系內(nèi),該市場(chǎng)有望在未來(lái)5到10年內(nèi)發(fā)展成為一個(gè)千億級(jí)別的大市場(chǎng)。",
    "這表明少兒編程教育具有巨大的發(fā)展?jié)摿涂臻g。"
],
"faithfulness":{
    "score":1,
    "data":[
      {
        "score":1,
        "statement":"2024年少兒編程教育市場(chǎng)的規(guī)模約為488億元人民幣。"
      },
      {
        "score":1,
        "statement":"從長(zhǎng)遠(yuǎn)來(lái)看,隨著越來(lái)越多家長(zhǎng)認(rèn)同編程教育的重要性以及其逐漸滲透進(jìn)入教學(xué)體系內(nèi),該市場(chǎng)有望在未來(lái)5到10年內(nèi)發(fā)展成為一個(gè)千億級(jí)別的大市場(chǎng)。"
      },
      {
        "score":1,
        "statement":"這表明少兒編程教育具有巨大的發(fā)展?jié)摿涂臻g。"
      }
    ]
}
}

代碼實(shí)現(xiàn)如下:

/**
 * 答案忠實(shí)度評(píng)估器
 * 實(shí)現(xiàn)步驟:
 * 1. 將實(shí)際答案拆分成多個(gè)句子(事實(shí));
 * 2. 逐個(gè)分析每個(gè)句子(事實(shí))是否可歸因于給定的上下文;
 * 3. 根據(jù)每個(gè)句子(事實(shí))的得分,計(jì)算答案忠實(shí)度。
 * @param evaluateData 評(píng)估數(shù)據(jù)
 * @param evaluateLLM 評(píng)估 LLM
 * @returns
 */
asyncfunctionfaithfulnessEvaluator(evaluateData, evaluateLLM) {
// retrievedContext 檢索到的上下文
// answer 實(shí)際答案
// answerStatements 實(shí)際答案拆分出的多個(gè)句子(事實(shí))
const { retrievedContext, answer, answerStatements } = evaluateData;
let newStatements = [];
if (!answerStatements) {
    newStatements = awaitstatementSplit(answer, evaluateLLM);
  } else {
    newStatements = [...answerStatements];
  }
const allRes = [];
// 逐個(gè)分析每個(gè)句子(事實(shí))是否可歸因于給定的上下文
while (newStatements.length > 0) {
    const statement = newStatements.shift();
    const prompt = `
你是一個(gè)語(yǔ)言專家,你的任務(wù)是分析句子是否可歸因于給定的上下文。

說(shuō)明:
1. 如果句子不能歸因于上下文,則得分為0;
2. 如果句子能夠歸因于上下文,則得分為1;
3. 嚴(yán)格按以下JSON格式返回:{"score": "得分"},不能輸出其他無(wú)關(guān)內(nèi)容。

句子:
${statement}

上下文:
${retrievedContext.join('\n')}

回答:

`;
    const llmRes = await evaluateLLM.invoke(prompt);
    const data = formatToJson(llmRes);
    allRes.push({
      score: data?.score ? +data.score : 0,
      statement,
    });
    console.log('faithfulnessEvaluator: ', allRes);
  }
// 根據(jù)每個(gè)句子(事實(shí))的得分,計(jì)算答案忠實(shí)度
const score =
    allRes.reduce((score, cur) => {
      score += +cur.score;
      return score;
    }, 0) / allRes.length;
return {
    score,
    data: allRes,
  };
}

答案相關(guān)性評(píng)估器實(shí)現(xiàn)

衡量實(shí)際答案是否直接完整回答用戶問(wèn)題,排除冗余或跑題。取值在 0 到 1 之間,數(shù)值越高表示實(shí)際答案更直接完整回答用戶問(wèn)題。計(jì)算公式:答案相關(guān)性 = 與實(shí)際問(wèn)題相關(guān)的模擬問(wèn)題數(shù)量 / 實(shí)際答案推導(dǎo)出的模擬問(wèn)題總數(shù)量。例如,實(shí)際答案推導(dǎo)出 5 個(gè)模擬問(wèn)題,若其中 4 個(gè)與實(shí)際問(wèn)題相關(guān),則答案相關(guān)性為 0.8。

根據(jù)實(shí)際答案(answer)推導(dǎo)出多個(gè)模擬問(wèn)題(simulationQuestions)。

舉個(gè)例子:

{
  "answer": "根據(jù)提供的上下文信息,2024年少兒編程教育市場(chǎng)的規(guī)模約為488億元人民幣。從長(zhǎng)遠(yuǎn)來(lái)看,隨著越來(lái)越多家長(zhǎng)認(rèn)同編程教育的重要性以及其逐漸滲透進(jìn)入教學(xué)體系內(nèi),該市場(chǎng)有望在未來(lái)5到10年內(nèi)發(fā)展成為一個(gè)千億級(jí)別的大市場(chǎng)。這表明少兒編程教育具有巨大的發(fā)展?jié)摿涂臻g。",
  "simulationQuestions": [
    "2024年少兒編程教育市場(chǎng)的規(guī)模是多少?",
    "未來(lái)五年到十年,少兒編程教育市場(chǎng)規(guī)模預(yù)計(jì)能達(dá)到多少?",
    "為什么說(shuō)少兒編程教育有巨大的發(fā)展空間?"
  ]
}

代碼實(shí)現(xiàn)如下:

/**
 * 根據(jù)答案推導(dǎo)出多個(gè)模擬問(wèn)題
 * @param text 
 * @param evaluateLLM 
 * @returns 
 */
async function simulationQuestion(text, evaluateLLM) {
  const prompt = `
  你是一個(gè)語(yǔ)言專家,你的任務(wù)是根據(jù)以下答案的核心內(nèi)容來(lái)生成3個(gè)用戶可能問(wèn)的問(wèn)題。

  說(shuō)明:
  1. 嚴(yán)格按以下JSON格式返回:["問(wèn)題1", "問(wèn)題2", ...],不能輸出其他無(wú)關(guān)內(nèi)容。

  答案:
${text}

  回答:

  `;
  const res = await evaluateLLM.invoke(prompt);
  const data = formatToJson(res) || [];
  console.log('questions: ', data);
  return data;
}

逐個(gè)分析每個(gè)模擬問(wèn)題(simulationQuestions)是否與原問(wèn)題(question)相似并計(jì)算答案相關(guān)性(answerRelevance)。

舉個(gè)例子:

{
  "question":"預(yù)計(jì)2024年少兒編程教育市場(chǎng)規(guī)模是多少?未來(lái)潛力如何?",
"answer":"根據(jù)提供的上下文信息,2024年少兒編程教育市場(chǎng)的規(guī)模約為488億元人民幣。從長(zhǎng)遠(yuǎn)來(lái)看,隨著越來(lái)越多家長(zhǎng)認(rèn)同編程教育的重要性以及其逐漸滲透進(jìn)入教學(xué)體系內(nèi),該市場(chǎng)有望在未來(lái)5到10年內(nèi)發(fā)展成為一個(gè)千億級(jí)別的大市場(chǎng)。這表明少兒編程教育具有巨大的發(fā)展?jié)摿涂臻g。",
"simulationQuestions":[
    "2024年少兒編程教育市場(chǎng)的規(guī)模是多少?",
    "未來(lái)五年到十年,少兒編程教育市場(chǎng)規(guī)模預(yù)計(jì)能達(dá)到多少?",
    "為什么說(shuō)少兒編程教育有巨大的發(fā)展空間?"
],
"answerRelevance":{
    "score":1,
    "data":[
      {
        "score":1,
        "simulationQuestion":"2024年少兒編程教育市場(chǎng)的規(guī)模是多少?"
      },
      {
        "score":1,
        "simulationQuestion":"未來(lái)五年到十年,少兒編程教育市場(chǎng)規(guī)模預(yù)計(jì)能達(dá)到多少?"
      },
      {
        "score":1,
        "simulationQuestion":"為什么說(shuō)少兒編程教育有巨大的發(fā)展空間?"
      }
    ]
}
}

代碼實(shí)現(xiàn)如下:

/**
 * 答案相關(guān)性評(píng)估器
 * 實(shí)現(xiàn)步驟:
 * 1. 根據(jù)實(shí)際答案推導(dǎo)出多個(gè)模擬問(wèn)題;
 * 2. 逐個(gè)分析每個(gè)模擬問(wèn)題是否與原問(wèn)題相似;
 * 3. 根據(jù)每個(gè)模擬問(wèn)題的得分,計(jì)算答案相關(guān)性。
 * @param evaluateData 評(píng)估數(shù)據(jù)
 * @param evaluateLLM 評(píng)估 LLM
 * @returns
 */
asyncfunctionanswerRelevanceEvaluator(evaluateData, evaluateLLM) {
// question 問(wèn)題
// answer 實(shí)際答案
// simulationQuestions 根據(jù)實(shí)際答案推導(dǎo)出的多個(gè)模擬問(wèn)題
const { question, answer, simulationQuestions } = evaluateData;
let newSimulationQuestions = [];
if (!simulationQuestions) {
    newSimulationQuestions = awaitsimulationQuestion(answer, evaluateLLM);
  } else {
    newSimulationQuestions = [...simulationQuestions];
  }
const allRes = [];
// 逐個(gè)分析每個(gè)模擬問(wèn)題是否與原問(wèn)題相似
while (newSimulationQuestions.length > 0) {
    const simulationQuestion = newSimulationQuestions.shift();
    const prompt = `
你是一個(gè)語(yǔ)言專家,你的任務(wù)是分析模擬問(wèn)題和實(shí)際問(wèn)題是否相似。

說(shuō)明:
1. 如果模擬問(wèn)題與實(shí)際問(wèn)題不相似,則得分為0;
2. 如果模擬問(wèn)題與實(shí)際問(wèn)題相似,則得分為1;
3. 嚴(yán)格按以下JSON格式返回:{"score": "相似度"},不能輸出其他無(wú)關(guān)內(nèi)容。

模擬問(wèn)題:
${simulationQuestion}

實(shí)際問(wèn)題:
${question}

回答:

`;
    const llmRes = await evaluateLLM.invoke(prompt);
    const data = formatToJson(llmRes);
    allRes.push({
      score: data?.score ? +data.score : 0,
      simulationQuestion,
    });
    console.log('answerRelevanceEvaluator: ', allRes);
  }
// 根據(jù)每個(gè)模擬問(wèn)題的得分,計(jì)算答案相關(guān)性
const score =
    allRes.reduce((score, cur) => {
      score += +cur.score;
      return score;
    }, 0) / allRes.length;
return {
    score,
    data: allRes,
  };
}

答案正確性評(píng)估器實(shí)現(xiàn)

衡量實(shí)際答案的準(zhǔn)確性,需與參考答案對(duì)比。取值在 0 到 1 之間,數(shù)值越高表示實(shí)際答案與參考答案匹配度越高,準(zhǔn)確性也就越高。計(jì)算公式:答案準(zhǔn)確性 = 實(shí)際答案覆蓋的關(guān)鍵信息數(shù)量 / 參考答案中關(guān)鍵信息總數(shù)量。例如,參考答案需要 5 個(gè)關(guān)鍵信息,若實(shí)際答案覆蓋其中 4 個(gè)關(guān)鍵信息,則答案正確性為 0.8。

將參考答案(referenceAnswer)拆分成多個(gè)句子/關(guān)鍵信息(referenceAnswerStatements)。

舉個(gè)例子:

{
  "referenceAnswer": "2024年市場(chǎng)規(guī)模預(yù)計(jì)約488億人民幣,未來(lái)有望達(dá)到千億級(jí)別,顯示行業(yè)持續(xù)增長(zhǎng)的潛力。",
  "referenceAnswerStatements": [
    "2024年市場(chǎng)規(guī)模預(yù)計(jì)約488億人民幣。",
    "未來(lái)有望達(dá)到千億級(jí)別,顯示行業(yè)持續(xù)增長(zhǎng)的潛力。"
  ]
}

代碼實(shí)現(xiàn)如下:

/**
 * 將文本拆分為多個(gè)句子(關(guān)鍵信息)
 * @param text 待拆分的文本
 * @param evaluateLLM 拆分的 LLM
 * @returns
 */
async function statementSplit(text, evaluateLLM) {
  const prompt = `
  你是一個(gè)語(yǔ)言專家,你的任務(wù)是將以下文本拆分為多個(gè)獨(dú)立的句子,每個(gè)句子獨(dú)立表達(dá)一個(gè)完整含義,同時(shí)保留原意的邏輯連貫性。

  說(shuō)明:
  1. 嚴(yán)格按以下JSON格式返回:["句子1", "句子2", ...],不能輸出其他無(wú)關(guān)內(nèi)容。

  文本:
${text}

  回答:

  `;
  const res = await evaluateLLM.invoke(prompt);
  const data = formatToJson(res) || [];
  console.log('statements: ', data);
  return data;
}

逐個(gè)分析每個(gè)句子/關(guān)鍵信息(referenceAnswerStatements)是否可歸因于給定的實(shí)際答案(question)并計(jì)算答案正確性(answerCorrectness)。

舉個(gè)例子:

{
  "question":"預(yù)計(jì)2024年少兒編程教育市場(chǎng)規(guī)模是多少?未來(lái)潛力如何?",
"referenceAnswer":"2024年市場(chǎng)規(guī)模預(yù)計(jì)約488億人民幣,未來(lái)有望達(dá)到千億級(jí)別,顯示行業(yè)持續(xù)增長(zhǎng)的潛力。",
"referenceAnswerStatements":[
    "2024年市場(chǎng)規(guī)模預(yù)計(jì)約488億人民幣。",
    "未來(lái)有望達(dá)到千億級(jí)別,顯示行業(yè)持續(xù)增長(zhǎng)的潛力。"
]
"answerCorrectness":{
    "score":1,
    "data":[
      {"score":1,"statement":"2024年市場(chǎng)規(guī)模預(yù)計(jì)約488億人民幣。"},
      {
        "score":1,
        "statement":"未來(lái)有望達(dá)到千億級(jí)別,顯示行業(yè)持續(xù)增長(zhǎng)的潛力。"
      }
    ]
}
}

代碼實(shí)現(xiàn)如下:

/**
 * 答案正確性評(píng)估器
 * 實(shí)現(xiàn)步驟:
 * 1. 將參考答案拆分成多個(gè)句子(關(guān)鍵信息);
 * 2. 逐個(gè)分析每個(gè)句子(關(guān)鍵信息)是否可歸因于給定的實(shí)際答案;
 * 3. 根據(jù)每個(gè)句子(關(guān)鍵信息)的得分,計(jì)算答案正確性。
 * @param evaluateData 評(píng)估數(shù)據(jù)
 * @param evaluateLLM 評(píng)估 LLM
 * @returns
 */
asyncfunctionanswerCorrectnessEvaluator(evaluateData, evaluateLLM) {
// answer 實(shí)際答案
// referenceAnswer 參考答案
// referenceAnswerStatements 參考答案拆分出的多個(gè)句子(關(guān)鍵信息)
const { answer, referenceAnswer, referenceAnswerStatements } = evaluateData;
let newStatements = [];
if (!referenceAnswerStatements) {
    newStatements = awaitstatementSplit(referenceAnswer, evaluateLLM);
  } else {
    newStatements = [...referenceAnswerStatements];
  }
const allRes = [];
// 逐個(gè)分析每個(gè)句子(關(guān)鍵信息)是否可歸因于給定的實(shí)際答案
while (newStatements.length > 0) {
    const statement = newStatements.shift();
    const prompt = `
你是一個(gè)語(yǔ)言專家,你的任務(wù)是分析句子是否可歸因于給定的實(shí)際答案。

說(shuō)明:
1. 如果句子不能歸因于實(shí)際答案,則得分為0;
2. 如果句子能夠歸因于實(shí)際答案,則得分為1;
3. 嚴(yán)格按以下JSON格式返回:{"score": "得分"},不能輸出其他無(wú)關(guān)內(nèi)容。

句子:
${statement}

實(shí)際答案:
${answer}

回答:

`;
    const llmRes = await evaluateLLM.invoke(prompt);
    const data = formatToJson(llmRes);
    allRes.push({
      score: data?.score ? +data.score : 0,
      statement,
    });
    console.log('answerCorrectnessEvaluator: ', allRes);
  }
// 根據(jù)每個(gè)句子(關(guān)鍵信息)的得分,計(jì)算答案正確性
const score =
    allRes.reduce((score, cur) => {
      score += +cur.score;
      return score;
    }, 0) / allRes.length;
return {
    score,
    data: allRes,
  };
}

基礎(chǔ)版 RAG 系統(tǒng)評(píng)估

至此,我們基于 LLM-as-judge 自己實(shí)現(xiàn)了一套 RAG 系統(tǒng)評(píng)估系統(tǒng),下面我們通過(guò)該評(píng)估系統(tǒng)來(lái)評(píng)估基礎(chǔ)版 RAG 系統(tǒng)。

以下每一步的詳細(xì)代碼就不貼了,評(píng)估詳細(xì)代碼地址[2]:https://github.com/laixiangran/ai-learn/blob/main/src/app/rag/03_rag_evaluator/route.ts

準(zhǔn)備 QA 測(cè)試數(shù)據(jù)

這里我準(zhǔn)備了 20 個(gè) 測(cè)試 QA(含參考答案),QA 測(cè)試數(shù)據(jù)文件地址[3]:https://github.com/laixiangran/ai-learn/blob/main/src/app/data/qa_test_20.json

[
  ...
  {
    "question": "預(yù)計(jì)2024年少兒編程教育市場(chǎng)規(guī)模是多少?未來(lái)潛力如何?",
    "referenceAnswer": "2024年市場(chǎng)規(guī)模預(yù)計(jì)約488億人民幣,未來(lái)有望達(dá)到千億級(jí)別,顯示行業(yè)持續(xù)增長(zhǎng)的潛力。"
  },
  ...
]

知識(shí)庫(kù)構(gòu)建

文檔切分配置:

  • 用于分割文本的字符或字符串(separator):["\n\n", "\n", " ", ""];
  • 每個(gè)文本塊的最大字符數(shù)(chunk_size):500;
  • 文本塊之間的重疊字符數(shù)(chunk_overlap):50。

Embedding 模型:

  • nomic-embed-text。

代碼實(shí)現(xiàn)如下:

// 1. 文件解析
const docs = awaitloadPdf(
    'src/app/data/2024少兒編程教育行業(yè)發(fā)展趨勢(shì)報(bào)告.pdf'
  );

// 2. 文件切分
const texts = awaitsplitDocuments(docs);

// 3. 初始化向量模型和向量數(shù)據(jù)庫(kù),并將文檔存儲(chǔ)到向量數(shù)據(jù)庫(kù)
awaitaddDocuments(texts);

指標(biāo)評(píng)估

檢索上下文 TopK: 3;

評(píng)估 LLM: qwen2.5:14b(Ollama 部署)。

代碼實(shí)現(xiàn)如下:

// 單個(gè)指標(biāo)評(píng)估
asyncfunctionbathEvaluator(indexName: string) {
const evaluatorMap = {
    contextRecall: contextRecallEvaluator,
    contextRelevance: contextRelevanceEvaluator,
    faithfulness: faithfulnessEvaluator,
    answerRelevance: answerRelevanceEvaluator,
    answerCorrectness: answerCorrectnessEvaluator,
  };
const evaluator = evaluatorMap[indexName];
const inputPath = 'src/app/data/qa_test_20.json';
const outputPath = 'src/app/data/qa_test_20_base_evaluate.json';
const qaDatas = awaitreadJsonFile(inputPath);
const llm = initOllamaLLM('qwen2.5:14b');

const res = [];
while (qaDatas.length > 0) {
    const data = qaDatas.shift();
    if (!data.answer) {
      const { retrievedContext, answer } = awaitllmAnswerByQaData(
        data.question
      );
      data.retrievedContext = retrievedContext;
      data.answer = answer;
    }
    const evaluateRes = awaitevaluator(data, llm);
    res.push({
      ...data,
      [indexName]: evaluateRes,
    });
  }

// 將 LLM 回答結(jié)果保存到文件中
awaitsaveJsonFile(JSON.stringify(res), outputPath);

// 計(jì)算最終指標(biāo)數(shù)據(jù)
const score =
    res.reduce((score, cur) => {
      score += cur[indexName].score;
      return score;
    }, 0) / res.length;

return { [indexName]: +score.toFixed(1) };
}

// 指標(biāo)評(píng)估
const indexs = [
'contextRecall',
'contextRelevance',
'faithfulness',
'answerRelevance',
'answerCorrectness',
];
constdata: any = {};
while (indexs.length > 0) {
const indexName = indexs.shift() || '';
const indexRes = awaitbathEvaluator(indexName);
  data[indexName] = indexRes[indexName];
}

基礎(chǔ)版 RAG 系統(tǒng)(V1.0)各指標(biāo)的評(píng)估結(jié)果如下:

圖片

版本

優(yōu)化描述

上下文召回率(contextRecall

上下文相關(guān)性(contextRelevance

答案忠實(shí)度(faithfulness

答案相關(guān)性(answerRelevance

答案正確性(answerCorrectness

基礎(chǔ) RAG 系統(tǒng)(V1.0)

無(wú)

0.6

0.5

0.8

0.5

0.6

結(jié)語(yǔ)

至此,我們基于 LLM-as-judge 自己實(shí)現(xiàn)一套 RAG 系統(tǒng)評(píng)估系統(tǒng),用該評(píng)估系統(tǒng)評(píng)估了基礎(chǔ)版 RAG 系統(tǒng)(V1.0)的 5 個(gè)評(píng)估指標(biāo)的表現(xiàn),可以看到基礎(chǔ)版 RAG 系統(tǒng)(V1.0)這 5 個(gè)指標(biāo)的值都是偏低的,所以后面我將通過(guò)講解不同的優(yōu)化方法來(lái)提升基礎(chǔ)版 RAG 系統(tǒng)(V1.0)這 5 個(gè)指標(biāo),敬請(qǐng)期待。

引用鏈接

[1] 本文完整代碼地址: https://github.com/laixiangran/ai-learn/blob/main/src/app/rag/03_rag_evaluator/route.ts

[2] 評(píng)估詳細(xì)代碼地址: https://github.com/laixiangran/ai-learn/blob/main/src/app/rag/03_rag_evaluator/route.ts

[3] QA 測(cè)試數(shù)據(jù)文件地址: https://github.com/laixiangran/ai-learn/blob/main/src/app/data/qa_test_20.json

責(zé)任編輯:龐桂玉 來(lái)源: 燃哥講AI
相關(guān)推薦

2025-05-23 06:00:00

RAGAI人工智能

2025-05-23 02:00:00

RAGAI人工智能

2025-10-27 01:50:00

2024-09-10 08:26:40

2025-08-05 03:22:00

LLM系統(tǒng)語(yǔ)言模型

2024-03-04 00:05:00

人工智能LLM 評(píng)估

2024-06-18 14:01:17

2011-02-22 10:01:13

2011-03-22 16:45:00

2025-05-22 06:48:50

RAGAI應(yīng)用開(kāi)發(fā)框架DeepSeek

2025-10-14 09:22:48

2009-06-20 09:14:48

2022-09-01 16:58:52

DTW算法鴻蒙

2024-01-11 16:24:12

人工智能RAG

2024-05-10 14:35:56

人工智能大型語(yǔ)言模型

2024-05-27 00:45:00

2025-10-13 09:07:00

2011-01-13 16:59:12

2013-06-18 19:23:16

身份認(rèn)證管理身份認(rèn)證管理系統(tǒng)身份認(rèn)證

2013-06-19 09:46:57

身份認(rèn)證管理云應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

青青草国产成人a∨下载安卓| 91超碰免费在线| 久久国产精品色婷婷| 久久国产精品免费视频| 污污内射在线观看一区二区少妇| 黄色综合网址| 亚洲男人的天堂av| 狠狠色狠狠色综合人人| 中文字幕在线观看1| 欧美91大片| 亚洲欧美在线一区二区| 日本在线观看视频一区| 亚洲最新无码中文字幕久久| 国产精品久久看| 国产精品区一区二区三含羞草| 欧美日韩一二三四区| 五月久久久综合一区二区小说| 亚洲国产精品va在线观看黑人| 五月婷婷丁香色| jizzjizz中国精品麻豆| 中文字幕第一区二区| 国产综合第一页| 国产免费叼嘿网站免费| 久久只有精品| 欧美精品福利在线| 中文字幕无码日韩专区免费| 三级精品视频| 日韩欧美高清在线| 日本人视频jizz页码69| 国产伦理精品| 亚洲精品国产一区二区精华液| 欧美视频1区| 免费看国产片在线观看| 国产真实乱子伦精品视频| 热re91久久精品国99热蜜臀| 欧美激情一区二区视频| 欧美疯狂party性派对| 亚洲视频在线观看视频| 国产毛片毛片毛片毛片毛片毛片| 精品国产乱码久久久久久樱花| 日本高清不卡视频| 欧美日韩亚洲一| 国精产品一区一区三区mba下载| 国产精品久久看| 亚洲精品一区二区三区蜜桃久| 手机福利在线| 91视频免费观看| 国产中文一区二区| 五月激情丁香婷婷| 成人午夜在线播放| 福利视频久久| 亚洲爱爱综合网| 国产经典欧美精品| 97国产超碰| 亚洲精品一区二区三区蜜桃 | 国产午夜三级一区二区三| 国产午夜精品一区| 国产91绿帽单男绿奴| 国产成人免费在线观看| 99在线看视频| 隣の若妻さん波多野结衣| 国产成人av电影在线观看| 91传媒视频免费| 亚洲精品国产一区二| 国产91丝袜在线播放| www 成人av com| 欧美在线 | 亚洲| 91色porny在线视频| 久久这里精品国产99丫e6| 欧美视频综合| 中文字幕久久午夜不卡| 大桥未久一区二区| 青青草原av在线| 午夜欧美视频在线观看| 精品这里只有精品| 久久亚洲精品爱爱| 在线播放/欧美激情| www.久久com| 国内精品麻豆美女在线播放视频 | 日韩高清一二三区| 成人h动漫免费观看网站| 亚洲护士老师的毛茸茸最新章节| 欧美图片一区二区| 久久亚洲国产| 欧美国产日韩二区| 成人午夜淫片100集| 日韩成人免费在线| 91精品视频在线看| 无码精品视频一区二区三区| 亚洲国产精品成人综合色在线婷婷 | 一女被多男玩喷潮视频| 欧洲成人一区| 亚洲精品在线三区| 久久国产柳州莫菁门| 婷婷亚洲综合| 97在线视频一区| 又骚又黄的视频| 成人听书哪个软件好| 欧美日韩免费观看一区| www.在线视频| 日本二三区不卡| 麻豆传媒在线看| 精品一区毛片| 欧美第一页在线| 懂色av中文字幕| 国产高清在线观看免费不卡| 欧美在线视频二区| 在线观看wwwxxxx| 欧美最新大片在线看| 手机看片国产精品| 欧美综合另类| 97香蕉久久超级碰碰高清版 | 视频国产一区二区| 销魂美女一区二区三区视频在线| 亚洲www永久成人夜色| 久草视频视频在线播放| 亚洲一区二区精品久久av| 在线观看免费成人av| 久久国产精品免费精品3p| y97精品国产97久久久久久| 欧美三级韩国三级日本三斤在线观看 | 国产欧美一区二区三区视频在线观看| 91美女视频网站| av网站大全免费| 蜜桃精品一区二区三区| 自拍偷拍亚洲精品| 无码人妻丰满熟妇区bbbbxxxx| 成人一级片网址| 91看片淫黄大片91| 日本午夜免费一区二区| 亚洲欧美日韩一区二区在线| 亚洲精品在线观看av| 激情综合网av| 一区二区视频国产| 成人午夜一级| 一区二区三欧美| 91精品国产高清一区二区三密臀| 成人久久视频在线观看| 国产女人18毛片| 国产精品视频首页| 久久综合网hezyo| 又污又黄的网站| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 亚洲免费精彩视频| 日本一级淫片色费放| 成人美女在线观看| 人妻夜夜添夜夜无码av | 日韩视频在线观看一区二区| 日韩免费av一区| 美女视频黄 久久| 日韩欧美一区二区视频在线播放| 性欧美gay| 亚洲人永久免费| 中文字幕天堂在线| 国产精品色在线观看| 一级黄色特级片| 久久精品国产大片免费观看| 国产精品自产拍在线观看| 欧美日韩xx| 欧美一区日韩一区| 久草视频在线资源| 97久久精品人人澡人人爽| 免费成人午夜视频| 国产一区二区三区四区五区传媒| 国产精品欧美在线| 色多多视频在线观看| 欧美一区二区在线不卡| 超碰手机在线观看| 丁香六月综合激情| 黑森林福利视频导航| 欧美色图在线播放| 91久久精品久久国产性色也91| а√天堂在线官网| 精品粉嫩aⅴ一区二区三区四区| 欧美三级韩国三级日本三斤在线观看| 91蜜桃传媒精品久久久一区二区| 手机在线免费观看毛片| 婷婷综合在线| 精品久久久久亚洲| 国产成人精品一区二区三区免费| 久久亚洲精品毛片| 蜜臀av中文字幕| 日本精品免费观看高清观看| 久久爱一区二区| 丁香一区二区三区| 久草在在线视频| 欧美激情一级片一区二区| 国产日韩精品一区观看| 深夜视频一区二区| 美女精品视频一区| 欧美色图另类| 日韩一区二区三区观看| 在线观看国产亚洲| 中文字幕在线观看不卡| 午夜久久久久久久| 久久成人精品无人区| 日本人体一区二区| 日韩电影免费网址| 精品欧美国产一区二区三区不卡| 巨胸喷奶水www久久久免费动漫| 久久99青青精品免费观看| 无码国产色欲xxxx视频| 欧美精品第一页| 国产精品suv一区| 亚洲精品成人悠悠色影视| 国产又粗又猛又爽又黄av | 无码人妻精品一区二区三区温州| 久久成人18免费观看| 日日橹狠狠爱欧美超碰| 亚洲香蕉av| 欧美性大战久久久久| 99精品在免费线中文字幕网站一区| 国产精品99久久久久久久久| 色呦呦网站在线观看| 伊人伊成久久人综合网站| 四虎永久在线观看| 欧美大片在线观看| 国产精品久久久久久久免费看| 日韩欧美一区二区三区久久| 九九热国产在线| 国产精品久久看| 丰腴饱满的极品熟妇| 成人免费av在线| 丰满人妻一区二区三区53视频| 全部av―极品视觉盛宴亚洲| 亚洲 欧美 日韩 国产综合 在线| 亚洲综合小说| 一区二区三区观看| 青草国产精品| 日本在线视频不卡| 亚洲品质自拍| 久久久久免费网| 精品人人人人| 国产福利不卡| 99国产精品免费网站| 亚洲一区二区三区毛片| 日韩欧乱色一区二区三区在线| 国产成人鲁鲁免费视频a| 亚洲美女久久精品| 26uuu日韩精品一区二区| 国产资源在线观看入口av| 国产69精品99久久久久久宅男| 性欧美videos高清hd4k| 成年人精品视频| 在线观看电影av| 欧美精品www| 欧美日韩在线观看首页| 97超视频免费观看| 涩涩视频在线| 日韩av色在线| 日韩在线短视频| 国产精品高精视频免费| 日韩在线观看不卡| 国产精品自产拍在线观看中文| 深夜日韩欧美| 成人免费自拍视频| 精品视频国内| 国产精品久久久久久久小唯西川 | 日本va欧美va欧美va精品| 日韩av一二三四| 美腿丝袜亚洲一区| 欧美激情国内自拍| 岛国精品一区二区| 波多野结衣办公室33分钟| 久久久久国产精品麻豆ai换脸| 日本一级免费视频| 国产精品国产三级国产aⅴ原创| 五月天色婷婷丁香| 一区二区三区产品免费精品久久75| 久久这里只有精品国产| 精品福利在线观看| 中文字幕 人妻熟女| 91精品国产品国语在线不卡| www.天天干.com| 亚洲精品久久久久久久久久久久 | 中文字幕人成人乱码亚洲电影 | 丰满人妻av一区二区三区| 亚洲成人黄色在线| 免费国产在线观看| 久久天天躁日日躁| 激情黄产视频在线免费观看| 日韩美女在线观看| 精品午夜av| 欧美高清视频一区| 久久久久久免费视频| 青草视频在线观看视频| 久久婷婷亚洲| 久久久久久久久久久久久久久国产 | 欧美影院在线播放| 欧美一级网址| 国产精品视频一区二区三区经| 中日韩免视频上线全都免费| 一区在线电影| 一区二区动漫| а 天堂 在线| 久久久久久夜精品精品免费| 国产精品 欧美激情| 色综合亚洲欧洲| www.com在线观看| 中文精品99久久国产香蕉| 丁香高清在线观看完整电影视频| 日韩av电影免费观看高清| 精品国产亚洲一区二区三区| 蜜桃日韩视频| 黄色在线一区| 亚洲男人天堂av在线| 久久午夜老司机| 极品久久久久久| 欧美性xxxx极品hd满灌| av中文字幕观看| 亚洲午夜小视频| 欧美激情20| 国产精品免费一区二区三区观看| 欧美国产小视频| 国产激情在线观看视频| 成人av网站免费观看| 日韩视频中文字幕在线观看| 日本高清不卡一区| 午夜视频1000| 久久久噜久噜久久综合| 国产精品久久久久久久久久久久久久久| 鲁鲁狠狠狠7777一区二区| 好吊日精品视频| 色黄视频免费看| 国产精品白丝在线| 国产精品成人久久久| 亚洲欧美日韩在线一区| 高清在线视频不卡| 国产厕所精品在线观看| 欧美粗暴jizz性欧美20| 天天摸天天舔天天操| 国产精品伦一区| 黄色av一区二区| 亚洲丝袜av一区| 日韩精品一区二区三区| 久久久久久艹| 国产精品久久久久久模特| 国产精品久久久久久亚洲色 | 艳母动漫在线观看| 免费人成在线不卡| 成人在线手机视频| 在线看不卡av| 91在线高清| 国产精品久久网| 欧美jizz| 亚洲精品永久视频| 亚洲色图在线播放| 精品人妻一区二区三区换脸明星| 欧美成人免费全部| 日韩成人久久| h无码动漫在线观看| 粉嫩绯色av一区二区在线观看| 免费毛片在线播放免费| 精品国产一区二区精华| av电影免费在线看| 国内精品视频免费| 久久福利精品| 妖精视频在线观看免费| 7777精品久久久大香线蕉| www久久日com| 国产一级特黄a大片99| 亚洲免费在线| 永久免费毛片在线观看| 欧美精品一卡两卡| 欧美男男video| 久久艳妇乳肉豪妇荡乳av| 老牛嫩草一区二区三区日本 | 亚洲男人第一天堂| 97免费中文视频在线观看| 怕怕欧美视频免费大全| 亚洲 欧美 另类人妖| 亚洲欧美视频在线观看| 日韩一级中文字幕| 国产精品99久久99久久久二8| 99国产**精品****| 性农村xxxxx小树林| 91官网在线免费观看| 黄色av电影在线观看| 国产精品区免费视频| 日精品一区二区三区| 欧美成人精品欧美一级私黄| 精品电影一区二区| 99只有精品| 大伊香蕉精品视频在线| 久久久国产精华| 亚洲va天堂va欧美ⅴa在线| 日本免费久久高清视频| 香蕉久久网站| 在线精品一区二区三区| 欧美日韩精品免费观看视频 | 国产精品美女av| 亚洲欧美伊人| www.狠狠爱| 精品久久久久久久久久久久包黑料 | 亚洲精选免费视频| 男人天堂资源在线| 99影视tv| 开心九九激情九九欧美日韩精美视频电影 | 亚洲伦理在线观看| 日产精品久久久一区二区福利|