Compare commits
36 Commits
305a2fb3b8
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| fadeb3a5cd | |||
| 2af14358ea | |||
| 671362b10d | |||
| 2a48709455 | |||
| 71650606d8 | |||
| e221cb3469 | |||
| bfad6b8290 | |||
| fb34181933 | |||
| 2cf8d9773e | |||
| 6413175102 | |||
| 055d10454e | |||
| 173fcac379 | |||
| 7d8094e51c | |||
| 1a2bef1c0b | |||
| d220f1875c | |||
| 3320dd5e85 | |||
| 1312d2aedf | |||
| a1476634bc | |||
| 677c426519 | |||
| fa529be2d1 | |||
| 64488000a7 | |||
| 45d9afb1c7 | |||
| 78313355f3 | |||
| 2710f206a3 | |||
| 45a40d084e | |||
| effe054a8c | |||
| dff19463f1 | |||
| 5a2aa98dea | |||
| 01f2cc1c8a | |||
| 76d6d8aa42 | |||
| e931511753 | |||
| fa3bdb8fed | |||
| a1622e51b6 | |||
| 7f5834e812 | |||
| eeb0f6cca1 | |||
| 9c8d90f23e |
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
|
||||
/test1
|
||||
4
.obsidian/app.json
vendored
4
.obsidian/app.json
vendored
@ -1 +1,3 @@
|
||||
{}
|
||||
{
|
||||
"promptDelete": false
|
||||
}
|
||||
20
.obsidian/hotkeys.json
vendored
Normal file
20
.obsidian/hotkeys.json
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
{
|
||||
"obsidian-git:pull": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Mod",
|
||||
"Shift"
|
||||
],
|
||||
"key": "A"
|
||||
}
|
||||
],
|
||||
"obsidian-git:push2": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Mod",
|
||||
"Shift"
|
||||
],
|
||||
"key": "S"
|
||||
}
|
||||
]
|
||||
}
|
||||
2
.obsidian/plugins/obsidian-git/data.json
vendored
2
.obsidian/plugins/obsidian-git/data.json
vendored
@ -6,7 +6,7 @@
|
||||
"autoSaveInterval": 1,
|
||||
"autoPushInterval": 0,
|
||||
"autoPullInterval": 1,
|
||||
"autoPullOnBoot": false,
|
||||
"autoPullOnBoot": true,
|
||||
"autoCommitOnlyStaged": false,
|
||||
"disablePush": false,
|
||||
"pullBeforePush": true,
|
||||
|
||||
35
.obsidian/workspace.json
vendored
35
.obsidian/workspace.json
vendored
@ -4,21 +4,21 @@
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "4689b6e08aa00358",
|
||||
"id": "adefe992ec61230e",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "3bb084def04b55a6",
|
||||
"id": "48957f1dab50a180",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "test.md",
|
||||
"file": "QQQ.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "test"
|
||||
"title": "QQQ"
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -177,10 +177,31 @@
|
||||
"obsidian-git:Open Git source control": false
|
||||
}
|
||||
},
|
||||
"active": "579b4b31c7cf4ebf",
|
||||
"active": "48957f1dab50a180",
|
||||
"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",
|
||||
"实时更新?",
|
||||
"test.md"
|
||||
"实时更新?"
|
||||
]
|
||||
}
|
||||
16
.openmcp/connection.json
Normal file
16
.openmcp/connection.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"items": [
|
||||
[
|
||||
{
|
||||
"connectionType": "STDIO",
|
||||
"name": "STDIO-1756707174154",
|
||||
"command": "npx",
|
||||
"args": [
|
||||
"-y",
|
||||
"drawio-mcp-server"
|
||||
],
|
||||
"cwd": ""
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
4
.openmcp/tabs.untitle.json
Normal file
4
.openmcp/tabs.untitle.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"tabs": [],
|
||||
"currentIndex": -1
|
||||
}
|
||||
652
1.云大阁邮件.md
Normal file
652
1.云大阁邮件.md
Normal file
File diff suppressed because one or more lines are too long
291
3.知识库对话.md
Normal file
291
3.知识库对话.md
Normal 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
418
4.证书识别.md
Normal 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
181
5.新闻.md
Normal 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
498
5.爬虫.md
Normal 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"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user