限时福利领取


使用n8n构建企业级智能客服RAG知识库:从零搭建到生产环境部署


“知识库又双”——这是我在帮客户做客服系统升级时最常听到的吐槽。传统客服知识库通常长这样:

  1. 文档散落在 Confluence、SharePoint、本地硬盘,客服得先猜文件在哪,再人工检索,平均响应 3-5 分钟;
  2. 关键词搜索靠 Elasticsearch(ES),语义缺失,用户问“怎么退钱”和“如何申请退款”被当成两条完全不同的查询;
  3. 每季度人工盘点一次 FAQ,新增 50 条,过期 30 条,运维同学 Excel 拉满,老板还嫌“成本怎么又涨”。

一句话:数据孤岛、响应延迟、维护成本高,三座大山压得客服团队喘不过气。


常见方案对比:为什么最后选了「n8n + RAG」

方案 优点 缺点 适用场景
纯 LLM(大模型) 开箱即用,对话体验丝滑 幻觉严重、无法引用内部数据、Token 贵 对外 Demo、POC
传统 ES + 关键词 本地部署、权限成熟 语义鸿沟、需要同义词表、调优累 结构化日志、码表搜索
RAG(检索增强生成) 用向量召回+生成,兼顾事实与语义 链路长、节点多,需要编排工具 企业私域知识问答

n8n 的定位是“开源工作流自动化”,自带 350+ 集成节点,把「爬取-解析-向量化-存储-问答-反馈」串成一条可视化流水线,不用写 Airflow DAG,也不用 Spring 全家桶。对于我们这种“既要快又要省”的乙方团队,再合适不过。

下面直接上实操,手把手带你把整条 RAG 流水线跑通,并给出可直接落地的生产配置。


1. 知识获取:让 n8n 自动把散落文档搬进来

目标:把产品手册、FAQ、工单回复全部收进知识库,且每天增量同步。

1.1 创建「定时触发器」节点

Cron 表达式 0 2 * * * 每天凌晨 2 点跑,避开客服高峰。

1.2 爬取 Confluence 页面

  • 节点类型:HTTP Request
  • 认证:Basic Auth,账号建议只读
  • URL 模板:https://wiki.company.com/rest/api/content?spaceKey=CS&limit=100&expand=body.storage,version

返回是 JSON,用 Function 节点做分页循环,直到 results[] 为空。

1.3 解析正文 & 附件

  • HTML 页面:用 cheerio 包(n8n 内置)提取 <p><li><table> 标签,过滤导航栏。
  • PDF 附件:调用外部微服务 /pdf2text,返回纯文本;也可直接用 n8n 的「Read Binary File」+「pdf-parse」npm 包。

核心代码片段(Function 节点):

// 将 Confluence HTML 分段,按标题粒度拆
const $ = cheerio.load(items[0].json.body.storage.value);
let chunks = [];
$('h1, h2, h3').each((i, elem) => {
  let title = $(elem).text();
  let content = '';
  let next = elem.nextSibling;
  while (next && next.name !== 'h1' && next.name !== 'h2' && next.name !== 'h3') {
    content += $(next).text() + ' ';
    next = next.nextSibling;
  }
  chunks.push({ title, content: content.trim(), url: items[0].json._links.webui });
});
return chunks.map(c => ({ json: c }));

拆分粒度建议 300-500 token,方便后续向量召回。

1.4 去重与写入临时表

用 SQLite 节点(n8n 自带)存 doc_hash = md5(title+content),下次先查 hash,存在就跳过,实现增量更新。


2. 向量处理:Embedding + 向量库,一条龙节点拖完

2.1 文本清洗

  • 正则去掉 <script>、样式标签
  • 统一半角符号,长度不足 20 字的小段落直接丢弃(减少噪声)

2.2 调用 Embedding API

节点类型:HTTP Request
方法:POST
URL:https://api.openai.com/v1/embeddings
Headers:Authorization Bearer {{$secrets.openaiKey}}
Body:

{
  "input": "{{$json.content}}",
  "model": "text-embedding-3-small"
}

返回 data[0].embedding,1536 维数组。

2.3 写入 Pinecone(或 Weaviate)

以 Pinecone 为例:

  • 先创建 Index,维度 1536,metric cosine,pod 类型 p1.x1
  • n8n 节点选「Pinecone」→「Upsert」
  • ID 用 doc_hash,向量字段填 embedding,metadata 存 title、url、spaceKey、updateTime

Upsert 前批量 100 条一包,减少网络往返;n8n 的「Split In Batches」节点可直接配。

向量流水线


3. 问答服务:把 GPT 包装成内部 API,带缓存、带过滤

3.1 创建 Webhook 节点

对外暴露 POST /ask,客服系统直接调用,参数 {question, userId}

3.2 向量召回

把用户问题同样走 Embedding API,拿到向量后 Pinecone「Query」TopK=5,阈值 0.8,低于阈值的丢弃,防止“硬凑答案”。

3.3 构造 Prompt

Function 节点拼接:

const contexts = items.map(i => i.json.metadata.content).join('\n---\n');
const prompt = `You are a customer service assistant.  
Answer in the same language as the question.  
If the answer is not in the context, say "暂无答案" and suggest escalation.  
Context:  
${contexts}  
Question: {{$node["Webhook"].json["question"]}}  
Answer:`;
return { prompt }];

3.4 调用 GPT-4o

  • 节点:HTTP Request
  • 温度 0.2,max_tokens 400,top_p 0.9
  • 返回 choices[0].message.content

3.5 缓存策略

Redis 节点做 key=md5(question),TTL 10 分钟;命中直接返回,减少 Token 费用。
注意:中文问号、全半角、空格都要统一归一化后再算 hash。

3.6 返回格式

{
  "answer": "xxx",
  "sources": ["url1", "url2"],
  "cached": false,
  "elapsed_ms": 420
}

客服前端可把 sources 渲染成“参考文档”超链,提升可信度。


4. 生产环境 checklist:别等老板发飙才补坑

4.1 速率限制

OpenAI 免费层 3 RPM,企业号 10000 RPM。n8n 里加「Wait」节点:

  • Embedding 端:每 10 批 sleep 1 秒
  • GPT 端:Webhook 出口前用「Rate Limit」节点,令牌桶 30/s,突发 60

4.2 敏感数据过滤

正则脱敏,Function 节点示例:

// 手机号、银行卡、身份证
const patterns = [
  /(1[3-9]\d{9})/g,           // 手机
  /(\d{16}|\d{19})/g,         // 银行卡
  /(\d{17}[\dXx])/g           // 身份证
];
let text = items[0].json.content;
patterns.forEach(p => {
  text = text.replace(p, '<MASKED>');
});
return { text }];

脱敏后再进向量库,防止员工直接下载原始日志。

4.3 监控告警

n8n 自己跑在 K8s,用 Prometheus 拉 /metrics
业务层加「Error Trigger」节点,出现 5xx 立刻发飞书卡片:

  • 内容:节点名、错误栈、最近 3 条输入 JSON
  • 级别:P2,静默期 5 分钟

监控面板


5. 效果 & 数据

上线两周后,客户给的真实数字:

  • 平均响应时长从 180 s 降到 38 s,提升约 4.7 倍
  • 工单转人工率下降 42 %
  • 知识库运维人日由 2 FTE 降到 0.5 FTE,省下的同事去做高价值客户回访
  • 云资源花费(Pinecone + OpenAI)每月 420 美元,比原先外包标注团队 2000 美元/月便宜 70 % 以上

6. 进阶思考题

  1. 多租户隔离:如果集团下有多个品牌,向量库是共享 Index 还是独立 Index?如何在 n8n 里动态切换 namespace 并保证查询路由不串扰?
  2. 冷启动预热:新业务上线首日没有历史工单,如何快速构造“伪问题-答案对”填充向量库,让首日体验不翻车?
  3. 反馈闭环:客服点踩的“错误答案”如何自动回流到标注池,n8n 里怎样设计一个“人工审核 → 增量训练”的闭环工作流?

先别急着全解,把基础链路跑稳定,再挑一个思考深挖,知识库就会从“能用”慢慢变成“好用”。祝你部署顺利,响应嗖嗖快!

限时福利领取


Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐