【n8n教程】:掌握工作流评估(Evaluation),让你的AI自动化更可靠

你是否遇到过这样的困境?你精心设计了一个AI工作流,但不确定它在各种场景下是否都能可靠地工作。生产环境中某些边界情况可能会导致意想不到的错误,而你却无从知晓。

n8n的评估(Evaluation)功能正是为了解决这个问题。它让你能够像测试代码一样测试AI工作流,通过数据集反复验证工作流的质量,从而建立对工作流性能的信心。

🎯 评估是什么?为什么需要它?

核心概念

评估是通过运行测试数据集来检验AI工作流可靠性的技术。它的基础是准备多个测试用例,将输入数据输入工作流,然后检查输出结果。

为什么AI工作流需要评估?

传统代码是确定性的——给定相同的输入,总是返回相同的输出。但大语言模型(LLM)不同:

评估能为你做什么?


📊 两种评估模式对比

n8n提供了两种评估模式,适应工作流的不同阶段:

特性轻量级评估(开发阶段)基于指标的评估(生产阶段)
适用计划社区版、付费版Pro/企业版
数据集规模小(5-10个测试用例)大(数十到数百个测试用例)
验证方式视觉对比结果自动计算数值指标(0-5分)
何时使用工作流开发迭代阶段生产部署后持续监控
时间投入低(快速查看结果)中等(设置指标计算)
最佳场景快速原型和优化质量追踪和回归测试

轻量级评估

用于开发阶段。你准备5-10个代表性的测试用例,一个一个运行通过工作流,手动查看输出结果,与预期结果进行视觉对比。这种方式快速、直观,适合快速迭代。

基于指标的评估

用于生产阶段。当你的数据集变大时(可能来自实际生产执行),手工检查每个结果变得不现实。此时,你可以定义一些自动评分指标(比如"输出类别是否与预期匹配"),让系统自动计算每个测试用例的得分。


🚀 轻量级评估:快速上手指南

轻量级评估是最容易入门的方式。让我们通过一个支持工单分类的例子来学习。

第一步:准备测试数据集

首先,创建一个包含测试用例的数据源。你可以使用:

在数据源中创建三列:

ticket_text(输入)expected_category(预期输出)ai_response(实际输出 - 初始为空)
"我无法登录我的账户""Technical"
"请更新我的计费地址""Billing"
"我想要暗黑模式功能""Feature Request"
"如何重置我的密码?""General Inquiry"

重点ai_response列初始时是空的。评估运行完毕后,n8n会自动填充这一列。

第二步:在工作流中插入评估触发器

  1. 1. 打开你的n8n工作流编辑器
  2. 2. 在工作流中添加一个**"Evaluation Trigger"**节点
  3. 3. 配置数据源:
    • • 选择数据表或Google Sheets
    • • 指定包含测试数据的范围

每次"Evaluate All"运行时,这个触发器会逐行输出数据集中的每一条数据。

第三步:连接你的AI工作流逻辑

  1. 1. 从Evaluation Trigger连接到你的AI节点(比如OpenAI Chat、Gemini等)
  2. 2. 使用表达式引用输入数据:{{ $json.ticket_text }}
  3. 3. 确保AI节点能接收并处理这个输入

示例提示词:


    
    
    
  你是一个支持工单分类专家。分析以下工单,并分配合适的类别。

工单内容:{{ $json.ticket_text }}

类别选项:Technical(技术问题)、Billing(计费问题)、Feature Request(功能请求)、General Inquiry(常见问题)

用JSON格式回复,包含"category"字段。

第四步:将输出写回数据集

  1. 1. 在AI节点后添加**"Set Outputs"**节点(Evaluation操作)
  2. 2. 配置映射关系:将AI节点的输出映射到数据集的ai_response
  3. 3. 这样,每个测试用例的结果都会被记录下来

配置示例:


    
    
    
  From Field: message(AI节点的输出字段)
To Field: ai_response(数据集中用于存储结果的列)

第五步:运行评估并查看结果

  1. 1. 点击Evaluation Trigger节点旁边的**"Evaluate All"**按钮
  2. 2. n8n会依次运行每个测试用例,并将结果写入数据集
  3. 3. 打开数据集(数据表或Google Sheets),查看ai_response列是否有了结果
  4. 4. 手动对比每个结果与expected_category,看是否符合预期

示例结果:


    
    
    
  ticket_text: "我无法登录我的账户"
expected_category: "Technical"
ai_response: {"category": "Technical"}  ✅ 正确

ticket_text: "请更新我的计费地址"
expected_category: "Billing"
ai_response: {"category": "Billing"}  ✅ 正确

📈 基于指标的评估:生产级监控

当你的数据集成长为数十甚至数百个测试用例时,手工检查变得不可行。此时,使用指标来自动评分就显得尤为重要。

第一步:基于轻量级评估进行设置

首先完成轻量级评估的所有步骤。基于指标的评估建立在它的基础之上。

第二步:添加指标计算

在"Set Outputs"节点之后,添加一个**"Set Metrics"**节点(Evaluation操作)。

n8n提供了几种预定义指标:

1. 正确性(Correctness)- 基于AI

2. 有用性(Helpfulness)- 基于AI

3. 字符串相似度(String Similarity)

4. 分类匹配(Categorization)

5. 工具使用(Tools Used)

自定义指标

你也可以通过代码节点自定义指标:


    
    
    
  // 自定义示例:评估文本长度是否在合理范围内
const
 responseLength = $json.ai_response.length;
return
 {
  length_in_range
: responseLength > 50 && responseLength < 500 ? 1 : 0,
  confidence_score
: Math.min(responseLength / 500, 1)
};

第三步:配置指标

在"Set Metrics"节点中:

  1. 1. 选择要使用的指标类型
  2. 2. 指定参考输出的字段(如果需要)
  3. 3. 配置指标名称和权重

配置示例(支持工单分类):


    
    
    
  指标1:分类匹配
  - 比较字段:ai_response.category
  - 参考字段:expected_category
  - 权重:0.7(70%权重)

指标2:自定义 - 响应时间
  - 检查是否在规定时间内完成
  - 权重:0.3(30%权重)

第四步:运行评估并分析结果

  1. 1. 在评估标签页点击**"Run Evaluation"**
  2. 2. n8n自动运行所有测试用例,计算所有指标
  3. 3. 查看汇总分数:整个数据集的平均指标值
  4. 4. 点击具体测试用例,查看详细执行日志

指标结果示例:


    
    
    
  数据集综合评分:
- 分类匹配准确率:0.92(92%)
- 平均响应有用性:4.3 / 5.0
- 字符串相似度:0.87

问题用例:
- 用例 #7:分类错误(标注为"Technical",实际预期为"Billing")
- 用例 #12:响应有用性较低(评分3/5)

⚠️ 常见问题和解决方案

问题1:评估与聊天功能冲突

当你的工作流同时支持聊天界面评估时,可能会出现问题——评估的最后节点输出与聊天期望的数据格式不符。

解决方案:创建一个额外的分支

  1. 1. 在"Set Outputs"评估节点后,添加一个分支
  2. 2. 使用No-op节点将聊天节点的原始输出通过
  3. 3. 确保No-op节点在所有其他节点之后执行(通过布局调整)

问题2:多个触发器的数据格式不一致

如果你的工作流既有Evaluation Trigger,又有其他触发器(如Webhook、定时触发等),数据格式可能不一致。

解决方案:统一数据格式

  1. 1. 获取其他触发器的JSON格式
  2. 2. 在Evaluation Trigger后添加一个Edit Fields (Set)节点
  3. 3. 用JSON模式重新整形数据,使其与其他触发器一致

问题3:指标计算引入延迟和成本

某些AI基指标(如Correctness)需要调用LLM,这会增加成本和延迟。

解决方案:条件执行指标计算

  1. 1. 在指标计算前添加**"Check if evaluating"**操作
  2. 2. 仅在评估模式下执行指标计算
  3. 3. 生产执行时跳过指标计算,减少成本

问题4:评估结果不稳定,波动较大

LLM输出具有随机性,同样的输入可能在不同时间产生不同结果。这导致指标评分也会波动。

解决方案:增加测试用例重复

  1. 1. 在数据集中复制某些测试行,使每个测试案例出现多次
  2. 2. 这样多次运行同一输入时会平滑噪声
  3. 3. 最终的平均分数会更稳定和可靠

问题5:单工作流限制

n8n每个工作流只能有一个Evaluation Trigger(即一个评估设置)。

解决方案:使用子工作流

  1. 1. 将工作流的不同部分提取为独立的子工作流
  2. 2. 在子工作流上分别设置评估
  3. 3. 在主工作流中调用这些子工作流

💡 实战案例:完整支持工单分类评估工作流

这是一个可以直接导入n8n的完整工作流JSON,展示如何实现支持工单的轻量级评估。

工作流结构

工作流名称:Support Ticket Evaluation - Light Evaluation Example

功能

工作流JSON代码


    
    
    
  {
  "name"
: "Support Ticket Evaluation - Light Evaluation Example",
  "description"
: "这是一个演示如何使用 n8n light evaluation 的简单支持票证分类工作流",
  "nodes"
: [
    {

      "parameters"
: {
        "dataSource"
: "googleSheets",
        "sheetId"
: "YOUR_SHEET_ID",
        "documentId"
: "YOUR_DOCUMENT_ID",
        "range"
: "Sheet1"
      }
,
      "id"
: "evaluation-trigger",
      "name"
: "Evaluation Trigger",
      "type"
: "n8n-nodes-base.evaluationTrigger",
      "typeVersion"
: 1,
      "position"
: [250, 300]
    }
,
    {

      "parameters"
: {
        "text"
: "=You are a support ticket classification expert. Analyze the following support ticket and assign:\n1. A category: Billing, Technical, Feature Request, or General Inquiry\n2. A priority: Low, Medium, or High\n\nTicket: {{ $json.ticket_text }}\n\nRespond in JSON format with 'category' and 'priority' fields."
      }
,
      "model"
: "gpt-4-mini",
      "options"
: {}
    }
,
    {

      "id"
: "openai-chat",
      "name"
: "OpenAI Chat",
      "type"
: "n8n-nodes-base.openaiChat",
      "typeVersion"
: 3,
      "position"
: [450, 300],
      "credentials"
: {
        "openAIApi"
: "openAI_API"
      }

    }
,
    {

      "parameters"
: {
        "operation"
: "setOutputs",
        "outputs"
: {
          "mappings"
: [
            {

              "fromField"
: "message",
              "toField"
: "ai_response"
            }

          ]

        }

      }
,
      "id"
: "set-outputs",
      "name"
: "Set Outputs",
      "type"
: "n8n-nodes-base.evaluationSetOutputs",
      "typeVersion"
: 1,
      "position"
: [650, 300]
    }

  ]
,
  "connections"
: {
    "evaluation-trigger"
: [
      {

        "node"
: "openai-chat",
        "type"
: "main",
        "index"
: 0
      }

    ]
,
    "openai-chat"
: [
      {

        "node"
: "set-outputs",
        "type"
: "main",
        "index"
: 0
      }

    ]

  }
,
  "active"
: false,
  "settings"
: {
    "saveDataErrorExecution"
: "all",
    "saveDataSuccessExecution"
: "all"
  }

}

使用步骤

  1. 1. 准备Google Sheet
    • • 创建一个包含以下列的Google Sheet:
      • ticket_text:工单内容
      • expected_category:预期类别
      • expected_priority:预期优先级
      • ai_response:AI回复(初始为空)
  2. 2. 导入工作流
    • • 在n8n中点击"Import from URL"或"Import from File"
    • • 粘贴上面的JSON
    • • 点击"Import"
  3. 3. 配置凭证
    • • 点击OpenAI Chat节点,配置你的OpenAI API密钥
    • • 配置Google Sheets凭证(需要授权访问你的Google账户)
  4. 4. 配置数据源
    • • 点击Evaluation Trigger节点
    • • 在参数中填入你的Google Sheet ID和Document ID
    • • 指定数据范围(如"Sheet1!A1:D100")
  5. 5. 运行评估
    • • 点击Evaluation Trigger旁的"Execute node"测试单个记录
    • • 确认工作正常后,点击"Evaluate All"运行所有测试用例
    • • 打开Google Sheet查看ai_response列是否有了结果
  6. 6. 分析结果
    • • 对比ai_responseexpected_categoryexpected_priority
    • • 识别分类错误的用例
    • • 调整提示词或模型参数,重新运行评估

优化建议


总结

评估是必需的:AI工作流无法通过代码推理验证,必须通过测试数据

从轻量开始:轻量级评估是快速迭代的好方式,无需复杂设置

逐步升级:当数据集增长时,升级到基于指标的评估以实现自动评分

持续改进:基于评估结果迭代改进你的提示词、模型选择和工作流逻辑

生产监控:部署后继续运行评估,及早发现新的边界用例


官方文档[1]
n8n系列教程[2]

引用链接

[1] 官方文档: https://docs.n8n.io/advanced-ai/evaluations/overview/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#