diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index f229168..252fdb8 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -173,10 +173,16 @@ "obsidian-git:Open Git source control": false } }, - "active": "579b4b31c7cf4ebf", + "active": "5f0a98fc0e963dc1", "lastOpenFiles": [ - "未命名.base", "实时更新.md", + "5.新闻.md", + "5.爬虫.md", + "4.证书识别.md", + "3.知识库对话.md", + "2.会议纪要.md", + "1.云大阁邮件.md", + "未命名.base", "未命名 2.base", "未命名 1.base", "test.md", diff --git a/1.云大阁邮件.md b/1.云大阁邮件.md new file mode 100644 index 0000000..88e3c31 --- /dev/null +++ b/1.云大阁邮件.md @@ -0,0 +1,671 @@ +{ + "nodes": [ + { + "parameters": { + "jsCode": "// 获取新报告的数据\nconst data = $input.first().json.allDocuments;\nconst counter = $input.first().json.totalItems;\nfunction jsonToHtml(reports, counter) {\n let html = `

本次共有 ${counter} 份新报告:

`;\n html += '';\n return html;\n}\n\n// 生成最终 HTML 输出\nconst htmlOutput = jsonToHtml(data, counter);\n\n// 返回结果\nreturn { htmlOutput };\n" + }, + "type": "n8n-nodes-base.code", + "typeVersion": 2, + "position": [ + 240, + 32 + ], + "id": "783b0b8b-63c6-43ff-b4c3-9a783ffe560f", + "name": "Code", + "retryOnFail": true, + "maxTries": 5 + }, + { + "parameters": { + "operation": "executeQuery", + "query": "SELECT id, title, summary, url FROM documents WHERE is_notified = 0;\n", + "options": {} + }, + "type": "n8n-nodes-base.mySql", + "typeVersion": 2.4, + "position": [ + -464, + 256 + ], + "id": "635a3583-537d-456a-a7aa-e4b8826294b8", + "name": "SQL 查询是否有新文件", + "alwaysOutputData": true, + "credentials": { + "mySql": { + "id": "QjSo8Gph2IzJHBDw", + "name": "MySQL account" + } + } + }, + { + "parameters": { + "rule": { + "interval": [ + { + "field": "weeks", + "weeksInterval": 4, + "triggerAtDay": [ + 1 + ], + "triggerAtHour": 10 + } + ] + } + }, + "type": "n8n-nodes-base.scheduleTrigger", + "typeVersion": 1.2, + "position": [ + -192, + 16 + ], + "id": "355061e3-a4fd-4cc0-a505-d2b5caa0a3f7", + "name": "定时器" + }, + { + "parameters": { + "batchSize": "=1", + "options": {} + }, + "type": "n8n-nodes-base.splitInBatches", + "typeVersion": 3, + "position": [ + 448, + 608 + ], + "id": "1b16c81a-7a2c-47d4-8ce9-50dd2246b33c", + "name": "Loop Over Items" + }, + { + "parameters": {}, + "type": "n8n-nodes-base.manualTrigger", + "typeVersion": 1, + "position": [ + -704, + 256 + ], + "id": "e1ebe31f-f172-4c09-87bb-089590d4eaf4", + "name": "When clicking ‘Execute workflow’" + }, + { + "parameters": { + "promptType": "define", + "text": "=你是一个专业的前端文案工程师和信息可视化专家。请基于以下 JSON 格式的报告摘要数据,帮我生成一个高质量的 HTML 页面。\n\n以下是你要展示的内容数据:\n{{ $json.result.allfile }}\n请你按照如下要求设计这个 HTML 页面:\n\n### 📌 页面结构要求:\n1. 页面标题为:**《最新行业报告汇总》**\n2. 页面顶部有一个**简洁的横幅标题**,居中展示。\n3. 每一份报告以**卡片(Card)形式**排布,每张卡片包括:\n - 报告标题(使用

或加粗字体)\n - 报告摘要(一段文字,控制在 3-4 行)\n - 阅读链接(带跳转的超链接,按钮或文字链接格式)\n4. 页面整体采用**响应式设计**,在桌面和移动端上表现良好。\n5. 使用美观的字体配色,建议配色主题为:\n - 主标题颜色:#2c3e50(深蓝色)\n - 正文颜色:#34495e\n - 背景色:#f8f9fa 或白色\n - 链接颜色:#3498db(蓝色)\n6. 页面使用简洁的 CSS 样式,内嵌在 `\n\n\n\n
\n

最新技术趋势报告汇总

\n\n \n
\n
身份类型:云计算专家
\n
何宝宏 - 2025云计算十大关键词
\n
\n 本报告系统性地描绘了2025年云计算产业的发展蓝图,指出人工智能(特别是大模型)与云计算的深度融合是驱动行业变革的核心引擎。报告从基础设施(超大规模智算集群)、服务模式(推理云服务、工程化交付)、应用范式(智能体)、部署形态(一体机、云终端),到架构演进(智能混合云、卓越架构),再到市场策略(央国企市场、全球化出海),全方位地解读“云+AI”如何重塑技术栈、商业模式和全球市场格局。\n
\n 点击查看报告原文\n
\n\n \n
\n
身份类型:行业分析报告
\n
AI技术在项目管理中的应用洞察报告
\n
\n 本报告共分六章展开论述,系统分析AI在项目管理中的应用背景、行业痛点、核心能力、关键场景,并结合标杆企业案例具象化呈现AI落地路径与成效。报告从理论到实践构建了完整的认知图谱,是企业高管、项目管理者及研究者的重要参考资料。\n
\n 点击查看报告原文\n
\n\n
\n\n\n\n\n", + "batching": {} + }, + "type": "@n8n/n8n-nodes-langchain.chainLlm", + "typeVersion": 1.7, + "position": [ + 352, + 240 + ], + "id": "0ec4c91c-c8ed-4d9e-aedd-0b5b56cf6900", + "name": "Basic LLM Chain" + }, + { + "parameters": { + "model": { + "__rl": true, + "value": "qwen-plus", + "mode": "list", + "cachedResultName": "qwen-plus" + }, + "options": {} + }, + "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", + "typeVersion": 1.2, + "position": [ + 352, + 416 + ], + "id": "6dcae13e-ff8a-4e18-ad79-5d0ba886ddc3", + "name": "OpenAI Chat Model", + "credentials": { + "openAiApi": { + "id": "rg9eI0cqMkaxv3AK", + "name": "江oneapi" + } + } + }, + { + "parameters": { + "operation": "executeQuery", + "query": "UPDATE documents SET is_notified = 1 WHERE id = 0;", + "options": {} + }, + "type": "n8n-nodes-base.mySql", + "typeVersion": 2.4, + "position": [ + 944, + 624 + ], + "id": "a16e35ac-a219-4cb5-babe-b16ded78dd67", + "name": "新文件标记为旧文件" + }, + { + "parameters": { + "fromEmail": "487954186@qq.com", + "toEmail": "={{ $json.email }}", + "subject": "=尊敬的{{ $json.name }},云大阁新报告推送", + "emailFormat": "=html", + "html": "={{ $('Basic LLM Chain').item.json.text }}", + "options": {} + }, + "type": "n8n-nodes-base.emailSend", + "typeVersion": 2.1, + "position": [ + 720, + 624 + ], + "id": "7d53a265-ad1e-4084-b719-c6f5d6cd8bb7", + "name": "Send email", + "webhookId": "bf65eb7b-2c76-4f2c-b936-25f4b92e3cba", + "credentials": { + "smtp": { + "id": "iMDiFCizmxbB9mdv", + "name": "SMTP account" + } + } + }, + { + "parameters": { + "operation": "executeQuery", + "query": "SELECT DISTINCT name, email FROM subscribers WHERE active = 1;\n\n\n\n", + "options": {} + }, + "type": "n8n-nodes-base.mySql", + "typeVersion": 2.4, + "position": [ + 240, + 608 + ], + "id": "8a1c33a2-092a-481e-9f50-9b41d2f0a104", + "name": "sql获取用户信息", + "credentials": { + "mySql": { + "id": "QjSo8Gph2IzJHBDw", + "name": "MySQL account" + } + } + }, + { + "parameters": { + "jsCode": "// 创建一个数组,收集所有 item.json 内容\nconst allItems = [];\nlet itemCount = 0;\n\n// 遍历所有输入的 item,收集 json 数据\nfor (const item of $input.all()) {\n allItems.push(item.json);\n itemCount++;\n}\n\n// 返回一个 item,其中包含所有 item.json 的合并数据以及 item 的数量\n\n\n\n\n\n// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nconst mergedString = allItems\n .map(doc => JSON.stringify(doc, null, 2)) // 格式化每个对象(缩进2空格)\n .join('\\n\\n'); // 每个对象之间用两个换行分隔\n \n// 构建新格式的对象\nconst result = {\n allfile: mergedString,\n totalItems: itemCount \n};\n\nreturn {result};" + }, + "type": "n8n-nodes-base.code", + "typeVersion": 2, + "position": [ + -256, + 256 + ], + "id": "a2d81232-ce96-4f7e-a0cb-efa364f27270", + "name": "Code2" + }, + { + "parameters": { + "rules": { + "values": [ + { + "conditions": { + "options": { + "caseSensitive": true, + "leftValue": "", + "typeValidation": "strict", + "version": 2 + }, + "conditions": [ + { + "leftValue": "", + "rightValue": "", + "operator": { + "type": "string", + "operation": "equals" + }, + "id": "4601e87f-db9b-4096-8808-6e8b287defc3" + } + ], + "combinator": "and" + } + } + ] + }, + "options": {} + }, + "type": "n8n-nodes-base.switch", + "typeVersion": 3.2, + "position": [ + 0, + 16 + ], + "id": "ff70e58f-5cd2-4432-9440-2daa10218720", + "name": "Switch" + }, + { + "parameters": { + "conditions": { + "options": { + "caseSensitive": true, + "leftValue": "", + "typeValidation": "strict", + "version": 2 + }, + "conditions": [ + { + "id": "36a179d0-001f-4cb9-a271-da04a6e5f28e", + "leftValue": "={{ $json.result.totalItems }}", + "rightValue": 0, + "operator": { + "type": "number", + "operation": "gt" + } + } + ], + "combinator": "and" + }, + "options": {} + }, + "type": "n8n-nodes-base.if", + "typeVersion": 2.2, + "position": [ + -32, + 256 + ], + "id": "43e0d609-58e1-43fe-b35a-d52e18f87b48", + "name": "If" + }, + { + "parameters": { + "operation": "sendAndWait", + "fromEmail": "487954186@qq.com", + "toEmail": "15376767471@163.com", + "subject": "本周邮件", + "message": "={{ $json.text }}", + "responseType": "customForm", + "formFields": { + "values": [ + { + "fieldLabel": "yes or no ?", + "fieldType": "dropdown", + "fieldOptions": { + "values": [ + { + "option": "yes" + }, + { + "option": "no" + } + ] + }, + "requiredField": true + }, + { + "fieldLabel": "修改意见", + "fieldType": "textarea" + } + ] + }, + "options": {} + }, + "type": "n8n-nodes-base.emailSend", + "typeVersion": 2.1, + "position": [ + -688, + 624 + ], + "id": "3e770a8c-ef67-4939-8506-bcabdc17bf59", + "name": "SendAndWait email", + "webhookId": "ea2f0334-e4f1-4d5f-b5eb-274a26b30027", + "credentials": { + "smtp": { + "id": "iMDiFCizmxbB9mdv", + "name": "SMTP account" + } + } + }, + { + "parameters": { + "conditions": { + "options": { + "caseSensitive": true, + "leftValue": "", + "typeValidation": "strict", + "version": 2 + }, + "conditions": [ + { + "id": "582e0f5c-dde5-49f2-9e94-408041ad109c", + "leftValue": "={{ $json.data['yes or no ?'] }}", + "rightValue": "yes", + "operator": { + "type": "string", + "operation": "equals" + } + } + ], + "combinator": "and" + }, + "options": {} + }, + "type": "n8n-nodes-base.if", + "typeVersion": 2.2, + "position": [ + -512, + 624 + ], + "id": "241d0857-cc2f-4908-b3fc-c644f7cb3377", + "name": "If1" + }, + { + "parameters": { + "promptType": "define", + "text": "=你是一个专业的前端文案工程师和信息可视化专家。\n以下是一个大模型生成的报告,我觉得存在问题需要改进,以下是修改建议:\n{{ $json.data['修改意见'] }}\n以下是原报告,修改后按照原格式输出\n{{ $('Basic LLM Chain').item.json.text }}", + "batching": {} + }, + "type": "@n8n/n8n-nodes-langchain.chainLlm", + "typeVersion": 1.7, + "position": [ + -336, + 752 + ], + "id": "3699e6d2-c801-425b-a79b-4f4e6ca06fd1", + "name": "Basic LLM Chain1" + }, + { + "parameters": { + "model": { + "__rl": true, + "value": "deepseek-ai/DeepSeek-R1", + "mode": "list", + "cachedResultName": "deepseek-ai/DeepSeek-R1" + }, + "options": {} + }, + "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", + "typeVersion": 1.2, + "position": [ + -336, + 928 + ], + "id": "9f816eae-2f08-4ba9-ad43-80e8b3d3ea49", + "name": "OpenAI Chat Model1", + "credentials": { + "openAiApi": { + "id": "yzrRDMLnAHckRsR3", + "name": "deepseek" + } + } + }, + { + "parameters": { + "operation": "sendAndWait", + "fromEmail": "487954186@qq.com", + "toEmail": "15376767471@163.com", + "subject": "本周邮件", + "message": "={{ $json.text }}", + "responseType": "customForm", + "formFields": { + "values": [ + { + "fieldLabel": "yes or no ?", + "fieldType": "dropdown", + "fieldOptions": { + "values": [ + { + "option": "yes" + }, + { + "option": "no" + } + ] + }, + "requiredField": true + }, + { + "fieldLabel": "修改意见", + "fieldType": "textarea" + } + ] + }, + "options": {} + }, + "type": "n8n-nodes-base.emailSend", + "typeVersion": 2.1, + "position": [ + -48, + 752 + ], + "id": "48997e42-68fe-4b22-8512-df41b3ae318b", + "name": "SendAndWait email1", + "webhookId": "ea2f0334-e4f1-4d5f-b5eb-274a26b30027", + "credentials": { + "smtp": { + "id": "iMDiFCizmxbB9mdv", + "name": "SMTP account" + } + } + }, + { + "parameters": { + "conditions": { + "options": { + "caseSensitive": true, + "leftValue": "", + "typeValidation": "strict", + "version": 2 + }, + "conditions": [ + { + "id": "13f4121b-9900-4757-ba38-1e8fbc71697e", + "leftValue": "", + "rightValue": "", + "operator": { + "type": "string", + "operation": "equals", + "name": "filter.operator.equals" + } + } + ], + "combinator": "and" + }, + "options": {} + }, + "type": "n8n-nodes-base.if", + "typeVersion": 2.2, + "position": [ + 96, + 752 + ], + "id": "00edd83c-cf3c-4a3f-a66b-fd55bad2d711", + "name": "If2" + } + ], + "connections": { + "SQL 查询是否有新文件": { + "main": [ + [ + { + "node": "Code2", + "type": "main", + "index": 0 + } + ] + ] + }, + "Loop Over Items": { + "main": [ + [], + [ + { + "node": "Send email", + "type": "main", + "index": 0 + } + ] + ] + }, + "When clicking ‘Execute workflow’": { + "main": [ + [ + { + "node": "SQL 查询是否有新文件", + "type": "main", + "index": 0 + } + ] + ] + }, + "Basic LLM Chain": { + "main": [ + [ + { + "node": "SendAndWait email", + "type": "main", + "index": 0 + } + ] + ] + }, + "OpenAI Chat Model": { + "ai_languageModel": [ + [ + { + "node": "Basic LLM Chain", + "type": "ai_languageModel", + "index": 0 + } + ] + ] + }, + "Send email": { + "main": [ + [ + { + "node": "Loop Over Items", + "type": "main", + "index": 0 + }, + { + "node": "新文件标记为旧文件", + "type": "main", + "index": 0 + } + ] + ] + }, + "sql获取用户信息": { + "main": [ + [ + { + "node": "Loop Over Items", + "type": "main", + "index": 0 + } + ] + ] + }, + "Code2": { + "main": [ + [ + { + "node": "If", + "type": "main", + "index": 0 + } + ] + ] + }, + "If": { + "main": [ + [ + { + "node": "Basic LLM Chain", + "type": "main", + "index": 0 + } + ] + ] + }, + "SendAndWait email": { + "main": [ + [ + { + "node": "If1", + "type": "main", + "index": 0 + } + ] + ] + }, + "If1": { + "main": [ + [ + { + "node": "sql获取用户信息", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Basic LLM Chain1", + "type": "main", + "index": 0 + } + ] + ] + }, + "Basic LLM Chain1": { + "main": [ + [ + { + "node": "SendAndWait email1", + "type": "main", + "index": 0 + } + ] + ] + }, + "OpenAI Chat Model1": { + "ai_languageModel": [ + [ + { + "node": "Basic LLM Chain1", + "type": "ai_languageModel", + "index": 0 + } + ] + ] + }, + "SendAndWait email1": { + "main": [ + [ + { + "node": "If2", + "type": "main", + "index": 0 + } + ] + ] + }, + "If2": { + "main": [ + [ + { + "node": "sql获取用户信息", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "pinData": { + "Basic LLM Chain": [ + { + "text": "\n\n\n \n \n 最新行业报告汇总\n \n\n\n\n
\n

最新行业报告汇总

\n\n \n
\n

高质量数据集实践指南(1.0)

\n

\n 随着人工智能技术迈入以大模型为核心的新纪元,数据已成为驱动模型能力跃迁与产业智能化升级的战略资源。DeepSeek 的横空出世颠覆了 \"高算力和高投入是发展人工智能唯一途径\"的固有认知,引领从业者高度重视数据质量与规模,高质量数据集成为人工智能发展的关键要素。然而,当前产业界面临多重挑战。\n

\n 阅读完整报告\n
\n\n \n
\n

栗蔚-云计算蓝皮书2025解读

\n

\n 本文基于中国信通院《云计算蓝皮书(2025 年)》,从全球与我国云计算发展概况、云计算与人工智能融合、云计算与算力互联网建设三大维度,系统解读云计算行业的政策动态、市场趋势、技术演进及应用实践。我国在市场规模、行业渗透、出海布局上成效显著,但需在算力云化、标准统一、数据安全等领域持续突破。\n

\n 阅读完整报告\n
\n\n \n
\n

医疗人工智能应用趋势观察

\n

\n 医疗人工智能应用正随生成式大模型快速发展而深化,OpenAI 大模型从 ChatGPT 系列向深度推理模型演进,推动医疗多场景应用拓展,如 DeepSeek 大模型在全国近 830 家医疗机构部署,覆盖病历生成、辅助诊疗、智能导诊等高频场景。但当前存在算法成熟度不足、算力资源受限、医疗责任认定模糊等难题。\n

\n 阅读完整报告\n
\n\n
\n\n\n" + } + ] + }, + "meta": { + "instanceId": "d4bc54c4750443ddb7fb9e6b4c7e38c46f3d96e6d4cbfdf57a74efbc3218b7c8" + } +} \ No newline at end of file diff --git a/2.会议纪要.md b/2.会议纪要.md new file mode 100644 index 0000000..33699f0 --- /dev/null +++ b/2.会议纪要.md @@ -0,0 +1,186 @@ +{ + "nodes": [ + { + "parameters": { + "httpMethod": "POST", + "path": "956024f9-4f0b-4617-b241-ea92127c0f8d", + "options": {} + }, + "type": "n8n-nodes-base.webhook", + "typeVersion": 2.1, + "position": [ + -528, + -16 + ], + "id": "119ccf17-6b55-4acc-8298-1e8118ab8710", + "name": "Webhook", + "webhookId": "956024f9-4f0b-4617-b241-ea92127c0f8d" + }, + { + "parameters": { + "promptType": "define", + "text": "=#### 你的任务:\n请根据身份、场景、会议信息说明、项目信息、上周待办事项、输出模板、录音文本有时间戳和我记录的要点、录音软件总结的要点、录音内容以及提炼以下内容,按照模板生成会议纪要\n1. 每位成员本周完成情况(对比上周任务,标注✅或❌)\n2. 总结各成员、全员本周待办任务、需协同解决的问题(跨人、跨模块)\n3. 其他有价值的讨论内容,归类至以下方向:\n- 未来工作方向\n- RAG数据库搭建(闫旭隆负责)\n- HippoDeep检索(连总+闫旭隆+江争达)\n- 测评体系搭建(李振负责)\n- n8n工作流相关(刘嘉宇)\n- 前端工作(江争达)\n- 个人能力提升\n{{ $json['会议议程'] }}\n{{ $json['录音软件总结的要点'] }}\n{{ $json['录音'] }}\n{{ $json['上周待办事项'] }}\n{{ $json['会议模板'] }}", + "options": { + "systemMessage": "##### 1.你的身份:你是一名经验丰富的会议记录与技术分析专家,你遵循原则:\n- 严格按照录音内容进行摘要提取。\n- 摘要中不允许有任何杜撰或推测性的内容,确保所有信息准确来源于录音材料。\n##### 2.场景:你正在为一场**智能问答系统项目开发组周会**进行摘要提炼。\n本次会议的目标:\n- 总结上周每个人、全员任务完成情况\n- 明确本周每个人、全员待办任务\n- 讨论解决会议中发现的问题、模块进展交流、总结要点\n##### 3.会议信息说明:\n- 录音内容中,每段发言均标注了发言人姓名和时间戳,注意未明确更换发言人时,后续内容属于同一人。\n##### 4.项目信息:\n\n### 1. 项目基本概述\n\n#### 1.1 项目名称\n\n- 智能知识助手与自动化报告生成系统\n#### 1.2 项目类型\n\n- 是产品开发\n\n#### 1.3 项目目标\n\n- 智能知识助手 将企业知识库转化为对话工具,支持自然语言查询、追 问及来源追溯,减少文档搜索时间。 \n- 自动化报告生成 AI 生成结构化报告初稿,顾问提供大纲/数据,系统整 合知识、遵循模板并支持人机协作审阅。\n- 短期节省审计/会计 50%、专业写作 44%时间;长期构建 知识资产闭环,开辟 AI 咨询新业务。\n\n#### 1.4 项目背景 / 背景故事\n\n- 行业痛点 知识获取滞后、信息孤岛化、文档撰写耗时、资源利用 不均。 (2)转型契机 大语言模型技术突破(如 ChatGPT);\n- AI 可节省专业写 作 44%、审计/会计任务 50%时间。\n\n#### 1.5 项目生命周期\n\n需求分析→原型设计→知识库构建→MVP 开发→集成测试→试点优化→全面推广→持续运维。\n当前属于集成测试阶段\n#### 1.6开发组人员与组织结构\n\n- 项目负责人、系统架构师:连云波\n- AI卓越中心主任:窦佳丽\n- 管理工作负责人:张媛媛\n- 开发者名单\n\t- 李振:测评系统搭建\n\t- 闫旭隆:知识库构建、知识库检索与生成逻辑\n\t- 刘嘉宇:n8n工作流模块、后端开发、测试\n\t- 江争达:核心rag推理模块、前端负责人、技术支持(远程开发人员)\n\t- 张旖旎:前端开发(远程开发人员)\n\n" + } + }, + "type": "@n8n/n8n-nodes-langchain.agent", + "typeVersion": 2.2, + "position": [ + 192, + -16 + ], + "id": "cca18415-a50c-4934-87fb-fca5eed4a024", + "name": "AI Agent" + }, + { + "parameters": { + "assignments": { + "assignments": [ + { + "id": "d4e5bccd-eda1-4ad0-be10-373e6e5b21d1", + "name": "会议议程", + "value": "={{ $json.body[\"会议议程\"] }}", + "type": "string" + }, + { + "id": "5ec943ac-eb05-40c0-ae8c-7ad54f73be84", + "name": "录音软件总结的要点", + "value": "={{ $json.body['录音软件总结的要点'] }}", + "type": "string" + }, + { + "id": "a8e1d8d2-b99e-4d00-afd9-9fa20d74e600", + "name": "录音", + "value": "={{ $json.body['录音'] }}", + "type": "string" + }, + { + "id": "6d439604-c9ca-4442-b241-ab8eea2420f7", + "name": "上周待办事项", + "value": "#### 一、上周待办事项 ##### 1. 闫旭隆 - ⏳ 部署Hippodeep服务到服务器(暴露端口,供前端调用) - ⏳ 实施概念探索模块(实体→概念→评分循环,仅限1次迭代) - ⏳ 与江争达确认部署路径和概念节点评分机制 - ⏳ OCR与图像功能汇报展示 ##### 2. 江争达 - ⏳ 完成域名配置(国外亚马逊云备用) - ⏳ 前端集成:调用闫旭隆/Hippodeep端口,确保基础聊天/记录保存功能可用,前端优化 - ⏳ 与闫旭隆确认部署路径和概念节点评分机制 - ⏳ 准备演示方案 ##### 3. 李振 - ⏳ 重新生成多跳问题测试集(确保文档与问题匹配),并进行更大文档范围的测试(30-100) - ⏳ 跑通多跳问题全流程测试(含端到端评估) - ⏳ 输出测试报告(含错误定位分析) - ⏳ 保证下周可以给相关同事进行测试 ##### 4. 刘嘉宇 - ⏳ 完成n8n自动化流程的部署,包括任务生成、邮件通知等 - ⏳ 为下周展示准备基础数据流和模板文档 - ⏳ 在李振的安排下进行测评工作 - ⏳ 后端聊天部分接口,对接到hippo-deep ##### 5. 全员 - ⏳ 周四前完成各模块集成,周五冻结演示版本 - [问题1]:前端部署协调(江争达+刘嘉宇+闫旭隆) - 需统一服务器部署及端口暴露机制;域名未配置【需周五前解决】 - [问题2]:测试集数据不匹配(李振+闫旭隆) - 测试问题与文档关联性低,需重生成数据集【李振负责协调】 - [问题3]:概念探索模块集成冲突(闫旭隆+江争达) - 避免社区/分层逻辑混入,保持工程可测性【连总强调简化为单层概念探索】", + "type": "string" + }, + { + "id": "c59f1ab2-0078-48f1-ab9d-f9edaa0d892d", + "name": "会议模板", + "value": "###
AI卓越中心开发组会议纪要
时间:2025.08.11 地点:学院国际大厦2105 参会人员:连云波、张媛媛、李振、江争达、闫旭隆、刘嘉宇、张旖旎 #### 一、上周待办事项 ##### 1. 闫旭隆 - ⏳ 部署Hippodeep服务到服务器(暴露端口,供前端调用) - ⏳ 实施概念探索模块(实体→概念→评分循环,仅限1次迭代) - ⏳ 与江争达确认部署路径和概念节点评分机制 - ⏳ OCR与图像功能汇报展示 ##### 2. 江争达 - ⏳ 完成域名配置(国外亚马逊云备用) - ⏳ 前端集成:调用闫旭隆/Hippodeep端口,确保基础聊天/记录保存功能可用,前端优化 - ⏳ 与闫旭隆确认部署路径和概念节点评分机制 - ⏳ 准备演示方案 ##### 3. 李振 - ⏳ 重新生成多跳问题测试集(确保文档与问题匹配),并进行更大文档范围的测试(30-100) - ⏳ 跑通多跳问题全流程测试(含端到端评估) - ⏳ 输出测试报告(含错误定位分析) - ⏳ 保证下周可以给相关同事进行测试 ##### 4. 刘嘉宇 - ⏳ 完成n8n自动化流程的部署,包括任务生成、邮件通知等 - ⏳ 为下周展示准备基础数据流和模板文档 - ⏳ 在李振的安排下进行测评工作 - ⏳ 后端聊天部分接口,对接到hippo-deep ##### 5. 全员 - ⏳ 周四前完成各模块集成,周五冻结演示版本 - [问题1]:前端部署协调(江争达+刘嘉宇+闫旭隆) - 需统一服务器部署及端口暴露机制;域名未配置【需周五前解决】 - [问题2]:测试集数据不匹配(李振+闫旭隆) - 测试问题与文档关联性低,需重生成数据集【李振负责协调】 - [问题3]:概念探索模块集成冲突(闫旭隆+江争达) - 避免社区/分层逻辑混入,保持工程可测性【连总强调简化为单层概念探索】 #### 二、本周工作完成情况 | 成员 | 上周任务 | 完成情况 | 关键补充说明 | | ------- | ------------------------------------------------------------------------ | ----------------- | ------------------------------------------------------------------------- | | **闫旭隆** | 1. 实施概念探索模块(1次迭代)
2. 与江争达确认部署路径/评分机制
3. OCR与图像功能汇报 | ❌

✅ | • 概念探索模块未实施
• ES库权重字段/概念节点向量化完成
• NuMarkdown-8b工具评估完成(支持PPT标题/表格解析) | | **江争达** | 1. 域名配置(亚马逊云备用)
2. 前端集成Hippodeep端口/聊天功能
3. 与闫旭隆确认评分机制
4. 准备演示方案 | ⌛️


❌ | • Standard模式优化完成(响应缩短30秒)
• Events节点利用不足待优化 | | **李振** | 1. 重生成多跳测试集(30-100文档)
2. 跑通多跳全流程测试
3. 输出测试报告
4. 保证同事可测试 | ✅


🕒 | • 生成10文档交叉问题测试集(横跳逻辑)
• 发现置信度0却评分0.8的异常 | | **刘嘉宇** | 1. n8n自动化流程部署(邮件/任务)
2. n8n展示材料准备
3. 后端接口对接hippo-deep
4. 参与李振测评 | ✅


❌ | • 邮件工作流部署完成
• 标准化开发流程应用(需求→设计→部署) | | **全员** | 周四模块集成/周五冻结演示版本 | ✅ | 模块集成完成 | --- #### 三、本周待办任务与协同问题 ##### **1. 闫旭隆** 工程方向 - 探讨并实现文搜文+图功能,包括图片引用保留和图片描述的整合。 - 部署并测试NuMarkdown-8b-thinking模型(8B版本),验证其连图带文生成能力。 - 联系江争达开通阿里云API接口。 - 优化Hippo-Deep全流程Prompt以提升生成文档的逻辑性。 研究方向 - 规划技术框架并总结现有问题,评估GPU资源需求,进行实验测试。 - 与李振协同,对三种检索方式(直接Chunk文本搜索、直接QueryToTriple、概念搜几层)进行评测。 - LangChain框架和LangGraph框架选取。 ##### **2. 江争达** 工程方向 - 继续优化前端界面。 - 设计用户模式切换逻辑(Standard/Deeper),并加入判断机制。(与旭隆和连总一起) - 部署生产环境服务器,进行分级管理和多备份,确保代码同步。 - 阿里云租用GPU服务器。 - 测试one-api调用qwen-vl-plus功能,备用方案:直接对接阿里云qwen-vl-plus 接口。 - 完成概念感知流程图的代码实现,完成端到端整体流程测试。 研究方向 - 深化对图谱中Events节点作用的理解与应用。(与旭隆和连总一起) - 与大模型探讨Events功能如何发挥作用,并将其纳入Prompts设计中。(与旭隆和连总一起) ##### **3. 李振** 工程方向 - 从基准测试指标中,选取指标。设计并实现精确质量评估体系,作为开发仪表盘,提供端到端指标反馈。 研究方向 - 研究标准数据集(如wiki等)进行基准测试,并评估其适用性。 - 提供数据集标准格式。项目组成员各自尝试用大模型生成测试集合。 - 研究学习个人知识库搭建(参考开源项目)。 - 研究学习项目管理系统搭建(参考开源项目)。 - 研究学习Coze和n8n多租户问题解决方案。 - 研究学习前端技术。 ##### **4. 刘嘉宇** 工程方向 - 邮件工作流第二版 \t - n8n测试工作搭建一个框架 \t - n8n课程交流详细方案 \t - 自动化系统mvp \t - 继续N8N工作流第二版的设计,并进行测试。 \t 研究方向 - 研究N8N商用多租户方案(如采购企业版、本地改造、转为Python代码)。 - 评估Spring AI框架与LangChain重构RAG接口的可行性。 - 学习并掌握录音模型微调技术,利用会议录音文本数据训练个性化语音识别模型,提升识别准确率(尤其针对专有名词和个人习惯)。 - 学习并掌握评估框架的部署和使用。 ##### **5. 全员任务** - 思考并提出个人知识库搭建方案。 - 讨论工具开发的商用框架问题。 - 讨论前端问题解决方案。 - 根据李振提供的Prompt和格式,或自己设计Prompt,生成测试数据集。 - 思考AI Agent开发框架问题。 - 学习并熟练运用评估框架的部署和使用。 - 每次开发工作结束后,利用AI(如Case)进行自动化总结,并自动存储到项目文档中。 - 在进行技术选择和探索新事物前,需深入研究相关理论知识,并建立系统化的思考方法。 **协同解决问题** - **问题1:前端人力资源不足** - **方案**:团队成员需共同学习Figma等前端设计工具;探索AI生成前端页面的可行性;下周会议进行专题讨论,共同攻克前端难题。 - **问题2:n8n商用部署冲突**(刘嘉宇+李振) - **方案**:评估n8n企业版成本或将N8N工作流转换为Python代码的可行性,并优先进行本地测试。 - **问题3:测试集数据不匹配**(李振+闫旭隆) - **方案**:优先采用标准数据集(如Vicky)跑通评测流程;通过大模型生成具备逻辑递进关系的问题集,并进行人工校验,以确保测试数据的准确性和完备性。 - **问题4:生产环境隔离**(江争达协调、连总把关) - **方案**:新增生产服务器,并进行严格的分级管理和代码多备份,确保环境安全和稳定。 --- #### 四、重要问题讨论与要点 | 讨论点 | 结论 | | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | | 何总对项目方向的认可 | **【高度认可团队工作成果,并提出更多需求与期待】**,认为现有工具显著提升工作效率,特别希望借助工具处理紧急且易出错的人工任务。 | | 知识库赋能路径 | 目标是构建全所乃至全员的统一知识中心,**【计划整合所内、院内知识库,并逐步接入外部资源】**;同时建设自动化工具生成系统,支持员工自主使用并提供AI辅助调试调整。 | | 长期目标(1-2年) | 连总提出核心方向为**【Agent自演进和学习的底层框架构建】**,这需要协调硬件、数据、工作流接口规划等多领域资源,并改造现有信息系统为API接口,最终目标是培育能不断演化出新产品和工具的环境;预计1年内形成转型框架理论、方法和落地实施能力,2年左右实现对外输出端到端解决方案,但其实现需慎重研究和协调。 | | 资源保障 | 计划逐步将外部采购转化为院所预算,并预计在10月启动2026年规划,以确保资源需求得到满足。 | | 加速工具部署 | 尽快将开发工具部署给内部使用,以实际效益体现转型中心的影响力,并获取更多用户反馈。 | - **进度**: - ES数据库已进行改造,**【增加了权重字段,并已将概念节点及其现代化添加到相关库中】**。 - **存储优化**: - 目前存在实体节点重复存储相同文本块导致的冗余问题,**【建议优化为映射表或标记属性,以减少存储体量】**。 - 提到了苹果开源的向量聚类工具,可用于可视化文档间的关系,供研究借鉴。 - **OCR工具**: - 对NuMarkdown-8b-thinking工具进行了评估,其支持连线格式输入,能对多模态图片生成描述,且PPT处理效果较好(可识别标题、三级标题等)。**【建议重点考虑将其作为图片和PPT处理方案的候选】**。 - 目前面临对跨页文档和PPT纯图片识别能力有限的挑战,导致部分文档无法有效利用。 - **【计划规划一系列实验,利用GPU资源测试不同文档类型的处理效果,明确技术框架,最终确定最优方案,并一次性处理现有文档集(约100+篇)】**。 - **API问题**: - 智能识别系统API目前使用的是免费额度,且调用存在限制,**【需联系江争达开通阿里云平台API服务】**。 | | | |---|---| |关键行动|说明| |概念探索逻辑调整|**【连总澄清:概念探索应在Triple生成候选节点后进行】**,作为回答不足时的补充保护机制,而非直接从概念探索开始。| |检索模式测试|**【建议对三种不同检索方式进行评测】**:包括直接Chunk文本搜索(最快但效果可能非最佳)、直接QueryToTriple、以及概念分层探索(先探索一层,若效果不佳再加深);需尽快搭建框架并进行测试。| |概念探索深度评估|**【需通过参数设计,探索概念到底走几层才能达到最佳相关性】**,测评工具应提供增加探索层数带来的提升结果和响应时间。| |答案生成优化|目前生成的要点虽有,但文档逻辑不够,**【需优化大模型Prompt以提升答案的逻辑性和质量】**。| |证据回显优化|应实现类似OpenAI的引用跳转功能,**【点击证据直接定位到原文段落】**。| |事件实体利用|**【图谱中的事件实体(Events节点)的逻辑关系优势未充分发挥】**,目前仅作为普通节点处理;应重新思考如何利用Event节点在答案组织和推理中的作用,优化Prompt设计,使其发挥重要梳理作用。| |模型选择与Prompt|**【模型选择和Prompt优化至关重要,可能推理模型更合适,且Prompt需针对性修改】**。| - **问题**: - 当前生成的多跳测试为“横跳”(并行),而非“纵跳”(串行,需要逻辑递进); - 测试报告存在逻辑矛盾(例如文档未找到但Overall Quality评分仍高,且评测函数过于形式化)。 - **解决方案**: - **【需构建纵向逻辑链数据集】**,可利用大模型生成具备逻辑递进关系的问题。 - **【评测工具需提供精确的“仪表盘”反馈】**,量化每次代码修改对系统性能(包括端到端和各跳)的影响,作为开发调试的指导工具,而非仅提供形式化的质量评估。 - 需深入检查测试代码逻辑,解决异常情况(如文档返回为0但质量分高的问题),并**【重新定义评估标准,使其能准确评估内容质量,关注查询实体数量、相关性、逻辑正确性等核心指标】**。 - 建议优先使用Vicky等标准数据集进行基准测试,但强调最终仍需针对项目自身数据进行定制化调优。 - 目前测试工具(Adopter)通过“买点”方式深入源代码,导致与被测系统耦合度较高,**【未来可考虑解耦或通过更灵活的适配器函数降低耦合性】**。 - 已开发通用评测脚本,支持Standard和Deeper模式,可配置地址、数据集等参数,输出JSON数据和分析报告,**【该工具将成为开发调试的重要辅助】**。 - 李振对比了两个版本的测试体系(带装饰器和不带装饰器),发现功能相似但底层实现不同,**【需团队试用并反馈差异性,以决定未来采用哪种发展方向】**。 - **自动化流程标准化**: - 刘嘉宇分享了其标准化工作流程:先酝酿需求,再通过AI辅助生成需求清单、思维导图和方案设计,最终转化为具体工作流。**【连总建议所有功能开发都遵循此流程,以确保需求明确】**。 - **商用瓶颈**: - N8N开源版仅支持单租户,商用化存在限制。**【讨论解决方案包括采购企业版(成本高)、本地改造多租户(技术难度大)、或将N8N工作流转为Python代码】**。 - 短期内,建议邮件工作流上线前,统一测试环境管理规则(禁止未经审批操作)。 - **N8N工具流库利用**: - 提到GitHub上有大量N8N工具流(2053个),可与N8N MCP结合,极大提升工作流设计效率和复用性。**【刘嘉宇需研究整合,探索其商业价值】**。 - **项目管理选型**: - 调研后推荐San Dan作为项目管理工具,**【因其与N8N有官方节点集成,易用性高】**。 - **前端开发挑战**: - 团队成员对Figma等前端工具体系不熟悉,上手成本高,且AI生成前端代码目前定制化能力不足。**【成为项目推进的“坎儿”,缺乏专业人士】**。 - **解决方案讨论**: - 讨论了借鉴他人网页设计(但难以精准控制)、团队成员共同学习Figma与MCP结合自动生成代码(学习成本高)、或完全依靠商业AI前端服务(定制性差,成本高)等方案。 - **【连总建议团队共同攻克前端难题,并简化动态效果(如聊天界面背景静态化)以降低消耗】**。 - **前端人力问题**: - 前端人力短缺,非前端成员上手困难,导致效率和进展不理想。**【建议下周前端相关成员(江争达、李振、张旖旎)共同讨论并解决】**。 - **生产环境部署**: - 域名已进入管局审核阶段,需【新增生产环境服务器,并进行严格的分级管理和代码多备份】**。 - **系统化思维与理论指导**: - **【强调开发前需有理论指导(如RAG检索、PageRank算法),避免盲目枚举试错】**。 - **【建议团队成员建立系统化思考方法,并掌握评估框架部署与使用】**。 - **个人知识库搭建**: - 连总分享了个人知识库搭建的思考,包括信息收集(去重、相关性判断)、分类总结和知识融合(新知识对旧知识的影响)。**【鼓励利用知识图谱或向量数据库管理个人知识,并提及开源项目Revornix作为参考,建议李振研究】**。 - **API化思维**: - 未来能力的最大化发挥应建立在全API接口环境上,将现有流程逐步改造为API,实现纵向打通。**【鼓励在工具开发中延伸自动化流程,将各阶段输出转变为API接口】**。 - **会议纪要管理**: - 会议纪要的撰写和管理是重要学问,通过设计和使用标记(如“很重要”)能提升效率,甚至实现自动化。**【建议利用AI辅助自动总结会议要点并存储】**。 - **工具使用与改造原则**: - **【强调选择工具要追求极致,不满足需求则应自行改造】**。 - **AI辅助自我总结**: - **【建议每次开发工作后利用AI(如Case)自动总结代码工作和项目进展,生成工作报告】**。 - **录音模型微调**: - 对刘嘉宇提出录音模型进行微调,利用历史会议纪要的录音文本转录数据进行训练,以提升专有名词和个人说法习惯的识别准确率。**【连总鼓励此为重要挑战,可利用开源模型和江争达协调GPU资源】**。 - **自我驱动与问题定位**: - 刘嘉宇的自我驱动能力待提升,但有改进意愿。**【强调清晰定位问题的重要性,避免盲目工作】**。 - **设定时间目标**: - **【每个人应为任务设定明确的截止日期,以提高效率和自我管理,避免拖延】**。 - **持续学习与团队协作**: - 团队成员应在各自领域深入研究,并相互学习、协作,共同解决技术难题。**【鼓励放开谈论,允许犯错,及时调整,共同成长】**。 - 在选工具、做功能前,学习相关理论指导。 - 下周会议需分享个人工作进展。 #### 五、思维导图 ![[第8次会议纪要.png]]", + "type": "string" + } + ] + }, + "options": {} + }, + "type": "n8n-nodes-base.set", + "typeVersion": 3.4, + "position": [ + -176, + -16 + ], + "id": "77b9442f-c000-4dc6-9ae4-160e9de13fc1", + "name": "Edit Fields" + }, + { + "parameters": { + "model": { + "__rl": true, + "value": "qwen-plus", + "mode": "list", + "cachedResultName": "qwen-plus" + }, + "options": {} + }, + "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", + "typeVersion": 1.2, + "position": [ + 192, + 192 + ], + "id": "05d19078-7299-426e-bfc1-e6bbebb29e90", + "name": "OpenAI Chat Model1", + "credentials": { + "openAiApi": { + "id": "rg9eI0cqMkaxv3AK", + "name": "江oneapi" + } + } + }, + { + "parameters": { + "operation": "toText", + "sourceProperty": "output", + "options": {} + }, + "type": "n8n-nodes-base.convertToFile", + "typeVersion": 1.1, + "position": [ + 544, + -16 + ], + "id": "20f180f7-87f8-4e0b-aa33-7b5a947e7820", + "name": "Convert to File" + } + ], + "connections": { + "Webhook": { + "main": [ + [ + { + "node": "Edit Fields", + "type": "main", + "index": 0 + } + ] + ] + }, + "AI Agent": { + "main": [ + [ + { + "node": "Convert to File", + "type": "main", + "index": 0 + } + ] + ] + }, + "Edit Fields": { + "main": [ + [ + { + "node": "AI Agent", + "type": "main", + "index": 0 + } + ] + ] + }, + "OpenAI Chat Model1": { + "ai_languageModel": [ + [ + { + "node": "AI Agent", + "type": "ai_languageModel", + "index": 0 + } + ] + ] + }, + "Convert to File": { + "main": [ + [] + ] + } + }, + "pinData": { + "AI Agent": [ + { + "output": "### AI卓越中心开发组会议纪要 \n\n**时间**:2025.08.11 \n**地点**:学院国际大厦2105 \n**参会人员**:连云波、张媛媛、李振、江争达、闫旭隆、刘嘉宇、张旖旎 \n\n---\n\n### 一、上周待办事项 \n\n#### 1. 闫旭隆 \n- ⏳ 部署Hippodeep服务到服务器(暴露端口,供前端调用) \n- ⏳ 实施概念探索模块(实体→概念→评分循环,仅限1次迭代) \n- ⏳ 与江争达确认部署路径和概念节点评分机制 \n- ⏳ OCR与图像功能汇报展示 \n\n#### 2. 江争达 \n- ⏳ 完成域名配置(国外亚马逊云备用) \n- ⏳ 前端集成:调用闫旭隆/Hippodeep端口,确保基础聊天/记录保存功能可用,前端优化 \n- ⏳ 与闫旭隆确认部署路径和概念节点评分机制 \n- ⏳ 准备演示方案 \n\n#### 3. 李振 \n- ⏳ 重新生成多跳问题测试集(确保文档与问题匹配),并进行更大文档范围的测试(30-100) \n- ⏳ 跑通多跳问题全流程测试(含端到端评估) \n- ⏳ 输出测试报告(含错误定位分析) \n- ⏳ 保证下周可以给相关同事进行测试 \n\n#### 4. 刘嘉宇 \n- ⏳ 完成n8n自动化流程的部署,包括任务生成、邮件通知等 \n- ⏳ 为下周展示准备基础数据流和模板文档 \n- ⏳ 在李振的安排下进行测评工作 \n- ⏳ 后端聊天部分接口,对接到hippo-deep \n\n#### 5. 全员 \n- ⏳ 周四前完成各模块集成,周五冻结演示版本 \n\n**问题汇总**: \n- **[问题1] 前端部署协调**(江争达+刘嘉宇+闫旭隆) \n - 需统一服务器部署及端口暴露机制;域名未配置【需周五前解决】 \n- **[问题2] 测试集数据不匹配**(李振+闫旭隆) \n - 测试问题与文档关联性低,需重生成数据集【李振负责协调】 \n- **[问题3] 概念探索模块集成冲突**(闫旭隆+江争达) \n - 避免社区/分层逻辑混入,保持工程可测性【连总强调简化为单层概念探索】 \n\n---\n\n### 二、本周工作完成情况 \n\n| 成员 | 上周任务 | 完成情况 | 关键补充说明 |\n|-----------|--------------------------------------------------------------------------|---------------------|---------------------------------------------------------------------------------|\n| **闫旭隆** | 1. 实施概念探索模块(1次迭代)
2. 与江争达确认部署路径/评分机制
3. OCR与图像功能汇报 | ❌

✅ | • 概念探索模块未实施
• ES库权重字段/概念节点向量化完成
• NuMarkdown-8b工具评估完成(支持PPT标题/表格解析) |\n| **江争达** | 1. 域名配置(亚马逊云备用)
2. 前端集成Hippodeep端口/聊天功能
3. 与闫旭隆确认评分机制
4. 准备演示方案 | ⌛️


❌ | • Standard模式优化完成(响应缩短30秒)
• Events节点利用不足待优化 |\n| **李振** | 1. 重生成多跳测试集(30-100文档)
2. 跑通多跳全流程测试
3. 输出测试报告
4. 保证同事可测试 | ✅


🕒 | • 生成10文档交叉问题测试集(横跳逻辑)
• 发现置信度0却评分0.8的异常 |\n| **刘嘉宇** | 1. n8n自动化流程部署(邮件/任务)
2. n8n展示材料准备
3. 后端接口对接hippo-deep
4. 参与李振测评 | ✅


❌ | • 邮件工作流部署完成
• 标准化开发流程应用(需求→设计→部署) |\n| **全员** | 周四模块集成/周五冻结演示版本 | ✅ | 模块集成完成 |\n\n---\n\n### 三、本周待办任务与协同问题 \n\n#### **1. 闫旭隆** \n**工程方向** \n- 探讨并实现文搜文+图功能,包括图片引用保留和图片描述的整合。 \n- 部署并测试NuMarkdown-8b-thinking模型(8B版本),验证其连图带文生成能力。 \n- 联系江争达开通阿里云API接口。 \n- 优化Hippo-Deep全流程Prompt以提升生成文档的逻辑性。 \n\n**研究方向** \n- 规划技术框架并总结现有问题,评估GPU资源需求,进行实验测试。 \n- 与李振协同,对三种检索方式(直接Chunk文本搜索、直接QueryToTriple、概念搜几层)进行评测。 \n- LangChain框架和LangGraph框架选取。 \n\n#### **2. 江争达** \n**工程方向** \n- 继续优化前端界面。 \n- 设计用户模式切换逻辑(Standard/Deeper),并加入判断机制。(与旭隆和连总一起) \n- 部署生产环境服务器,进行分级管理和多备份,确保代码同步。 \n- 阿里云租用GPU服务器。 \n- 测试one-api调用qwen-vl-plus功能,备用方案:直接对接阿里云qwen-vl-plus 接口。 \n- 完成概念感知流程图的代码实现,完成端到端整体流程测试。 \n\n**研究方向** \n- 深化对图谱中Events节点作用的理解与应用。(与旭隆和连总一起) \n- 与大模型探讨Events功能如何发挥作用,并将其纳入Prompts设计中。(与旭隆和连总一起) \n\n#### **3. 李振** \n**工程方向** \n- 从基准测试指标中,选取指标。设计并实现精确质量评估体系,作为开发仪表盘,提供端到端指标反馈。 \n\n**研究方向** \n- 研究标准数据集(如wiki等)进行基准测试,并评估其适用性。 \n- 提供数据集标准格式。项目组成员各自尝试用大模型生成测试集合。 \n- 研究学习个人知识库搭建(参考开源项目)。 \n- 研究学习项目管理系统搭建(参考开源项目)。 \n- 研究学习Coze和n8n多租户问题解决方案。 \n- 研究学习前端技术。 \n\n#### **4. 刘嘉宇** \n**工程方向** \n- 邮件工作流第二版 \n- n8n测试工作搭建一个框架 \n- n8n课程交流详细方案 \n- 自动化系统mvp \n- 继续N8N工作流第二版的设计,并进行测试。 \n\n**研究方向** \n- 研究N8N商用多租户方案(如采购企业版、本地改造、转为Python代码)。 \n- 评估Spring AI框架与LangChain重构RAG接口的可行性。 \n- 学习并掌握录音模型微调技术,利用会议录音文本数据训练个性化语音识别模型,提升识别准确率(尤其针对专有名词和个人习惯)。 \n- 学习并掌握评估框架的部署和使用。 \n\n#### **5. 全员任务** \n- 思考并提出个人知识库搭建方案。 \n- 讨论工具开发的商用框架问题。 \n- 讨论前端问题解决方案。 \n- 根据李振提供的Prompt和格式,或自己设计Prompt,生成测试数据集。 \n- 思考AI Agent开发框架问题。 \n- 学习并熟练运用评估框架的部署和使用。 \n- 每次开发工作结束后,利用AI(如Case)进行自动化总结,并自动存储到项目文档中。 \n- 在进行技术选择和探索新事物前,需深入研究相关理论知识,并建立系统化的思考方法。 \n\n---\n\n### 四、重要问题讨论与要点 \n\n| 讨论点 | 结论 |\n|---------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **何总对项目方向的认可** | **【高度认可团队工作成果,并提出更多需求与期待】**,认为现有工具显著提升工作效率,特别希望借助工具处理紧急且易出错的人工任务。 |\n| **知识库赋能路径** | 目标是构建全所乃至全员的统一知识中心,**【计划整合所内、院内知识库,并逐步接入外部资源】**;同时建设自动化工具生成系统,支持员工自主使用并提供AI辅助调试调整。 |\n| **长期目标(1-2年)** | 连总提出核心方向为**【Agent自演进和学习的底层框架构建】**,这需要协调硬件、数据、工作流接口规划等多领域资源,并改造现有信息系统为API接口,最终目标是培育能不断演化出新产品和工具的环境;预计1年内形成转型框架理论、方法和落地实施能力,2年左右实现对外输出端到端解决方案,但其实现需慎重研究和协调。 |\n| **资源保障** | 计划逐步将外部采购转化为院所预算,并预计在10月启动2026年规划,以确保资源需求得到满足。 |\n| **加速工具部署** | 尽快将开发工具部署给内部使用,以实际效益体现转型中心的影响力,并获取更多用户反馈。 |\n\n---\n\n### 五、思维导图 \n\n![[第8次会议纪要.png]]" + } + ] + }, + "meta": { + "templateCredsSetupCompleted": true, + "instanceId": "d4bc54c4750443ddb7fb9e6b4c7e38c46f3d96e6d4cbfdf57a74efbc3218b7c8" + } +} \ No newline at end of file diff --git a/3.知识库对话.md b/3.知识库对话.md new file mode 100644 index 0000000..2ca9529 --- /dev/null +++ b/3.知识库对话.md @@ -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" + } +} \ No newline at end of file diff --git a/4.证书识别.md b/4.证书识别.md new file mode 100644 index 0000000..0943776 --- /dev/null +++ b/4.证书识别.md @@ -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" + } +} \ No newline at end of file diff --git a/5.新闻.md b/5.新闻.md new file mode 100644 index 0000000..1ed2ec6 --- /dev/null +++ b/5.新闻.md @@ -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" + } +} \ No newline at end of file diff --git a/5.爬虫.md b/5.爬虫.md new file mode 100644 index 0000000..ee8db37 --- /dev/null +++ b/5.爬虫.md @@ -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" + } +} \ No newline at end of file