Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

可疑的BUG:插件中的临时变量可能没有及时回收,导致重复调用出错 #1704

Closed
6 of 7 tasks
mwnu opened this issue Jun 5, 2024 · 1 comment
Closed
6 of 7 tasks
Labels
bug Something isn't working

Comments

@mwnu
Copy link

mwnu commented Jun 5, 2024

例行检查

  • 我已确认目前没有类似 issue
  • 我已完整查看过项目 README,以及项目文档
  • 我使用了自己的 key,并确认我的 key 是可正常使用的
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

你的版本

  • 公有云版本
  • 私有部署版本, 具体版本号: 4.8.3

问题描述, 日志截图
假设某个插件输出临时变量,一个应用调用了这个插件,如果紧接着另一个应用调用它,那它得到的是上一个应用的数据。
为了验证这一点,我构造了下面这个测试应用,这个应用调用插件输出的临时变量用来做分支判断,又构造了一个插件用于调用回只身,这样构成一个循环执行的测试环境
这是测试应用的配置:

{
  "nodes": [
    {
      "nodeId": "userGuide",
      "name": "系统配置",
      "intro": "可以配置应用的系统参数",
      "avatar": "/imgs/workflow/userGuide.png",
      "flowNodeType": "userGuide",
      "position": {
        "x": 434.46596433289875,
        "y": -106.40777139106982
      },
      "version": "481",
      "inputs": [
        {
          "key": "welcomeText",
          "renderTypeList": [
            "hidden"
          ],
          "valueType": "string",
          "label": "core.app.Welcome Text",
          "value": ""
        },
        {
          "key": "variables",
          "renderTypeList": [
            "hidden"
          ],
          "valueType": "any",
          "label": "core.app.Chat Variable",
          "value": []
        },
        {
          "key": "questionGuide",
          "valueType": "boolean",
          "renderTypeList": [
            "hidden"
          ],
          "label": "core.app.Question Guide",
          "value": false
        },
        {
          "key": "tts",
          "renderTypeList": [
            "hidden"
          ],
          "valueType": "any",
          "label": "",
          "value": {
            "type": "web"
          }
        },
        {
          "key": "whisper",
          "renderTypeList": [
            "hidden"
          ],
          "valueType": "any",
          "label": "",
          "value": {
            "open": false,
            "autoSend": false,
            "autoTTSResponse": false
          }
        },
        {
          "key": "scheduleTrigger",
          "renderTypeList": [
            "hidden"
          ],
          "valueType": "any",
          "label": "",
          "value": null
        }
      ],
      "outputs": []
    },
    {
      "nodeId": "448745",
      "name": "流程开始",
      "intro": "",
      "avatar": "/imgs/workflow/userChatInput.svg",
      "flowNodeType": "workflowStart",
      "position": {
        "x": 279.33236903844823,
        "y": -576.216409059388
      },
      "version": "481",
      "inputs": [
        {
          "key": "userChatInput",
          "renderTypeList": [
            "reference",
            "textarea"
          ],
          "valueType": "string",
          "label": "用户问题",
          "required": true,
          "toolDescription": "用户问题"
        }
      ],
      "outputs": [
        {
          "id": "userChatInput",
          "key": "userChatInput",
          "label": "core.module.input.label.user question",
          "valueType": "string",
          "type": "static"
        }
      ]
    },
    {
      "nodeId": "oLLP2nvWdWhW",
      "name": "指定回复",
      "intro": "该模块可以直接回复一段指定的内容。常用于引导、提示。非字符串内容传入时,会转成字符串进行输出。",
      "avatar": "/imgs/workflow/reply.png",
      "flowNodeType": "answerNode",
      "position": {
        "x": 2090.870531661791,
        "y": 698.9584533483066
      },
      "version": "481",
      "inputs": [
        {
          "key": "text",
          "renderTypeList": [
            "textarea",
            "reference"
          ],
          "valueType": "any",
          "required": true,
          "label": "core.module.input.label.Response content",
          "description": "core.module.input.description.Response content",
          "placeholder": "core.module.input.description.Response content",
          "selectedTypeIndex": 1,
          "value": [
            "s1cBdmMTZ3Rx",
            "text"
          ]
        }
      ],
      "outputs": []
    },
    {
      "nodeId": "vwL1UN2Kqni8",
      "name": "命令识取",
      "intro": "",
      "avatar": "/icon/logo.svg",
      "flowNodeType": "pluginModule",
      "showStatus": true,
      "position": {
        "x": 567.0220376840969,
        "y": -574.1161761901824
      },
      "version": "481",
      "inputs": [
        {
          "key": "ask",
          "valueType": "string",
          "label": "ask",
          "renderTypeList": [
            "reference"
          ],
          "required": true,
          "description": "用户的问题",
          "canEdit": false,
          "value": [
            "448745",
            "userChatInput"
          ],
          "editField": {
            "key": true
          },
          "dynamicParamDefaultValue": {
            "inputType": "reference",
            "valueType": "string",
            "required": true
          }
        }
      ],
      "outputs": [
        {
          "id": "prompt",
          "type": "static",
          "key": "prompt",
          "valueType": "any",
          "label": "prompt",
          "description": ""
        },
        {
          "id": "cmdBegin",
          "type": "static",
          "key": "cmdBegin",
          "valueType": "any",
          "label": "cmdBegin",
          "description": ""
        },
        {
          "id": "cmdEnd",
          "type": "static",
          "key": "cmdEnd",
          "valueType": "any",
          "label": "cmdEnd",
          "description": ""
        }
      ],
      "pluginId": "665f491ff66a44eb9c60596e",
      "nodeVersion": "9vB9SC"
    },
    {
      "nodeId": "l9zHTg96vNkt",
      "name": "判断器",
      "intro": "根据一定的条件,执行不同的分支。",
      "avatar": "/imgs/workflow/ifElse.svg",
      "flowNodeType": "ifElseNode",
      "showStatus": true,
      "position": {
        "x": 979.2936866322041,
        "y": -575.5859333057762
      },
      "version": "481",
      "inputs": [
        {
          "key": "ifElseList",
          "renderTypeList": [
            "hidden"
          ],
          "valueType": "any",
          "label": "",
          "value": [
            {
              "condition": "AND",
              "list": [
                {
                  "variable": [
                    "vwL1UN2Kqni8",
                    "cmdEnd"
                  ],
                  "condition": "equalTo",
                  "value": "0"
                },
                {
                  "variable": [
                    "vwL1UN2Kqni8",
                    "cmdBegin"
                  ],
                  "condition": "isEmpty",
                  "value": "without"
                }
              ]
            }
          ]
        }
      ],
      "outputs": [
        {
          "id": "ifElseResult",
          "key": "ifElseResult",
          "label": "判断结果",
          "valueType": "string",
          "type": "static"
        }
      ]
    },
    {
      "nodeId": "o7keJJANDjmV",
      "name": "命令分类",
      "intro": "",
      "avatar": "/icon/logo.svg",
      "flowNodeType": "pluginModule",
      "showStatus": true,
      "position": {
        "x": 1668.7745163544541,
        "y": 108.24993913107812
      },
      "version": "481",
      "inputs": [
        {
          "key": "ask",
          "valueType": "string",
          "label": "ask",
          "renderTypeList": [
            "reference"
          ],
          "required": true,
          "description": "",
          "canEdit": false,
          "value": [
            "vwL1UN2Kqni8",
            "prompt"
          ],
          "editField": {
            "key": true
          },
          "dynamicParamDefaultValue": {
            "inputType": "reference",
            "valueType": "string",
            "required": true
          }
        },
        {
          "key": "context",
          "valueType": "chatHistory",
          "label": "context",
          "renderTypeList": [
            "reference"
          ],
          "required": true,
          "description": "",
          "canEdit": false,
          "value": [
            "VARIABLE_NODE_ID",
            "histories"
          ],
          "editField": {
            "key": true
          },
          "dynamicParamDefaultValue": {
            "inputType": "reference",
            "valueType": "string",
            "required": true
          }
        },
        {
          "key": "cmdBegin",
          "valueType": "string",
          "label": "cmdBegin",
          "renderTypeList": [
            "reference"
          ],
          "required": true,
          "description": "",
          "canEdit": false,
          "value": [
            "vwL1UN2Kqni8",
            "cmdBegin"
          ],
          "editField": {
            "key": true
          },
          "dynamicParamDefaultValue": {
            "inputType": "reference",
            "valueType": "string",
            "required": true
          }
        },
        {
          "inputType": "reference",
          "valueType": "number",
          "key": "cmdEnd",
          "label": "cmdEnd",
          "description": "",
          "isToolInput": false,
          "defaultValue": "",
          "editField": {
            "key": true
          },
          "dynamicParamDefaultValue": {
            "inputType": "reference",
            "valueType": "string",
            "required": true
          },
          "renderTypeList": [
            "reference"
          ],
          "required": true,
          "canEdit": false,
          "value": [
            "vwL1UN2Kqni8",
            "cmdEnd"
          ]
        }
      ],
      "outputs": [
        {
          "id": "memory",
          "type": "static",
          "key": "memory",
          "valueType": "chatHistory",
          "label": "memory",
          "description": ""
        },
        {
          "id": "reply",
          "type": "static",
          "key": "reply",
          "valueType": "string",
          "label": "reply",
          "description": ""
        }
      ],
      "pluginId": "665f4eaff66a44eb9c605a58",
      "nodeVersion": "rGusVr"
    },
    {
      "nodeId": "s1cBdmMTZ3Rx",
      "name": "文本加工",
      "intro": "可对固定或传入的文本进行加工后输出,非字符串类型数据最终会转成字符串类型。",
      "avatar": "/imgs/workflow/textEditor.svg",
      "flowNodeType": "pluginModule",
      "showStatus": false,
      "position": {
        "x": 2107.530117813403,
        "y": -124.36723164108854
      },
      "version": "481",
      "inputs": [
        {
          "key": "system_addInputParam",
          "valueType": "dynamic",
          "label": "动态外部数据",
          "renderTypeList": [
            "addInputParam"
          ],
          "required": false,
          "description": "",
          "canEdit": false,
          "value": "",
          "editField": {
            "key": true
          },
          "dynamicParamDefaultValue": {
            "inputType": "reference",
            "valueType": "string",
            "required": true
          }
        },
        {
          "key": "e",
          "valueType": "string",
          "label": "e",
          "renderTypeList": [
            "reference"
          ],
          "required": true,
          "description": "",
          "canEdit": true,
          "editField": {
            "key": true
          },
          "value": [
            "vwL1UN2Kqni8",
            "prompt"
          ]
        },
        {
          "key": "c",
          "valueType": "string",
          "label": "c",
          "renderTypeList": [
            "reference"
          ],
          "required": true,
          "description": "",
          "canEdit": true,
          "editField": {
            "key": true
          },
          "value": [
            "vwL1UN2Kqni8",
            "cmdBegin"
          ]
        },
        {
          "key": "p",
          "valueType": "string",
          "label": "p",
          "renderTypeList": [
            "reference"
          ],
          "required": true,
          "description": "",
          "canEdit": true,
          "editField": {
            "key": true
          },
          "value": [
            "vwL1UN2Kqni8",
            "cmdEnd"
          ]
        },
        {
          "key": "文本",
          "valueType": "string",
          "label": "文本",
          "renderTypeList": [
            "textarea"
          ],
          "required": true,
          "description": "",
          "canEdit": false,
          "value": "- prompt: {{p}}\n- begin: {{c}}\n- end;{{e}}\n---",
          "editField": {
            "key": true
          },
          "maxLength": "",
          "dynamicParamDefaultValue": {
            "inputType": "reference",
            "valueType": "string",
            "required": true
          }
        }
      ],
      "outputs": [
        {
          "id": "text",
          "type": "static",
          "key": "text",
          "valueType": "string",
          "label": "text",
          "description": ""
        }
      ],
      "pluginId": "community-textEditor"
    },
    {
      "nodeId": "tnsOmbyQVYDV",
      "name": "指定回复",
      "intro": "该模块可以直接回复一段指定的内容。常用于引导、提示。非字符串内容传入时,会转成字符串进行输出。",
      "avatar": "/imgs/workflow/reply.png",
      "flowNodeType": "answerNode",
      "position": {
        "x": 2072.512583927363,
        "y": -526.951206697195
      },
      "version": "481",
      "inputs": [
        {
          "key": "text",
          "renderTypeList": [
            "textarea",
            "reference"
          ],
          "valueType": "any",
          "required": true,
          "label": "core.module.input.label.Response content",
          "description": "core.module.input.description.Response content",
          "placeholder": "core.module.input.description.Response content",
          "value": "啥也不说了"
        }
      ],
      "outputs": []
    }
  ],
  "edges": [
    {
      "source": "448745",
      "target": "vwL1UN2Kqni8",
      "sourceHandle": "448745-source-right",
      "targetHandle": "vwL1UN2Kqni8-target-left"
    },
    {
      "source": "vwL1UN2Kqni8",
      "target": "l9zHTg96vNkt",
      "sourceHandle": "vwL1UN2Kqni8-source-right",
      "targetHandle": "l9zHTg96vNkt-target-left"
    },
    {
      "source": "l9zHTg96vNkt",
      "target": "o7keJJANDjmV",
      "sourceHandle": "l9zHTg96vNkt-source-ELSE",
      "targetHandle": "o7keJJANDjmV-target-left"
    },
    {
      "source": "s1cBdmMTZ3Rx",
      "target": "oLLP2nvWdWhW",
      "sourceHandle": "s1cBdmMTZ3Rx-source-bottom",
      "targetHandle": "oLLP2nvWdWhW-target-top"
    },
    {
      "source": "o7keJJANDjmV",
      "target": "s1cBdmMTZ3Rx",
      "sourceHandle": "o7keJJANDjmV-source-right",
      "targetHandle": "s1cBdmMTZ3Rx-target-left"
    },
    {
      "source": "l9zHTg96vNkt",
      "target": "tnsOmbyQVYDV",
      "sourceHandle": "l9zHTg96vNkt-source-IF",
      "targetHandle": "tnsOmbyQVYDV-target-left"
    }
  ],
  "chatConfig": {
    "variables": [],
    "whisperConfig": {
      "open": true,
      "autoSend": true,
      "autoTTSResponse": true
    },
    "scheduledTriggerConfig": {
      "cronString": "",
      "timezone": "Asia/Shanghai",
      "defaultPrompt": ""
    },
    "chatInputGuide": {
      "open": false,
      "textList": [],
      "customUrl": ""
    },
    "_id": "665e1fa5f66a44eb9c60104c"
  }
}

这是插件1的配置:

{
  "nodes": [
    {
      "nodeId": "f480s68o5e5o",
      "name": "自定义插件输入",
      "intro": "自定义配置外部输入,使用插件时,仅暴露自定义配置的输入",
      "avatar": "/imgs/workflow/input.png",
      "flowNodeType": "pluginInput",
      "showStatus": false,
      "position": {
        "x": 655.3488424684256,
        "y": -208.23731804950714
      },
      "version": "481",
      "inputs": [
        {
          "key": "ask",
          "valueType": "string",
          "label": "ask",
          "renderTypeList": [
            "reference"
          ],
          "required": true,
          "description": "用户的问题",
          "canEdit": true,
          "value": "",
          "editField": {
            "key": true
          },
          "dynamicParamDefaultValue": {
            "inputType": "reference",
            "valueType": "string",
            "required": true
          }
        }
      ],
      "outputs": [
        {
          "id": "pz0mzKGfE3So",
          "key": "ask",
          "valueType": "string",
          "label": "ask",
          "type": "static"
        }
      ]
    },
    {
      "nodeId": "yvcdskguv1pz",
      "name": "自定义插件输出",
      "intro": "自定义配置外部输出,使用插件时,仅暴露自定义配置的输出",
      "avatar": "/imgs/workflow/output.png",
      "flowNodeType": "pluginOutput",
      "showStatus": false,
      "position": {
        "x": 1775.0125970530758,
        "y": -232.84662879155175
      },
      "version": "481",
      "inputs": [
        {
          "key": "prompt",
          "valueType": "any",
          "label": "prompt",
          "renderTypeList": [
            "reference"
          ],
          "required": false,
          "description": "",
          "canEdit": true,
          "editField": {
            "key": true,
            "description": true,
            "valueType": true
          },
          "value": [
            "z2VK9hmPjhql",
            "bS83HL4eZ0g8"
          ]
        },
        {
          "key": "cmdBegin",
          "valueType": "any",
          "label": "cmdBegin",
          "renderTypeList": [
            "reference"
          ],
          "required": false,
          "description": "",
          "canEdit": true,
          "editField": {
            "key": true,
            "description": true,
            "valueType": true
          },
          "value": [
            "z2VK9hmPjhql",
            "djUcSr2AjzqI"
          ]
        },
        {
          "key": "cmdEnd",
          "valueType": "any",
          "label": "cmdEnd",
          "renderTypeList": [
            "reference"
          ],
          "required": false,
          "description": "",
          "canEdit": true,
          "editField": {
            "key": true,
            "description": true,
            "valueType": true
          },
          "value": [
            "z2VK9hmPjhql",
            "vSS4m53HfiRf"
          ]
        }
      ],
      "outputs": []
    },
    {
      "nodeId": "z2VK9hmPjhql",
      "name": "代码运行",
      "intro": "执行一段简单的脚本代码,通常用于进行复杂的数据处理。",
      "avatar": "/imgs/workflow/code.svg",
      "flowNodeType": "code",
      "showStatus": true,
      "position": {
        "x": 1166.4303284927432,
        "y": -535.2951149237969
      },
      "version": "482",
      "inputs": [
        {
          "key": "system_addInputParam",
          "renderTypeList": [
            "addInputParam"
          ],
          "valueType": "dynamic",
          "label": "",
          "required": false,
          "description": "这些变量会作为代码的运行的输入参数",
          "editField": {
            "key": true,
            "valueType": true
          }
        },
        {
          "key": "ask",
          "valueType": "string",
          "label": "ask",
          "renderTypeList": [
            "reference"
          ],
          "description": "",
          "canEdit": true,
          "editField": {
            "key": true,
            "valueType": true
          },
          "value": [
            "f480s68o5e5o",
            "pz0mzKGfE3So"
          ]
        },
        {
          "key": "codeType",
          "renderTypeList": [
            "hidden"
          ],
          "label": "",
          "value": "js"
        },
        {
          "key": "code",
          "renderTypeList": [
            "custom"
          ],
          "label": "",
          "value": "function main({ask}) {\n    // 提取前25个字符\n    let first25Chars = ask.substring(0, 25);\n    \n    // 匹配 \\s--(A-Z0-9a-z){1,5}\\s 的正则表达式\n    let match = first25Chars.match(/--[A-Za-z0-9]{1,5}\\s/);\n    \n    // 初始化 isMatch 和 prompt\n    let cmdBegin = \"\";\n    let prompt = ask;\n    \n    // 如果匹配到\n    if (match) {\n        cmdBegin = match[0].trim(); // 去掉前后的空白字符\n        \n        // 只替换第一个匹配到的字符块\n        let matchIndex = ask.indexOf(match[0]);\n        prompt = ask.substring(0, matchIndex) + ask.substring(matchIndex + match[0].length);\n    }\n    \n    // 匹配文本末尾的 \\s~~\\d{1,2}\\s*\n    let endMatch = ask.match(/\\s~~(\\d{1,2})\\s*$/);\n    // 初始化 cmdEnd\n    let cmdEnd = 0;\n    \n    // 如果匹配到\n    if (endMatch) {\n        cmdEnd = parseInt(endMatch[1], 10); // 提取数字并转换为整数\n        // prompt = prompt.replace(endMatch[0], '');\n        matchIndex = prompt.indexOf(endMatch[0]);\n        prompt = prompt.substring(0, matchIndex) + prompt.substring(matchIndex + endMatch[0].length);\n    }\n    \n    // 创建返回的JSON对象\n    let returnJson = {\n        \"prompt\": prompt.trim(),\n        \"cmdBegin\": cmdBegin,\n        \"cmdEnd\": cmdEnd\n    };\n    \n    // 返回构建的JSON对象\n    return returnJson;\n}"
        }
      ],
      "outputs": [
        {
          "id": "system_addOutputParam",
          "key": "system_addOutputParam",
          "type": "dynamic",
          "valueType": "dynamic",
          "label": "",
          "editField": {
            "key": true,
            "valueType": true
          },
          "description": "将代码中 return 的对象作为输出,传递给后续的节点"
        },
        {
          "id": "system_rawResponse",
          "key": "system_rawResponse",
          "label": "完整响应数据",
          "valueType": "object",
          "type": "static"
        },
        {
          "id": "error",
          "key": "error",
          "label": "运行错误",
          "description": "代码运行错误信息,成功时返回空",
          "valueType": "object",
          "type": "static"
        },
        {
          "id": "bS83HL4eZ0g8",
          "type": "dynamic",
          "key": "prompt",
          "valueType": "any",
          "label": "prompt"
        },
        {
          "id": "djUcSr2AjzqI",
          "type": "dynamic",
          "key": "cmdBegin",
          "valueType": "any",
          "label": "cmdBegin"
        },
        {
          "id": "vSS4m53HfiRf",
          "type": "dynamic",
          "key": "cmdEnd",
          "valueType": "any",
          "label": "cmdEnd"
        }
      ]
    }
  ],
  "edges": [
    {
      "source": "f480s68o5e5o",
      "target": "z2VK9hmPjhql",
      "sourceHandle": "f480s68o5e5o-source-right",
      "targetHandle": "z2VK9hmPjhql-target-left"
    },
    {
      "source": "z2VK9hmPjhql",
      "target": "yvcdskguv1pz",
      "sourceHandle": "z2VK9hmPjhql-source-right",
      "targetHandle": "yvcdskguv1pz-target-left"
    }
  ]
}

这是插件2的配置:

{
  "nodes": [
    {
      "nodeId": "f480s68o5e5o",
      "name": "自定义插件输入",
      "intro": "自定义配置外部输入,使用插件时,仅暴露自定义配置的输入",
      "avatar": "/imgs/workflow/input.png",
      "flowNodeType": "pluginInput",
      "showStatus": false,
      "position": {
        "x": 604.8478591168578,
        "y": 221.0910398949676
      },
      "version": "481",
      "inputs": [
        {
          "key": "ask",
          "valueType": "string",
          "label": "ask",
          "renderTypeList": [
            "reference"
          ],
          "required": true,
          "description": "",
          "canEdit": true,
          "value": "",
          "editField": {
            "key": true
          },
          "dynamicParamDefaultValue": {
            "inputType": "reference",
            "valueType": "string",
            "required": true
          }
        },
        {
          "key": "context",
          "valueType": "chatHistory",
          "label": "context",
          "renderTypeList": [
            "reference"
          ],
          "required": true,
          "description": "",
          "canEdit": true,
          "value": "",
          "editField": {
            "key": true
          },
          "dynamicParamDefaultValue": {
            "inputType": "reference",
            "valueType": "string",
            "required": true
          }
        },
        {
          "key": "cmdBegin",
          "valueType": "string",
          "label": "cmdBegin",
          "renderTypeList": [
            "reference"
          ],
          "required": true,
          "description": "",
          "canEdit": true,
          "value": "",
          "editField": {
            "key": true
          },
          "dynamicParamDefaultValue": {
            "inputType": "reference",
            "valueType": "string",
            "required": true
          }
        },
        {
          "inputType": "reference",
          "valueType": "number",
          "key": "cmdEnd",
          "label": "cmdEnd",
          "description": "",
          "isToolInput": false,
          "defaultValue": "",
          "editField": {
            "key": true
          },
          "dynamicParamDefaultValue": {
            "inputType": "reference",
            "valueType": "string",
            "required": true
          },
          "renderTypeList": [
            "reference"
          ],
          "required": true,
          "canEdit": true,
          "value": ""
        }
      ],
      "outputs": [
        {
          "id": "eAuIygfAS12g",
          "key": "ask",
          "valueType": "string",
          "label": "ask",
          "type": "static"
        },
        {
          "id": "qHFXdsdRNrTX",
          "key": "context",
          "valueType": "chatHistory",
          "label": "context",
          "type": "static"
        },
        {
          "id": "jmjoRWQIfOhM",
          "key": "cmdBegin",
          "valueType": "string",
          "label": "cmdBegin",
          "type": "static"
        },
        {
          "id": "bwnVFwYokVkb",
          "key": "cmdEnd",
          "valueType": "number",
          "label": "cmdEnd",
          "type": "static"
        }
      ]
    },
    {
      "nodeId": "yvcdskguv1pz",
      "name": "自定义插件输出",
      "intro": "自定义配置外部输出,使用插件时,仅暴露自定义配置的输出",
      "avatar": "/imgs/workflow/output.png",
      "flowNodeType": "pluginOutput",
      "showStatus": false,
      "position": {
        "x": 2152.9907178623475,
        "y": 448.52968744819987
      },
      "version": "481",
      "inputs": [
        {
          "key": "memory",
          "valueType": "chatHistory",
          "label": "memory",
          "renderTypeList": [
            "reference"
          ],
          "required": false,
          "description": "",
          "canEdit": true,
          "editField": {
            "key": true,
            "description": true,
            "valueType": true
          },
          "value": [
            "d11yR1yFzsGk",
            "history"
          ]
        },
        {
          "key": "reply",
          "valueType": "string",
          "label": "reply",
          "renderTypeList": [
            "reference"
          ],
          "required": false,
          "description": "",
          "canEdit": true,
          "editField": {
            "key": true,
            "description": true,
            "valueType": true
          },
          "value": [
            "d11yR1yFzsGk",
            "answerText"
          ]
        }
      ],
      "outputs": []
    },
    {
      "nodeId": "qZvzDunwvcoD",
      "name": "代码运行",
      "intro": "执行一段简单的脚本代码,通常用于进行复杂的数据处理。",
      "avatar": "/imgs/workflow/code.svg",
      "flowNodeType": "code",
      "showStatus": true,
      "position": {
        "x": 1063.6509968261412,
        "y": 61.11076691882437
      },
      "version": "482",
      "inputs": [
        {
          "key": "system_addInputParam",
          "renderTypeList": [
            "addInputParam"
          ],
          "valueType": "dynamic",
          "label": "",
          "required": false,
          "description": "这些变量会作为代码的运行的输入参数",
          "editField": {
            "key": true,
            "valueType": true
          }
        },
        {
          "key": "ask",
          "valueType": "string",
          "label": "ask",
          "renderTypeList": [
            "reference"
          ],
          "description": "",
          "canEdit": true,
          "editField": {
            "key": true,
            "valueType": true
          },
          "value": [
            "f480s68o5e5o",
            "eAuIygfAS12g"
          ]
        },
        {
          "key": "context",
          "valueType": "chatHistory",
          "label": "context",
          "renderTypeList": [
            "reference"
          ],
          "description": "",
          "canEdit": true,
          "editField": {
            "key": true,
            "valueType": true
          },
          "value": [
            "f480s68o5e5o",
            "qHFXdsdRNrTX"
          ]
        },
        {
          "key": "cmdBegin",
          "valueType": "string",
          "label": "cmdBegin",
          "renderTypeList": [
            "reference"
          ],
          "description": "",
          "canEdit": true,
          "editField": {
            "key": true,
            "valueType": true
          },
          "value": [
            "f480s68o5e5o",
            "jmjoRWQIfOhM"
          ]
        },
        {
          "key": "cmdEnd",
          "valueType": "number",
          "label": "cmdEnd",
          "renderTypeList": [
            "reference"
          ],
          "description": "",
          "canEdit": true,
          "editField": {
            "key": true,
            "valueType": true
          },
          "value": [
            "f480s68o5e5o",
            "bwnVFwYokVkb"
          ]
        },
        {
          "key": "codeType",
          "renderTypeList": [
            "hidden"
          ],
          "label": "",
          "value": "js"
        },
        {
          "key": "code",
          "renderTypeList": [
            "custom"
          ],
          "label": "",
          "value": "function main({ask, context,cmdBegin,cmdEnd}){\n    let appId = \"64efb4621d65f7a23a749fc4\"; // 默认值,假设大多数情况下是这个ID\n    let appName = \"GPT 4\"; // 默认值\n    if(cmdBegin.length > 0) {\n        switch (cmdBegin) {\n            case '--test':\n                appId = \"662e3ccc5afe71d46903eaa5\";\n                appName = \"测试\";\n                break;\n        }\n    }\n\n    let appChoice = {\n        \"id\": appId,\n        \"name\": appName,\n        \"logo\": \"\"\n    };\n\n    let returnJson = {\n        \"prompt\": ask,\n        \"app_choice\": appChoice,\n        \"memory\": []\n    };\n\n  \n    return returnJson;\n}"
        }
      ],
      "outputs": [
        {
          "id": "system_addOutputParam",
          "key": "system_addOutputParam",
          "type": "dynamic",
          "valueType": "dynamic",
          "label": "",
          "editField": {
            "key": true,
            "valueType": true
          },
          "description": "将代码中 return 的对象作为输出,传递给后续的节点"
        },
        {
          "id": "system_rawResponse",
          "key": "system_rawResponse",
          "label": "完整响应数据",
          "valueType": "object",
          "type": "static"
        },
        {
          "id": "error",
          "key": "error",
          "label": "运行错误",
          "description": "代码运行错误信息,成功时返回空",
          "valueType": "object",
          "type": "static"
        },
        {
          "id": "fqaqqXwWZAjA",
          "type": "dynamic",
          "key": "prompt",
          "valueType": "string",
          "label": "prompt"
        },
        {
          "id": "qEV2XFjvHrxC",
          "type": "dynamic",
          "key": "app_choice",
          "valueType": "selectApp",
          "label": "app_choice"
        },
        {
          "id": "izjG3Pihficu",
          "type": "dynamic",
          "key": "memory",
          "valueType": "chatHistory",
          "label": "memory"
        }
      ]
    },
    {
      "nodeId": "d11yR1yFzsGk",
      "name": "应用调用",
      "intro": "可以选择一个其他应用进行调用",
      "avatar": "/imgs/workflow/app.png",
      "flowNodeType": "app",
      "showStatus": true,
      "position": {
        "x": 1660.3222697141246,
        "y": 328.6186940210902
      },
      "version": "481",
      "inputs": [
        {
          "key": "app",
          "renderTypeList": [
            "selectApp",
            "reference"
          ],
          "valueType": "selectApp",
          "label": "选择一个应用",
          "description": "选择一个其他应用进行调用",
          "required": true,
          "selectedTypeIndex": 1,
          "value": [
            "qZvzDunwvcoD",
            "qEV2XFjvHrxC"
          ]
        },
        {
          "key": "history",
          "renderTypeList": [
            "numberInput",
            "reference"
          ],
          "valueType": "chatHistory",
          "label": "core.module.input.label.chat history",
          "description": "最多携带多少轮对话记录",
          "required": true,
          "min": 0,
          "max": 50,
          "value": [
            "qZvzDunwvcoD",
            "izjG3Pihficu"
          ],
          "selectedTypeIndex": 1
        },
        {
          "key": "userChatInput",
          "renderTypeList": [
            "reference",
            "textarea"
          ],
          "valueType": "string",
          "label": "用户问题",
          "required": true,
          "value": [
            "qZvzDunwvcoD",
            "fqaqqXwWZAjA"
          ]
        }
      ],
      "outputs": [
        {
          "id": "history",
          "key": "history",
          "label": "新的上下文",
          "description": "将该应用回复内容拼接到历史记录中,作为新的上下文返回",
          "valueType": "chatHistory",
          "required": true,
          "type": "static"
        },
        {
          "id": "answerText",
          "key": "answerText",
          "label": "回复的文本",
          "description": "将在应用完全结束后触发",
          "valueType": "string",
          "type": "static"
        }
      ]
    }
  ],
  "edges": [
    {
      "source": "f480s68o5e5o",
      "target": "qZvzDunwvcoD",
      "sourceHandle": "f480s68o5e5o-source-right",
      "targetHandle": "qZvzDunwvcoD-target-left"
    },
    {
      "source": "qZvzDunwvcoD",
      "target": "d11yR1yFzsGk",
      "sourceHandle": "qZvzDunwvcoD-source-right",
      "targetHandle": "d11yR1yFzsGk-target-left"
    },
    {
      "source": "d11yR1yFzsGk",
      "target": "yvcdskguv1pz",
      "sourceHandle": "d11yR1yFzsGk-source-right",
      "targetHandle": "yvcdskguv1pz-target-left"
    }
  ]
}

输出命令 --test 这是一条测试 进行测试
结果就是重复打印出了循环分支的输出结果
PixPin_2024-06-06_03-24-49

预期结果

相关截图

@mwnu mwnu added the bug Something isn't working label Jun 5, 2024
@c121914yu
Copy link
Collaborator

c121914yu commented Jun 13, 2024

#1754 这个可能会修复这个问题。还有问题的话扣

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants