低代码平台的智能体搭建05:n8n智能邮件助手
n8n 实战:把 AI Agent 嵌入自动化邮件工作流
摘要:n8n 的核心身份是通用工作流自动化平台,LLM 只是流程中的一个或多个处理节点。
一、节点与工作流:n8n 的两个基本概念
n8n 的世界由节点和工作流组成。节点是执行具体操作的最小单元,分为触发节点和常规节点;工作流则定义了数据从触发节点开始,如何在节点之间传递、处理,并最终完成任务的路径。
n8n 的强项在于“连接”。它可以把原本孤立的 CRM、社交媒体、数据库和 LLM 串联起来,实现过去需要复杂编码才能完成的端到端业务流程自动化。
二、案例目标:构建智能邮件助手
本节要构建的 Agent 不再是线性流程,而是通过 AI Agent 节点自主理解用户邮件意图,并在多个工具中决策和选择,最终自动生成并发送高度相关的回复。
整个搭建过程分为两个核心步骤:先准备 Agent 的“记忆”,再构建 Agent 主体。
三、构建 Agent 的私有知识库
为了让 Agent 能回答关于个人信息或项目文档的问题,需要先用 Simple Vector Store 节点构建一个内存向量知识库。
1. 定义知识源
使用 Code 节点存放原始知识文本。如下JavaScript:
return [
{
"doc_id": "work-schedule-001",
"content": "我的工作时间是周一至周五,上午9点到下午5点。时区是澳大利亚东部标准时间(AEST)。"
},
{
"doc_id": "off-hours-policy-001",
"content": "在非工作时间(包括周末和公共假期),我无法立即回复邮件。"
},
{
"doc_id": "auto-reply-instruction-001",
"content": "如果邮件是在非工作时间收到的,AI助手应该告知发件人,邮件已收到,我会在下一个工作日的9点到5点之间尽快处理并回复。"
}
];
2. 文本向量化
计算机无法直接理解文本,需要使用 Embeddings 节点把文本转换为向量。本案例使用 Embeddings Google Gemini,模型为 gemini-embedding-exp-03-07。
3. 存入向量存储
最后把向量化知识存入内存数据库,设置 Operation Mode 为 Insert Documents,并为知识库命名 my-dailytime。
完成配置后手动执行一次,知识就加载到 n8n 内存中。
Agent 查询知识库时,会根据问题与知识片段向量之间的余弦相似度进行检索:
score(q,d)=cos(q⃗,d⃗)=q⃗⋅d⃗∥q⃗∥ ∥d⃗∥ \text{score}(q,d)=\cos(\vec{q},\vec{d})=\frac{\vec{q}\cdot\vec{d}}{\|\vec{q}\|\ \|\vec{d}\|} score(q,d)=cos(q,d)=∥q∥ ∥d∥q⋅d
四、创建 Agent 主工作流
1. 配置 Gmail 触发器
新建工作流 Agent: Customer Support,使用 Gmail 节点作为触发器,Event 设置为 Message Received。每当新邮件进入收件箱时,工作流自动触发。
2. 配置 AI Agent 节点
AI Agent 节点是整个工作流的大脑,连接 Chat Model、Memory 和 Tools。本案例连接 Google Gemini Chat Model、Simple Memory、SerpAPI 和 Simple Vector Store。
AI Agent 的思考决策可以表示为一个循环:
如下 Prompt:
# Prompt (User Message)
# 上下文信息
- 当前时间: {{ new Date().toLocaleString('en-AU', { timeZone: 'Australia/Sydney', hour12: false }) }} (澳大利亚悉尼时间)
- 发件人: {{ $json.From }}
- 主题: {{ $json.Subject }}
- 邮件正文: {{ $json.snippet }}
# System Message
# 角色和目标
你是一个全天候待命、专业高效的AI邮件助手。你的任务是:第一时间使用公开信息尽力回答所有邮件中的问题,并根据我的工作日程,在回复的开头附加上下文状态提醒。
# 上下文信息
- 当前时间: {{ new Date().toLocaleString('en-AU', { timeZone: 'Australia/Sydney', hour12: false }) }} (澳大利亚悉尼时间)
- 邮件信息在输入数据中。
# 可用工具
- Simple Vector Store2: 用来查询我准确的工作时间(例如:周一至周五,上午9点到下午5点)。
- SerpAPI: **[主要信息来源]** 优先使用此工具在互联网上搜索,以回答邮件中的具体问题。
# 执行步骤
1. **分析问题**: 首先,仔细阅读邮件内容,提炼出发件人的核心问题。
2. **并行信息搜集**: 同时执行以下两个操作来收集信息:
a. 使用 `SerpAPI` 工具,上网搜索出发件人问题的答案。
b. 使用 `Simple Vector Store2` 工具,获取我设定的准确工作时间。
3. **草拟核心回复**: 根据 `SerpAPI` 搜集到的信息,清晰、直接地回答发件人的问题,这部分将作为邮件回复的主体。
4. **添加状态前缀并整合**:
a. 对比“当前时间”和我从工具中获取的工作时间。
b. **如果当前是“非工作时间”**: 创建一段状态提醒前缀。这段前缀**必须包含**从 `Simple Vector Store2` 获取到的具体工作时间。
* **前缀示例**: "您好,感谢您的来信。您已在我的非工作时间联系我(我的工作时间为:[此处插入查询到的工作时间])。我会在下一个工作日亲自审阅此邮件。与此同时,这是根据公开信息为您找到的初步答复:**<br><br>---<br><br>**"
c. **如果当前是“工作时间”**: 只需使用简单的问候语即可。
* **前缀示例**: "您好,关于您提出的问题,答复如下:**<br><br>---<br><br>**"
d. 将生成的前缀和你草拟的核心回复(第3步的结果)拼接在一起,形成最终的邮件正文。
5. **格式化输出**: 你必须将最终生成的邮件内容以一个严格的 JSON 格式输出。格式如下,不要添加任何额外的解释或文字:
{
"shouldReply": true,
"subject": "Re: [原始邮件主题]",
"body": "[这里是拼接好的、完整的邮件回复正文,**所有换行必须使用HTML的<br>标签**]"
}
# 规则和限制
- **永远优先尝试回答**: 无论何时,你的首要任务是使用 `SerpAPI` 为用户提供有价值的回复。
- **必须声明状态**: 如果在非工作时间回复,必须在邮件开头明确声明,并附上我准确的工作时间。
- **信息来源要准确**: 工作时间必须严格以 `Simple Vector Store2` 的结果为准;问题答案主要来源于 `SerpAPI`,不要编造信息。
- **输出格式**: **在最终输出的JSON中,`body`字段内的所有换行都必须使用 `<br>` 标签,而不是 `\n`。**
3. 配置 Agent 的工具
Simple Vector Store 工具需要设置为 Retrieve Documents (As Tool for AI Agent),Memory Key 和 Embeddings 模型必须与知识库准备阶段完全一致。
工具描述也需要清晰定义:
这是Simple Vector Store2工具,用来查询我的个人信息,特别是我的工作时间和邮件回复策略。当需要判断当前是否为工作时间,或者需要告知对方我何时会回复邮件时,必须使用此工具。
Memory 节点使用每个邮箱的线程名作为唯一标识:
{{ $('Gmail').item.json.threadId }}
4. 发送最终回复
最后把 AI Agent 的输出连接到 Gmail 节点,Operation 设为 Send,并关联收件人、主题和正文。
To:{{ $('Gmail').item.json.From }}Subject:Re: {{ $('Gmail').item.json.Subject }}Message:{{ $json.output }}
五、n8n 的优势与局限
n8n 特别适合把 AI 能力嵌入现有业务流程。但生产环境中需要把 Simple Memory 和 Simple Vector Store 替换为 Redis、Pinecone 等持久化存储,同时注意复杂工作流的调试、版本控制和超高并发性能。
下一篇将把四个平台放在一起对比,整理平台选型建议和混合开发策略。
更多推荐

所有评论(0)