2026-09-01 · 原文发布日
RAG客服工单自动应答与升级
n8n免费模板:webhook接收客服问题并同步返回,用Voyage AI嵌入去Pinecone检索文档片段,置信度够则由Claude生成带编引用的JSON答案并直接回复、Zendesk标记自动解决;检索不足或命中升级关键词时建Zendesk工单、通知Slack,全程记录到Google Sheets。
原文要点
原流程独有事实:入口是会话保持打开的同步Webhook;载荷规范化出query、customer/ticket标识与productLine;用Voyage AI生成嵌入,按namespace查Pinecone;结果去重排序并拼成带检索置信度编号的上下文块;够置信才交Claude生成带引用的JSON答案并校验引用、置信度与升级关键词;自动答则回Webhook并把Zendesk标为自动解决,否则建/更新Zendesk、通知Slack;全量写Google Sheets审计。
这次做成什么
照着搭一条可演示的客服RAG分流链:同步返回答案或升级提示,并留下检索指标、决策路径和引用来源;本站用合成命名空间和虚构工单字段练习,不接真实客户数据。
准备什么
- n8n可编辑环境,能建Webhook、Code、HTTP Request类节点并保存凭据
- Voyage AI、Pinecone、Anthropic、Zendesk、Slack、Google Sheets六套测试凭据或隔离账号
- 一个Pinecone索引host、与productLine对应的namespace策略,以及已写入的产品文档片段
- Google Sheets已建表并预置追加列,Zendesk/Slack目标频道和标签可先指向沙盒
具体怎么做
建同步入口并规范字段
新建Webhook节点选同步响应,练习POST体含query、customer_id、ticket_external_id、productLine;后接Code节点输出标准JSON:query去空白,productLine小写映射到namespace,缺失ticket_external_id时生成T-时间戳,request_id用于串起Sheets日志。
嵌入检索并编号上下文
用HTTP Header Auth调用Voyage AI embeddings,把向量POST到你的Pinecone query URL,namespace等于productLine;在Code里按score降序去重,取前3条组成context:[1] snippet(source=url,score=0.86),并计算retrieval_confidence如top1_score与平均分加权,公式留在节点注释便于调阈。
分支:自动答或升级
IF节点判断retrieval_confidence≥threshold且Claude返回的confidence≥answer_threshold且不含升级词;真分支把问题、编号上下文、引用规则交Claude,校验citations编号都存在后同步回Webhook,同时Zendesk更新票加auto-resolved标签;假分支组装升级包,Zendesk创建/更新工单,Slack发频道通知,Webhook回升级说明。
落审计日志并回放
Google Sheets追加一行:request_id、query、productLine、top1_score、avg_score、decision_path、sources_used、latency_ms;用三条合成请求回放:高置信、低置信、命中退款人工关键词,确认三条路径分别写入并只改沙盒票。
可直接复制的材料
Claude带引用JSON答案提示词
本站独立编写;{{query}}与{{context_block}}由n8n表达式注入,阈值与升级词在Code节点核对。
你是客服知识库应答器。只允许使用给定编号上下文作答,禁止编造政策、金额、链接。输出严格JSON:{"answer":"中文简洁答复","citations":[{"n":1,"source":"上下文来源URL","claim":"被支持的句子"}],"confidence":0.0,"escalate":false,"reason":"为何可自动答或需升级"}。若上下文不足、涉及账户安全/退款人工/法律投诉,或用户要求人工,则escalate=true且answer为空。每个claim必须对应一个已给编号n,source逐字取自上下文。问题:{{query}}
上下文:{{context_block}}合成Webhook测试体
合成练习数据;customer_id与工单号皆为虚构沙盒值,替换为你的测试入口。
{"query":"团队版导出CSV失败提示E412,重试仍一样,今晚要交付怎么办","customer_id":"CU-DEMO-1024","ticket_external_id":"ZD-SANDBOX-7781","productLine":"team","channel":"chat-widget","locale":"zh-CN","requested_human":false}分流规则配置示例
本站方案示例,不是原工作流文件;阈值需按你的风险容忍度在原模板Code步骤中核对。
{"namespace_by_productLine":{"team":"docs-team","billing":"docs-billing","api":"docs-api"},"retrieval_threshold":0.72,"answer_threshold":0.80,"top_k":3,"escalation_keywords":["人工","退款","投诉","安全事件","数据删除"],"sheets_columns":["request_id","query","productLine","top1_score","avg_score","decision_path","sources_used","latency_ms"],"zendesk_auto_tag":"auto-resolved","slack_channel":"#support-sandbox"}输入与输出示例
本站虚构演示,非原作者结果,未运行;数字与字段与输入及假设检索值对应。
输入
POST上面的合成Webhook测试体;假设Pinecone在docs-team返回top1_score=0.86、avg=0.79,两条片段含E412为导出任务超时可重排队。对应输出
同步响应示例:{"status":"auto_answered","request_id":"REQ-20260901-0001","answer":"E412表示导出任务超时,已进入重排队列;请在交付页保留任务ID,10分钟后刷新,不要重复导出。","citations":[{"n":1,"source":"https://docs.example.test/exports#e412","claim":"E412为导出任务超时可重排队"}],"zendesk":"tag:auto-resolved","sheet":"decision_path=auto_reply"}做完检查这些
- 三条合成请求能在Sheets看到不同decision_path且request_id一致串联
- 高置信路径返回的citations编号都能在编号上下文中找到,不输出空引用
- 低置信或命中“退款/人工”会创建或更新沙盒Zendesk并通知Slack测试频道
- Webhook在两条分支都同步关闭连接,聊天端不会挂起无响应
容易卡住的地方
- Pinecone host与namespace没按productLine对齐时会检索为空,被误判成升级
- 同步Webhook不能让外部调用方无限等待,模型慢时要设前端超时与升级兜底
- 把真实客户密钥、工单或个人信息写进Sheets会造成泄露,只能用隔离凭据
- 阈值没有通用保证,过低会误自动答,过高会把所有问题推给人工
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Route grounded RAG support tickets with Claude, Pinecone, Zendesk, Slack
- 原作者
- Oneclick AI Squad
- 原始发布日期
- 2026-09-01T03:36:31.128Z
- 来源
- https://n8n.io/workflows/18974