{ "name": "HelloAgent_n8nCase", "nodes": [ { "parameters": { "pollTimes": { "item": [ { "mode": "everyMinute" } ] }, "filters": {} }, "type": "n8n-nodes-base.gmailTrigger", "typeVersion": 1.3, "position": [ 368, -160 ], "id": "46a534e3-3e72-4d0b-9a41-bc5c28834ee4", "name": "Gmail", "alwaysOutputData": false, "credentials": { "gmailOAuth2": { "id": "XD1oTN8hEyHzsxBR", "name": "Gmail account" } } }, { "parameters": { "options": {} }, "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini", "typeVersion": 1, "position": [ 416, 32 ], "id": "882131ef-83bc-415f-9430-59d40503c4ae", "name": "Google Gemini Chat Model", "credentials": { "googlePalmApi": { "id": "4HqrqZ1DN3LCRp28", "name": "Google Gemini(PaLM) Api account" } } }, { "parameters": { "sessionIdType": "customKey", "sessionKey": "={{ $('Gmail').item.json.threadId }}" }, "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow", "typeVersion": 1.3, "position": [ 544, 32 ], "id": "d230cedb-0a48-424f-8b79-4a5e8ae304a7", "name": "Simple Memory" }, { "parameters": { "options": {} }, "type": "@n8n/n8n-nodes-langchain.toolSerpApi", "typeVersion": 1, "position": [ 672, 32 ], "id": "164578ff-9ef8-41ab-b4c3-22f7871c4885", "name": "SerpAPI", "credentials": { "serpApi": { "id": "Nmxsc4WxINf7TGrA", "name": "SerpAPI account" } } }, { "parameters": { "sendTo": "={{ $('Gmail').item.json.From }}", "subject": "=Re: {{ $('Gmail').item.json.Subject }}", "message": "={{ $json.output }}", "options": {} }, "type": "n8n-nodes-base.gmail", "typeVersion": 2.1, "position": [ 928, -160 ], "id": "c680c326-e4e1-41df-9f76-520c4b522618", "name": "Send a message", "webhookId": "94ed889e-1e8a-4c90-980f-38cd02c32873", "credentials": { "gmailOAuth2": { "id": "XD1oTN8hEyHzsxBR", "name": "Gmail account" } } }, { "parameters": { "mode": "insert", "memoryKey": { "__rl": true, "value": "my-dailytime", "mode": "list" } }, "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory", "typeVersion": 1.3, "position": [ -16, -160 ], "id": "ead1ed07-6e2c-4ba2-9d28-d5adf76540f1", "name": "Simple Vector Store1" }, { "parameters": { "modelName": "models/gemini-embedding-exp-03-07" }, "type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini", "typeVersion": 1, "position": [ -32, 48 ], "id": "67402e5f-270b-4e31-9b48-4d2a2b60d79e", "name": "Embeddings Google Gemini", "credentials": { "googlePalmApi": { "id": "4HqrqZ1DN3LCRp28", "name": "Google Gemini(PaLM) Api account" } } }, { "parameters": { "options": {} }, "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader", "typeVersion": 1.1, "position": [ 128, 48 ], "id": "e55e36f5-8628-496b-acb7-52a4f67b9af2", "name": "Default Data Loader" }, { "parameters": { "jsCode": "return [\n\n {\n \"doc_id\": \"work-schedule-001\",\n \"content\": \"我的工作时间是周一至周五,上午9点到下午5点。时区是澳大利亚东部标准时间(AEST)。\"\n },\n {\n \"doc_id\": \"off-hours-policy-001\",\n \"content\": \"在非工作时间(包括周末和公共假期),我无法立即回复邮件。\"\n },\n {\n \"doc_id\": \"auto-reply-instruction-001\",\n \"content\": \"如果邮件是在非工作时间收到的,AI助手应该告知发件人,邮件已收到,我会在下一个工作日的9点到5点之间尽快处理并回复。\"\n }\n\n];" }, "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ -240, -160 ], "id": "75bc8b52-3ff2-43b3-a6fa-d200c821de4a", "name": "Code in JavaScript1" }, { "parameters": { "mode": "retrieve-as-tool", "toolDescription": "这是Simple Vector Store2工具,用来查询我的个人信息,特别是我的工作时间和邮件回复策略。当需要判断当前是否为工作时间,或者需要告知对方我何时会回复邮件时,必须使用此工具。", "memoryKey": { "__rl": true, "value": "my-dailytime", "mode": "list", "cachedResultName": "my-dailytime" } }, "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory", "typeVersion": 1.3, "position": [ 800, 48 ], "id": "ad9ba7d0-26b7-499b-9c5a-3d4295f6f7ed", "name": "Simple Vector Store2" }, { "parameters": { "modelName": "models/gemini-embedding-exp-03-07" }, "type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini", "typeVersion": 1, "position": [ 800, 208 ], "id": "9ff48ca5-a7fd-45d6-8ff3-01c86bf63eea", "name": "Embeddings Google Gemini1", "credentials": { "googlePalmApi": { "id": "4HqrqZ1DN3LCRp28", "name": "Google Gemini(PaLM) Api account" } } }, { "parameters": { "promptType": "define", "text": "=# 上下文信息\n- 当前时间: {{ new Date().toLocaleString('en-AU', { timeZone: 'Australia/Sydney', hour12: false }) }} (澳大利亚悉尼时间)\n- 发件人: {{ $json.From }}\n- 主题: {{ $json.Subject }}\n- 邮件正文: {{ $json.snippet }}", "hasOutputParser": true, "options": { "systemMessage": "=# 角色和目标\n你是一个全天候待命、专业高效的AI邮件助手。你的任务是:第一时间使用公开信息尽力回答所有邮件中的问题,并根据我的工作日程,在回复的开头附加上下文状态提醒。\n\n# 上下文信息\n- 当前时间: {{ new Date().toLocaleString('en-AU', { timeZone: 'Australia/Sydney', hour12: false }) }} (澳大利亚悉尼时间)\n- 邮件信息在输入数据中。\n\n# 可用工具\n- Simple Vector Store2: 用来查询我准确的工作时间(例如:周一至周五,上午9点到下午5点)。\n- SerpAPI: **[主要信息来源]** 优先使用此工具在互联网上搜索,以回答邮件中的具体问题。\n\n# 执行步骤\n1.  **分析问题**: 首先,仔细阅读邮件内容,提炼出发件人的核心问题。\n\n2.  **并行信息搜集**: 同时执行以下两个操作来收集信息:\n    a. 使用 `SerpAPI` 工具,上网搜索出发件人问题的答案。\n    b. 使用 `Simple Vector Store2` 工具,获取我设定的准确工作时间。\n\n3.  **草拟核心回复**: 根据 `SerpAPI` 搜集到的信息,清晰、直接地回答发件人的问题,这部分将作为邮件回复的主体。\n\n4.  **添加状态前缀并整合**:\n    a. 对比“当前时间”和我从工具中获取的工作时间。\n    b. **如果当前是“非工作时间”**: 创建一段状态提醒前缀。这段前缀**必须包含**从 `Simple Vector Store2` 获取到的具体工作时间。\n        * **前缀示例**: \"您好,感谢您的来信。您已在我的非工作时间联系我(我的工作时间为:[此处插入查询到的工作时间])。我会在下一个工作日亲自审阅此邮件。与此同时,这是根据公开信息为您找到的初步答复:**

---

**\"\n    c. **如果当前是“工作时间”**: 只需使用简单的问候语即可。\n        * **前缀示例**: \"您好,关于您提出的问题,答复如下:**

---

**\"\n    d. 将生成的前缀和你草拟的核心回复(第3步的结果)拼接在一起,形成最终的邮件正文。\n\n5.  **格式化输出**: 你必须将最终生成的邮件内容以一个严格的 JSON 格式输出。格式如下,不要添加任何额外的解释或文字:\n    {\n      \"shouldReply\": true,\n      \"subject\": \"Re: [原始邮件主题]\",\n      \"body\": \"[这里是拼接好的、完整的邮件回复正文,**所有换行必须使用HTML的
标签**]\"\n    }\n\n# 规则和限制\n- **永远优先尝试回答**: 无论何时,你的首要任务是使用 `SerpAPI` 为用户提供有价值的回复。\n- **必须声明状态**: 如果在非工作时间回复,必须在邮件开头明确声明,并附上我准确的工作时间。\n- **信息来源要准确**: 工作时间必须严格以 `Simple Vector Store2` 的结果为准;问题答案主要来源于 `SerpAPI`,不要编造信息。\n- **输出格式**: **在最终输出的JSON中,`body`字段内的所有换行都必须使用 `
` 标签,而不是 `\\n`。**" } }, "type": "@n8n/n8n-nodes-langchain.agent", "typeVersion": 2.2, "position": [ 576, -160 ], "id": "b5e90bc0-1d53-4bea-9300-b9982ff5b9b4", "name": "AI Agent1" } ], "pinData": {}, "connections": { "Gmail": { "main": [ [ { "node": "AI Agent1", "type": "main", "index": 0 } ] ] }, "Google Gemini Chat Model": { "ai_languageModel": [ [ { "node": "AI Agent1", "type": "ai_languageModel", "index": 0 } ] ] }, "Simple Memory": { "ai_memory": [ [ { "node": "AI Agent1", "type": "ai_memory", "index": 0 } ] ] }, "SerpAPI": { "ai_tool": [ [ { "node": "AI Agent1", "type": "ai_tool", "index": 0 } ] ] }, "Embeddings Google Gemini": { "ai_embedding": [ [ { "node": "Simple Vector Store1", "type": "ai_embedding", "index": 0 } ] ] }, "Default Data Loader": { "ai_document": [ [ { "node": "Simple Vector Store1", "type": "ai_document", "index": 0 } ] ] }, "Code in JavaScript1": { "main": [ [ { "node": "Simple Vector Store1", "type": "main", "index": 0 } ] ] }, "Simple Vector Store2": { "ai_tool": [ [ { "node": "AI Agent1", "type": "ai_tool", "index": 0 } ] ] }, "Embeddings Google Gemini1": { "ai_embedding": [ [ { "node": "Simple Vector Store2", "type": "ai_embedding", "index": 0 } ] ] }, "AI Agent1": { "main": [ [ { "node": "Send a message", "type": "main", "index": 0 } ] ] } }, "active": false, "settings": { "executionOrder": "v1" }, "versionId": "4b54e880-ce89-48af-bc22-d753d162b460", "meta": { "instanceId": "87f6aa8e755e8ea119eeb2e3b3db6a7d58c6b1d2109e9b94ec4ef98f2449f77d" }, "id": "b8xRsyXsQr5XE16V", "tags": [] }