跳转到主要内容
经过前面七课的学习,我们的邮件助理已经经历了几次重大升级:
  • 学会了查阅资料 —— 知识库检索
  • 学会了区分情况 —— 条件判断
  • 学会了处理多个任务 —— 参数提取 + 迭代
  • 还学会了使用工具来延展 —— 工具节点
你会发现,我们的工作流不再是简单的一步接一步,而是变得越来越像一个能够自主分析、判断、并调用不同能力来解决问题的智能助手。这种更高级的工作流模式,正是我们今天要深入探讨的核心概念——Agentic Workflow。

Agentic Workflow

Agentic Workflow 不再是简单的”输入 > 处理 > 输出”,而是包含了思考、规划、使用工具、根据结果调整等一系列更智能步骤的工作流。它让 AI 从一个简单的执行者变成了一个能自主解决问题的智能体 (Agent)。

Agent 策略

为了让 Agent 更聪明地工作,研究者们设计了很多思考模式,这些策略像锦囊妙计一样,指导 Agent 如何一步步解决复杂问题。
  • ReAct (Reason + Act) 边思考边行动。Agent 会先思考我该做什么,然后执行一步(比如调用工具),观察结果,再根据结果进行下一步思考和行动,如此循环往复。
  • Plan-and-Execute(规划与执行) 先制定详细的计划,再一步步严格执行计划。
  • Chain of Thought(CoT - 思维链) 引导 AI 在回答问题前,先进行一步步的推理分析,把思考过程写出来,从而提高最终答案的准确性。
  • Self-Correction(自我修正) 让 AI 对自己生成的初步结果进行审视和评估,发现其中的问题并进行修正。
  • Memory(记忆) 为 Agent 配备短期或长期记忆机制,让它能记住之前的对话内容或关键信息,做出更连贯、更个性化的反应。
在第七课中,我们花费了较多的时间对迭代的子流程进行升级,那我们有无更加简单的办法,让 AI 能够先查资料,查不到再上网搜索,最后再进行整合呢? 答案是:使用 Dify 内的 Agent 节点

Agent 节点

你可以把它看作一个高度封装的智能单元。 你只需要给它通过指令设定一个目标 (Goal),并提供它可能需要用到的工具 (Tools),它就能在内部自主地思考、规划、选择并调用工具(利用选定的 Agent 策略,如 ReAct,以及模型的 Function Calling 能力),直到完成你设定的目标。 在 Dify 中,这极大地简化了构建复杂 Agentic Workflow 的过程。

动手实践 1:使用 Agent 节点重构

我们的目标是使用 Agent 节点替换掉迭代里的部分节点。
1

清理迭代

让我们仅保留迭代节点里子流程的知识检索节点,移除其他节点。
迭代节点
2

添加 Agent 节点

在迭代节点里的知识检索节点后,添加 Agent 节点。
添加 Agent 节点
3

安装 Agent 策略

由于我们还没有安装 Agent 策略,所以我们需要前往 Marketplace 进行安装。点击 Agent 节点,在右侧面板中点击 Agent 策略,点击在 Marketplace 中查找更多
搜索 Agent 策略
4

选择 Agent 策略

在 Dify Marketplace 页面里,点击 Agent 策略进入到对应插件页面,鼠标移动至 Dify Agent 策略。点击安装,并在弹窗中再次确认安装。
选择 Agent 策略
5

选择 ReAct

让我们回到工作流页面,如果此时 Agent 策略仍然为空,可以刷新页面。点击 Agent 策略,选择 Agent 内的 ReAct
选择 ReAct
为什么选择 ReAct?ReAct(Reason + Act)是一种非常强大且通用的 Agent 策略。它允许 Agent 像人一样思考:先推理 (Reason) 下一步该做什么(比如我应该先查知识库),然后行动 (Act)(调用知识库工具),观察结果后,再进行下一步推理(比如知识库没找到,我需要搜索)和行动(调用搜索工具)。这种边想边做的模式非常适合处理需要动态决策和多工具协作的复杂任务。
6

选择模型

ReAct 是一种思考策略,但要真正执行行动部分,AI 需要具备调用外部工具相应的技能,这种技能被称为函数调用(Function Calling)为什么必须支持 Function Calling?因为 Agent 节点的核心能力之一就是自主调用工具。Function Calling 是模型理解何时以及如何调用你提供的工具(如谷歌搜索)的关键技术。如果模型不支持此功能,Agent 就无法有效地与工具交互,也就失去了大部分自主决策的能力。所以,我们需要选择一个支持函数调用的模型。在这里,我们选择 gpt-5
选择模型
7

选择工具

在工具列表中添加谷歌搜索,确认启用。
添加工具
8

填写指令

请清晰地告诉 Agent,它的任务目标、角色、上下文以及需要遵循的工作流程或者规则。你可以参考下面的指令,或者自行进行修改和补充。
Goal: Answer user questions about Dify products.

Steps:
1. I have provided a relevant internal knowledge base retrieval result. First, judge if this result can fully answer the user's questions.
2. If the context clearly answers it, generate the final answer based on the context.
3. If the answer is insufficient or irrelevant, use the Google Search tool to find the latest information and generate the answer based on search results.

Requirement: Keep the final answer concise and accurate.
添加指令
9

上下文和查询

在指令中,我们要求 Agent 根据上下文进行判定。接下来,我们需要在上下文框内,选择对应的知识检索结果。
  • 上下文:选择知识检索内的 Knowledge Retrieval / (x) result Array[Object](这会将知识库内容传递给 Agent)。
  • 查询:选择 Iteration/{x} item
为什么是 item,而不是最开始的 email_content 呢?让我们快速回忆一下,我们使用参数提取器从 email_content 中提取了一个问题列表 question_list。现在,迭代节点正在逐一处理这个问题列表,而迭代里的 item 就是当前在处理的一个个问题。将 item 作为查询输入,能让 Agent 更聚焦于当前的任务,提高其决策和行动的准确性。
上下文和查询
10

设置迭代输出变量

选择 Agent/{x}text String 作为输出变量。
设置迭代输出
🎉 我们完成了迭代节点的所有升级操作。
由于迭代节点会为邮件中的每个问题都产生一个答案,继而输出一个包含所有问题答案的列表。所以我们需要在最后对这些答案进行一个总结,最终形成一份通顺和完整的邮件回复。

动手实践 2:最后的拼装

1

最终撰写人(LLM)

  1. 在迭代节点后增加一个 LLM 节点,作为最终的邮件撰写人。
  2. 点击该节点,在右侧的 System 里输入 Prompt。你可以参考下面的 Prompt,或自行修改。
    Combine all answers for the original email.
    Write a complete, clear, and friendly reply to the customer.
    Signature: Anne
    
  3. 在 User Message 中分别将 answers、email content 和 customer name 替换成对应的变量。当前 LLM 节点如下所示。
    最终 LLM
2

添加输出节点

将输出变量设置为 LLM 的 text,并命名为 email_reply
添加输出节点
最终的工作流如下:
最终工作流
点击运行。提问一些混合问题,观察 Agent 节点如何自主决定何时使用上下文、何时使用谷歌搜索。

小挑战

  1. 我们能否让 Agent 节点直接替换掉迭代节点?应该怎么样进行编排?
  2. 上下文还能选择哪些信息,帮助 Agent 更好地运行?