龙井:从零搭建企业级 AI 智能客服:n8n + RAG 全流程实战
龙井:从零搭建企业级 AI 智能客服:n8n + RAG 全流程实战
龙井:从零搭建企业级 AI 智能客服:n8n + RAG 全流程实战 龙井:从零搭建企业级 AI 智能客服:n8n + RAG 全流程实战 Modified February 4 登录的时候,全选 如果无法登录,出现类似这种错误: 这是因为你的n8n浏览器地址栏不对,使用的还是http://localhost:5678 访问 n8n 你必须直接通过ngrok地址直接访问你的n8n控制台,比如我的就是通过: https://recreantly catechistic makeda.ngrok free.dev 这个域名来访问n8n 后台 操作步骤:把这个域名直接在浏览器中打开,重新登录后进去 填写后重新登录: 就可以成功登录了: 7.3 配置邮件处理流程 设置每隔一分钟看一遍邮箱: 登录的时候,全选 如果无法登录,出现类似这种错误: 这是因为你的n8n浏览器地址栏不对,使用的还是http://localhost:5678 访问 n8n 你必须直接通过ngrok地址直接访问你的n8n控制台,比如我的就是通过: https://recreantly catechistic makeda.ngrok free.dev 这个域名来访问n8n 后台 操作步骤:把这个域名直接在浏览器中打开,重新登录后进去 填写后重新登录: 就可以成功登录了: 7.3 配置邮件处理流程 设置每隔一分钟看一遍邮箱: 就读取到了邮箱里最新的一个邮件信息: 连接Agent节点: 修改Agent节点参数: 直接把邮件的内容填进去: 修改Simple Memory节点参数: 也是把邮件内容直接填进去: 现在测试一下: 进入Agent节点参看输出效果: 现在添加一个回复邮件的节点,就可以直接把回复发送给用户: 设置参数: 通过Message ID就可以回复用户: 测试效果: 收到邮件: 7.4 上线运行 先保存,后发布: 现在就成功发布了: 测试一下效果:发送一个邮件到对应的邮箱 客服自动写邮件回答: 写在最后: n8n 搭建的智能客服非常适合邮件场景:自动读取、智能回复、无缝集成,这是它的强项 但如果你需要将客服接入飞书、微信、企业微信等国内即时通讯平台,用 n8n 太麻烦了…… 这种场景下,我更推荐使用 Coze,它对这些平台的支持非常友好,几乎可以开箱即用 不同的工具擅长不同的方向,选择最合适的就好 我是龙井,一个活跃的AI探索者 我会在朋友圈公开我的一切:AI学习、创业踩坑、业务进展、成长复盘 加我微信:longjing aiagent 用我踩过的坑,帮你少走弯路 写在前面 在 AI 通识课程中,你已经了解了 Agent(智能体)的基本概念 通过前三个项目的实践,相信你已经认识到 Agent 节点的重要性 第四个项目,我们将搭建一个完整的智能电商客服系统,可以通过网页与用户实时对话,还能自动读取邮件、智能回复客户咨询,实现 7×24 小时无人值守 完成这个项目后,你对 Agent 的理解将超过 95% 的人 关于 Agent 的理论定义这里不再赘述,我们直接进入实操环节 我们依旧是通过这一个核心公式来展开学习: 💡 AI Agent(智能体) = LLM(大模型)+ Planning(规划)+ Memory(记忆)+ Tools(工具) AI Agent(智能体) = LLM(大模型)+ Planning(规划)+ Memory(记忆)+ Tools(工具) 完成本教程后,你将掌握: 💡 Agent 四大核心组件(LLM、Planning、Memory、Tools) RAG 技术实战(向量存储、相似度检索、上下文注入) 完整智能客服系统(知识库、多渠道接入、公网部署) 生产环境最佳实践(工作流拆分、安全配置、稳定性优化) Agent 四大核心组件(LLM、Planning、Memory、Tools) RAG 技术实战(向量存储、相似度检索、上下文注入) 完整智能客服系统(知识库、多渠道接入、公网部署) 生产环境最佳实践(工作流拆分、安全配置、稳定性优化) 第一部分:提示词 + 大模型构建基础智能体 1.1 创建最简单的问答智能体 通过提示词 + 大模型,我们可以构建一个最基础的问答智能体 创建步骤: 1.新建 Agent 节点,系统会自动生成默认配置 创建后默认就是这种形式: 意思就是: 2.为 Agent 添加大模型节点(大模型是 Agent 的核心,相当于它的大脑) 添加大模型节点离不开两个关键步骤: 第一步:配置api凭证,配置后就可以使用: 第二步:选择具体的模型型号,不同的模型型号效果不同,花费也不同 1.2 模型参数详解 在Options部分,你可以更精细地配置模型参数 以下是常用参数说明: 💡 Frequency Penalty(频率惩罚) 控制AI是否重复说话 数值越高,AI越不爱重复同样的词 Frequency Penalty(频率惩罚) 控制AI是否重复说话 数值越高,AI越不爱重复同样的词 💡 Maximum Number of Tokens(最多字数) 限制AI回答的长度 就像写作文限制不超过1500字 Maximum Number of Tokens(最多字数) 限制AI回答的长度 就像写作文限制不超过1500字 还有以下这些,我就不一一截图展示了: 💡 Response Format(回答格式) 让AI用什么格式回答(比如纯文字、JSON数据等) Presence Penalty(存在惩罚) 鼓励AI说新话题 数值越高,AI越爱扯到新内容 Sampling Temperature(采样温度) 控制AI回答的创意度,数值越大越有创意 低温是严谨保守,高温是天马行空 Timeout(超时时间) AI思考多久后就不等了,直接报错 Max Retries(最大重试次数) 如果AI没回答上,自动重试几次 Top P 另一种控制创意度的方式 决定AI从多少个"可能的答案"里选 Response Format(回答格式) 让AI用什么格式回答(比如纯文字、JSON数据等) Presence Penalty(存在惩罚) 鼓励AI说新话题 数值越高,AI越爱扯到新内容 Sampling Temperature(采样温度) 控制AI回答的创意度,数值越大越有创意 低温是严谨保守,高温是天马行空 Timeout(超时时间) AI思考多久后就不等了,直接报错 Max Retries(最大重试次数) 如果AI没回答上,自动重试几次 Top P 另一种控制创意度的方式 决定AI从多少个"可能的答案"里选 提示: 如无特殊需求,保持默认参数即可 现在agent是这个样: 我们现在就可以直接通过对话的形式,使用这个Agent 效果: 我们可以看到他的回答是: 我是DeepSeek,由深度求索公司创造的AI助手!😊 我是DeepSeek,由深度求索公司创造的AI助手!😊 当你询问这个Agent的时候,其实是在和他背后的模型对话,但为什么这个模型知道自己是DeepSeek呢 其实是因为深度求索公司这个公司,可以通过以下类似的系统提示词做出了限制: 你是DeepSeek,是由深度求索公司创造的AI助手 你是DeepSeek,是由深度求索公司创造的AI助手 这样每当用户询问DeepSeek是谁,DeepSeek就会按照系统提示词的约束来回答 1.3 自定义系统提示词 因此我们就可以通过系统提示词+大模型构建一个最简单的智能体: 系统提示词示例: 添加系统提示词: 现在我们再来试试效果: 现在的回答: 通过这种方式,我们就构建了一个最简单的具有特定角色的智能体:专业科技行业分析师 第二部分:为智能体添加工具 2.1 为什么需要工具? 换句话说:什么时候需要引入工具? 通过上一节,我们简单构建了一个科技行业分析师智能体,但如果要实现精准的行业动态分析,必然需要联网搜索功能。 但是当前我们搭建的智能体不支持这个功能,让他搜索最新的AI科技动态,他返回的是2024年10月的数据(这是这个模型的训练数据的截止日期) 这个时候,为了拓展智能体的功能,实现联网搜索的功能,就需要引入工具实现联网搜索 2.2 配置 Google Search 工具 可以实现搜索的工具有很多,这里我使用谷歌搜索演示: 1.添加 Google Search 工具节点 2.配置 API 凭证 当使用外部工具的时候,都是需要申请凭证的: 配置凭证的方式都一样,我带你手把手体验一遍,以后面对其他的也能配置 进入配置文档: 在文档中,会有详细的申请API的步骤: 按照文档中的步骤进行: 正常登录(我是使用Google 账号登录): 登录后: 按照提示,验证邮箱和电话号码: 打开邮箱: 验证邮箱后自动跳转: 验证电话: 填入验证码: 订阅: 复制自己的API: 回到n8n: 这样就创建成功了 选择刚刚创建好的凭证,一般会自动选择好: 现在Agent节点拥有了搜索工具: 测试效果: 2.3 常见错误及解决方案 这是一个非常常见的错误,当你给Agent配置工具的时候,一定会遇到这种问题 错误原因: 💡 Agent 在调用 Google Search这个工具时,一直在:思考 / 调用工具 / 再思考……,但在 默认Max Iterations(最大迭代次数)= 10 次之内,始终没有给出最终答案,于是被强制停止。 这个现象在使用搜索类工具尤为常见 Agent 在调用 Google Search这个工具时,一直在:思考 / 调用工具 / 再思考……,但在 默认Max Iterations(最大迭代次数)= 10 次之内,始终没有给出最终答案,于是被强制停止。 这个现象在使用搜索类工具尤为常见 我总结出两种解决方案: 方案一:提高 Max Iterations 值(不推荐) 把默认的 10 提高到更大的值(比如 20、30),给模型更多轮次来完成任务 你知道有这种解决思路就行,而且这种方案不稳定,你不好判断多大的值能让模型完成任务 你知道有这种解决思路就行,而且这种方案不稳定,你不好判断多大的值能让模型完成任务 方案二:换个模型(推荐) 很多时候工具调用不稳定是因为模型兼容性问题,换个模型就可以解决 比如我换成Gemini的模型,鼠标右键DeepSeek 配置好对应模型的凭证,就可以正常使用了 效果,实现了新闻搜索: 你不想配置Gemini的模型,也可以用我们以前配置好的火山引擎,挑选一个可以使用的模型就行: 效果: 你之后确定了哪个模型 + 工具组合最稳定,就可以固定下来作为生产环境的首选 你之后确定了哪个模型 + 工具组合最稳定,就可以固定下来作为生产环境的首选 第三部分:为智能体添加记忆 3.1 为什么需要记忆? 为什么要给大模型添加记忆呢? 举个例子,这是没有添加记忆的智能体:我前面和他的对话,他会记不住,你说完第二句话,它就忘了第一句话,这是非常影响使用体验的 3.2 配置短期记忆 添加 Memory 节点: 需要注意的是: Context Window Length是指上下文窗口长度,当前设置为5,这是 AI 的 记忆容量,代表 AI 只能记住最近的 5 次交互(指 5 组问答),如果超过 5 条最早的那条消息会被挤出去,AI 就会忘掉最早说的话, 现在对话,就可以记住以前的内容了 小结一下: 我们回到这个公式: 💡 AI Agent(智能体) = LLM(大模型)+ Planning(规划)+ Memory(记忆)+ Tools(工具) AI Agent(智能体) = LLM(大模型)+ Planning(规划)+ Memory(记忆)+ Tools(工具) 对应n8n中: 1. 大模型 💡 角色:纯粹的智力引擎 • 这是智能体的核心思考能力来源 • 如果没有它,Agent 就是个空壳 • 在这里,我们选用了 DeepSeek,Agent 会把问题扔给 DeepSeek,让它进行理解、推理和生成回复 角色:纯粹的智力引擎 • 这是智能体的核心思考能力来源 • 如果没有它,Agent 就是个空壳 • 在这里,我们选用了 DeepSeek,Agent 会把问题扔给 DeepSeek,让它进行理解、推理和生成回复 2. 规划 💡 角色:决策中心 • 隐藏在 AI Agent 节点内部 • 规划的过程是这样的: ◦ 当我提出问题“搜索最新AI热点”时,Agent 内部会进行规划: ◦ 先看 LLM:DeepSeek 知道最新AI热点吗?不知道,因为它只知道它训练截止日期前的事 ◦ 再看 Tools:我手头有个 SerpAPI(搜索工具) ◦ 制定计划:先用 SerpAPI 去搜“最新AI热点”,拿到结果后,再整理语言回答用户 • 这种:拆解问题 选择工具 执行步骤的过程,就是规划 角色:决策中心 • 隐藏在 AI Agent 节点内部 • 规划的过程是这样的: ◦ 当我提出问题“搜索最新AI热点”时,Agent 内部会进行规划: ◦ 先看 LLM:DeepSeek 知道最新AI热点吗?不知道,因为它只知道它训练截止日期前的事 ◦ 再看 Tools:我手头有个 SerpAPI(搜索工具) ◦ 制定计划:先用 SerpAPI 去搜“最新AI热点”,拿到结果后,再整理语言回答用户 ◦ 当我提出问题“搜索最新AI热点”时,Agent 内部会进行规划: ◦ 先看 LLM:DeepSeek 知道最新AI热点吗?不知道,因为它只知道它训练截止日期前的事 ◦ 再看 Tools:我手头有个 SerpAPI(搜索工具) ◦ 制定计划:先用 SerpAPI 去搜“最新AI热点”,拿到结果后,再整理语言回答用户 • 这种:拆解问题 选择工具 执行步骤的过程,就是规划 3. 记忆 💡 角色:记事本(短期记忆) • 它的作用是保存上下文,如果我接着问“根据这个AI热点写一个100字文章”,Agent 会通过 Memory 回顾上一句“哦,这个AI热点是……”,从而写出AI热点对应的文章,而不是问“你说的AI热点是什么” 角色:记事本(短期记忆) • 它的作用是保存上下文,如果我接着问“根据这个AI热点写一个100字文章”,Agent 会通过 Memory 回顾上一句“哦,这个AI热点是……”,从而写出AI热点对应的文章,而不是问“你说的AI热点是什么” 4.工具 💡 角色:执行者,Agent的双手 • 大模型通常是断网的,或者它的知识有滞后性 • SerpAPI 是一个谷歌搜索工具 • 有了它,你的 Agent 就有了联网的能力,它不再只是在陪聊,而是能去外部世界获取最新的数据(如新闻、股价、天气)。 角色:执行者,Agent的双手 • 大模型通常是断网的,或者它的知识有滞后性 • SerpAPI 是一个谷歌搜索工具 • 有了它,你的 Agent 就有了联网的能力,它不再只是在陪聊,而是能去外部世界获取最新的数据(如新闻、股价、天气)。 第四部分:为智能体添加数据库(长期记忆) 4.1 短期记忆的局限性 上一节添加的记忆是短期记忆,存在以下局限: 1.受上下文窗口限制 2.重启对话后会遗忘 3.无法持久化存储 举个例子:在本次对话中,智能体已经通过短期记忆记住了我的名字 重启对话后,Agent 完全忘记了之前的信息: 效果(重启后就忘记了): 我们可以通过建立数据库的形式,让智能体拥有长期记忆 4.2 RAG 技术原理 要搭建智能体的长期记忆数据库,需要了解 RAG技术 什么是RAG(Retrieval Augmented Generation:检索增强生成): 💡 用最通俗的大白话来解释,RAG 就是让 AI 在回答问题前,先去翻翻书或查资料,就像挂载了一个知识库,形成了长期记忆 用最通俗的大白话来解释,RAG 就是让 AI 在回答问题前,先去翻翻书或查资料,就像挂载了一个知识库,形成了长期记忆 它让 AI 变成了一个手边随时有百科全书和公司档案的超级助理 RAG的技术底层逻辑主要包含三个核心步骤:向量化、相似度检索 和 上下文注入(不用紧张,我会用最通俗的表达给你解释清楚) 结合这张图帮助你理解(我们只需要了解,不用深究): 第一步:向量化(把文字变成数字坐标) 💡 这是做什么? 电脑其实不认识字,只认识数字,所以我们需要把原本的知识库(书、文档)放进一个叫 Embedding 模型的工具里 发生了什么? Embedding 模型把文字转换成了数学坐标,意思相近的词(如苹果和香蕉)坐标会靠得很近,不相关的词(如卡车和猫)会离得很远 结果是什么? 所有知识不再是文字,而是变成了便于查找的数字,存进一个叫向量数据库的盒子里。 第二步:相似度检索(查资料) 💡 这是做什么? 当你提问时,系统不会在几万页书里逐字逐句地找关键词,而是在找意思最像的内容。 发生了什么? 系统先把你的问题也变成数字坐标,然后去数据库里比对:看谁的坐标和你的问题距离最近,越近就越相关。 结果是什么? 系统迅速锁定最相关的那几段资料,就像在大海里精准捞出你需要的针,其他无关内容全部忽略。 这是做什么? 当你提问时,系统不会在几万页书里逐字逐句地找关键词,而是在找意思最像的内容。 发生了什么? 系统先把你的问题也变成数字坐标,然后去数据库里比对:看谁的坐标和你的问题距离最近,越近就越相关。 结果是什么? 系统迅速锁定最相关的那几段资料,就像在大海里精准捞出你需要的针,其他无关内容全部忽略。 第三步:上下文注入(组装提问) 💡 这是做什么? 这是最后的组装环节:把找到的资料和你的问题一起交给 AI。 发生了什么? 系统把你的原始问题,加上刚才捞出来的参考资料,打包成一条完整的提示词,发送给 AI。 结果是什么? AI 同时看到了你的问题和相关背景资料,然后基于这些资料生成一个有依据的回答。 这是做什么? 这是最后的组装环节:把找到的资料和你的问题一起交给 AI。 发生了什么? 系统把你的原始问题,加上刚才捞出来的参考资料,打包成一条完整的提示词,发送给 AI。 结果是什么? AI 同时看到了你的问题和相关背景资料,然后基于这些资料生成一个有依据的回答。 4.3 在n8n中搭建数据库 现在你已经了解了数据库的原理,我们开始在n8n中实现: 第一步,把数据存入向量数据库 我们新建一个表单节点,用于上传文件: 设置表单参数: Accepted File Types填写(注意要用英文逗号):.pdf, .doc, .docx, .xls, .xlsx, .csv 这是我用AI生成了一个简单的数据库用于测试效果: 电商数据库(RAG 测试专用).docx 电商数据库(RAG 测试专用).docx 上传文件: 将上传的文件向量化: 这些都是n8n中支持的向量数据库,我们选一个市面上最受欢迎的向量数据库用于演示: Pinecone 向量数据库 选择上传文件: 参数设置: 先创建一个凭证: 在这里面有具体的申请API的步骤: 我们按步骤来: 选择登录: 登录后,创建一个项目: 复制好API Key备用: 创建一个索引: 给索引随便起个名字(尽量英文): 现在是最重要的一步,选择向量模型,在这里选择什么向量模型,那我们在n8n中就要用什么向量模型,再次提醒:向量模型的作用就是把我们上传的文档编码成数字向量的形式,保存进向量数据库 有很多的向量模型可以选择,可以选择他本身就提供的,我们也可以自定义模型,最常用的是OpenAI的向量模型,不过如果你要使用的话,需要申请OpenAI的api,并且至少要充值5美元才可以正常使用,我们在这里使用自定义的Gemini的gemini embedding 001向量模型,同样需要提前申请好api,有90天的免费使用额度,申请步骤: 如何申请谷歌官方API 如何申请谷歌官方API 需要在这里填写一些数值: 选择不同的向量模型,需要填写不同的Dimension(维度)数值,这些数值可以去查对应向量模型的开发文档,但是我一般不会这么做,因为找文档麻烦,我会直接先使用默认数值,跑一遍,遇到错误提示回来改: 举个例子: 这里你不需要跟着我操作,我只是为你给你演示我的搭建思路,你要了解这种思路,我在这随便填了一个768: 直接创建: 创建成功后: 假设我已经在n8n中搭建好了,我就会直接在n8n中运行,结果肯定会出类似错误:从这个错误中,就知道要填写的实际参数应该是 3072而不是768,这种方式比自己慢慢查文档要快得多 回到主线,现在我们填写数据后,直接创建 创建成功: 回到n8n,放入申请好的API Key: 保存成功: 参数设置: 添加向量模型: 配置数据加载器: 配置参数: 现在我们执行测试: 效果,表示我们上传的文件被分成了15份,并上传到了数据库: 第二步,把数据库接入Agent 回到数据库,数据已经成功存入: