从零开始学 Dify- 对话系统的关键功能

大模型向量数据库数据库

Dify 中的对话系统(Conversation System)管理用户与 AI 应用程序之间的对话(聊天会话)和消息交换。它处理对话状态、历史记录跟踪、消息存储以及用户反馈和标注等相关功能。该系统是 Dify 的核心组件,与模型提供系统 (用于 AI 模型交互)和 RAG 知识系统(用于知识检索)协同工作。

👆👆👆欢迎关注,一起进步👆👆👆

往期内容

系统概览

对话系统管理用户与 AI 应用程序之间的交互,并维护这些交互的持久记录。它支持不同的应用程序类型(聊天、完成、基于代理和工作流驱动),并为最终用户和管理员提供与对话历史记录交互的机制。

picture.image

核心数据模型

对话系统围绕两个主要数据模型构建:对话和消息。

对话模型

对话模型代表用户和 AI 应用程序之间的完成聊天会话。

Conversation 主要属性包括:

| 属性(Attribute) | 描述(Description) | | --- | --- | | id | 对话的唯一标识符 | | app\_id | 关联应用程序 ID | | app\_model\_config\_id | AI 模型的配置 ID | | mode | 应用模式(聊天、完成、代理聊天等) | | name | 对话的显示名称 | | summary | 谈话内容概要 | | inputs | 对话的输入变量 | | status | 当前对话状态 | | from\_source | 对话来源(api、控制台等) | | from\_end\_user\_id | 最终用户的 ID | | from\_account\_id | 账户用户 ID | | dialogue\_count | 对话次数 | | created\_at | 创建时间戳 | | updated\_at | 上次更新时间戳 | | is\_deleted | 软删除标志 |

对话模型与以下内容有关系:

  • Messages 消息(一对多)
  • MessageAnnotations 消息标注(一对多)
  • App 应用程序(多对一)

消息模型

消息模型代表对话中的个人交流。

Message 主要属性包括:

| 属性(Attribute) | 描述(Description) | | --- | --- | | id | 消息的唯一标识符 | | app\_id | 关联应用程序 ID | | conversation\_id | 父对话 ID | | inputs | 此消息的输入变量 | | query | 用户查询/提示 | | message | 原始消息内容(通常为

JSON

) | | answer | AI 回复文本 | | message\_tokens | 输入的令牌计数 | | answer\_tokens | 输出的令牌计数 | | provider\_response\_latency | 提供商的响应时间 | | status | 消息状态 | | from\_source | 消息来源 | | from\_end\_user\_id | 最终用户的 ID | | from\_account\_id | 账户用户 ID | | parent\_message\_id | 父消息 ID | | created\_at | 创建时间戳 | | workflow\_run\_id | 关联工作流程运行 ID(如果适用) | | agent\_based | 基于代理的交互的标记 |

数据库 Schema

该图显示了对话系统中核心数据模型之间的关系:

picture.image

对话生命周期

创建对话

当用户发起与 AI 应用程序的交互时,就会创建对话。创建过程因应用程序模式而异:

  1. 聊天模式(Chat Mode) :在聊天会话开始时创建
  2. 完成模式(Completion Mode) :为每个文本生成请求创建
  3. **代理聊天模式(

Agent Chat Mode)** :专为基于代理的交互而创建

  1. 工作流模式(Workflow Mode) :创建并链接到工作流运行

交互流程

picture.image

服务层

对话系统通过几个服务类进行管理:

ConversationService

处理管理对话的核心功能:

  • 用于检索对话的分页
  • 对话删除(软删除)
  • 对话重命名(包括自动生成)
  • 检索个人对话
  
# Key methods in ConversationService   
pagination\_by\_last\_id(session, app\_model, user, last\_id, limit, invoke\_from, sort\_by) rename(app\_model, conversation\_id, user, name, auto\_generate)   
delete(app\_model, conversation\_id, user)   
get\_conversation(app\_model, conversation\_id, user)  

WebConversationService

使用特定于 Web 的功能扩展 ConversationService:

  • 固定/取消固定对话
  • 按固定状态过滤对话
  
# Key methods in WebConversationService   
pagination\_by\_last\_id(session, app\_model, user, last\_id, limit, invoke\_from, pinned, sort\_by)   
pin(app\_model, conversation\_id, user)   
unpin(app\_model, conversation\_id, user)  

API 接口

对话系统通过多个 API 公开接口,适用于不同的用例:

Console API

对于管理访问权限,包括查看和管理所有对话:

| 接口 | Method | 描述 | | --- | --- | --- | | /apps/<app\_id>/chat-conversations | GET | 列出聊天 | | /apps/<app\_id>/chat-conversations/<conversation\_id> | GET | 获取聊天对话详 信息 | | /apps/<app\_id>/chat-conversations/<conversation\_id> | DELETE | 删除 | | /apps/<app\_id>/completion-conversations | GET | 列 | | /apps/<app\_id>/completion-conversations/<conversation\_id> | GET | 获取完成 话详细信息 | | /apps/<app\_id>/completion-conversations/<conversation\_id> | D 删除完成对话 >删除完成对话 |

|

Service API

对于以编程方式访问对话:

| 接口 | Method | 描述 | | --- | --- | --- | | /conversations | GET | 列出用户的对话 | | /conversations/<conversation\_id> | DELETE | 删除对话 | | /conversations/<conversation\_id>/name | POST | 重命名对话 |

Web API

对于 Web 应用程序访问:

| 接口 | Method | 描述 | | --- | --- | --- | | /conversations | GET | 列出用户的对话 | | /conversations/<conversation\_id> | DELETE | 删除对话 | | /conversations/<conversation\_id>/name | POST | 重命名对话 | | /conversations/<conversation\_id>/pin | PATCH | 固定对话 | | /conversations/<conversation\_id>/unpin | PATCH | 取消固定对话 |

特色功能

对话固定

用户可以固定重要对话,以便于访问。此功能通过 PinnedConversation 模型和 WebConversationService 方法实现:

  
# Pin a conversation   
WebConversationService.pin(app\_model, conversation\_id, user)   
# Unpin a conversation   
WebConversationService.unpin(app\_model, conversation\_id, user)  

消息反馈与标注

用户和管理员可以对消息提供反馈并添加标注(更正或改进):

  • 反馈(Feedback) :喜欢/不喜欢的评分,可选评论
  • 标注(Annotations) :管理员提供的更正或补充信息

picture.image

文件附件

消息可以包含文件附件,支持各种文件类型:

  • 视觉模型图像
  • 文件上下文
  • 基于配置的其他文件类型

文件上传功能通过 FileUpload ConfigManager 配置,它控制允许哪些文件类型以及如何上传它们。

与工作流系统集成

对话系统通过消息模型中的 workflow\_run\_id 字段与工作流系统集成。这允许跟踪与特定工作流运行相关的消息。

picture.image

应用模式

聊天应用程序

对于聊天应用程序,对话系统会维护包含多条消息的持久聊天历史记录。

picture.image

完成应用程序

对于完成(文本生成)应用程序,每次交互通常都会创建一个包含单个消息的新对话。

picture.image

总结

对话系统是 Dify 的核心组件,用于管理所有用户与 AI 的交互,提供持久化、历史记录以及反馈和标注等附加功能。它与其他系统紧密协作,尤其是用于 AI 响应的模型提供系统和用于复杂交互模式的工作流系统。

该系统设计灵活,支持不同类型的应用程序(聊天、完成、代理聊天)和用户界面(Web、API),同时保持一致的数据模型和服务层。

参考资料

https://github.com/langgenius/dify

推荐阅读

接下来将分别介绍各个子系统:

模型提供者系统(Model Provider System)

RAG 知识系统(RAG Knowledge System)

对话系统(Conversation System)

工作流系统(Workflow System)

👆👆👆欢迎关注,一起进步👆👆👆

欢迎留言讨论哈

🧐点赞、分享、推荐 ,恭喜发财👇

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论