---
title: Dify端到端精准度测试
description: "1. 进入accuracy-test目录。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengrag/bestpractice/kunpengrag_21_0077.html
sourcePath: /source/zh/kunpengrag/bestpractice/kunpengrag_21_0077.html
indexId: 38ecea2946d14a8b498b4e6d1b246be8ea01d003b350d12909fa6bd25aeaac3f58
---
# Dify端到端精准度测试

1. 进入accuracy-test目录。

```
cd KunpengRAG/test-utils/accuracy-test
```


2. 导入数据准备中下载的知识库数据。
3. 配置Dify工作流。

  a. “开始”结点必须设置输入变量，命名为“question”：
  b. “知识检索”节点选择用户需要的知识库。
  c. LLM prompt中建议使用如下配置。

```
你是一个乐于助人的聊天助手，能够根据你拥有的回答用户的问题。
在<context></context> XML标签中，使用以下上下文作为您学习的知识。
<context>
{#context#} #此处为工作流中上下文参数
</context>
回答用户时：
-如果你不知道，就说你不知道。
-如果你不知道什么时候你不确定，要求澄清。
避免提及您从上下文中获取的信息。
并根据用户提问的语言回答。
提供你的答案时，以如下的JSON格式给出回复：
{
"answer": "你的答案"
}
问题：
{开始/(x) question} #此处为工作流中问题参数
```


  d. “结束结点”必须设置两个输出变量。第一个变量命名为“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”目录查看结果：

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