279279 </div >
280280 </template >
281281
282+ <!-- AI 大模型节点属性 -->
283+ <template v-if =" selectedNode .elementType === ' AI' " >
284+ <div style =" display :flex ;justify-content :flex-end " ><el-button size =" small" icon =" QuestionFilled" link @click =" openNodeHelp('AI')" >帮助</el-button ></div >
285+ <div class =" prop-tip" >大模型节点:调用已配置的大模型(系统设置 → 大模型设置),把输入变量内容作为用户消息发送,回复写入输出变量。</div >
286+ <div class =" prop-item" >
287+ <label >输入变量</label >
288+ <el-select v-model =" selectedNode.aiConfig.input" size =" small" style =" width :100% " clearable placeholder =" 选择输入变量(作为用户消息)" >
289+ <el-option v-for =" v in allVariables" :key =" v.variableCode" :value =" v.variableCode" :label =" v.variableCode" />
290+ </el-select >
291+ </div >
292+ <div class =" prop-item" >
293+ <label >系统提示词</label >
294+ <el-input v-model =" selectedNode.aiConfig.systemPrompt" type =" textarea" :rows =" 4"
295+ placeholder =" 如:你是一名专业的文案专家,根据用户输入生成简洁有力的文案。" />
296+ </div >
297+ <div class =" prop-item" >
298+ <label >输出变量</label >
299+ <el-select v-model =" selectedNode.aiConfig.output" size =" small" style =" width :100% " clearable placeholder =" 选择输出变量(模型回复写入)" >
300+ <el-option v-for =" v in allVariables" :key =" v.variableCode" :value =" v.variableCode" :label =" v.variableCode" />
301+ </el-select >
302+ </div >
303+ </template >
304+
282305 <!-- NOTIFY 通知节点属性 -->
283306 <template v-if =" selectedNode .elementType === ' NOTIFY' " >
284307 <div style =" display :flex ;justify-content :flex-end " ><el-button size =" small" icon =" QuestionFilled" link @click =" openNodeHelp('NOTIFY')" >帮助</el-button ></div >
@@ -1802,6 +1825,31 @@ env_delay_ms = env_retry_count * 1000 + 500` },
18021825场景: 多数据源并发查询 + 汇总。 ` }
18031826 ]
18041827 },
1828+ AI: {
1829+ title: ' 大模型节点' ,
1830+ sections: [
1831+ { title: ' 一、节点说明' , code: ` 大模型节点调用系统设置 → 大模型设置中启用的供应商(OpenAI 兼容接口,支持 DeepSeek/通义千问/Kimi 等),适合在流程中插入 AI 能力:
1832+ - 内容生成 / 润色 / 翻译
1833+ - 文本分类 / 情感分析
1834+ - 结构化提取(要求模型返回 JSON 后用赋值节点解析) ` },
1835+ { title: ' 二、配置说明' , code: ` 输入变量: 作为用户消息发送给模型(如 env_text)
1836+ 系统提示词: 人设与任务说明(如"你是文案专家,输出简洁有力的文案")
1837+ 输出变量: 模型回复写入的变量(如 env_ai_reply) ` },
1838+ { title: ' 三、使用 demo' , code: ` // 场景:流程中生成商品推荐文案
1839+ 前置 ASSIGN 节点: env_product_name = "智能手表"
1840+
1841+ AI 节点:
1842+ 输入变量: env_product_name
1843+ 系统提示词: 你是一名电商文案专家,根据商品名称生成一句吸引人的推荐语
1844+ 输出变量: env_ad_copy
1845+
1846+ 后续节点用 ${' ${env_ad_copy}' } 引用生成结果(如 NOTIFY 通知 / METHOD 参数) ` },
1847+ { title: ' 四、注意事项' , code: ` 1. 需先在系统设置 → 大模型设置中配置并启用供应商,否则流程执行时报错
1848+ 2. 输入变量不存在时以空文本发送
1849+ 3. 需要结构化结果时,在系统提示词中要求"只输出 JSON",再用赋值节点/代码节点解析
1850+ 4. 模型调用有网络延迟,建议设置节点超时(默认不限) ` }
1851+ ]
1852+ },
18051853 TRANSFORM: {
18061854 title: ' 模板转换节点' ,
18071855 sections: [
@@ -2650,7 +2698,7 @@ function nodeIcon(type: string) {
26502698 const map: Record <string , string > = {
26512699 START: ' ▶' , END: ' ⏹' , METHOD: ' ⚙' , CONDITION: ' ◆' ,
26522700 ASSIGN: ' ←' , CODE: ' { }' , MYSQL: ' ⊕' , MERGE: ' ⇒' , SUB_FLOW: ' ⬡' ,
2653- LOOP: ' ↻' , DELAY: ' ⏱' , PARALLEL: ' ∥' , NOTIFY: ' ✉' , TRANSFORM: ' 📝'
2701+ LOOP: ' ↻' , DELAY: ' ⏱' , PARALLEL: ' ∥' , NOTIFY: ' ✉' , TRANSFORM: ' 📝' , AI: ' 🤖 '
26542702 }
26552703 return map [type ] || ' ?'
26562704}
@@ -2659,7 +2707,7 @@ function nodeTypeName(type: string) {
26592707 const map: Record <string , string > = {
26602708 START: ' 开始' , END: ' 结束' , METHOD: ' 方法' , CONDITION: ' 条件' ,
26612709 ASSIGN: ' 赋值' , CODE: ' 代码' , MYSQL: ' 数据库' , MERGE: ' 聚合' , SUB_FLOW: ' 子流程' ,
2662- LOOP: ' 循环' , DELAY: ' 延迟' , PARALLEL: ' 并行' , NOTIFY: ' 通知' , TRANSFORM: ' 模板转换'
2710+ LOOP: ' 循环' , DELAY: ' 延迟' , PARALLEL: ' 并行' , NOTIFY: ' 通知' , TRANSFORM: ' 模板转换' , AI: ' 大模型 '
26632711 }
26642712 return map [type ] || type
26652713}
@@ -2680,6 +2728,7 @@ const nodeToolList = [
26802728 { type: ' PARALLEL' , icon: ' ∥' , label: ' 并行' },
26812729 { type: ' NOTIFY' , icon: ' ✉' , label: ' 通知' },
26822730 { type: ' TRANSFORM' , icon: ' 📝' , label: ' 模板转换' },
2731+ { type: ' AI' , icon: ' 🤖' , label: ' 大模型' },
26832732]
26842733
26852734function addNode(type : string ) {
@@ -2729,6 +2778,9 @@ function addNode(type: string) {
27292778 if (type === ' TRANSFORM' ) bNode .transformConfig = {
27302779 targetType: ' VARIABLE' , targetCode: ' ' , template: ' '
27312780 }
2781+ if (type === ' AI' ) bNode .aiConfig = {
2782+ input: ' ' , systemPrompt: ' ' , output: ' '
2783+ }
27322784
27332785 businessNodes .value .push (bNode )
27342786 vfNodes .value .push (buildVfNode (bNode , x , y ))
0 commit comments