精品欧美一区二区三区在线观看 _久久久久国色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)

日韩精品电影在线| 国产调教一区二区三区| 亚洲成av人片在线观看无码| 精品国产一区二区三区麻豆小说| 久久艹免费视频| 日韩精品2区| 日韩色视频在线观看| 国产不卡一区二区视频| 国产精品99999| 国产美女一区二区三区| 2021国产精品视频| 中文字幕无码日韩专区免费| 精品伊人久久久| 欧美日韩国产区一| 无罩大乳的熟妇正在播放| 最新国产在线观看| 9久草视频在线视频精品| 国产精品自在线| 日韩视频免费观看高清| 热久久天天拍国产| 日韩成人在线播放| 久久精品国产露脸对白| 极品美女一区| 亚洲国产日韩av| 亚洲综合第一| 久久精品国产亚洲a∨麻豆| 国产麻豆精品在线| 国产精品久久久久久av福利| 日本熟妇色xxxxx日本免费看| 色天天久久综合婷婷女18| 亚洲国产精品福利| 毛片毛片毛片毛片毛| 成人全视频免费观看在线看| 色综合色综合色综合| 日韩av高清在线看片| yellow91字幕网在线| 亚洲国产精品成人综合| 久久综合一区二区三区| 成人午夜免费福利| 国产精品1024| 91在线网站视频| 国产精品久久久国产盗摄| 久久久久久9| 欧美在线视频网站| 在线观看国产亚洲| 亚洲国产精品第一区二区| 欧美日韩不卡合集视频| 在线观看美女av| 天堂美国久久| 久久亚洲影音av资源网 | 国产成人在线中文字幕| 91精品一区二区三区在线观看| 性猛交ⅹ×××乱大交| 国产91欧美| 8x8x8国产精品| 中文字幕一区二区在线观看视频| 久久三级毛片| 7777精品伊人久久久大香线蕉经典版下载 | 国产成人精品视频在线观看| 四虎成人在线观看| 久久精品国语| 国产精品私拍pans大尺度在线 | 秋霞av亚洲一区二区三| 日本一区二区不卡| 久久这里只有精品9| 老司机精品视频导航| 91精品国产综合久久男男| 国产xxxx孕妇| 99re热这里只有精品视频| 欧美一级爱爱| 五月天婷婷在线视频| 亚洲视频一区二区在线| 成人在线免费高清视频| √天堂8资源中文在线| 色综合天天综合狠狠| 一级黄色香蕉视频| 亚洲综合在线电影| 欧美日本不卡视频| 免费黄色a级片| 欧美黄色录像| 日韩在线欧美在线| 全网免费在线播放视频入口| 在线不卡视频| 国产成人一区二| 国产精品怡红院| 成人av资源网站| 日本10禁啪啪无遮挡免费一区二区 | 超碰10000| 中文av在线全新| 欧美二区乱c少妇| 污污污www精品国产网站| 精品久久中文| 欧美精品精品精品精品免费| 在线视频精品免费| 国产成人免费在线视频| 欧洲亚洲一区二区| 七七成人影院| 欧美色偷偷大香| 这里只有精品在线观看视频| 日韩一区电影| 97视频人免费观看| 国产精品视频一二区| 成人h动漫精品一区二| 伊人久久大香线蕉午夜av| www在线看| 欧美精品久久99久久在免费线| 一级黄色片毛片| 天天综合一区| 国产91免费观看| 亚洲欧美另类一区| 国产精品超碰97尤物18| 岳毛多又紧做起爽| 中文在线综合| 按摩亚洲人久久| 免费看污视频的网站| 不卡的av网站| 日韩一级特黄毛片| 伊人久久综合网另类网站| 亚洲精品视频网上网址在线观看| 2021亚洲天堂| 国内精品国产成人| 亚洲精品成人久久久998| 九色porny丨国产首页在线| 欧美一区日本一区韩国一区| 东京热无码av男人的天堂| 免播放器亚洲| 国内不卡一区二区三区| 天天色天天射天天综合网| 欧美另类变人与禽xxxxx| 91视频在线网站| 羞羞答答国产精品www一本| 成人情视频高清免费观看电影| 黄网站在线播放| 欧美日韩精品高清| 日本爱爱爱视频| 日韩精品视频网| 蜜桃传媒视频麻豆第一区免费观看| 免费网站在线观看人| 91精品婷婷国产综合久久性色| 女人裸体性做爰全过| 日韩二区三区四区| 少妇特黄a一区二区三区| 欧美成人性网| 亚洲欧美制服丝袜| 波多野结衣在线电影| 久久一区二区三区四区| 亚洲爆乳无码专区| 最新亚洲精品| 国产精品成人国产乱一区| 国产精品久久久久一区二区国产| 日本韩国精品在线| 男人的天堂官网| 看片的网站亚洲| 9l视频自拍9l视频自拍| 久久九九精品视频| 欧美极品少妇与黑人| 六月丁香综合网| 精品美女国产在线| www.av欧美| 免费看黄色91| 久久久国产精华液999999| 国产日韩欧美中文在线| 欧美高清在线播放| 天天干,夜夜操| 91成人免费网站| 三级黄色免费观看| 成人一区二区三区中文字幕| 国产中文字幕在线免费观看| 久久91麻豆精品一区| 国产日韩欧美自拍| 手机在线免费看av| 日韩电影中文字幕av| 亚洲精品无码久久久久| 亚洲美腿欧美偷拍| 国产xxxx视频| 青草av.久久免费一区| 超级碰在线观看| 日韩高清三区| 国产精品亚洲美女av网站| 2024最新电影免费在线观看| 亚洲国产精品电影| 特级西西444www大胆免费看| 亚洲欧美欧美一区二区三区| 捆绑凌虐一区二区三区| 日韩成人免费看| 欧美一级爱爱视频| 欧美老女人另类| 91视频婷婷| 成人爱爱网址| 欧美成人一区二区三区电影| 日韩黄色影片| 欧美一区二区三区爱爱| 中文字幕第四页| 亚洲天堂久久久久久久| 国产男女猛烈无遮挡a片漫画 | h视频在线观看免费| 日韩一区二区麻豆国产| 日本视频在线观看免费| 亚洲欧美另类图片小说| 波多野结衣 在线| 国产高清成人在线| 欧美伦理片在线看| 在线精品一区| 日本xxxxx18| 欧美另类69xxxxx| 精品国产福利| 玖玖精品一区| 国产精品一区久久久| 亚洲性色av| 欧美激情免费观看| 麻豆网站视频在线观看| 国产亚洲人成a一在线v站| 亚洲精品18在线观看| 91精品国产综合久久蜜臀| 国产又粗又猛又黄视频| 精品久久久久久国产91| 青娱乐国产精品| 日韩毛片视频在线看| 日本少妇xxxxx| 91视频在线看| 韩国三级hd两男一女| 国产一区二区影院| 一个色综合久久| 青青草精品视频| 不要播放器的av网站| 国产亚洲精品v| 国产男女免费视频| 禁久久精品乱码| 日韩精品综合在线| 午夜精品av| 日本一本草久p| 中文字幕一区二区av| 亚洲欧美日韩综合一区| av亚洲免费| 日韩jizzz| 精品久久久亚洲| 日韩激情视频| 精品不卡一区| 日韩电影免费观看高清完整| 亚洲人挤奶视频| 欧美精品免费观看二区| 亚洲国产网址| 日本一区二区不卡高清更新| 国产一区二区三区四区大秀| 欧美精品一区二区视频| 亚洲素人在线| 日本一区视频在线| 精品日产免费二区日产免费二区| 欧美污视频久久久| 欧美一区二区三区激情视频| 色综合电影网| 我不卡影院28| 成人一区二区av| 亚洲综合婷婷| www.欧美黄色| 国产欧美一区二区色老头| 中国丰满人妻videoshd| 久久国产精品久久w女人spa| 国产视频在线视频| 久久av资源网| av影片在线播放| 91日韩精品一区| 亚洲午夜久久久久久久国产| 日韩理论片在线| 久草资源在线视频| 色综合中文字幕国产| 日韩久久久久久久久久| 欧美一区二区视频在线观看2020 | 69成人免费视频| 欧美午夜影院一区| aaa一区二区| 日韩电影中文字幕在线观看| 福利视频在线播放| 九九精品在线视频| 在线观看爽视频| 国产成人精品日本亚洲专区61| 亚洲伦理一区二区| 精品国产免费久久久久久尖叫| 国内黄色精品| 成人国产在线看| 天堂一区二区在线免费观看| 亚洲第一成肉网| 91网站在线播放| 三级黄色录像视频| 午夜精品在线视频一区| 成人一二三四区| 欧美xxxxxxxx| 亚洲成人三级| 色综合久久88| 国产成人午夜性a一级毛片| 粉嫩av四季av绯色av第一区| 成人在线电影在线观看视频| 久久久久久久9| 秋霞午夜av一区二区三区| 97中文字幕在线观看| 欧美国产一区视频在线观看| 免费人成视频在线| 欧美综合亚洲图片综合区| 国模无码一区二区三区| 中文字幕亚洲欧美一区二区三区 | 国产视频福利一区| 色狼人综合干| 国产精品久久久久久久久电影网| 丝袜亚洲另类欧美综合| 2025中文字幕| 亚洲欧洲日韩综合一区二区| 国产成人无码av| 亚洲第一区中文字幕| 看女生喷水的网站在线观看| 日本欧美精品在线| 九色丨蝌蚪丨成人| 日韩精品福利片午夜免费观看| 日本系列欧美系列| 国产精品无码久久久久一区二区| 一区二区三区免费网站| 91精品国自产| 国产一区二区动漫| 电影在线观看一区| 91超碰在线电影| 午夜精品毛片| 久久人人爽av| 国产精品色一区二区三区| 69成人免费视频| 日韩国产欧美精品在线 | 国产精品mp4| 日韩精选在线| 缅甸午夜性猛交xxxx| 国产精品1区二区.| 中文字幕另类日韩欧美亚洲嫩草| 欧美午夜电影网| 二区三区在线播放| 欧洲午夜精品久久久| 丝袜连裤袜欧美激情日韩| 霍思燕三级露全乳照| 成人听书哪个软件好| 免费三片在线播放| 欧美成人伊人久久综合网| 成人av免费| 亚洲影视九九影院在线观看| 国产精品久久久久久久久久10秀 | av动漫在线播放| 国产激情视频一区二区三区欧美| 在线观看成人毛片| 精品久久久久久亚洲综合网 | 国产露出视频在线观看| 国产成人综合av| 俺要去色综合狠狠| 日本黄色的视频| 一区二区三区四区五区视频在线观看 | 日韩不卡一二三区| 中国1级黄色片| 欧美精品tushy高清| 黄色在线视频网站| 91沈先生播放一区二区| 亚洲天堂成人| 大又大又粗又硬又爽少妇毛片| 在线中文字幕不卡| 国产成人在线视频免费观看| 999国内精品视频在线| 影音先锋日韩资源| 五级黄高潮片90分钟视频| 色婷婷综合久久久久中文一区二区 | 日本一区二区三区精品| 国产一区二区三区视频在线观看| 韩国精品视频在线观看| av不卡在线免费观看| 成人a免费在线看| 无码人妻精品一区二区50| 日韩中文字幕免费视频| 日韩三级久久| 日韩av黄色网址| 国产精品第一页第二页第三页| 99久久精品国产一区二区成人| 午夜精品理论片| 欧美日韩精品一区二区视频| 日韩欧美色视频| 欧美日韩在线影院| 黄色在线视频网站| 国产在线一区二区三区四区| 奇米影视一区二区三区小说| www.av视频| 亚洲欧美三级在线| 日本一区二区乱| 人妻有码中文字幕| 亚洲日本一区二区| 日韩av地址| 亚洲www视频| 久久青草久久| 免费在线观看日韩| 在线观看精品国产视频| 一区二区三区视频免费视频观看网站| 99色精品视频| 亚洲精品中文在线观看| 国产高清免费在线播放| 国产精品18毛片一区二区| 人人爽香蕉精品| 日韩三级av在线| 欧美猛少妇色xxxxx| 欧美色图激情小说| 亚洲欧美日韩中文字幕在线观看|