您好,我想问一下 Dify 是什么?另外,它都支持哪些模型?还有免费套餐吗?如果我们直接把整封邮件丢给之前的 AI 助理,它可能会只回答第一个问题,或者将两个问题混在一起回复模棱两可的内容。我们需要一种方法,能先把邮件里的所有问题都找出来,然后利用我们第四课创建的知识库,对每个问题逐一进行查询和回答。
参数提取器

动手实践 1:添加参数提取节点
现在,我们来继续升级邮件助理,让它能准确地回答客户的每一个问题。在开始之前,我们先移除以下节点:知识检索,条件分支,LLM,LLM 2 和变量聚合器。选择输入变量值
点击参数提取器,在右侧面板的输入变量中点击设置变量值,在下拉菜单中选择 
由于 AI 并不知道我们需要提取邮件里的那些信息,所以我们需要明确告诉它,我们需要收集邮件里的所有问题。
email_content。
添加提取参数
在下方的提取参数中,点击右侧的加号,后会弹出一个添加提取参数的窗口。在名称内,我们可以把这个参数命名为 
question_list,即邮件内提取出的问题列表。
参数类型如果说添加提取参数是一个搜集员,那么类型就相当于篮子。你需要将收集的信息放到对应的篮子里。单项类型(只装一个)
- String (文本):用来装单个文本信息,比如一个客户的名字。
- Number (数字):用来装单个数字,比如订单数量。
- Boolean (布尔值):用来装是或否这样的判断结果。
- Array[String](文本列表):Array 代表列表,String 代表文本。所以,
Array[String]就意味着,我们要用一个能装多个文本的篮子,比如邮件里的所有问题。 - Array[Number](数字列表):用来装多个数字,比如一份清单里的所有商品价格。
- Array[Boolean](布尔值列表):用来装多个是/否判断结果。比如,检查一份包含多个待办事项的清单,返回每一项是否完成的结果,如
[是,否,是]。 - Array[Object](对象列表):这是更高级的类型,用来装多个结构化信息包,比如一份包含姓名和电话的完整通讯录。
迭代

动手实践 2:配置迭代节点
添加节点
- 在参数节点后,新增迭代节点。
- 点击迭代节点,在右侧面板的输入中,选择参数提取器下的
{x} question_list。 - 输出变量暂时保持默认空白。


- 关闭时,工作流会按顺序处理列表中的每一项(处理完问题 1,再处理问题 2)。
- 开启后,工作流会尝试同时处理列表中的所有项(类似 5 个厨师同时炒 5 个菜)。
- 错误时终止:意味着如果列表中的任何一项(比如第 2 个问题)在子流程中执行失败了,整个工作流就会立刻停止。
- 忽略错误并继续:意味着即使第 2 个问题处理失败了,工作流也会跳过它,继续处理后续问题。
- 移除错误输出:和忽略相似,在最终的输出结果列表中,移除这一项。
添加知识检索节点
- 在迭代框内,点击添加节点,选择知识检索。
- 将查询变量设置为当前迭代
{x} item。

item 特指当前正在处理的列表项,也就是当前的这个问题。知识库选择我们之前创建的 Dify 简介。添加 LLM 节点
- 在知识检索节点后,新增一个 LLM 节点。
- 像我们在第四课学习的配置那样,对 LLM 进行配置。别忘了上下文和在 System 里选择上下文和完成包含变量的提示词(Prompt)。

添加最后的 LLM 节点
在迭代节点后,再连接一个 LLM 节点。这个节点负责将所有问题的答案,整理成一封完整的邮件。别忘了在 System 里补充提示词(Prompt)并在用户信息中填入变量,你可以参考下面的提示词。User:




