更新时间:2026-03-20 GMT+08:00
分享

变量赋值

变量赋值节点是工作流中用于修改和存储变量值的节点。通过变量赋值节点,将特定的值赋给变量,可以实现数据的动态更新和传递,使工作流能够根据实时数据做出相应的处理和决策。

变量赋值节点支持在循环节点内部和外部使用,两种场景下可操作的目标变量不同。变量赋值节点应用广泛,例如:

  • 存储中间结果在工作流中,将中间计算或处理的结果通过变量赋值节点存储到变量中,以便后续节点使用。例如,在开发一个智能内容审核工作流时,需要对用户提交的文章进行多维度分析,如提取关键词、判断情感倾向、检测敏感内容等。此时,可以设置一个记忆变量review_status,在审核节点执行完毕后,通过变量赋值节点将审核结果(如 "passed" 或 "rejected")存储到该变量中。后续在生成审核报告或决定是否发布时,可以直接从review_status变量中获取审核状态,无需重复执行审核逻辑。
  • 在循环中累积数据:在包含循环节点的工作流中,每轮循环产生的结果需要逐步累积,而不是被下一轮覆盖。通过变量赋值节点,可以在每轮循环结束时将本轮结果追加到中间变量中。例如,在开发一个批量数据处理工作流时,需要遍历一组客户记录,为每位客户生成个性化的营销文案。此时,可以在循环节点中设置一个中间变量all_copies,每轮循环中大模型节点生成一条文案后,通过代码节点将新文案与all_copies中已有的内容拼接,再通过变量赋值节点将拼接结果写回all_copies。循环结束后,all_copies中包含了所有客户的营销文案汇总。
  • 记忆用户状态:用户在会话中表达的偏好或提供的信息,需要在后续对话中生效。通过变量赋值节点将用户状态写入记忆变量,即可实现该轮会话的状态保持。例如,在开发一个智能客服工作流时,用户在对话中说"请用英文回复我"。此时,工作流通过大模型节点识别出语言偏好后,使用变量赋值节点将reply_language记忆变量的值从 "中文" 更新为 "English"。在该轮后续所有对话中,即使用户没有再次声明语言偏好,大模型节点通过读取reply_language变量,仍然会使用英文回复。
  • 重置与清除状态:变量赋值节点支持对8种数据类型赋空值,适合用于在任务完成后清除临时数据、恢复初始状态。例如,在开发一个多次任务工作流时,用户完成一次任务后说“我要再来一次”。此时,通过变量赋值节点将collected_data赋空值(清除上一次的采集数据)、将current_stage赋固定值“start”(回到起始阶段),同时对task_count执行自增+1(记录累计任务次数),从而在不终止会话的情况下实现任务的重新开始。

核心概念

在配置赋值节点前,先理解以下概念:

  • 赋值目标:变量赋值节点能够修改的变量类型取决于它所在的位置。
    表1 赋值目标

    使用位置

    可赋值的目标变量

    说明

    循环节点外

    对话型工作流中的记忆变量(在全局配置中定义)

    记忆变量可以跨节点、跨轮次持久保存,只能通过变量赋值节点修改。

    典型用途为存储用户偏好、对话状态标记、跨轮次计数器等。

    循环节点内

    循环中间变量(在循环节点中定义)

    中间变量仅在当前循环的生命周期内有效,能通过循环体内的变量赋值节点修改。

    典型用途为循环中的累加器、临时结果拼接、状态标记等。

  • 数据来源:值有多种来源方式。
    表2 数据来源

    来源方式

    说明

    适用场景

    引用

    引用上游节点的输出变量、记忆变量或循环内置变量(index、item)

    动态赋值:将计算结果写入变量

    输入(固定值)

    直接填写一个常量

    重置变量、设置初始状态

    运算赋值

    对数值类型(Integer、Number)变量进行自增或自减

    循环计数器、余额扣减

    将变量重置为空

    说明:

    支持8种数据类型赋空值,包括:String、Integer、Number、Boolean、Object、Array<Number>、Array<String>、Array<Integer>。

    清除状态、重新开始

配置变量赋值节点

循环节点外变量赋值节点配置:

变量赋值节点变量名称仅支持选择“全局配置”中记忆变量,如图1所示。

图1 配置循环外变量赋值节点

类型、值:支持“引用”、“输入”和“运算赋值”三种类型。

  • 引用:支持引用三类参数源,工作流前置节点的输出参数、全局配置中的记忆变量(需预先设置),以及系统参数。
    系统参数列举如下:
    • “conversation_history”:存储当前对话的历史消息记录。
    • “current_time”:获取当前的系统时间戳或时间字符串。
    • “user_id”:识别当前用户的唯一标识符。
    • “conversation_id”:当前工作流的唯一对话标识。
    • “dialogue_count”:当前对话的轮次数计数。
  • 输入:支持用户自定义取值。
  • 运算赋值:
    • 支持数值类型进行简单运算,包括变量自增和变量自减。
    • 支持8种数据类型赋空值,包括:String、Integer、Number、Boolean、Object、Array<Number>、Array<String>、Array<Integer>。

循环节点中变量赋值配置:

变量赋值节点支持在循环体内部引用,只支持更改循环体中间变量的值,被赋值变量仅支持选择中间变量,如图2所示。适用于循环过程中动态更新中间变量,自定义循环逻辑中进行参数传递的场景。

图2 配置循环内变量赋值节点
类型、值:支持“引用”、“输入”和“运算赋值”三种类型。
  • 引用:中间变量的值需要引用上游节点输出时勾选此项,支持用户选择工作流中已包含的前置节点的输出变量值以及循环体内置变量,包括index、item(数组循环)以及中间变量,适用于循环过程中修改中间变量的值为变量的场景。
    系统参数列举如下:
    • “conversation_history”:存储当前对话的历史消息记录。
    • “current_time”:获取当前的系统时间戳或时间字符串。
    • “user_id”:识别当前用户的唯一标识符。
    • “conversation_id”:当前工作流的唯一对话标识。
    • “dialogue_count”:当前对话的轮次数计数。
  • 输入:支持用户自定义取值,适用于循环过程中修改中间变量的值为固定值场景。
  • 运算赋值:
    • 支持数值类型(Integer、Number)进行简单运算,包括变量自增和变量自减。
    • 支持8种数据类型赋空值,包括:String、Integer、Number、Boolean、Object、Array<Number>、Array<String>、Array<Integer>。

相关操作

  • 单击节点名称,可修改节点名称。
  • 单击图标,可对节点进行重命名、复制或删除;也可以将节点连接到结束节点。
  • 单击名称下面的节点说明,可修改节点的描述信息。
  • 单击图标,可查看文档信息。

示例

  • 示例1:记忆用户偏好(循环外赋值)

    在开发一个智能客服工作流时,用户在对话中说“请用英文回复”。此时,工作流通过大模型节点识别出语言偏好后,使用变量赋值节点将user_language记忆变量的值从 "中文" 更新为 "en"。在该轮会话中后续所有对话,即使用户没有再次声明语言偏好,大模型节点通过读取user_language变量,仍然会使用英文回复。

    工作流的全景图如图3所示。

    图3 工作流

    在配置工作流节点之前,需要先配置“全局配置”中的记忆变量,相关参数配置如下,具体如图4所示。

    记忆变量

    名称:user_language,类型:String,描述:用户的语言偏好,默认值:中文。

    图4 配置记忆变量

    工作流核心节点如表3所示。

    表3 节点配置说明

    节点类型

    说明

    示例

    开始节点

    使用系统默认配置query参数,表示用户输入的内容。

    大模型节点-识别用户语言偏好

    此节点根据用户输入的内容检测是否表达用户的语言偏好,如果检测到语言偏好,则返回具体语言名称,如果未检测到语言偏好,则返回none。

    • 模型配置:选择Kimi-K2模型。
    • 输入参数:引用开始节点的query。
    • 输出参数:将用户表达的语言偏好,在输出参数中定义,并在描述中说明输出参数的字段含义,便于大模型理解。

      单击输出区域右上角的,选择输出格式为“JSON”。

      定义内容如下:

      detected_lang:类型为“String”,描述为用户的语言偏好。

    • 提示词配置:
      • 系统提示词:定义一段系统提示词,如下所示:
        ## 人设
        - 语言偏好检测专家  
        - 精通多语种关键词匹配与正则表达式  
        
        ## 任务描述
        - 识别用户输入中是否显式声明语言偏好  
        - 若检测到,返回对应语言名称;否则返回“none”  
        - 帮助下游模块快速决定响应语言,提升用户体验  
        
        ## 约束条件
        1. 仅依据用户本次输入判断,不依赖历史上下文  
        2. 语言名称须使用 ISO 639-1 小写两位字母代码(如 en、zh、es)  
        3. 若出现多种语言声明,以最先出现的为准  
        4. 按照<输出格式>输出  
        5. 按照<执行步骤>一步一步执行  
        
        ## 执行步骤
        1. 预处理:去除标点、统一小写  
        2. 构建关键词表:{"english":"en", "chinese":"zh", "spanish":"es", "french":"fr", "german":"de", "japanese":"ja", "korean":"ko"}  
        3. 扫描输入,匹配关键词表  
        4. 命中则输出对应值,未命中输出“none”  
        
        ## 输出格式
        单行文本,仅包含检测到的语言代码或“none”,无额外字符
      • 用户提示词:引用当前的输入参数query,即引用用户的原始输入。
        {{query}}

    判断节点

    此节点用于根据大模型节点输出参数detected_lang的值判断是否需要给“记忆变量”赋值。

    • IF分支:大模型节点的detected_lang的值不等于none。
    • ELSE分支:大模型节点的detected_lang的值为none以外的其他值。

    变量赋值节点

    当大模型节点检测到用户的语言偏好后,将记忆变量的值更新为对应语言名称。

    参数名称:记忆变量中的user_language。

    类型、值:引用“识别用户语言偏好”大模型节点的detected_lang。

    大模型节点-回答用户问题

    此节点将根据用户偏好语言来回答用户的问题。

    • 模型配置:选择GLM-5模型。
    • 输入参数:
      • query:引用开始节点的query。
      • user_language:引用记忆变量中的user_language。
    • 提示词配置:
      • 系统提示词:定义一段系统提示词,如下所示:
        用{{user_language}}回复用户的问题{{query}}
      • 用户提示词:引用当前的输入参数query,即引用用户的原始输入。
        {{query}}

    结束节点

    此节点用于输出大模型节点的回答内容。

    输入参数:

    result:引用“回答用户问题”大模型节点的raw_output。

    在试运行配置界面使用默认值“中文”,工作流运行的效果如图5所示,当用户说“请用英文回复”,工作流在后续所有轮次中,即使用户没有再次声明语言偏好,也仍然会使用英文回复。

    图5 效果示例
  • 示例2:自动循环生成岗位面试题(循环内赋值)

    用户输入一个岗位名称,系统自动循环3次,每次生成1道面试题,将所有面试题逐步拼接为一份完整的面试题集。

    图6 工作流

    工作流核心节点如表4所示。

    表4 节点配置说明

    节点类型

    说明

    示例

    开始节点

    添加一个必选的输入参数,即需要出面试题的岗位名称。

    • 参数名称:job_title
    • 参数类型:String
    • 描述:出面试题的岗位名称
    • 必填:勾选。

    循环节点

    用于指定生成的面试题的题数,每次循环通过中间变量将每一轮出的题作为变量传递到下次循环中,再通过代码节点将每一轮的面试题拼接为一份完整的面试题集。其中包含3个节点:

    • 大模型节点:根据用户输入的岗位名称,每轮循环对应生成一道面试题。
    • 代码节点:将每一轮循环的面试题进行拼接。
    • 变量赋值节点:用于存储代码节点拼接好的面试题内容,并将其赋给循环节点的中间变量。

    循环节点设置如下:

    • 循环类型:选择“指定循环次数”。
    • 循环次数:本示例设置为 3。
    • 中间变量:设置变量all_questions,这个变量用于传递上次已生成的面试题内容,会在下次循环中提供给代码节点进行拼接。

      因为首次循环时没有面试题,可以设置为一个空格,也可根据需要设置,此处设置为“面试题”。

    • 输出参数:设置变量output,引用循环节点的中间变量all_questions。

    大模型节点-出题

    此节点根据用户输入的岗位名称,对应生成一道面试题。

    • 模型配置:选择DeepSeek-V3模型。

      单击,将温度设置为0.8,保证每轮生成不同的题目。

    • 输入参数:
      • query:引用开始节点的query。
      • job_title:引用开始节点的job_title。
      • question_number:引用循环节点的index。
      • previous_questions:引用循环节点的中间变量all_questions。
    • 输出参数:

      单击输出区域右上角的,选择输出格式为“JSON”。

      定义内容如下:

      question:类型为“String”,描述为岗位的面试题。

    • 提示词配置:
      • 系统提示词:定义一段系统提示词,如下所示:
        请为"{{job_title}}"岗位出1道面试题。
        
        已出的题目如下(不要重复):
        {{previous_questions}}
        
        要求:
        - 只输出1道题目的文本,不要编号,不要输出其他内容
        - 与已出题目不重复
        - 难度适中
      • 用户提示词:引用当前的输入参数query,即引用用户的原始输入。
        {{query}}

    代码节点-拼接题目

    此节点将每一轮循环的面试题进行拼接。

    • 绑定函数:
      1. 单击“新建函数”,在弹出的对话框输入函数名称:merged,函数描述为“文本拼接”,输入完成后单击“确定”。:
      2. 单击“编辑源码”,编辑如下代码:
        def main(args: dict) -> dict:
            """
            运行代码节点会调用此函数,请勿对下面的函数名做修改
            :param args: 输入固定为args字典类型,kv为输入参数键值对,包含:
                - index: 题目的序号(数字,从0开始)
                - new_q: 新增题目的具体内容
                - prev: 之前已汇总的题目文本(可为空)
            :return: 输出参数为字典类型,kv为输出参数键值对,包含:
                - merged: 拼接后的完整题目汇总文本
            """
            # 从输入字典中提取参数,若参数不存在则赋默认值(增强代码健壮性)
            index = args.get("index", 0)
            new_q = args.get("new_q", "")
            prev = args.get("prev", "")
            
            # 按格式拼接当前题目行(序号+1,转为1起始的展示序号)
            line = f"第{index + 1}题:{new_q}"
            
            # 拼接历史文本与当前题目行(空值处理)
            if prev:
                result = prev + "\n" + line
            else:
                result = line
            
            # 构造返回字典
            ret = {
                "merged": result
            }
            return ret

    • 输入参数:
      • index:引用循环节点的index。
      • new_q:引用“出题”大模型节点的question。
      • prev:引用循环节点的中间变量all_questions。
    • 输出参数:

      参数名称:merged

      参数类型:String

      描述:拼接后的面试题

    变量赋值节点

    用于存储代码节点拼接好的面试题内容,将“拼接题目”代码节点的merged的值赋给循环节点的中间变量all_questions。

    结束节点

    此节点用于输出面试题目。

    输入参数:

    result:引用循环节点的output。

    在试运行配置界面输入“Java后端工程师”,工作流运行的效果如图7所示。

    图7 效果示例

常见问题

表5 常见问题

问题

原因

解决方法

赋值后下游节点读到的仍然是旧值

赋值节点的位置在下游节点之后,赋值还未执行

确保赋值节点在需要读取新值的节点之前

赋空值后变量类型变了

赋空值时选择了错误的类型

赋空值时确保选择的类型与变量定义的类型一致

循环内赋值后,循环外读不到中间变量

中间变量的作用范围仅限于循环体内部,循环结束后不保留

如需在循环外使用循环的结果,请通过循环节点的输出参数传递

相关文档