jevbooks

Jev 上手

Jev + n8n:工单分类与不确定分流

把工单送给对应团队;信息不足、模型不确定和 API 报错时,各自留下明确出口。

jevbooks 独立教程 · 更新于

本文使用 TypeSafe 官方维护的社区节点 @typesafe-ai/n8n-nodes-typesafe-ai 0.10.0。官方 README 标注测试环境为 n8n 2.40。节点提供 Evaluate 和 Route;每个输入 item、每次经过节点都会发起一个请求。

验证范围:下载文件已按 0.10.0 发布包的参数名、动态输出和连接关系做静态校验,未在 n8n 中导入或执行。示例没有实测分类成绩;阈值是起点,需用你的工单调校。

1. 导入一个可以检查的工作流

下载工作流 JSON

  1. 在允许安装社区节点的 n8n 实例中,按官方安装指南安装上述包。本文针对 0.10.0;如果装到更新版,请复核字段与输出顺序。
  2. 选择 Import from File,导入下载的 JSON。工作流默认未启用,入口为 Manual Trigger,末端都是可检查结果的 No Operation 占位节点。
  3. 在 TypeSafe 控制台创建 API key,在 n8n 新建 TypeSafe AI API credential。把这份凭据选到两个 TypeSafe 节点上。密钥由 n8n 的凭据存储保存在服务器端,不要写进 Code、State 或导出的 JSON。
  4. 运行五条内置样例,逐个检查输出、route、model 与 usage,再将占位节点替换为自己的工单系统动作。样例包括账单、报错、售前、含糊求助和无请求的问候,不预设模型会走哪条分支。

每次执行至少产生 5 次 Jev 请求;通过第一道判断的工单会再发 1 次,重试另计。工作流本身不会发送邮件或修改外部工单。

2. 只发送判断所需的工单字段

两个节点都设置 State Format = JSON,State 使用下面的表达式。不要把凭据、全部客户档案和上游节点日志一并塞进 Input Item。工单 ID 留在工作流中用于追踪,模型只看标题和正文。

={{ JSON.stringify({ ticket: { subject: $json.subject, message: $json.message } }) }}

Model 使用 By ID → jev-1.14.0;Options 里关闭 Simplify,保留输入字段。响应 model 才是实际服务版本,usage 提供 token 用量。Keep first decision 节点把第一步答案、版本和用量保存到 support_check,避免被第二步 route 覆盖。

3. Noul 的 Uncertain 与 Choice 的 Fallback

节点 / 设置本例值作用
Noul / True Probability Threshold0.8p ≥ 0.8 才交给团队分类
Noul / False Probability Threshold0.2p ≤ 0.2 进入非支持请求检查
Noul / Uncertain0.2 < p < 0.8要求补充信息或人工读一遍
Choice / Confidence HandlingRoute to Separate Fallback Output为低 confidence 增加出口
Choice / Confidence Threshold0.65confidence < 0.65 进入人工复核

Noul 返回的是 yes 概率,没有单独 confidence。Choice confidence 不是最高选项概率:三选一时公式为 (p_max − 1/3) ÷ (1 − 1/3),所以本例 0.65 的阈值对应 p_max 约 0.767。不要把两类阈值互换。

上线前用已人工标注的历史工单回放,记录自动分流覆盖率、误派率和人工队列长度;把一部分数据留作最终验证。模型或题目换版时重新检查这些读数。高 confidence 也可能答错。

4. 需要多个信号时用 Evaluate

Route 每次问一道题并选出口。Evaluate 可以在一次请求内同时判断紧急程度和负责团队,把结果放进 answers,后续由 IF / Switch 决定动作。把 Questions Format 设为 Using Raw JSON,填入下面的题目;同样使用上面的窄 State。

{
  "is_urgent": {
    "type": "noul",
    "instructions": "Does `ticket` describe an active outage preventing the customer from working?"
  },
  "department": {
    "type": "choice",
    "instructions": "Which team should handle the primary request in `ticket`?",
    "criteria": {
      "billing": "Payments, charges, refunds, or invoices.",
      "technical": "Errors, outages, bugs, or product usage.",
      "sales": "Pre-purchase pricing, plans, or a quote."
    }
  }
}

后续节点读取 answers.is_urgent.noul、answers.department.choice 和 answers.department.confidence。只有下一步确实依赖上一步答案时,才需要拆成多次请求。本例的两阶段工作流用于展示两种不确定分支;吞吐优先时可改成 Evaluate + Switch。

5. 错误分支与图片附件

工作流把 On Error 设为 Continue (using error output),错误接到独立的 API error review。Retry On Fail 最多尝试 3 次、间隔 1 秒;这是示例配置,高负载时应增加退避。400 先修输入,401/403 先查凭据和权限,429 按限流退避;451 地域限制应停查服务可用性。

不要把普通 Continue 当成总是进入错误出口:它可能把错误放到常规出口。官方 0.10.0 中 Choice 有 Fallback 时会送到 Fallback;Noul 有 Uncertain 时会送到 Uncertain。始终检查 error 字段,避免报错变成自动业务动作。

0.10.0 还支持图片:上游先把附件转成 PNG/JPEG binary data,在 Images 中指定 Input Binary Field(如 data)和唯一 Reference,再把该引用写入 State。节点会使用 multipart 并发送图片实验头。图片每边须为 280–1568 px;先调整尺寸与方向。当前表单题型只有 Choice / Score / Noul,不包含 Box。

图片资产与 Box 的完整 HTTP 示例 →

继续阅读与来源