AI个人学习
和实操指南

Dify工作流中的变量聚合和变量赋值节点

本文于 2024-12-09 16:01 更新,部分内容具有时效性,如有失效,请留言

变量聚合

定义

将多路分支的变量聚合为一个变量,以实现下游节点统一配置。

变量聚合节点(原变量赋值节点)是工作流程中的一个关键节点,它负责整合不同分支的输出结果,确保无论哪个分支被执行,其结果都能通过一个统一的变量来引用和访问。这在多分支的情况下非常有用,可将不同分支下相同作用的变量映射为一个输出变量,避免下游节点重复定义。

场景

通过变量聚合,可以将诸如问题分类或条件分支等多路输出聚合为单路,供流程下游的节点使用和操作,简化了数据流的管理。


问题分类后的多路聚合

未添加变量聚合,分类1 和 分类 2 分支经不同的知识库检索后需要重复定义下游的 LLM 和直接回复节点。

Dify工作流中的变量聚合节点-1
问题分类(无变量聚合)

 

添加变量聚合,可以将两个知识检索节点的输出聚合为一个变量。

Dify工作流中的变量聚合节点-1
问题分类后的多路聚合

 

IF/ELSE 条件分支后的多路聚合

Dify工作流中的变量聚合节点-1
问题分类后的多路聚合

 

格式要求

变量聚合器支持聚合多种数据类型,包括字符串(String)、数字(Number)、文件(File)对象(Object)以及数组(Array

变量聚合器只能聚合同一种数据类型的变量 。若第一个添加至变量聚合节点内的变量数据格式为 String,后续连线时会自动过滤可添加变量为 String 类型。

聚合分组

开启聚合分组后,变量聚合器可以聚合多组变量,各组内聚合时要求同一种数据类型。

 

变量赋值

定义

变量赋值节点用于向可写入变量进行变量赋值,已支持以下可写入变量:

用法:通过变量赋值节点,你可以将工作流内的变量赋值到会话变量中用于临时存储,并可以在后续对话中持续引用。

Dify工作流中的变量聚合和变量赋值节点-1

场景示例

你可以将对话过程中的上下文、上传至对话框的文件、用户所输入的偏好信息等变量,通过变量赋值节点写入至会话变量内,用作后续对话的参考信息。

场景 1

自动判断提取并存储对话中的信息 ,在会话内通过会话变量数组记录用户输入的重要信息,并在后续对话中让 LLM 基于会话变量中存储的历史信息进行个性化回复。

示例:开始对话后,LLM 会自动判断用户输入是否包含需要记住的事实、偏好或历史记录。如果有,LLM 会先提取并存储这些信息,然后再用这些信息作为上下文来回答。如果没有新的信息需要保存,LLM 会直接使用自身的相关记忆知识来回答问题。

Dify工作流中的变量聚合和变量赋值节点-1

配置流程:

  1. 设置会话变量 :首先设置一个会话变量数组 memories,类型为 array[object],用于存储用户的事实、偏好和历史记录。
  2. 判断和提取记忆 :
    • 添加一个条件判断节点,使用 LLM 来判断用户输入是否包含需要记住的新信息。
    • 如果有新信息,走上分支,使用 LLM 节点提取这些信息。
    • 如果没有新信息,走下分支,直接使用现有记忆回答。
  3. 变量赋值/写入 :
    • 在上分支中,使用变量赋值节点,将提取出的新信息追加(append)到 memories 数组中。
    • 使用转义功能将 LLM 输出的文本字符串转换为适合存储在 array[object] 中的格式。
  4. 变量读取和使用 :
    • 在后续的 LLM 节点中,将 memories 数组中的内容转换为字符串,并插入到 LLM 的提示词 Prompts 中作为上下文。
    • LLM 使用这些历史信息来生成个性化回复。

图中的 code 节点代码如下:

  1. 将字符串转义为 object

Copy

import json
defmain(arg1:str) ->object:
try:
# Parse the input JSON string
input_data = json.loads(arg1)
# Extract the memory object
memory = input_data.get("memory", {})
# Construct the return object
result ={
"facts": memory.get("facts", []),
"preferences": memory.get("preferences", []),
"memories": memory.get("memories", [])
}
return{
"mem": result
}
except json.JSONDecodeError:
return{
"result":"Error: Invalid JSON string"
}
exceptExceptionas e:
return{
"result":f"Error: {str(e)}"
}
  1. 将 object 转义为字符串

Copy

import json
defmain(arg1:list) ->str:
try:
# Assume arg1[0] is the dictionary we need to process
context = arg1[0]if arg1 else{}
# Construct the memory object
memory ={"memory": context}
# Convert the object to a JSON string
json_str = json.dumps(memory, ensure_ascii=False, indent=2)
# Wrap the JSON string in <answer> tags
result =f"<answer>{json_str}</answer>"
return{
"result": result
}
exceptExceptionas e:
return{
"result":f"<answer>Error: {str(e)}</answer>"
}

场景 2

记录用户的初始偏好信息 ,在会话内记住用户输入的语言偏好,在后续对话中持续使用该语言类型进行回复。

示例:用户在对话开始前,在 language 输入框内指定了 “中文”,该语言将会被写入会话变量,LLM 在后续进行答复时会参考会话变量中的信息,在后续对话中持续使用“中文”进行回复。

Dify工作流中的变量聚合和变量赋值节点-1

配置流程:

设置会话变量 :首先设置一个会话变量 language,在会话流程开始时添加一个条件判断节点,用来判断 language 变量的值是否为空。

变量写入/赋值 :首轮对话开始时,若 language 变量值为空,则使用 LLM 节点来提取用户输入的语言,再通过变量赋值节点将该语言类型写入到会话变量 language 中。

变量读取 :在后续对话轮次中 language 变量已存储用户语言偏好。在后续对话中,LLM 节点通过引用 language 变量,使用用户的偏好语言类型进行回复。

场景 3

辅助 Checklist 检查 ,在会话内通过会话变量记录用户的输入项,更新 Checklist 中的内容,并在后续对话中检查遗漏项。

示例:开始对话后,LLM 会要求用户在对话框内输入 Checklist 所涉及的事项,用户一旦提及了 Checklist 中的内容,将会更新并存储至会话变量内。LLM 会在每轮对话后提醒用户继续补充遗漏项。

Dify工作流中的变量聚合和变量赋值节点-1

配置流程:

  • 设置会话变量: 首先设置一个会话变量 ai_checklist,在 LLM 内引用该变量作为上下文进行检查。
  • 变量赋值/写入: 每一轮对话时,在 LLM 节点内检查 ai_checklist 内的值并比对用户输入,若用户提供了新的信息,则更新 Checklist 并将输出内容通过变量赋值节点写入到 ai_checklist 内。
  • 变量读取: 每一轮对话读取 ai_cheklist 内的值并比对用户输入直至所有 checklist 完成。

使用变量赋值节点

点击节点右侧  号,选择 “变量赋值” 节点,配置需要被赋值的变量与源变量。变量赋值节点支持同时为多个变量赋值。

Dify工作流中的变量聚合和变量赋值节点-1

设置变量

变量: 选择需要被赋值的变量。

设置变量: 选择需要赋值的变量,即指定需要被转换的源变量。

上图的变量赋值逻辑:将用户在初始页面填写的语言偏好 Start/language 变量赋值至系统级会话变量 language 内。

指定变量的写入模式

目标变量的数据类型将影响变量的写入模式。以下是不同变量间的写入模式:

  1. 目标变量的数据类型为 String
  • 覆盖 ,将源变量直接覆盖至目标变量
  • 清空 ,清空所选中变量中的内容
  • 设置 ,手动指定一个值,无需设置源变量
  1. 目标变量的数据类型为 Number
  • 覆盖 ,将源变量直接覆盖至目标变量
  • 清空 ,清空所选中变量中的内容
  • 设置 ,手动指定一个值,无需设置源变量
  • 数字处理 ,对目标变量进行加减乘除操作
  1. 目标变量的数据类型为 Object
  • 覆盖 ,将源变量的内容直接覆盖至目标变量
  • 清空 ,清空所选中变量中的内容
  • 设置 ,手动指定一个值,无需设置源变量
  1. 目标变量的数据类型为 Array
  • 覆盖 ,将源变量的内容直接覆盖至目标变量
  • 清空 ,清空所选中变量中的内容
  • 追加 ,在目标的数组变量中添加一个新的元素
  • 扩展 ,在目标的数组变量中添加新的数组,即一次性添加多个元素
AI轻松学

普通人的AI入门指南

帮助你以低成本、零基础学会如何利用AI工具。AI就像办公软件一样,是每个人的必备技能。 掌握AI会让你在求职中占据优势,在未来的工作和学习中事半功倍。

查看详情>
未经允许不得转载:首席AI分享圈 » Dify工作流中的变量聚合和变量赋值节点

首席AI分享圈

首席AI分享圈专注于人工智能学习,提供全面的AI学习内容、AI工具和实操指导。我们的目标是通过高质量的内容和实践经验分享,帮助用户掌握AI技术,一起挖掘AI的无限潜能。无论您是AI初学者还是资深专家,这里都是您获取知识、提升技能、实现创新的理想之地。

联系我们
zh_CN简体中文