Dify 主要通过 Chatflow​ 应用类型和其内置的 记忆机制​ 来实现多轮对话。简单来说,你只需选择正确的应用类型,并在关键节点开启记忆功能即可。


🤖 选择正确的应用类型:Chatflow

实现多轮对话的第一步,是在创建应用时选择 Chatflow​ 类型。与主要用于单次执行的 Workflow 不同,Chatflow 专为对话场景设计,其核心优势在于:

  • 内置记忆:自动存储和传递多轮对话的历史消息。

  • 持续交互:允许用户在生成内容后进行多轮讨论和调整。

注意:Workflow 类型没有内置记忆功能,无法实现多轮对话。


🧠 开启并配置记忆功能

在 Chatflow 中,你需要在关键节点主动开启并使用记忆功能。

1. 在 LLM 节点中开启记忆

这是实现多轮对话最核心的一步。在 Chatflow 的 LLM(大语言模型)节点中:

  1. 找到并打开 “记忆 (Memory)”​ 开关。

  2. 设置 “记忆窗口”​ 大小,即模型能“看到”的历史消息轮数(如最近的 5 轮对话)。

  3. 将“角色前缀”等设置保持默认即可。

原理解析

开启后,Dify 会自动将当前对话的历史消息(如最近5轮)附加到 prompt 中。例如:

User: ... Assistant: ... User: ... Assistant: ... User: (当前问题)

这样,模型就能利用历史上下文来理解和回答当前问题。

2. 在其他节点中利用记忆

部分节点(如“问题分类器”)也支持开启记忆功能。开启后,这些节点在运行时也能参考对话历史,从而做出更准确的判断,例如更好地理解“它”、“这个”等指代性词语。


💾 使用会话变量保持状态

如果你需要在多轮对话中保持一些自定义状态(如游戏分数、用户偏好等),可以使用 会话变量 (Conversation Variables)

  • 特性:这类变量与会话(Session)绑定,其值在对话期间一直存在,可用于记录用户名称、心情值、任务进度等。

  • 应用:在“个性化记忆助手”等场景中,通过读写会话变量,可以实现长期的个性化记忆。


📝 编写利用上下文的 Prompt

为了让模型的回答更具连贯性,你需要在 Prompt (提示词) 中明确指示它利用对话历史。

System Prompt 示例:

text

你是一个有帮助的助手。你需要根据【对话历史】来理解当前问题,并进行回答。

对话历史:

{{context}}

用户最新问题:

{{query}}

这里的 context通常会被自动替换为实际的历史对话内容。通过清晰的指令,可以有效避免模型“遗忘”或“胡编乱造”。


💻 通过 API 进行多轮对话

当你通过 API 调用 Chatflow 应用时,实现多轮对话的关键在于传递 conversation_id

  1. 首次调用:不传递 conversation_id,API 会返回一个新的 conversation_id

  2. 后续调用:在后续的请求中,携带上一次的 conversation_id。Dify 服务端会根据这个 ID 找到对应的对话历史,并将其纳入上下文。

这种方式确保了即使是无状态的 API 调用,也能在服务器端维持连续的对话状态。


🎯 快速上手指南

总结一下,要在 Dify 中实现多轮对话,只需遵循以下三点:

  1. 创建 Chatflow 应用:这是前提。

  2. 在 LLM 节点开启记忆:并设置合适的窗口大小。

  3. 通过 conversation_id关联对话:无论是 Web 界面还是 API 调用,确保同一会话使用相同的 ID。

对于需要长期记忆的场景,可以结合 会话变量​ 和 外部知识库 / 数据库​ 来扩展模型的能力。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐