jevbooks 独立教程 · 更新于
本文使用 TypeSafe 官方维护的社区节点 @typesafe-ai/n8n-nodes-typesafe-ai 0.10.0。官方 README 标注测试环境为 n8n 2.40。节点提供 Evaluate 和 Route;每个输入 item、每次经过节点都会发起一个请求。
验证范围:下载文件已按 0.10.0 发布包的参数名、动态输出和连接关系做静态校验,未在 n8n 中导入或执行。示例没有实测分类成绩;阈值是起点,需用你的工单调校。
1. 导入一个可以检查的工作流
- 在允许安装社区节点的 n8n 实例中,按官方安装指南安装上述包。本文针对 0.10.0;如果装到更新版,请复核字段与输出顺序。
- 选择 Import from File,导入下载的 JSON。工作流默认未启用,入口为 Manual Trigger,末端都是可检查结果的 No Operation 占位节点。
- 在 TypeSafe 控制台创建 API key,在 n8n 新建 TypeSafe AI API credential。把这份凭据选到两个 TypeSafe 节点上。密钥由 n8n 的凭据存储保存在服务器端,不要写进 Code、State 或导出的 JSON。
- 运行五条内置样例,逐个检查输出、route、model 与 usage,再将占位节点替换为自己的工单系统动作。样例包括账单、报错、售前、含糊求助和无请求的问候,不预设模型会走哪条分支。
每次执行至少产生 5 次 Jev 请求;通过第一道判断的工单会再发 1 次,重试另计。工作流本身不会发送邮件或修改外部工单。
工单 → Noul:是否为具体支持请求?
≥ 0.8 → Choice → billing / technical / sales
≤ 0.2 → 非支持请求检查 · 0.2 < p < 0.8 → Uncertain
Choice confidence < 0.65 → Fallback · API 错误 → 独立检查
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 Threshold | 0.8 | p ≥ 0.8 才交给团队分类 |
| Noul / False Probability Threshold | 0.2 | p ≤ 0.2 进入非支持请求检查 |
| Noul / Uncertain | 0.2 < p < 0.8 | 要求补充信息或人工读一遍 |
| Choice / Confidence Handling | Route to Separate Fallback Output | 为低 confidence 增加出口 |
| Choice / Confidence Threshold | 0.65 | confidence < 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。