评估指标示例:RAG文档相关性

高级

这是一个Engineering、AI领域的自动化工作流,包含 26 个节点。主要使用 Set、Evaluation、GoogleSheets、ManualTrigger、Agent 等节点,结合人工智能技术实现智能自动化。 评估指标示例:RAG文档相关性

前置要求
  • Google Sheets API 凭证
  • OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "meta": {
    "instanceId": "bf40384a063e00f3b983f4f9bada22b57a8231a04c0fb48d363e26d7b0f2b7e7",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "86d6a658-f056-4434-9720-dfd3ca514cb3",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        420,
        20
      ],
      "parameters": {
        "color": 7,
        "width": 300,
        "height": 180,
        "content": "检查返回的文档是否与问题相关"
      },
      "typeVersion": 1
    },
    {
      "id": "90aac144-164f-4961-89f8-4b8402177202",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1220,
        -40
      ],
      "parameters": {
        "width": 200,
        "height": 500,
        "content": "## 工作原理"
      },
      "typeVersion": 1
    },
    {
      "id": "f3970d8c-b205-4348-b375-d919d2f56f94",
      "name": "便签4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -960,
        280
      ],
      "parameters": {
        "color": 7,
        "width": 220,
        "height": 220,
        "content": "读取[此测试数据集](https://docs.google.com/spreadsheets/d/1uuPS5cHtSNZ6HNLOi75A2m8nVWZrdBZ_Ivf58osDAS8/edit?gid=630157309#gid=630157309)中的问题"
      },
      "typeVersion": 1
    },
    {
      "id": "677b90c8-aa6f-4cc5-88df-d8e635b0bde2",
      "name": "当获取数据集行时",
      "type": "n8n-nodes-base.evaluationTrigger",
      "position": [
        -900,
        340
      ],
      "parameters": {
        "sheetName": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/1uuPS5cHtSNZ6HNLOi75A2m8nVWZrdBZ_Ivf58osDAS8/edit?gid=630157309#gid=630157309"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/1uuPS5cHtSNZ6HNLOi75A2m8nVWZrdBZ_Ivf58osDAS8/edit?gid=630157309#gid=630157309"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "bpr2LoSELMlxpwnN",
          "name": "Google Sheets account David"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "c381a3c3-12b6-44fe-a2ed-6adf6f997534",
      "name": "正在评估?",
      "type": "n8n-nodes-base.evaluation",
      "position": [
        -60,
        200
      ],
      "parameters": {
        "operation": "checkIfEvaluating"
      },
      "typeVersion": 4.6
    },
    {
      "id": "e1cf0122-c668-41d2-9316-a173d425d897",
      "name": "当收到聊天消息时",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -900,
        100
      ],
      "webhookId": "d53bc846-db11-446c-8436-9d25dc265663",
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "b521aa40-c8da-4485-b834-50a129c27d3c",
      "name": "匹配聊天格式",
      "type": "n8n-nodes-base.set",
      "position": [
        -680,
        340
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "93f89095-7918-45ad-aa74-a0bbcf0d5788",
              "name": "chatInput",
              "type": "string",
              "value": "={{ $json.question }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "d0170cbd-ba01-45db-a405-aec943bf1608",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -80,
        100
      ],
      "parameters": {
        "color": 7,
        "width": 150,
        "height": 260,
        "content": "仅在评估时计算指标,以降低成本"
      },
      "typeVersion": 1
    },
    {
      "id": "a21f98f0-25eb-44cc-a04a-33181d7e5288",
      "name": "返回聊天响应",
      "type": "n8n-nodes-base.noOp",
      "position": [
        220,
        340
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "fd8628a1-9f31-4f42-88df-b87eda7216ee",
      "name": "设置指标",
      "type": "n8n-nodes-base.evaluation",
      "position": [
        820,
        80
      ],
      "parameters": {
        "metrics": {
          "assignments": [
            {
              "id": "230589eb-34c8-4d10-9296-4a78d673077a",
              "name": "similarity",
              "type": "number",
              "value": "={{ $json.message.content.score }}"
            }
          ]
        },
        "operation": "setMetrics"
      },
      "typeVersion": 4.6
    },
    {
      "id": "eefe3a5a-722a-4cce-b84b-65c0520a225f",
      "name": "获取数据集",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -680,
        -620
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/1uuPS5cHtSNZ6HNLOi75A2m8nVWZrdBZ_Ivf58osDAS8/edit?gid=630157309#gid=630157309"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/1uuPS5cHtSNZ6HNLOi75A2m8nVWZrdBZ_Ivf58osDAS8/edit?gid=630157309#gid=630157309"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "bpr2LoSELMlxpwnN",
          "name": "Google Sheets account David"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "ea83d68c-f499-4864-918c-5ccaccf555a5",
      "name": "去除重复项",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        -460,
        -620
      ],
      "parameters": {
        "compare": "selectedFields",
        "options": {},
        "fieldsToCompare": "document_id"
      },
      "typeVersion": 2
    },
    {
      "id": "6bf59dc8-fe59-49cf-971f-e22dac5d0500",
      "name": "简单向量存储",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory",
      "position": [
        -240,
        -620
      ],
      "parameters": {
        "mode": "insert",
        "memoryKey": "rag_evaluation_demo",
        "clearStore": true
      },
      "typeVersion": 1.1
    },
    {
      "id": "66dd59b0-b2e4-43c9-b1f5-7f5a65568f5e",
      "name": "Embeddings OpenAI",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        -300,
        -400
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "Ag9qPAsY7lpIGkvC",
          "name": "JPs n8n openAI key"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "213b230d-0f40-4e71-b0bf-4783274e2cdb",
      "name": "默认数据加载器",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        -100,
        -380
      ],
      "parameters": {
        "options": {},
        "jsonData": "={{ $json.document_text }}",
        "jsonMode": "expressionData"
      },
      "typeVersion": 1
    },
    {
      "id": "64ec7e8c-63f9-4198-9e8d-61345c564c13",
      "name": "递归字符文本分割器",
      "type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
      "position": [
        -20,
        -220
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "c561f2ce-ef05-4f42-9b6e-6fabd12d6d23",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -980,
        -700
      ],
      "parameters": {
        "color": 7,
        "width": 1180,
        "height": 620,
        "content": "### 设置:填充向量数据库"
      },
      "typeVersion": 1
    },
    {
      "id": "4a7de6bd-17ac-40df-9b27-2d8f6fdbeb07",
      "name": "点击\"执行工作流\"时",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -900,
        -620
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "a0f6211f-6202-462c-8fa3-52e10ad89b5d",
      "name": "计算文档相关性指标",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        440,
        80
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini",
          "cachedResultName": "GPT-4O-MINI"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "=You are a teacher evaluating the relevance of student responses to questions.\n\nYou will be given a QUESTION and one or more FACTS provided by a student. Your task is to determine whether these FACTS are relevant to answering the QUESTION.\n\nGrading criteria:\n(1) Evaluate whether the provided FACTS contain information that is relevant to answering the QUESTION\n(2) A FACT is relevant if it contains keywords or concepts semantically related to the QUESTION\n(3) A FACT is relevant if it provides context, examples, or explanations that address any aspect of the QUESTION\n(4) A FACT may contain some unrelated information and still be considered relevant if it also contains information that satisfies criteria (2) or (3)\n\nScoring:\n- Score 1: At least one of the provided FACTS is relevant to the QUESTION\n- Score 0: All provided FACTS are completely unrelated to the QUESTION\n\nEvaluation process:\n1. Identify the key concepts and requirements in the QUESTION\n2. Examine each provided FACT for keywords or concepts related to these key elements\n3. Consider semantic relationships, not just exact keyword matches\n4. Determine if any FACT contributes useful information toward answering the QUESTION\n5. Provide your reasoning in a detailed, step-by-step manner first\n6. Then create a one-sentence summary of your reasoning\n7. Avoid stating your conclusion at the beginning of your extended reasoning\n\nOutput format:\n{\n  \"extended_reasoning\": \"<detailed step-by-step analysis of how you evaluated the relevance>\",\n  \"reasoning_summary\": \"<one sentence summary of your conclusion>\",\n  \"score\": <number: either 0 or 1>\n}\n\nExamples:\n\nQUESTION: \"What factors contributed to the fall of the Roman Empire?\"\nFACTS: \"The Roman Empire fell due to economic problems, military failures, and political corruption. Germanic tribes invaded from the north while the empire was weakened.\"\nEVALUATION: This would receive a score of 1 because the facts directly address causes of the Roman Empire's fall.\n\nQUESTION: \"What factors contributed to the fall of the Roman Empire?\"\nFACTS: \"The Pythagorean theorem states that a² + b² = c² in a right triangle. Jupiter is the largest planet in our solar system.\"\nEVALUATION: This would receive a score of 0 because neither fact relates to the Roman Empire or its fall."
            },
            {
              "content": "=QUESTION: {{ $('When fetching a dataset row').item.json.question }}\n\nFACTS: \n{{ $json.documents }}"
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "id": "Ag9qPAsY7lpIGkvC",
          "name": "JPs n8n openAI key"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "b01d3427-4907-4715-8c15-669500012f89",
      "name": "AI 代理",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -420,
        200
      ],
      "parameters": {
        "options": {
          "systemMessage": "You are a helpful assistant. Answer the user's questions using information from your vector knowledge base only.",
          "returnIntermediateSteps": true
        }
      },
      "typeVersion": 1.9
    },
    {
      "id": "97e2db38-0114-449f-bb41-0ab490fc7327",
      "name": "OpenAI 聊天模型",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -480,
        440
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "Ag9qPAsY7lpIGkvC",
          "name": "JPs n8n openAI key"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "5b3679ab-b0a6-4461-9276-89eddb16f699",
      "name": "提取文档",
      "type": "n8n-nodes-base.set",
      "position": [
        220,
        80
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "2d771c52-6637-4af0-9ff7-c87368041bfd",
              "name": "documents",
              "type": "string",
              "value": "={{ $json.intermediateSteps.filter(x => x.action.tool == 'vector_knowledge_base')[0].observation }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "0e4c4512-7b9f-4881-8ac7-4c7c24a4a446",
      "name": "简单向量存储1",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory",
      "position": [
        -260,
        440
      ],
      "parameters": {
        "mode": "retrieve-as-tool",
        "toolName": "vector_knowledge_base",
        "memoryKey": "rag_evaluation_demo",
        "toolDescription": "Source of all knowledge to work with"
      },
      "typeVersion": 1.1
    },
    {
      "id": "edde6c75-dea5-46cc-937e-68e4a925559b",
      "name": "OpenAI 嵌入1",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        -220,
        620
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "Ag9qPAsY7lpIGkvC",
          "name": "JPs n8n openAI key"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "e23289e7-a769-4aae-82e6-b7f9e6d903f0",
      "name": "便签6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -980,
        -40
      ],
      "parameters": {
        "color": 7,
        "width": 2000,
        "height": 820,
        "content": "### 主工作流"
      },
      "typeVersion": 1
    },
    {
      "id": "c90baefc-22bd-4782-a8eb-236bfb1d2751",
      "name": "便签5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -440,
        120
      ],
      "parameters": {
        "color": 7,
        "width": 300,
        "height": 200,
        "content": "确保在代理中启用\"返回中间步骤\",以获取已执行工具列表"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "AI Agent": {
      "main": [
        [
          {
            "node": "Evaluating?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Evaluating?": {
      "main": [
        [
          {
            "node": "Extract documents",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Return chat response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get dataset": {
      "main": [
        [
          {
            "node": "Remove Duplicates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings OpenAI": {
      "ai_embedding": [
        [
          {
            "node": "Simple Vector Store",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Extract documents": {
      "main": [
        [
          {
            "node": "Calculate doc relevance metric",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Match chat format": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Remove Duplicates": {
      "main": [
        [
          {
            "node": "Simple Vector Store",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings OpenAI1": {
      "ai_embedding": [
        [
          {
            "node": "Simple Vector Store1",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Default Data Loader": {
      "ai_document": [
        [
          {
            "node": "Simple Vector Store",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "Simple Vector Store1": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When fetching a dataset row": {
      "main": [
        [
          {
            "node": "Match chat format",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate doc relevance metric": {
      "main": [
        [
          {
            "node": "Set metrics",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Recursive Character Text Splitter": {
      "ai_textSplitter": [
        [
          {
            "node": "Default Data Loader",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Execute workflow’": {
      "main": [
        [
          {
            "node": "Get dataset",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

这是一个高级难度的工作流,适用于Engineering、AI等场景。适合高级用户,包含 16+ 个节点的复杂工作流

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量26
分类2
节点类型16
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

外部链接
在 n8n.io 上查看 →

分享此工作流