Compare commits

...

37 Commits

Author SHA1 Message Date
fadeb3a5cd 更新 1.云大阁邮件.md 2025-09-07 17:56:25 +08:00
2af14358ea 删除 jslc DScASC.md 2025-09-07 17:53:13 +08:00
671362b10d 删除 QQQ.md 2025-09-07 17:53:09 +08:00
2a48709455 删除 未命名.md 2025-09-07 17:53:04 +08:00
71650606d8 删除 测试.md 2025-09-07 17:52:58 +08:00
e221cb3469 vault backup: 2025-09-02 16:25:12 2025-09-02 16:25:13 +08:00
bfad6b8290 更新 QQQ.md 2025-09-02 16:24:40 +08:00
fb34181933 Merge remote-tracking branch 'origin/main' 2025-09-02 16:22:52 +08:00
2cf8d9773e 添加 QQQ.mds 2025-09-02 16:22:41 +08:00
6413175102 vault backup: 2025-09-02 16:22:37 2025-09-02 16:22:38 +08:00
055d10454e vault backup: 2025-09-02 16:22:21 2025-09-02 16:22:22 +08:00
173fcac379 vault backup: 2025-09-02 14:46:42 2025-09-02 14:46:43 +08:00
7d8094e51c vault backup: 2025-09-02 14:45:34 2025-09-02 14:45:35 +08:00
1a2bef1c0b vault backup: 2025-09-02 14:27:29 2025-09-02 14:27:29 +08:00
d220f1875c 删除 test.md 2025-09-02 14:26:37 +08:00
3320dd5e85 添加 test.md 2025-09-02 14:25:55 +08:00
1312d2aedf vault backup: 2025-09-02 14:25:07 2025-09-02 14:25:07 +08:00
a1476634bc 更新 11.md 2025-09-02 14:23:12 +08:00
677c426519 添加 11 2025-09-02 14:19:26 +08:00
fa529be2d1 删除 test1 2025-09-02 14:19:15 +08:00
64488000a7 vault backup: 2025-09-02 14:18:58 2025-09-02 14:18:58 +08:00
45d9afb1c7 添加 test1 2025-09-02 14:17:49 +08:00
78313355f3 vault backup: 2025-09-02 14:17:19 2025-09-02 14:17:19 +08:00
2710f206a3 vault backup: 2025-09-02 14:13:51 2025-09-02 14:13:51 +08:00
45a40d084e vault backup: 2025-09-02 14:13:06 2025-09-02 14:13:06 +08:00
effe054a8c vault backup: 2025-09-02 14:12:45 2025-09-02 14:12:45 +08:00
dff19463f1 vault backup: 2025-09-02 14:12:08 2025-09-02 14:12:08 +08:00
5a2aa98dea vault backup: 2025-09-02 13:35:34 2025-09-02 13:35:34 +08:00
01f2cc1c8a vault backup: 2025-09-02 13:35:16 2025-09-02 13:35:16 +08:00
76d6d8aa42 vault backup: 2025-09-02 13:34:53 2025-09-02 13:34:53 +08:00
e931511753 vault backup: 2025-09-02 13:34:32 2025-09-02 13:34:32 +08:00
fa3bdb8fed vault backup: 2025-09-02 13:34:15 2025-09-02 13:34:15 +08:00
a1622e51b6 vault backup: 2025-09-01 23:48:02 2025-09-01 23:48:02 +08:00
7f5834e812 vault backup: 2025-09-01 23:14:32 2025-09-01 23:14:32 +08:00
eeb0f6cca1 vault backup: 2025-09-01 22:13:38 2025-09-01 22:13:38 +08:00
9c8d90f23e vault backup: 2025-09-01 22:12:09 2025-09-01 22:12:09 +08:00
305a2fb3b8 更新 实时更新?.md 2025-09-01 10:53:37 +08:00
17 changed files with 2300 additions and 13 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/test1

4
.obsidian/app.json vendored
View File

@ -1 +1,3 @@
{} {
"promptDelete": false
}

20
.obsidian/hotkeys.json vendored Normal file
View File

@ -0,0 +1,20 @@
{
"obsidian-git:pull": [
{
"modifiers": [
"Mod",
"Shift"
],
"key": "A"
}
],
"obsidian-git:push2": [
{
"modifiers": [
"Mod",
"Shift"
],
"key": "S"
}
]
}

View File

@ -6,7 +6,7 @@
"autoSaveInterval": 1, "autoSaveInterval": 1,
"autoPushInterval": 0, "autoPushInterval": 0,
"autoPullInterval": 1, "autoPullInterval": 1,
"autoPullOnBoot": false, "autoPullOnBoot": true,
"autoCommitOnlyStaged": false, "autoCommitOnlyStaged": false,
"disablePush": false, "disablePush": false,
"pullBeforePush": true, "pullBeforePush": true,

View File

@ -4,21 +4,21 @@
"type": "split", "type": "split",
"children": [ "children": [
{ {
"id": "4689b6e08aa00358", "id": "adefe992ec61230e",
"type": "tabs", "type": "tabs",
"children": [ "children": [
{ {
"id": "3bb084def04b55a6", "id": "48957f1dab50a180",
"type": "leaf", "type": "leaf",
"state": { "state": {
"type": "markdown", "type": "markdown",
"state": { "state": {
"file": "test.md", "file": "QQQ.md",
"mode": "source", "mode": "source",
"source": false "source": false
}, },
"icon": "lucide-file", "icon": "lucide-file",
"title": "test" "title": "QQQ"
} }
} }
] ]
@ -177,10 +177,31 @@
"obsidian-git:Open Git source control": false "obsidian-git:Open Git source control": false
} }
}, },
"active": "579b4b31c7cf4ebf", "active": "48957f1dab50a180",
"lastOpenFiles": [ "lastOpenFiles": [
"未命名.md",
"QQQ.md",
"QQQ.mds",
"jslc DScASC.md",
"测试.md",
"test.md",
"11.md",
"5.新闻.md",
"11",
"test1",
"未命名",
"测试1.md",
"123.md",
"实时更新.md",
"5.爬虫.md",
"4.证书识别.md",
"3.知识库对话.md",
"2.会议纪要.md",
"1.云大阁邮件.md",
"未命名.base",
"未命名 2.base",
"未命名 1.base",
"README.md", "README.md",
"实时更新?", "实时更新?"
"test.md"
] ]
} }

16
.openmcp/connection.json Normal file
View File

@ -0,0 +1,16 @@
{
"items": [
[
{
"connectionType": "STDIO",
"name": "STDIO-1756707174154",
"command": "npx",
"args": [
"-y",
"drawio-mcp-server"
],
"cwd": ""
}
]
]
}

View File

@ -0,0 +1,4 @@
{
"tabs": [],
"currentIndex": -1
}

652
1.云大阁邮件.md Normal file

File diff suppressed because one or more lines are too long

186
2.会议纪要.md Normal file

File diff suppressed because one or more lines are too long

291
3.知识库对话.md Normal file
View File

@ -0,0 +1,291 @@
{
"nodes": [
{
"parameters": {
"promptType": "define",
"text": "={{ $json.chatInput }}",
"hasOutputParser": true,
"options": {
"systemMessage": "你是一名个人知识库回答专家,在你链接的向量数据库中,存储着用户个人的知识库,你将根据知识库回答用户相关问题",
"batching": {}
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 2.1,
"position": [
-96,
-48
],
"id": "0cee6e45-82b0-45f3-8c76-abce0fc483ab",
"name": "AI Agent1"
},
{
"parameters": {
"mode": "retrieve-as-tool",
"toolDescription": "个人知识库",
"pineconeIndex": {
"__rl": true,
"value": "n8n",
"mode": "list",
"cachedResultName": "n8n"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
"typeVersion": 1.3,
"position": [
-80,
192
],
"id": "01a93ab3-a72c-4700-aad9-34f43975e2dd",
"name": "Pinecone Vector Store",
"credentials": {
"pineconeApi": {
"id": "7qJGb4MBAKjNsyZF",
"name": "PineconeApi account"
}
}
},
{
"parameters": {
"model": {
"__rl": true,
"value": "deepseek-r1",
"mode": "list",
"cachedResultName": "deepseek-r1"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.2,
"position": [
-192,
160
],
"id": "700c3732-e7a8-404b-8486-5e1436e503b0",
"name": "OpenAI Chat Model",
"credentials": {
"openAiApi": {
"id": "7mjh9ylUsSuSTkV1",
"name": "千问api"
}
}
},
{
"parameters": {
"model": "BAAI/bge-m3",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"typeVersion": 1.2,
"position": [
-32,
384
],
"id": "50462cf9-c635-4256-930a-80e36745339f",
"name": "Embeddings OpenAI",
"credentials": {
"openAiApi": {
"id": "yzrRDMLnAHckRsR3",
"name": "deepseek"
}
}
},
{
"parameters": {
"operation": "download",
"fileId": {
"__rl": true,
"value": "1epA4w6J1u_Eug0JFDfWbmDsu_bN0e9dX",
"mode": "list",
"cachedResultName": "“算力”和“数字经济飞地”协同发展研究报告.pdf",
"cachedResultUrl": "https://drive.google.com/file/d/1epA4w6J1u_Eug0JFDfWbmDsu_bN0e9dX/view?usp=drivesdk"
},
"options": {}
},
"type": "n8n-nodes-base.googleDrive",
"typeVersion": 3,
"position": [
-480,
592
],
"id": "6e0a41ea-b72d-4791-b8d4-dac36c4a3f24",
"name": "Down",
"credentials": {
"googleDriveOAuth2Api": {
"id": "MwQahrkkEINegvbC",
"name": "Google Drive account"
}
}
},
{
"parameters": {
"dataType": "binary",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"typeVersion": 1.1,
"position": [
-48,
800
],
"id": "b34d170c-9612-4fee-91fa-81f6c472b4a6",
"name": "Default Data Loader"
},
{
"parameters": {
"mode": "insert",
"pineconeIndex": {
"__rl": true,
"value": "n8n",
"mode": "list",
"cachedResultName": "n8n"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
"typeVersion": 1.3,
"position": [
-192,
592
],
"id": "c7f7d31c-f05c-40f0-b33d-8b684202711d",
"name": "Pinecone Vector Store1",
"credentials": {
"pineconeApi": {
"id": "7qJGb4MBAKjNsyZF",
"name": "PineconeApi account"
}
}
},
{
"parameters": {
"model": "BAAI/bge-m3",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"typeVersion": 1.2,
"position": [
-208,
800
],
"id": "822bb84d-253a-4174-970a-50a795b6001a",
"name": "Embeddings OpenAI1",
"credentials": {
"openAiApi": {
"id": "yzrRDMLnAHckRsR3",
"name": "deepseek"
}
}
},
{
"parameters": {
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"typeVersion": 1.3,
"position": [
-304,
-48
],
"id": "b4955d7f-c4ad-4b60-89b6-ba1330e4d2c8",
"name": "When chat message received",
"webhookId": "cab41746-c020-49bb-add4-624f2dbdf151"
}
],
"connections": {
"AI Agent1": {
"main": [
[]
]
},
"Pinecone Vector Store": {
"ai_tool": [
[
{
"node": "AI Agent1",
"type": "ai_tool",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent1",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Embeddings OpenAI": {
"ai_embedding": [
[
{
"node": "Pinecone Vector Store",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Down": {
"main": [
[
{
"node": "Pinecone Vector Store1",
"type": "main",
"index": 0
}
]
]
},
"Default Data Loader": {
"ai_document": [
[
{
"node": "Pinecone Vector Store1",
"type": "ai_document",
"index": 0
}
]
]
},
"Embeddings OpenAI1": {
"ai_embedding": [
[
{
"node": "Pinecone Vector Store1",
"type": "ai_embedding",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "AI Agent1",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {
"AI Agent1": [
{
"output": "根据知识库中的信息,**数字经济飞地**是指两个经济发展存在落差的行政地区打破原有行政区划限制,通过跨区域合作实现数字经济资源互补和协调发展的新型经济模式。其核心特点和分类如下:\n\n### 一、核心定义\n数字经济飞地是区域间通过行政管理和数字经济开发实现以下目标的合作模式\n1. **打破行政区划限制**:独立行政地区间建立合作机制\n2. **资源互补**:利用各自优势资源(土地、算力、技术、人才等)\n3. **协调发展**:促进数字经济产业梯度转移和集聚发展\n\n### 二、三大类型\n| 类型 | 特点 | 典型案例 |\n|------------|----------------------------------------------------------------------|------------------------------|\n| **资源型** | 欠发达地区提供土地/算力/能源,吸引数字产业聚集 | 宁夏“双节点”算力基地 |\n| **产业型** | 欠发达地区在发达地区设园区,招引企业/人才/项目落地 | 长三角飞地招商模式 |\n| **创新型** | 利用发达地区科研资源,建立实验室/孵化器发展数字技术 | 京津冀联合创新中心 |\n\n### 三、发展路径\n1. **政府引导**\n - 设立跨区域产业投资基金如数字宁夏“1244+N”计划\n - 建立产学研合作机制,柔性引进高端人才\n2. **优势互补**\n - 明确“飞出地”与“飞入地”资源禀赋(如宁夏提供能源,北上广提供技术)\n - 制定合理的利益分配机制如税收分成、GDP统计分摊\n3. **龙头企业带动**\n - 重点招引移动/电信/腾讯/阿里等头部企业\n - 培育“链主企业”形成产业集群(如宁夏招引智能终端、数据服务项目)\n\n### 四、实践案例\n- **宁夏模式**:作为全国唯一“算力+能源”双节点通过飞地招商引进云计算头部企业2023年推动智能终端、软件开发等项目落地\n- **长三角实践**2002年首创飞地经济通过“研发在上海制造在周边”实现产业链协同\n\n> 数据来源《算力与“数字经济飞地”协同发展研究报告》2023该模式起源于京津冀、长三角、珠三角地区现已成为区域数字经济发展的重要抓手。"
}
]
},
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "d4bc54c4750443ddb7fb9e6b4c7e38c46f3d96e6d4cbfdf57a74efbc3218b7c8"
}
}

418
4.证书识别.md Normal file
View File

@ -0,0 +1,418 @@
{
"nodes": [
{
"parameters": {
"operation": "Upload File to PDF.co",
"uploadMethod": "base64",
"base64Content": "={{ $('Loop').item.binary.data.data}}",
"name": "={{ $('Loop').item.json.fileName}}"
},
"type": "n8n-nodes-pdfco.PDFco Api",
"typeVersion": 1,
"position": [
624,
16
],
"id": "5a25a808-8e50-48e3-a044-38876405d088",
"name": "PDFco Api1",
"alwaysOutputData": true,
"credentials": {
"pdfcoApi": {
"id": "FzZjcxm1RTNvCgQO",
"name": "PDF.co account"
}
}
},
{
"parameters": {
"url": "={{ $json.url }}",
"advancedOptions": {}
},
"type": "n8n-nodes-pdfco.PDFco Api",
"typeVersion": 1,
"position": [
816,
16
],
"id": "a53cf652-50b2-4dac-85fb-2d40e1b32141",
"name": "PDFco Api2",
"credentials": {
"pdfcoApi": {
"id": "FzZjcxm1RTNvCgQO",
"name": "PDF.co account"
}
}
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"value": "1cU1DgnWH5rOEay9yeAwTawhu0bc7U-lpOyIFbp1L4Iw",
"mode": "list",
"cachedResultName": "证书识别",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1cU1DgnWH5rOEay9yeAwTawhu0bc7U-lpOyIFbp1L4Iw/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": "gid=0",
"mode": "list",
"cachedResultName": "工作表1",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1cU1DgnWH5rOEay9yeAwTawhu0bc7U-lpOyIFbp1L4Iw/edit#gid=0"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"报告编号": "={{ $json.body.certificate_information.report_number }}",
"证书编号": "={{ $json.body.certificate_information.certificate_number }}",
"项目名称": "={{ $json.body.certificate_information.certificate_title }}",
"单位名称": "={{ $json.body.certificate_information.company_name }}",
"依据标准": "={{ $json.body.certificate_information.standard_passed }}"
},
"matchingColumns": [],
"schema": [
{
"id": "证书编号",
"displayName": "证书编号",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "报告编号",
"displayName": "报告编号",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "项目名称",
"displayName": "项目名称",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "单位名称",
"displayName": "单位名称",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "依据标准",
"displayName": "依据标准",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "检验单位",
"displayName": "检验单位",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": true
},
{
"id": "通过时间",
"displayName": "通过时间",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.6,
"position": [
1040,
16
],
"id": "5013cc0f-f31b-40d8-b8d6-e1875bcefb63",
"name": "Append row in sheet",
"credentials": {
"googleSheetsOAuth2Api": {
"id": "N5B6RNl3HG7DQpbC",
"name": "Google Sheets account"
}
}
},
{
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $('Loop').item.json.fileName}}",
"operation": "endsWith",
"value2": ".pdf"
}
]
}
},
"id": "763af92a-a053-4344-a363-6b7fc0ae7dcf",
"name": "2. 判断是否为PDF",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [
352,
32
]
},
{
"parameters": {
"jsCode": "// 创建一个空数组,用于存放我们拆分后的新项目。\nconst outputItems = [];\n\n// 获取输入的第一个(也是唯一一个)项目。\nconst inputItem = $input.first();\n\n// 获取这个项目里包含所有二进制文件的那个 \"binary\" 对象。\n// 这个对象内部有 'files0', 'files1' 等属性。\nconst allBinaries = inputItem.binary;\n\n// 安全检查:如果这个项目里没有任何二进制文件,就直接返回空。\nif (!allBinaries) {\n return [];\n}\n\n// **核心逻辑**\n// 我们遍历 `allBinaries` 对象的所有属性(即 'files0', 'files1', 'files2' ...)。\nfor (const key in allBinaries) {\n\n // 获取当前属性(比如 'files0')对应的那个文件数据。\n const binaryData = allBinaries[key];\n \n // 再次安全检查,以防某个属性值为空。\n if (!binaryData) {\n continue;\n }\n\n // 为这个独立的文件创建新的JSON元数据。\n const newJsonData = {\n fileName: binaryData.fileName,\n mimeType: binaryData.mimeType,\n status: '已拆分,等待处理',\n originalProperty: key // 记录一下它原始的属性名,有时会很有用\n };\n\n // 创建一个符合n8n标准的新项目。\n const newOutputItem = {\n json: newJsonData,\n binary: {\n // 我们将这个独立的文件放入新项目的'binary'对象中。\n // 使用 'data' 作为属性名是一个n8n的标准做法。\n data: binaryData\n }\n };\n\n // 将这个全新的、只包含一个文件的项目,添加到我们的输出数组中。\n outputItems.push(newOutputItem);\n}\n\n// 返回包含所有新项目的数组。\n// n8n 接收到这个数组后,会自动将其内容“展开”成多个独立的输出项目。\nreturn outputItems;"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-128,
16
],
"id": "50b6e62c-a047-484c-a67f-7847fc490a08",
"name": "Code"
},
{
"parameters": {
"batchSize": 10,
"options": {}
},
"type": "n8n-nodes-base.splitInBatches",
"typeVersion": 3,
"position": [
64,
16
],
"id": "d1b7387d-8da5-414d-ae99-b2edbc17d1d4",
"name": "Loop"
},
{
"parameters": {
"httpMethod": "POST",
"path": "4a113d40-fd68-47e3-8b8a-313769be940e",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-368,
16
],
"id": "5d233cbf-6807-4c81-9f08-5181aa1f4596",
"name": "Webhook",
"webhookId": "4a113d40-fd68-47e3-8b8a-313769be940e"
}
],
"connections": {
"PDFco Api1": {
"main": [
[
{
"node": "PDFco Api2",
"type": "main",
"index": 0
}
]
]
},
"PDFco Api2": {
"main": [
[
{
"node": "Append row in sheet",
"type": "main",
"index": 0
}
]
]
},
"Append row in sheet": {
"main": [
[
{
"node": "Loop",
"type": "main",
"index": 0
}
]
]
},
"2. 判断是否为PDF": {
"main": [
[
{
"node": "PDFco Api1",
"type": "main",
"index": 0
}
]
]
},
"Code": {
"main": [
[
{
"node": "Loop",
"type": "main",
"index": 0
}
]
]
},
"Loop": {
"main": [
[],
[
{
"node": "2. 判断是否为PDF",
"type": "main",
"index": 0
}
]
]
},
"Webhook": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {
"PDFco Api1": [
{
"url": "https://pdf-temp-files.s3.us-west-2.amazonaws.com/JPR77ORXVD5WLXJD3GNZKT9Q1IOXTSG3/__-24V01Y002201-______________-____-_______-V8.13.1._-___.pdf?X-Amz-Expires=3600&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIZJDPLX6D7EHVCKA/20250814/us-west-2/s3/aws4_request&X-Amz-Date=20250814T082655Z&X-Amz-SignedHeaders=host&X-Amz-Signature=ebdcf1b4644d9ddfd4814b180f7743729480d0d873aa2f06c19bf54cca8bf570"
},
{
"url": "https://pdf-temp-files.s3.us-west-2.amazonaws.com/VPC72VAC1VQFP2WXT27Q1AKKV3XI5MAX/__-24V01Y002261-______________-_____-_________-V6.6.2_-___.pdf?X-Amz-Expires=3600&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIZJDPLX6D7EHVCKA/20250814/us-west-2/s3/aws4_request&X-Amz-Date=20250814T082708Z&X-Amz-SignedHeaders=host&X-Amz-Signature=dd65a5617bee0f958907ade37618dc0cc1d01fc1638fff918879128ca8dbe391"
},
{
"url": "https://pdf-temp-files.s3.us-west-2.amazonaws.com/2EODD4FGPVKLO6GWP57Z2JL9W3YU9CBX/__-24V01Y002263-______________-____-______MySQL-V5.8.0_-___.pdf?X-Amz-Expires=3600&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIZJDPLX6D7EHVCKA/20250814/us-west-2/s3/aws4_request&X-Amz-Date=20250814T082719Z&X-Amz-SignedHeaders=host&X-Amz-Signature=0e15e772651706af561da3c1df212fb516b79398ac2e021622f5cb463fa7d6ea"
}
],
"PDFco Api2": [
{
"pageCount": 1,
"url": "https://pdf-temp-files.s3.us-west-2.amazonaws.com/X7T3SNEZJCCIXKKWNK60ZCB2W94YN15U--155-100/invoice.json?X-Amz-Expires=3600&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIZJDPLX6D7EHVCKA/20250814/us-west-2/s3/aws4_request&X-Amz-Date=20250814T082746Z&X-Amz-SignedHeaders=host&X-Amz-Signature=dd0a56f5c3feccfffa3026e5136ad2c3eeb5865d888e15f9476e7d491c21dea3",
"body": {
"certificate_information": {
"certificate_number": "2024VY004140",
"report_number": "24V01Y002201-001",
"certificate_title": "可信云·对象存储服务能力检验证书",
"company_name": "中移 (苏州) 软件技术有限公司",
"company_address": "苏州市高新区昆仑山路58号1幢",
"product_name": "移动云对象存储",
"product_version": "V8.13.1",
"standard_passed": "Q/KXY G002-2018 《云计算服务客户信任体系能力要求 第2部分: 对象存储服务》"
},
"compliance_description": {
"description": "经中国信息通信研究院的检验, 贵单位的 移动云对象存储 V8.13.1 通过了Q/KXY G002-2018 《云计算服务客户信任体系能力要求 第2部分: 对象存储服务》 标准能力的检验, 达到可信云服务评估的要求, 特发此证。"
},
"additional_information": {
"website": "www.beetly.hot.cnt",
"disclaimer": "由于该检验是针对2024年10月15日前该产品/服务情况进行披露, 用户依然应留意在具体使用过程中可能发生的风险。因云计算软件等技术快速发展、产品/服务不断升级迭代、标准规范随行业发展不断更新等原因, 当产品或检验标准发生较大变化时, 建议本产品/服务进行重新检验。中国信息通信研究院将在2025年7月组织新一批检验。"
},
"authorized_signatory": {
"name": "구원석",
"organization": "云计算开源产业联盟 TRUSTED CLOUD 可信云 Openflource IndustRy/OSCAR",
"issue_date": "2024年10月5日"
},
"issuer_information": {
"organization": "中国信息通信研究院",
"address": "北京市海淀区花园北路52号",
"website": "http://www.caict.ac.cn/"
}
},
"duration": 82
},
{
"pageCount": 1,
"url": "https://pdf-temp-files.s3.us-west-2.amazonaws.com/T214HEXWOZ31RG6JZQ7CLJ6QA4FKIWRT--155-400/invoice.json?X-Amz-Expires=3600&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIZJDPLX6D7EHVCKA/20250814/us-west-2/s3/aws4_request&X-Amz-Date=20250814T082804Z&X-Amz-SignedHeaders=host&X-Amz-Signature=8ed258242e779ceef102be4533ae85ab94bf0b5a14a84d14b39a4b9b48932b3d",
"body": {
"certificate_information": {
"certificate_number": "2024VY004155",
"report_number": "24V01Y002261-001",
"certificate_title": "可信云·物理云主机服务能力检验证书",
"company_name": "中移 (苏州) 软件技术有限公司",
"company_address": "苏州高新区昆仑山路58号1幢",
"product_name": "移动云裸金属服务器",
"product_version": "V6.6.2",
"standard_passed": "Q/KXY G011-2018 《云计算服务客户信任体系能力要求第7部分: 物理云主机》"
},
"compliance_description": {
"description": "经中国信息通信研究院的检验, 贵单位的 移动云裸金属服务器 V6.6.2 通过了Q/KXY G011-2018 《云计算服务客户信任体系能力要求第7部分: 物理云主机》 标准能力的检验, 达到可信云服务评估的要求, 特发此证。"
},
"validity_information": {
"validity_details": "认证书有效性信息及详情可见vixuilextry.taog.com及可使云服务号。由于该检验是针对2024年10月15日前该产品/服务情况进行披露, 用户依然应留意在具体使用过程中可能发生的风险。因云计算软件等技术快速发展、产品/服务不断升级迭代、标准规范随行业发展不断更新等原因, 当产品或检验标准发生较大变化时, 建议本产品/服务进行重新检验。中国信息通信研究院将在2025年7月组织新一批检验。",
"issue_date": "2024年10月15日",
"authorized_signatory": "2원50"
},
"issuer_information": {
"issuer_name": "中国信息通信研究院",
"issuer_address": "北京市海淀区花园北路52号",
"issuer_website": "http://www.caict.ac.cn/"
}
},
"duration": 77
},
{
"pageCount": 1,
"url": "https://pdf-temp-files.s3.us-west-2.amazonaws.com/89UTBCGK7U607BRLG0A72JVQZO6YT9FN--155-600/invoice.json?X-Amz-Expires=3600&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIZJDPLX6D7EHVCKA/20250814/us-west-2/s3/aws4_request&X-Amz-Date=20250814T082821Z&X-Amz-SignedHeaders=host&X-Amz-Signature=23cd537c5284985c632fa6b372dbec6c413cd29630fb421411db1af8bbd1797c",
"body": {
"certificate_information": {
"certificate_number": "2024VY004145",
"report_number": "24V01Y002263-001",
"certificate_title": "可信云·云数据库服务能力检验证书",
"company_name": "中移 (苏州) 软件技术有限公司",
"company_address": "苏州高新区昆仑山路58号1幢",
"product_name": "移动云数据库MySQL",
"product_version": "V5.8.0",
"standard_passed": "Q/KXY G003-2018 《云计算服务客户信任体系能力要求 第3部分: 云数据库服务》"
},
"compliance_description": {
"description": "经中国信息通信研究院的检验, 贵单位的 移动云数据库MySQL V5.8.0 通过了Q/KXY G003-2018 《云计算服务客户信任体系能力要求 第3部分: 云数据库服务》 标准能力的检验, 达到可信云服务评估的要求, 特发此证。"
},
"validity_information": {
"validity_details": "证书有效性信息及详情可见,www.cs.yourtog.com及网络云服务等, 由于该检验是针对2024年10月15日前该产品/服务情况进行披露, 用户依然应留意在具体使用过程中可能发生的风险。因云计算软件等技术快速发展、产品/服务不断升级迭代、标准规范随行业发展不断更新等原因, 建议本产品/服务进行重新检验。中国信息通信研究院将在2025年7月组织新一批检验。",
"disclaimer": "当产品或检验标准发生较大变化时, 建议重新检验。"
},
"issuing_authority": {
"organization_name": "中国信息通信研究院",
"authorized_signatory": "授权签字人",
"issue_date": "2024年10月18日",
"address": "北京市海淀区花园北路52号",
"website": "http://www.caict.ac.cn/"
}
},
"duration": 85
}
]
},
"meta": {
"instanceId": "d4bc54c4750443ddb7fb9e6b4c7e38c46f3d96e6d4cbfdf57a74efbc3218b7c8"
}
}

181
5.新闻.md Normal file
View File

@ -0,0 +1,181 @@
{
"nodes": [
{
"parameters": {
"model": {
"__rl": true,
"value": "qwen-plus",
"mode": "list",
"cachedResultName": "qwen-plus"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.2,
"position": [
96,
80
],
"id": "a1e4191b-b11b-460f-b05e-7161ffc71cd7",
"name": "OpenAI Chat Model",
"credentials": {
"openAiApi": {
"id": "rg9eI0cqMkaxv3AK",
"name": "江oneapi"
}
}
},
{
"parameters": {
"promptType": "define",
"text": "=# AI Agent 提示词模板\n\"将以下新闻翻译为中文,保留原文链接,按格式输出:\n【标题】...\n【摘要】...\n【原文链接】...\"\n{{ $json.articles[0].title }}\n{{ $json.articles[0].description }}\n{{ $json.articles[0].url }}\n\n",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 2.2,
"position": [
112,
-128
],
"id": "92219cde-6705-4aee-81d9-4fba36983460",
"name": "AI Agent"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "bd4c88ff-7fc0-4a95-a2f4-1dce3b10b6a4",
"name": "articles",
"value": "={{ $json.articles }}",
"type": "string"
},
{
"id": "3849e755-1915-4dbe-914a-6c4db0e4af13",
"name": "articles[0].title",
"value": "={{ $json.articles[0].title }}",
"type": "string"
},
{
"id": "6d582dcb-6dba-4ab8-bb08-84d7c3e73984",
"name": "articles[0].id",
"value": "={{ $json.articles[0].id }}",
"type": "string"
},
{
"id": "5d1f776a-aff6-4ca0-9580-6e61357440b2",
"name": "articles[0].description",
"value": "={{ $json.articles[0].description }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
32,
-336
],
"id": "6b5b970e-2958-48de-b0b7-bd435e92638f",
"name": "Edit Fields"
},
{
"parameters": {
"url": "https://gnews.io/api/v4/search?q=ai&lang=en&apikey=d85e61621b37e244fdb78a7e9ff72eb4",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
-192,
-128
],
"id": "2f0222a8-f69f-4978-83b7-0a1324ef05c1",
"name": "HTTP Request"
},
{
"parameters": {},
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [
-400,
-128
],
"id": "a3c655e3-6923-4dc8-a7ef-f7433beb28d9",
"name": "When clicking Execute workflow"
},
{
"parameters": {
"operation": "html",
"binaryPropertyName": "=data {{ $json.output }}",
"options": {}
},
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1.1,
"position": [
416,
-128
],
"id": "39c77f86-ea1f-4357-8d74-66667ac42a42",
"name": "Convert to File"
}
],
"connections": {
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "Convert to File",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[]
]
},
"HTTP Request": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"When clicking Execute workflow": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {},
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "d4bc54c4750443ddb7fb9e6b4c7e38c46f3d96e6d4cbfdf57a74efbc3218b7c8"
}
}

498
5.爬虫.md Normal file
View File

@ -0,0 +1,498 @@
{
"nodes": [
{
"parameters": {
"websiteUrl": "https://usaleaks.com/",
"userPrompt": "提取页面上列出的每项管道服务的以下信息: - 服务名称 (例如:疏通排水管、管道维修) - 服务描述 - 供应商名称 (管道公司名称) - 供应商评级 (如果可用) - 价格范围 (如果可用) - 联系方式 (电话号码、电子邮件) 以对象数组的 JSON 格式返回数据。"
},
"id": "9e945482-63c5-44fc-9fd2-2c9ae9061753",
"name": "ScrapeGraphAI - Plumbing",
"type": "n8n-nodes-scrapegraphai.scrapegraphAi",
"position": [
160,
320
],
"typeVersion": 1,
"credentials": {
"scrapegraphAIApi": {
"id": "Kvx2Kq3gdZLUbK9m",
"name": "ScrapegraphAI account"
}
}
},
{
"parameters": {
"websiteUrl": "1",
"userPrompt": "1"
},
"id": "e2dc86c2-058c-4bb2-b132-f485f7c10d9f",
"name": "ScrapeGraphAI - Electrical",
"type": "n8n-nodes-scrapegraphai.scrapegraphAi",
"position": [
160,
480
],
"typeVersion": 1,
"credentials": {
"scrapegraphAIApi": {
"id": "Kvx2Kq3gdZLUbK9m",
"name": "ScrapegraphAI account"
}
}
},
{
"parameters": {
"websiteUrl": "1",
"userPrompt": "1"
},
"id": "3fb81319-243e-4996-a46e-53d5e466a571",
"name": "ScrapeGraphAI - HVAC",
"type": "n8n-nodes-scrapegraphai.scrapegraphAi",
"position": [
160,
640
],
"typeVersion": 1,
"credentials": {
"scrapegraphAIApi": {
"id": "Kvx2Kq3gdZLUbK9m",
"name": "ScrapegraphAI account"
}
}
},
{
"parameters": {
"jsCode": "// Cost Analyzer - Process and analyze maintenance costs\nconst allInputs = $input.all();\nconst currentDate = new Date().toISOString().split('T')[0];\nconst analysisResults = [];\n\n// Process each service category\nallInputs.forEach((input, index) => {\n const serviceData = input.json;\n let services = [];\n \n // Extract services from different possible structures\n if (serviceData.result && serviceData.result.services) {\n services = serviceData.result.services;\n } else if (serviceData.result && Array.isArray(serviceData.result)) {\n services = serviceData.result;\n } else if (Array.isArray(serviceData)) {\n services = serviceData;\n }\n \n // Determine service category based on input index\n const categories = ['Plumbing', 'Electrical', 'HVAC'];\n const category = categories[index] || 'General';\n \n services.forEach(service => {\n if (service && service.service_name) {\n // Parse price range to get average cost\n let averageCost = 0;\n let minCost = 0;\n let maxCost = 0;\n \n if (service.price_range) {\n const priceMatch = service.price_range.match(/\\$(\\d+)[-](\\d+)/);\n if (priceMatch) {\n minCost = parseInt(priceMatch[1]);\n maxCost = parseInt(priceMatch[2]);\n averageCost = (minCost + maxCost) / 2;\n } else {\n const singlePrice = service.price_range.match(/\\$(\\d+)/);\n if (singlePrice) {\n averageCost = parseInt(singlePrice[1]);\n minCost = maxCost = averageCost;\n }\n }\n }\n \n // Determine cost level\n let costLevel = 'Medium';\n if (averageCost < 200) costLevel = 'Low';\n else if (averageCost > 500) costLevel = 'High';\n \n analysisResults.push({\n date_analyzed: currentDate,\n category: category,\n service_name: service.service_name || 'Unknown Service',\n provider_name: service.provider_name || 'Unknown Provider',\n price_range: service.price_range || 'Price not available',\n average_cost: averageCost,\n min_cost: minCost,\n max_cost: maxCost,\n cost_level: costLevel,\n rating: service.rating || 'No rating',\n location: service.location || 'Location not specified',\n phone: service.phone || 'No phone',\n description: service.description || 'No description',\n provider_url: service.provider_url || '#',\n urgency_score: category === 'Plumbing' ? 8 : category === 'Electrical' ? 9 : 6\n });\n }\n });\n});\n\nconsole.log(`Analyzed ${analysisResults.length} services across categories`);\n\nreturn analysisResults.map(result => ({ json: result }));"
},
"id": "55397331-cffb-4e77-b0b0-6ea3d978fa41",
"name": "Cost Analyzer",
"type": "n8n-nodes-base.code",
"position": [
560,
240
],
"notesInFlow": true,
"typeVersion": 2,
"notes": "Analyzes costs and\ncategorizes services\nby price level"
},
{
"parameters": {
"jsCode": "// Service Comparer - Compare services and find best options\nconst services = $input.all().map(item => item.json);\nconst comparisonResults = [];\nconst serviceGroups = {};\n\n// Group services by category and service name\nservices.forEach(service => {\n const key = `${service.category}_${service.service_name}`;\n if (!serviceGroups[key]) {\n serviceGroups[key] = [];\n }\n serviceGroups[key].push(service);\n});\n\n// Compare services within each group\nObject.keys(serviceGroups).forEach(groupKey => {\n const group = serviceGroups[groupKey];\n if (group.length > 1) {\n // Sort by rating and cost\n const sortedByRating = [...group].sort((a, b) => {\n const ratingA = parseFloat(a.rating) || 0;\n const ratingB = parseFloat(b.rating) || 0;\n return ratingB - ratingA;\n });\n \n const sortedByCost = [...group].sort((a, b) => a.average_cost - b.average_cost);\n \n const bestRated = sortedByRating[0];\n const cheapest = sortedByCost[0];\n const mostExpensive = sortedByCost[sortedByCost.length - 1];\n \n // Calculate price variance\n const costs = group.map(s => s.average_cost).filter(c => c > 0);\n const avgGroupCost = costs.length > 0 ? costs.reduce((a, b) => a + b, 0) / costs.length : 0;\n const priceVariance = costs.length > 1 ? Math.max(...costs) - Math.min(...costs) : 0;\n \n comparisonResults.push({\n service_category: group[0].category,\n service_name: group[0].service_name,\n provider_count: group.length,\n average_market_price: Math.round(avgGroupCost),\n price_variance: priceVariance,\n best_rated_provider: {\n name: bestRated.provider_name,\n rating: bestRated.rating,\n price: bestRated.price_range,\n phone: bestRated.phone\n },\n cheapest_provider: {\n name: cheapest.provider_name,\n rating: cheapest.rating,\n price: cheapest.price_range,\n phone: cheapest.phone\n },\n most_expensive_provider: {\n name: mostExpensive.provider_name,\n rating: mostExpensive.rating,\n price: mostExpensive.price_range,\n phone: mostExpensive.phone\n },\n recommendation: bestRated.provider_name === cheapest.provider_name ? \n 'Best Value (High Rating + Low Cost)' : \n parseFloat(bestRated.rating) > 4.5 ? 'Quality Focus' : 'Cost Focus',\n all_providers: group\n });\n } else {\n // Single provider for this service\n const service = group[0];\n comparisonResults.push({\n service_category: service.category,\n service_name: service.service_name,\n provider_count: 1,\n average_market_price: service.average_cost,\n price_variance: 0,\n single_provider: {\n name: service.provider_name,\n rating: service.rating,\n price: service.price_range,\n phone: service.phone\n },\n recommendation: 'Single Option Available',\n all_providers: [service]\n });\n }\n});\n\nconsole.log(`Created comparisons for ${comparisonResults.length} service types`);\n\nreturn comparisonResults.map(result => ({ json: result }));"
},
"id": "d2d167a7-d2e8-4f1f-a1d4-891786933808",
"name": "Service Comparer",
"type": "n8n-nodes-base.code",
"position": [
864,
240
],
"notesInFlow": true,
"typeVersion": 2,
"notes": "Compares providers\nand finds best\noptions by rating\nand cost"
},
{
"parameters": {
"jsCode": "// Budget Planner - Create maintenance budget and scheduling recommendations\nconst comparisons = $input.all().map(item => item.json);\nconst currentDate = new Date();\nconst currentMonth = currentDate.getMonth() + 1;\nconst currentYear = currentDate.getFullYear();\n\n// Define maintenance categories and typical frequencies\nconst maintenanceSchedule = {\n 'HVAC': { frequency: 'biannual', urgency: 'high', typical_cost: 400 },\n 'Plumbing': { frequency: 'annual', urgency: 'medium', typical_cost: 300 },\n 'Electrical': { frequency: 'biannual', urgency: 'high', typical_cost: 350 }\n};\n\n// Create budget recommendations\nconst budgetPlan = {\n planning_date: currentDate.toISOString().split('T')[0],\n budget_year: currentYear,\n quarterly_budgets: [],\n annual_summary: {\n total_estimated_cost: 0,\n high_priority_services: [],\n medium_priority_services: [],\n low_priority_services: []\n },\n service_recommendations: [],\n cost_optimization_tips: []\n};\n\n// Process each service comparison\ncomparisons.forEach(comparison => {\n const category = comparison.service_category;\n const schedule = maintenanceSchedule[category] || { frequency: 'annual', urgency: 'medium', typical_cost: 250 };\n \n // Determine priority based on service type and cost\n let priority = 'Medium';\n if (category === 'Electrical' || category === 'HVAC') priority = 'High';\n if (comparison.average_market_price > 500) priority = 'High';\n if (comparison.average_market_price < 200) priority = 'Low';\n \n const recommendation = {\n service: comparison.service_name,\n category: category,\n priority: priority,\n estimated_annual_cost: comparison.average_market_price,\n recommended_frequency: schedule.frequency,\n best_provider: comparison.best_rated_provider || comparison.single_provider,\n budget_provider: comparison.cheapest_provider || comparison.single_provider,\n next_service_month: schedule.frequency === 'biannual' ? \n [3, 9] : schedule.frequency === 'quarterly' ? [3, 6, 9, 12] : [6],\n cost_savings_potential: comparison.price_variance || 0\n };\n \n budgetPlan.service_recommendations.push(recommendation);\n budgetPlan.annual_summary.total_estimated_cost += comparison.average_market_price;\n \n // Categorize by priority\n if (priority === 'High') {\n budgetPlan.annual_summary.high_priority_services.push(recommendation);\n } else if (priority === 'Medium') {\n budgetPlan.annual_summary.medium_priority_services.push(recommendation);\n } else {\n budgetPlan.annual_summary.low_priority_services.push(recommendation);\n }\n});\n\n// Create quarterly budget breakdown\nfor (let quarter = 1; quarter <= 4; quarter++) {\n const quarterMonths = [(quarter - 1) * 3 + 1, (quarter - 1) * 3 + 2, (quarter - 1) * 3 + 3];\n let quarterBudget = 0;\n const quarterServices = [];\n \n budgetPlan.service_recommendations.forEach(rec => {\n rec.next_service_month.forEach(month => {\n if (quarterMonths.includes(month)) {\n quarterBudget += rec.estimated_annual_cost;\n quarterServices.push({\n service: rec.service,\n month: month,\n cost: rec.estimated_annual_cost,\n provider: rec.best_provider.name\n });\n }\n });\n });\n \n budgetPlan.quarterly_budgets.push({\n quarter: quarter,\n months: quarterMonths,\n total_budget: quarterBudget,\n services: quarterServices\n });\n}\n\n// Add cost optimization tips\nbudgetPlan.cost_optimization_tips = [\n 'Bundle multiple services with the same provider for discounts',\n 'Schedule preventive maintenance to avoid emergency repairs',\n 'Get multiple quotes for expensive services (>$500)',\n 'Consider seasonal pricing - HVAC services may be cheaper in off-season',\n 'Join service contracts for regular maintenance at reduced rates'\n];\n\n// Calculate budget metrics\nbudgetPlan.annual_summary.monthly_average = Math.round(budgetPlan.annual_summary.total_estimated_cost / 12);\nbudgetPlan.annual_summary.high_priority_cost = budgetPlan.annual_summary.high_priority_services\n .reduce((sum, service) => sum + service.estimated_annual_cost, 0);\nbudgetPlan.annual_summary.potential_savings = budgetPlan.service_recommendations\n .reduce((sum, rec) => sum + rec.cost_savings_potential, 0);\n\nconsole.log(`Created budget plan with total estimated cost: $${budgetPlan.annual_summary.total_estimated_cost}`);\n\nreturn [{ json: budgetPlan }];"
},
"id": "0644848a-4c2f-42b9-84ce-9c3e22cb47c8",
"name": "Budget Planner",
"type": "n8n-nodes-base.code",
"position": [
1168,
240
],
"notesInFlow": true,
"typeVersion": 2,
"notes": "Creates annual\nbudget plan with\nquarterly breakdown\nand recommendations"
},
{
"parameters": {
"jsCode": "// Property Manager Alert - Format comprehensive maintenance report\nconst budgetData = $input.all()[0].json;\nconst currentDate = new Date().toLocaleDateString();\nconst currentTime = new Date().toLocaleTimeString();\n\n// Create formatted alert message\nfunction formatCurrency(amount) {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 0\n }).format(amount);\n}\n\nfunction createMaintenanceAlert() {\n const { annual_summary, quarterly_budgets, service_recommendations } = budgetData;\n \n let alertMessage = `🏠 **PROPERTY MAINTENANCE COST ANALYSIS**\\n`;\n alertMessage += `📅 Generated: ${currentDate} at ${currentTime}\\n\\n`;\n \n // Annual Summary\n alertMessage += `💰 **ANNUAL BUDGET SUMMARY**\\n`;\n alertMessage += `• Total Estimated Cost: ${formatCurrency(annual_summary.total_estimated_cost)}\\n`;\n alertMessage += `• Monthly Average: ${formatCurrency(annual_summary.monthly_average)}\\n`;\n alertMessage += `• Potential Savings: ${formatCurrency(annual_summary.potential_savings)}\\n\\n`;\n \n // Priority Breakdown\n alertMessage += `🚨 **SERVICE PRIORITIES**\\n`;\n alertMessage += `• High Priority: ${annual_summary.high_priority_services.length} services (${formatCurrency(annual_summary.high_priority_cost)})\\n`;\n alertMessage += `• Medium Priority: ${annual_summary.medium_priority_services.length} services\\n`;\n alertMessage += `• Low Priority: ${annual_summary.low_priority_services.length} services\\n\\n`;\n \n // Quarterly Breakdown\n alertMessage += `📊 **QUARTERLY BUDGET BREAKDOWN**\\n`;\n quarterly_budgets.forEach(quarter => {\n if (quarter.total_budget > 0) {\n alertMessage += `Q${quarter.quarter}: ${formatCurrency(quarter.total_budget)} (${quarter.services.length} services)\\n`;\n }\n });\n alertMessage += `\\n`;\n \n // Top Service Recommendations\n alertMessage += `🔧 **TOP SERVICE RECOMMENDATIONS**\\n`;\n const topServices = service_recommendations\n .filter(rec => rec.priority === 'High')\n .slice(0, 5);\n \n topServices.forEach((service, index) => {\n alertMessage += `${index + 1}. **${service.service}** (${service.category})\\n`;\n alertMessage += ` • Cost: ${formatCurrency(service.estimated_annual_cost)}\\n`;\n alertMessage += ` • Provider: ${service.best_provider.name}\\n`;\n alertMessage += ` • Rating: ${service.best_provider.rating}\\n`;\n alertMessage += ` • Phone: ${service.best_provider.phone}\\n\\n`;\n });\n \n // Cost Optimization Tips\n alertMessage += `💡 **COST OPTIMIZATION TIPS**\\n`;\n budgetData.cost_optimization_tips.slice(0, 3).forEach((tip, index) => {\n alertMessage += `${index + 1}. ${tip}\\n`;\n });\n \n alertMessage += `\\n━━━━━━━━━━━━━━━━━━━━━━\\n`;\n alertMessage += `📈 **Next Update**: Next week\\n`;\n alertMessage += `🔄 **Data Source**: Multiple contractor websites\\n`;\n \n return alertMessage;\n}\n\n// Create summary for property management system\nfunction createSystemSummary() {\n return {\n alert_type: 'maintenance_cost_analysis',\n severity: 'info',\n property_count: 1, // Adjust based on actual properties\n total_annual_budget: budgetData.annual_summary.total_estimated_cost,\n high_priority_count: budgetData.annual_summary.high_priority_services.length,\n next_quarter_budget: budgetData.quarterly_budgets[0]?.total_budget || 0,\n top_expense_category: budgetData.service_recommendations\n .reduce((max, current) => \n current.estimated_annual_cost > max.estimated_annual_cost ? current : max\n ).category,\n generated_at: new Date().toISOString(),\n recommendations_count: budgetData.service_recommendations.length\n };\n}\n\nconst alertMessage = createMaintenanceAlert();\nconst systemSummary = createSystemSummary();\n\nconsole.log(`Generated property manager alert with ${budgetData.service_recommendations.length} service recommendations`);\n\nreturn [\n {\n json: {\n message_text: alertMessage,\n system_summary: systemSummary,\n full_budget_data: budgetData,\n alert_timestamp: new Date().toISOString(),\n requires_action: budgetData.annual_summary.high_priority_services.length > 0\n }\n }\n];"
},
"id": "d8323e18-6768-4606-b7ee-57d40ebf263a",
"name": "Property Manager Alert",
"type": "n8n-nodes-base.code",
"position": [
1456,
240
],
"notesInFlow": true,
"typeVersion": 2,
"notes": "Formats comprehensive\nalert for property\nmanager with budget\nanalysis and recommendations"
},
{
"parameters": {
"content": "# 步骤 1: Weekly Schedule Trigger ⏰\n\n每周触发此 workflow以更新维护成本数据。\n\n## 配置\n- 设置为每周运行每7天\n- 可根据需要自定义运行时间\n- 可更改为不同的运行间隔",
"height": 1036,
"width": 400,
"color": 5
},
"id": "3e8f8b72-ece2-40d4-821e-843a41dca58a",
"name": "Sticky Note - Trigger",
"type": "n8n-nodes-base.stickyNote",
"position": [
-384,
-224
],
"typeVersion": 1
},
{
"parameters": {
"content": "# 步骤 2: Multi-Source Scraping 🤖\n\n三个 ScrapeGraphAI 节点抓取不同承包商类别的数据:\n\n- **Plumbing Services**(管道服务):疏通排水管、管道维修等。\n- **Electrical Services**(电气服务):插座安装、布线等。\n- **HVAC Services**暖通空调服务AC 维修、供暖维护等。\n\n## 提取内容\n- 服务名称和描述\n- 供应商详情和评级\n- 价格范围和联系方式",
"height": 1040,
"width": 400,
"color": 5
},
"id": "49ce1bdc-f7b9-4f3a-871c-4fc73cf8bff4",
"name": "Sticky Note - Scraping",
"type": "n8n-nodes-base.stickyNote",
"position": [
16,
-224
],
"typeVersion": 1
},
{
"parameters": {
"content": "# 步骤 3: Cost Analysis & Comparison 📊\n\n**Cost Analyzer**:处理抓取的数据,计算平均成本、成本水平和紧急程度得分。\n\n**Service Comparer**:比较每个服务类别中的供应商,以找出:\n- 最佳评级供应商\n- 最具成本效益的选项\n- 价格差异分析\n\n## 输出\n- 分类成本分析\n- 供应商比较\n- 推荐逻辑",
"height": 1040,
"width": 400,
"color": 5
},
"id": "00b370ca-7bc3-4e1c-8ae0-09ccb9c2d818",
"name": "Sticky Note - Analysis",
"type": "n8n-nodes-base.stickyNote",
"position": [
416,
-224
],
"typeVersion": 1
},
{
"parameters": {
"content": "# 步骤 4: Budget Planning & Alerts 💰\n\n**Budget Planner**:创建全面的年度预算,包含:\n- 季度预算明细\n- 服务调度建议\n- 成本优化策略\n- 基于优先级的规划\n\n**Property Manager Alert**:将结果格式化为可操作的警报,包含:\n- 预算摘要\n- 高优先级服务\n- 供应商推荐\n- 成本节约技巧",
"height": 1040,
"width": 832,
"color": 5
},
"id": "062a01f7-37ec-40cb-bb97-ddc4d3771f49",
"name": "Sticky Note - Planning",
"type": "n8n-nodes-base.stickyNote",
"position": [
816,
-224
],
"typeVersion": 1
},
{
"parameters": {
"promptType": "define",
"text": "=翻译以下内容为中文:\n {{ $json.message_text }}",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 2.2,
"position": [
1712,
240
],
"id": "37a70dd8-460f-41f8-bfa6-10da87cfac51",
"name": "AI Agent"
},
{
"parameters": {
"model": {
"__rl": true,
"value": "qwen-plus",
"mode": "list",
"cachedResultName": "qwen-plus"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.2,
"position": [
1712,
480
],
"id": "2778e6d0-2323-4b93-b03f-f9a319115977",
"name": "OpenAI Chat Model",
"credentials": {
"openAiApi": {
"id": "rg9eI0cqMkaxv3AK",
"name": "江oneapi"
}
}
},
{
"parameters": {
"operation": "toText",
"sourceProperty": "output",
"options": {}
},
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1.1,
"position": [
2064,
240
],
"id": "7a0dfdc1-241e-4fc7-b6bd-6a32346e012b",
"name": "Convert to File"
},
{
"parameters": {},
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [
-160,
320
],
"id": "413a5785-59fd-43be-b934-acd9c314e197",
"name": "When clicking Execute workflow"
}
],
"connections": {
"ScrapeGraphAI - Plumbing": {
"main": [
[
{
"node": "Cost Analyzer",
"type": "main",
"index": 0
}
]
]
},
"ScrapeGraphAI - Electrical": {
"main": [
[]
]
},
"ScrapeGraphAI - HVAC": {
"main": [
[]
]
},
"Cost Analyzer": {
"main": [
[
{
"node": "Service Comparer",
"type": "main",
"index": 0
}
]
]
},
"Service Comparer": {
"main": [
[
{
"node": "Budget Planner",
"type": "main",
"index": 0
}
]
]
},
"Budget Planner": {
"main": [
[
{
"node": "Property Manager Alert",
"type": "main",
"index": 0
}
]
]
},
"Property Manager Alert": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "Convert to File",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"When clicking Execute workflow": {
"main": [
[
{
"node": "ScrapeGraphAI - Plumbing",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {
"ScrapeGraphAI - Plumbing": [
{
"request_id": "08954bc8-3fc8-4760-8754-355b4bcdf886",
"status": "completed",
"website_url": "https://usaleaks.com/",
"user_prompt": "提取页面上列出的每项管道服务的以下信息: - 服务名称 (例如:疏通排水管、管道维修) - 服务描述 - 供应商名称 (管道公司名称) - 供应商评级 (如果可用) - 价格范围 (如果可用) - 联系方式 (电话号码、电子邮件) 以对象数组的 JSON 格式返回数据。",
"result": {
"services": [
{
"service_name": "Plumbing Service",
"service_description": "Residential & Commercial plumbing services",
"vendor_name": "USA Leaks",
"vendor_rating": 4.9,
"price_range": "Not specified",
"contact_info": "(813) 544-7711, (727) 746-5090, [Email Us](https://usaleaks.com/contact-us)"
},
{
"service_name": "Leak Detection",
"service_description": "Expert leak detection services for residential and commercial properties",
"vendor_name": "USA Leaks",
"vendor_rating": 4.9,
"price_range": "Not specified",
"contact_info": "(813) 544-7711, (727) 746-5090, [Email Us](https://usaleaks.com/contact-us)"
},
{
"service_name": "Mold Assessment and Removal",
"service_description": "State licensed & insured mold assessors and remediators",
"vendor_name": "USA Leaks",
"vendor_rating": 4.9,
"price_range": "Not specified",
"contact_info": "(813) 544-7711, (727) 746-5090, [Email Us](https://usaleaks.com/contact-us)"
},
{
"service_name": "Water Line Repairs & Repipes",
"service_description": "Water line repairs and repipes for residential and commercial properties",
"vendor_name": "USA Leaks",
"vendor_rating": 4.9,
"price_range": "Not specified",
"contact_info": "(813) 544-7711, (727) 746-5090, [Email Us](https://usaleaks.com/contact-us)"
},
{
"service_name": "Drain Backups and Clogs",
"service_description": "Drain backup and clog services for residential and commercial properties",
"vendor_name": "USA Leaks",
"vendor_rating": 4.9,
"price_range": "Not specified",
"contact_info": "(813) 544-7711, (727) 746-5090, [Email Us](https://usaleaks.com/contact-us)"
},
{
"service_name": "Water Heater Repairs and Replacements",
"service_description": "Water heater repair and replacement services for residential and commercial properties",
"vendor_name": "USA Leaks",
"vendor_rating": 4.9,
"price_range": "Not specified",
"contact_info": "(813) 544-7711, (727) 746-5090, [Email Us](https://usaleaks.com/contact-us)"
},
{
"service_name": "Natural Gas & Propane Fixtures",
"service_description": "Natural gas and propane fixture services for residential and commercial properties",
"vendor_name": "USA Leaks",
"vendor_rating": 4.9,
"price_range": "Not specified",
"contact_info": "(813) 544-7711, (727) 746-5090, [Email Us](https://usaleaks.com/contact-us)"
},
{
"service_name": "Toilet Repairs and Replacements",
"service_description": "Toilet repair and replacement services for residential and commercial properties",
"vendor_name": "USA Leaks",
"vendor_rating": 4.9,
"price_range": "Not specified",
"contact_info": "(813) 544-7711, (727) 746-5090, [Email Us](https://usaleaks.com/contact-us)"
},
{
"service_name": "Faucets and Shower Valves",
"service_description": "Faucet and shower valve services for residential and commercial properties",
"vendor_name": "USA Leaks",
"vendor_rating": 4.9,
"price_range": "Not specified",
"contact_info": "(813) 544-7711, (727) 746-5090, [Email Us](https://usaleaks.com/contact-us)"
},
{
"service_name": "Sewer Line Repairs and Replacements",
"service_description": "Sewer line repair and replacement services for residential and commercial properties",
"vendor_name": "USA Leaks",
"vendor_rating": 4.9,
"price_range": "Not specified",
"contact_info": "(813) 544-7711, (727) 746-5090, [Email Us](https://usaleaks.com/contact-us)"
},
{
"service_name": "Water Treatment/Softeners",
"service_description": "Water treatment and softener services for residential and commercial properties",
"vendor_name": "USA Leaks",
"vendor_rating": 4.9,
"price_range": "Not specified",
"contact_info": "(813) 544-7711, (727) 746-5090, [Email Us](https://usaleaks.com/contact-us)"
},
{
"service_name": "Shower Pan Replacements",
"service_description": "Shower pan replacement services for residential and commercial properties",
"vendor_name": "USA Leaks",
"vendor_rating": 4.9,
"price_range": "Not specified",
"contact_info": "(813) 544-7711, (727) 746-5090, [Email Us](https://usaleaks.com/contact-us)"
},
{
"service_name": "Any Commercial Plumbing",
"service_description": "Commercial plumbing services for various properties",
"vendor_name": "USA Leaks",
"vendor_rating": 4.9,
"price_range": "Not specified",
"contact_info": "(813) 544-7711, (727) 746-5090, [Email Us](https://usaleaks.com/contact-us)"
},
{
"service_name": "Sewer Camera Diagnostic",
"service_description": "Sewer camera diagnostic services for residential and commercial properties",
"vendor_name": "USA Leaks",
"vendor_rating": 4.9,
"price_range": "Not specified",
"contact_info": "(813) 544-7711, (727) 746-5090, [Email Us](https://usaleaks.com/contact-us)"
},
{
"service_name": "Ultrasonic Slab Leak Detection",
"service_description": "Ultrasonic slab leak detection services for residential and commercial properties",
"vendor_name": "USA Leaks",
"vendor_rating": 4.9,
"price_range": "Not specified",
"contact_info": "(813) 544-7711, (727) 746-5090, [Email Us](https://usaleaks.com/contact-us)"
}
]
},
"error": ""
}
],
"AI Agent": [
{
"output": "🏠 **物业维护成本分析** \n📅 生成日期2025年8月15日 上午6:11:22 \n\n💰 **年度预算概览** \n• 总预估费用:$0 \n• 月均费用:$0 \n• 潜在节省费用:$0 \n\n🚨 **服务优先级** \n• 高优先级0项服务$0 \n• 中优先级0项服务 \n• 低优先级15项服务 \n\n📊 **季度预算明细** \n\n🔧 **最优先服务建议** \n💡 **成本优化小贴士** \n1. 同一服务商办理多项服务以获取折扣 \n2. 安排预防性维护,避免紧急维修 \n3. 对于高价服务(超过$500获取多个报价 \n\n━━━━━━━━━━━━━━━━━━━━━━ \n📈 **下次更新**:下周 \n🔄 **数据来源**:多家承包商网站"
}
]
},
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "d4bc54c4750443ddb7fb9e6b4c7e38c46f3d96e6d4cbfdf57a74efbc3218b7c8"
}
}

View File

@ -1,2 +0,0 @@
# n8n

View File

@ -1 +0,0 @@
11

View File

@ -1 +0,0 @@
去去去