diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.1_2__add_aiwriteblog.sql b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.1_2__add_aiwriteblog.sql new file mode 100644 index 000000000..ed789ab93 --- /dev/null +++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.1_2__add_aiwriteblog.sql @@ -0,0 +1 @@ +INSERT INTO `airag_flow` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `sys_org_code`, `tenant_id`, `application_name`, `name`, `descr`, `icon`, `chain`, `design`, `status`, `metadata`, `trigger_cron`) VALUES ('2011769909807579138', 'admin', '2026-01-15 19:58:18', 'admin', '2026-01-20 18:01:01', 'A05A01A01', NULL, 'jeecg', 'AI写作_示例', '', '', 'THEN(\n start.tag(\'start-node\'),\n SWITCH(switch.tag(\'274870264732975104\')).to(\n THEN(\n llm.tag(\'274870308194353152\'),\n reply.tag(\'275189628369862656\'),\n end.tag(\'274870895589851136\')\n ).tag(\"274870308194353152\"),\n THEN(\n llm.tag(\'274870324602470400\'),\n reply.tag(\'275189722339049472\'),\n end.tag(\'274870677188247552\')\n ).tag(\"274870324602470400\")\n ).tag(\'274870264732975104\')\n).tag(\"start-node\")', '{\"nodes\":[{\"id\":\"start-node\",\"type\":\"start\",\"x\":300,\"y\":493,\"properties\":{\"text\":\"开始\",\"remarks\":\"\",\"options\":{\"cronTrigger\":{\"enabled\":false,\"cronExp\":\"0 0 0 * * ?\",\"beginTime\":null,\"endTime\":null,\"inputParams\":{}}},\"inputParams\":[{\"field\":\"content\",\"name\":\"用户问题\",\"type\":\"string\",\"required\":true},{\"field\":\"history\",\"name\":\"历史记录\",\"type\":\"string[]\",\"required\":false},{\"field\":\"images\",\"name\":\"图片\",\"type\":\"picture\",\"required\":false},{\"field\":\"type\",\"name\":\"类型\",\"type\":\"string\",\"required\":true}],\"outputParams\":[],\"width\":332,\"height\":90}},{\"id\":\"274870264732975104\",\"type\":\"switch\",\"x\":786,\"y\":506,\"properties\":{\"text\":\"条件分支\",\"options\":{\"if\":[{\"logic\":\"AND\",\"conditions\":[{\"nodeId\":\"start-node\",\"field\":\"type\",\"operator\":\"EQUALS\",\"value\":\"polish\",\"type\":\"string\"}],\"next\":\"274870308194353152\"}],\"else\":{\"next\":\"274870324602470400\"}},\"inputParams\":[],\"outputParams\":[{\"field\":\"index\",\"name\":\"分支索引\",\"type\":\"number\"}],\"width\":332,\"height\":116}},{\"id\":\"274870308194353152\",\"type\":\"llm\",\"x\":1239,\"y\":410.5,\"properties\":{\"text\":\"文章润色\",\"options\":{\"model\":{\"modeId\":\"1897481367743143938\",\"params\":{\"model\":\"deepseek\",\"temperature\":0.7,\"timeout\":60}},\"history\":3,\"messages\":[{\"role\":\"system\",\"content\":\"## 角色:专业文章编辑\\n你是一位经验丰富、技巧高超的专业编辑,擅长根据用户提供的原始内容,进行深度优化和润色,提升文章的整体质量、可读性和影响力。\\n## 目标:\\n1. 精准理解用户原文的核心思想、目标受众和写作意图,严格保留原文所有内容(包括图片格式及图片相关描述,绝不删除、修改图片路径或调整图片位置)。\\n2. 运用专业的编辑技巧(如结构调整、语言润色、逻辑强化、亮点突出等)对文章进行全面改进,仅优化文字部分,不触碰任何图片相关元素。\\n3. 在润色过程中,严格参考用户原文的长度、语气、格式和语言风格,确保优化后的文章与原文风格一致、节奏一致、篇幅保持相近,不随意扩展或压缩内容。\\n4. 输出一篇在保持原意、保留全部原文内容(含图片)的基础上,更精炼、流畅、有力且符合目标场景的优化版本。\\n## 技能:\\n1. 深度理解与分析:能快速把握文章主旨、论点、论据和情感基调,识别原文的亮点、待改进之处,同时精准定位图片位置及相关关联内容,确保文字优化与图片适配。\\n2. 结构优化大师:擅长重组段落顺序、调整句间逻辑、优化叙事流程,使文章结构清晰、层层递进,调整过程中严格保留图片的原有位置及上下文关联。\\n3. 语言润色专家:拥有丰富的词汇储备和敏锐的语感,能消除冗余、修正语病、替换平淡词汇,提升文字的表现力和专业性,不改动任何图片格式及图片描述。\\n4. 风格适配能力:能根据文章类型(如学术论文、商业文案、创意故事等)和目标读者,调整并统一全文的语言风格,确保文字风格与图片内容协调统一。\\n5. 风格复刻能力:能精准识别并模仿用户原文的语气(正式、口语、幽默、客观、感性等)、格式(标题层级、段落结构、列表方式等)、语言习惯(用词偏好、句式特点、节奏风格),使润色后的文章在风格上与原文保持高度一致。\\n## 工作流:\\n1. 接收与分析:首先,我会请求用户提供需要改进的文章全文(含图片格式)。收到后,我将仔细阅读,分析其核心观点、目标读者、现有结构、语言风格及主要问题(如逻辑不清、表达啰嗦、重点模糊等),同时标注图片位置及关联文字,确保优化不影响图片呈现。\\n2. 风格与格式识别:在分析阶段,我会特别关注用户原文的长度、语气、格式和语言风格,并将其作为润色的重要参考依据,确保优化后的文章与原文风格一致。\\n3. 制定编辑方案:基于分析,规划具体的改进方向(如开篇优化、论点强化、案例润色、结论升华等),明确所有方案均不涉及图片删除、修改,仅针对文字部分调整,可向用户简要确认理解与改进思路。\\n4. 执行优化编辑:按照既定方案,逐部分优化文字内容,包括重写开头结尾、调整段落布局、精炼句子、丰富细节、增强逻辑连接词、统一术语和语气。全程严格保留原文中的所有图片格式、图片路径及图片位置,确保图片与优化后文字衔接自然。\\n5. 风格一致性检查:在完成文字优化后,我会进行一次风格一致性复核,确保文章的语气、格式、语言风格与用户原文保持一致,篇幅长度不出现显著偏差。\\n6. 输出与核对:最终呈现优化后的完整文章,再次核对确认所有图片元素均未改动,仅文字部分得到提升,确保原文内容(含图片)无遗漏、无篡改。\\n## 输出格式:\\n- 输出优化后的完整文章,全文保留原文所有图片格式、图片路径及图片位置,仅优化文字部分,图片相关内容与位置完全复刻原文。\\n## 限制:\\n1. 严格忠实于用户原文的核心事实、核心观点及所有内容(含图片),不得歪曲、杜撰信息,不得删除、修改任何图片格式、图片路径或图片位置。\\n2. 所有优化需基于可靠的写作与编辑原则,仅针对文字部分开展,避免主观臆断或个人风格过度强加,确保文字优化不影响图片的呈现及上下文关联。\\n3. 若遇到原文中存在事实模糊或逻辑硬伤之处,应在优化版本中通过 [建议核实] 或调整表述予以提示,而非擅自修改事实,同时不触碰图片相关元素。\\n4. 不添加与原文主题无关的内容或评价,不新增、删减图片,不调整图片排列顺序。\\n5. 润色过程中必须参考用户原文的长度、语气、格式和语言风格,不得随意改变原文的整体风格或篇幅结构。\"},{\"role\":\"user\",\"content\":\"{{content}}\"}],\"showToolExecution\":false},\"inputParams\":[{\"field\":\"content\",\"name\":\"content\",\"nodeId\":\"start-node\",\"customValue\":\"\",\"type\":\"string\"}],\"outputParams\":[{\"field\":\"text\",\"name\":\"回复内容\",\"type\":\"string\"}],\"width\":332,\"height\":205,\"remarks\":\"文章润色\"}},{\"id\":\"274870324602470400\",\"type\":\"llm\",\"x\":1240,\"y\":682.5,\"properties\":{\"text\":\"文章创作,图文格式\",\"options\":{\"model\":{\"modeId\":\"1897481367743143938\",\"params\":{\"model\":\"deepseek\",\"temperature\":0.7,\"timeout\":60}},\"history\":3,\"messages\":[{\"role\":\"system\",\"content\":\"## 角色:精准内容与段落配图生成专家\\n\\n你是一位专业的内容生成助手,能够严格按照用户指定的格式、语气、长度和语言要求,直接输出精准匹配的最终内容,并为每个独立段落配上 1 张高相关度的图片。\\n\\n## 任务类型识别\\n\\n1. 回复类任务:当用户提供原始问题和参考回复时,仅基于给定内容生成精准回复,不得额外添加无关信息(如通知、背景介绍等)。\\n\\n2. 文章类任务:当用户提供主题时,撰写结构清晰、内容准确的完整文章,可包含引言、主体段落、总结等部分。\\n\\n## 目标\\n\\n1. **严格遵循指令**:完全按照用户指定的格式、语气、语言和长度要求生成内容。\\n\\n2. **直接输出结果**:仅输出符合要求的正文内容和对应的段落配图,不包含任何额外的标题、解释、道歉或中间过程。\\n\\n3. **逐段精准配图**:为每一个独立的段落匹配 1 张与该段内容强相关的图片,图片直接插入到对应段落的末尾,而非统一放在全文结尾。\\n\\n4. **适配两种模式**:既能独立创作短文并逐段配图,也能基于给定的原文和参考内容生成精准回复并逐段配图。\\n\\n\\n## 核心规则\\n\\n1. 严格匹配要求:必须完全遵循用户指定的格式、语气、长度和语言要求。\\n\\n## 技能\\n\\n1. **精准指令解析**:准确识别用户的创作模式(独立创作 / 回复)、格式(消息 / 邮件等)、语气(友善 / 专业等)、语言(中文 / 英文等)和长度(短 / 中 / 长)。\\n\\n2. **无冗余输出**:仅生成符合要求的正文内容,不添加任何指令外的信息。\\n\\n3. **独立创作能力**:针对独立创作需求,能围绕核心主题生成结构清晰、语言流畅的短文。\\n\\n4. **精准回复能力**:针对回复需求,能基于原文和参考内容生成精准匹配的简短回复。\\n\\n5. **逐段配图能力**:为每个独立段落提取精准关键词,调用search_photos(图片搜索工具)完成搜索,图片直接插入到对应段落的末尾。\\n\\n6. **避免搜索死循环**:每个图片仅使用 1-2 个精准关键词一次搜索完成,不反复调整关键词。\\n\\n7. **内容精准性**:回复类内容必须与参考内容完全一致,不得扩写;文章类内容必须准确、专业,不虚构事实。\\n\\n## 工作流(内部执行,不对外展示)\\n\\n1. **识别需求类型**:判断用户需求是独立创作短文,还是基于给定内容生成回复。\\n\\n2. **解析参数要求**:提取并确认格式、语气、语言、长度等所有约束条件。\\n\\n3. **生成精准内容**:\\n\\n - 独立创作:围绕核心主题,生成符合长度和语气要求的正文,并自然分段。\\n\\n - 回复:基于原文和参考内容,生成精准匹配的简短回复,并自然分段。\\n\\n4. **逐段匹配配图**:为每个独立段落提取 1-2 个与该段内容强相关的关键词,调用图片工具完成搜索。\\n\\n5. **整合输出**:将图片以路径的方式直接插入到对应段落的末尾,仅输出最终的图文内容,不包含任何额外信息或中间过程。\\n\\n## 限制\\n\\n- 必须等待 搜索图片 工具返回结果后,再将图片与文字内容整合输出,禁止在工具调用过程中提前生成最终回复。\\n\\n- 禁止输出标题、解释、过程或额外说明。\\n\\n- 只对重点内容配图,非重点内容不配图。\\n\\n- 图片必须与重点内容高度相关。\\n\\n- 每个重点内容只配 1 张图,避免重复搜索。\\n\\n- 图片插入在重点内容附近,不集中放在结尾。\\n\\n- 语言必须符合用户指定的要求。\"},{\"role\":\"user\",\"content\":\"{{content}}\"}],\"showToolExecution\":false,\"plugins\":[{\"pluginId\":\"1988208474780168193\",\"pluginName\":\"图片搜索\",\"category\":\"mcp\"}]},\"inputParams\":[{\"field\":\"content\",\"name\":\"content\",\"nodeId\":\"start-node\",\"customValue\":\"\",\"type\":\"string\"}],\"outputParams\":[{\"field\":\"text\",\"name\":\"回复内容\",\"type\":\"string\"}],\"width\":332,\"height\":205,\"remarks\":\"文章创作,图文格式\"}},{\"id\":\"274870677188247552\",\"type\":\"end\",\"x\":2189,\"y\":631,\"properties\":{\"text\":\"结束\",\"options\":{\"outputText\":false,\"outputContent\":\"{{result}}\",\"outputType\":\"text\",\"cardConfig\":null},\"inputParams\":[],\"outputParams\":[{\"field\":\"text\",\"name\":\"result\",\"nodeId\":\"274870324602470400\",\"customValue\":\"\",\"type\":\"string\"}],\"width\":332,\"height\":134}},{\"id\":\"274870895589851136\",\"type\":\"end\",\"x\":2149,\"y\":366,\"properties\":{\"text\":\"结束\",\"options\":{\"outputText\":false,\"outputContent\":\"{{result}}\",\"outputType\":\"text\",\"cardConfig\":null},\"inputParams\":[],\"outputParams\":[{\"field\":\"text\",\"name\":\"result\",\"nodeId\":\"274870308194353152\",\"customValue\":\"\",\"type\":\"string\"}],\"width\":332,\"height\":134}},{\"id\":\"275189628369862656\",\"type\":\"reply\",\"x\":1725,\"y\":364,\"properties\":{\"text\":\"直接回复\",\"options\":{\"content\":\"{{content}}\",\"stream\":true},\"inputParams\":[{\"field\":\"text\",\"name\":\"content\",\"nodeId\":\"274870308194353152\",\"customValue\":\"\",\"type\":\"string\"}],\"outputParams\":[],\"width\":332,\"height\":112}},{\"id\":\"275189722339049472\",\"type\":\"reply\",\"x\":1725,\"y\":637,\"properties\":{\"text\":\"直接回复\",\"options\":{\"content\":\"{{content}}\",\"stream\":true},\"inputParams\":[{\"field\":\"text\",\"name\":\"content\",\"nodeId\":\"274870324602470400\",\"customValue\":\"\",\"type\":\"string\"}],\"outputParams\":[],\"width\":332,\"height\":112}}],\"edges\":[{\"id\":\"274870264774918144\",\"type\":\"base-edge\",\"sourceNodeId\":\"start-node\",\"targetNodeId\":\"274870264732975104\",\"sourceAnchorId\":\"start-node_output\",\"targetAnchorId\":\"274870264732975104_input\",\"pointsList\":[{\"x\":466,\"y\":479},{\"x\":566,\"y\":479},{\"x\":520,\"y\":479},{\"x\":620,\"y\":479}],\"properties\":{\"runStatus\":\"\"}},{\"id\":\"274870308244684800\",\"type\":\"base-edge\",\"sourceNodeId\":\"274870264732975104\",\"targetNodeId\":\"274870308194353152\",\"sourceAnchorId\":\"274870264732975104_source_if\",\"targetAnchorId\":\"274870308194353152_input\",\"pointsList\":[{\"x\":952,\"y\":513},{\"x\":1052,\"y\":513},{\"x\":973,\"y\":339},{\"x\":1073,\"y\":339}],\"properties\":{\"runStatus\":\"\"}},{\"id\":\"274870324673773568\",\"type\":\"base-edge\",\"sourceNodeId\":\"274870264732975104\",\"targetNodeId\":\"274870324602470400\",\"sourceAnchorId\":\"274870264732975104_source_else\",\"targetAnchorId\":\"274870324602470400_input\",\"pointsList\":[{\"x\":952,\"y\":539},{\"x\":1052,\"y\":539},{\"x\":974,\"y\":611},{\"x\":1074,\"y\":611}],\"properties\":{\"runStatus\":\"\"}},{\"id\":\"275189628491497472\",\"type\":\"base-edge\",\"sourceNodeId\":\"274870308194353152\",\"targetNodeId\":\"275189628369862656\",\"sourceAnchorId\":\"274870308194353152_output\",\"targetAnchorId\":\"275189628369862656_input\",\"pointsList\":[{\"x\":1405,\"y\":339},{\"x\":1505,\"y\":339},{\"x\":1459,\"y\":339},{\"x\":1559,\"y\":339}],\"properties\":{\"runStatus\":\"\"}},{\"id\":\"275189651216236544\",\"type\":\"base-edge\",\"sourceNodeId\":\"275189628369862656\",\"targetNodeId\":\"274870895589851136\",\"sourceAnchorId\":\"275189628369862656_output\",\"targetAnchorId\":\"274870895589851136_input\",\"pointsList\":[{\"x\":1891,\"y\":339},{\"x\":1991,\"y\":339},{\"x\":1883,\"y\":330},{\"x\":1983,\"y\":330}],\"properties\":{\"runStatus\":\"\"}},{\"id\":\"275189722511015936\",\"type\":\"base-edge\",\"sourceNodeId\":\"274870324602470400\",\"targetNodeId\":\"275189722339049472\",\"sourceAnchorId\":\"274870324602470400_output\",\"targetAnchorId\":\"275189722339049472_input\",\"pointsList\":[{\"x\":1406,\"y\":611},{\"x\":1506,\"y\":611},{\"x\":1459,\"y\":612},{\"x\":1559,\"y\":612}],\"properties\":{\"runStatus\":\"\"}},{\"id\":\"275189728907329536\",\"type\":\"base-edge\",\"sourceNodeId\":\"275189722339049472\",\"targetNodeId\":\"274870677188247552\",\"sourceAnchorId\":\"275189722339049472_output\",\"targetAnchorId\":\"274870677188247552_input\",\"pointsList\":[{\"x\":1891,\"y\":612},{\"x\":1991,\"y\":612},{\"x\":1923,\"y\":595},{\"x\":2023,\"y\":595}],\"properties\":{\"runStatus\":\"\"}}]}', 'enable', '{\"outputs\":[{\"customValue\":\"\",\"field\":\"text\",\"name\":\"result\",\"nodeId\":\"274870308194353152\",\"type\":\"string\"}],\"inputs\":[{\"field\":\"content\",\"name\":\"用户问题\",\"required\":true,\"type\":\"string\"},{\"field\":\"history\",\"name\":\"历史记录\",\"required\":false,\"type\":\"string[]\"},{\"field\":\"images\",\"name\":\"图片\",\"required\":false,\"type\":\"picture\"},{\"field\":\"type\",\"name\":\"类型\",\"required\":true,\"type\":\"string\"}]}', ''); \ No newline at end of file