2026-10-08 · 原文发布日
n8n模板:客服工单先脱敏再RAG匹配,高置信度才让Claude自动回复
三个带密钥验证的webhook分别处理新工单、员工答复和索引重建。新工单先用正则脱敏邮箱电话等个人信息,用Gemini生成向量在内存库中检索相似历史问答,超过相似度阈值才让Claude仅依据检索结果起草回复,答不了或输出不安全就转为待人工。员工答复同样经正则加Claude双重脱敏后才入库存档学习。作者提醒脱敏是尽力而为、内存索引重启丢失需重建,并给了实测相似度区间供调阈值参考。模板免费。
原文要点
n8n模板20667(作者久保田卓磨):三个带Header验证的webhook分别处理新工单、员工答复和索引重建。新工单先用正则脱敏邮箱、电话、卡号、邮编、订单号等PII,用Gemini生成向量在内存向量库检索相似历史问答,超过阈值才让Claude仅依据检索结果起草回复,Claude表示答不了或输出不安全就转待人工;员工答复经正则加Claude双重脱敏后才入库学习;重建webhook从Data Table恢复内存索引。Data Table名为cs_rag_cases。作者小样本测试:无关问题相似度约0.56-0.67,相关约0.84-0.96。模板免费,脱敏是尽力而为,内存索引重启即丢失。
这次做成什么
搭起一个“先脱敏、再检索、高置信才自动回复”的客服工单流水线,并用三个webhook的合成测试数据分别验证新工单、员工学习和索引重建三条链路。
准备什么
- 一个支持Data Table功能的n8n环境(建议自托管)
- Anthropic API密钥,供两个Claude节点使用
- Google AI Studio的Gemini API密钥,用于生成embedding
- 为三个webhook配置的Header Auth凭据(如X-API-Key头)
具体怎么做
导入模板并建Data Table
从 https://n8n.io/workflows/20667 复制工作流;在n8n中新建名为cs_rag_cases的Data Table,列结构以模板内sticky note列出的为准,并在所有读写该表的节点中选中它。
配置三类凭据
添加Anthropic凭据、Gemini(PaLM)API凭据,以及一个Header Auth凭据(头名建议X-API-Key),套用到全部三个webhook节点。
激活并记录三个webhook地址
激活工作流后复制三个URL:/webhook/cs-rag-inquiry(新工单)、/webhook/cs-rag-answer(员工答复)、/webhook/cs-rag-reindex(重建索引),用POST发送对应JSON。
播种知识并调阈值
先POST几条咨询,再用cs-rag-answer发送员工答复并开启learn让Q&A入库;观察Check similarity节点的实际分数,结合作者参考区间(无关约0.56-0.67、相关约0.84-0.96)在两者之间设定THRESHOLD。
验证重建链路
重启n8n后内存向量库清空,向cs-rag-reindex发送POST,确认Data Table中已学习的行被重新载入,再发一条相似咨询应能恢复自动回复。
可直接复制的材料
三个webhook的合成测试数据
本站虚构的合成测试数据;具体字段名以模板webhook节点实际读取的为准,导入后先核对再调用。
新工单 POST /webhook/cs-rag-inquiry
{"question":"我的订单A-10293什么时候发货?联系邮箱wang@example.com,电话13812345678"}
员工答复 POST /webhook/cs-rag-answer
{"case_id":"从inquiry返回中获得","answer":"订单A-10293将在48小时内发出,物流单号稍后短信通知您。","learn":true}
重建索引 POST /webhook/cs-rag-reindex
{}
三个请求都需带请求头 X-API-Key: 你的测试密钥PII脱敏正则补充清单(本站独立示例)
本站独立编写的正则示例,用于在模板既有脱敏之外补充模式;模板已覆盖邮箱、电话、卡、邮编、订单或账号ID,扩展前先测试误伤率。
邮箱:[\w.+-]+@[\w-]+\.[\w.]+
手机号:1[3-9]\d{9}
电话(含区号):0\d{2,3}-?\d{7,8}
银行卡:\d{16,19}
邮编:\b\d{6}\b
订单号:\b[A-Z]-\d{5,}\bClaude起草回复约束提示词(本站独立示例)
本站设计的练习提示词,用于理解“仅依据检索结果作答”的约束思路;模板内Claude节点原有提示词以原模板为准。
你是客服助手。只能依据下面检索到的参考问答起草回复,不得编造参考中没有的承诺、金额或时效。若参考内容不足以回答,只输出CANNOT_ANSWER。回复不超过150字,语气礼貌,结尾告知可转人工。
客户问题:{masked_question}
参考问答:{retrieved_qa}输入与输出示例
本站虚构演示,分数与回复为示意,非真实模型输出;实际分数取决于你的embedding模型和数据。
输入
POST /webhook/cs-rag-inquiry,body为{"question":"我的订单A-10293什么时候发货?联系邮箱wang@example.com,电话13812345678"},库中已有相似问答“订单多久发货/48小时内发出”,相似度0.91,高于阈值0.80。对应输出
webhook返回{"reply":"您好,订单将在48小时内发出,物流单号会稍后通知您。如需进一步帮助可转人工。","status":"auto_answered","score":0.91};Data Table新增一行,记录脱敏后的问题(邮箱电话已替换为占位符)、匹配分数0.91和生成的回复。做完检查这些
- 不带X-API-Key或密钥错误的POST请求被webhook拒绝
- 含邮箱电话的咨询入库后,Data Table中保存的是脱敏后的文本
- 相似度高于阈值的咨询返回自动回复,低于阈值的返回“等待员工处理”且记录为pending
- 发送员工答复并learn后,再发相似问题能命中刚学习的Q&A
- 重启n8n后先调reindex,自动回复功能恢复正常
容易卡住的地方
- 脱敏是尽力而为:最终检查只认模式,AI漏掉的人名识别不出来,用真实客户数据前务必自测
- 内存向量库在n8n重启后全部丢失,必须调reindex重建,生产环境建议换成Qdrant、Pinecone或Supabase
- 作者给的0.56-0.67/0.84-0.96区间来自少量英日文小样本,你的数据分布不同,阈值必须自己调
- Data Table列名以模板内sticky note为准,本页未列出全部列,不要凭猜测建表
- 原始问答的保留时长需要自己决定并写进隐私流程
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Answer masked customer support tickets with Claude and Google Gemini RAG
- 原作者
- 久保田 卓磨
- 原始发布日期
- 2026-10-08T12:51:16.713Z
- 来源
- https://n8n.io/workflows/20667