鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

Dify端到端精准度测试

  1. 进入accuracy-test目录。
    cd KunpengRAG/test-utils/accuracy-test
  2. 导入数据准备中下载的知识库数据。

  3. 配置Dify工作流。

    1. “开始”结点必须设置输入变量,命名为“question”:

    2. “知识检索”节点选择用户需要的知识库。
    3. LLM prompt中建议使用如下配置。
      你是一个乐于助人的聊天助手,能够根据你拥有的回答用户的问题。
      在<context></context> XML标签中,使用以下上下文作为您学习的知识。
      <context>
      {#context#} #此处为工作流中上下文参数
      </context>
      回答用户时:
      -如果你不知道,就说你不知道。
      -如果你不知道什么时候你不确定,要求澄清。
      避免提及您从上下文中获取的信息。
      并根据用户提问的语言回答。
      提供你的答案时,以如下的JSON格式给出回复:
      {
      "answer": "你的答案"
      }
      问题:
      {开始/(x) question} #此处为工作流中问题参数
    4. “结束结点”必须设置两个输出变量。第一个变量命名为“text”,变量值设置为“LLM/test”(变量值为LLM的回答);第二个变量命名为“context”,变量值设置为“知识检索/result”(变量值为知识检索的结果)。

  4. 配置RAG LLM答案生成脚本run_rag_workflow.sh中的参数,输出ragas精准度测试工具所需要的数据文本格式。脚本路径为“KunpengRAG/test-utils/accuracy-test/run_rag_workflow.sh”
    # 指定rag workflow的endpoint
    # rag_url="http://{dify部署IP}/v1/workflows/run" for dify
    # rag_url="http://{ragflow部署IP}/api/v1/agents/{agent_id}/sessions" for ragflow
    rag_url=""
    # 指定测试组名称,根据用户需求自行定义,无强制要求
    title="test1"
    # 指定模型类型(dify_workflow/ragflow_workflow)
    rag_type="dify_workflow"
    # 指定api key
    api_key="app-xxx"
    # 指定精准度测试集文件路径
    dataset_path="/xxx/test.json"
    # 指定运行过程(generate/evaluate)
    process="generate"
    # 指定结果保存路径
    save_dir=""

    进入Dify前端页面,依此单击工作室 > 创建空白应用(工作流) > 进入应用 > 访问API > API密钥 > 创建密钥获取api_key。

  5. 运行“KunpengRAG/test-utils/accuracy-test/run_rag_workflow.sh”脚本。
    ./run_rag_workflow.sh

    获取4中配置的“save_dir/title/result”目录中的evalset.json文件,此文件为使用传入的精准度测试集进行LLM问答后用于测评精准度的测试集。

    以下为测评测试集示例,字段说明如表1所示。

    表1 测评测试集字段说明

    字段

    说明

    user_input

    用户提问的问题,作为被测RAG应用的输入,来自测试集。

    response

    RAG回答,被测RAG应用结合prompt模板、用户输入、检索上下文,生成的回答。

    reference

    标准答案,对于用户输入的标准答案,来自测试集。

    retrieved_contexts

    检索上下文,被测RAG利用用户输入,从知识库中检索得出的相关上下文。上下文可能有1个或多个。

  6. 配置RAG LLM精准度测评脚本eval_rag_metrics.sh中的参数,输出ragas精准度测试工具所需要的数据文本格式。脚本路径为“KunpengRAG/test-utils/accuracy-test/eval_rag_metrics.sh”
    # 指定测试组名称和对应测试集路径,可包含一个或多个evalset脚本, 该测试集为步骤5生成的evalset.json文件
    declare -A evalset_dict=(
        ["test1"]="/xxx/evalset1.json" 
        ["test2"]="/xxx/evalset2.json"
    )
    # 指定测试指标组,精准度测评指标"ff" "ss" "rr" "cr" "fc",可以对单个或多个指标同时测评
    metrics=("rr" "ss")
    # 指定评测器LLM名称
    eval_llm_model=""
    # 指定评测器LLM endpoint, LLM问答访问url
    eval_llm_url="http://LLM模型部署机器IP:PORT/v1/chat/completions"
    # 指定评测器embedding endpoint,embedding模型问答访问url
    eval_embed_url="http://embedding模型部署机器IP:PORT/v1/embeddings"
    # 指定结果保存路径
    save_dir=""
    测评指标选项如表2所示。
    表2 测评指标选项说明

    选项

    指标名

    对应ragas.metrics中的指标

    涉及模型

    fc

    事实正确性

    FactualCorrectness

    LLM

    ss

    回答语义相似性

    SemanticSimilarity

    Embedding

    rr

    回答相关性

    ResponseRelevancy

    LLM & Embedding

    cp

    基于LLM的参考上下文精度

    LLMContextPrecisionWithReference

    LLM

    cr

    基于LLM的上下文召回率

    LLMContextRecall

    LLM

    ff

    回答忠实性

    Faithfulness

    LLM

    模型涉及到的参数:

    • LLM:需要“eval_llm_url”“eval_llm_model”
    • Embedding:需要“eval_embed_url”
  7. 运行“KunpengRAG/test-utils/accuracy-test/eval_rag_metrics.sh”脚本。
    ./eval_rag_metrics.sh

    进入“save_dir”目录查看结果:

    1. summary目录:包含各评测组的各个指标的总分。
    2. log目录:包含各评测组的各个指标的评测日志。
    3. “<评测组标识名>_<指标名>”目录:该目录下的scores.json文件记录了单个数据的评测分数。