系统架构

聊天界面构建为基于 React 的前端系统,与后端进行实时服务器发送事件 (SSE) 通信。该架构由几个关键层组成:

在这里插入图片描述

消息流系统

聊天系统通过定义明确的流程处理消息,该流程处理用户输入和助手响应:

在这里插入图片描述

实时通信实施

系统使用 Server-Sent Events 进行助手响应的实时流。useSendMessageWithSse 钩子管理 SSE 连接生命周期:

元件 功能 目的
useSendMessageWithSse 核心 SSE 管理 建立 SSE 连接,处理流数据
EventSourceParserStream 流处理 从响应流解析 SSE 事件
AbortController 连接控制 管理连接取消和清理
IAnswer 响应格式 包含内容和参考的结构化响应数据

在这里插入图片描述
web/src/hooks/logic-hooks.ts 234-293 中的
SSE 实现使用带有 EventSourceParserStream 的 Fetch API 来解析传入的服务器发送的事件。当块到达时, 应答状态会实时更新,从而实现助手响应的流式传输。

UI 组件架构

聊天界面由几个协同工作的关键 React 组件组成:

消息显示组件

  • MessageItem (web/src/components/message-item/index.tsx36-162):呈现单个消息,支持 Markdown、引用和作按钮
  • AssistantGroupButton / UserGroupButton (web/src/components/message-item/group-button.tsx 29-145 ):提供特定于消息的作,如复制、重新生成、删除、反馈
  • MarkdownContent ( web/src/pages/chat/markdown-content ):使用 Markdown 格式和文档引用呈现消息内容

输入组件

MessageInput ( web/src/components/message-input/ ):处理用户输入、文件上传和消息发送
useHandleMessageInputChange ( web/src/pages/chat/hooks.ts 351-365 ):管理输入状态和验证

容器组件

ChatContainer ( web/src/pages/chat/chat-container/index.tsx 30-125 ):协调消息显示和输入的主容器
ChatPage ( web/src/pages/chat/index.tsx 51-393 ):管理对话、对话和聊天容器的顶级页面

在这里插入图片描述

对话和对话管理

聊天系统通过对话和对话的层次结构组织交互:

实体 接口 目的 关键字段
对话 IDialog AI 助手配置 姓名 、prompt_config、llm_setting kb_ids
谈话 IConversation 对话中的聊天会话 dialog_id, message[], 引用[]
消息 Message 个人聊天消息 内容 、 角色 、doc_ids、 提示

状态管理挂钩

  • useFetchNextDialog ( web/src/hooks/chat-hooks.ts 175-196 ):获取当前对话配置
  • useFetchNextConversation ( web/src/hooks/chat-hooks.ts 272-305 ):加载对话历史记录和消息
  • useFetchNextConversationList ( web/src/hooks/chat-hooks.ts 243-270 ):检索当前对话的对话
  • useUpdateNextConversation ( web/src/hooks/chat-hooks.ts 352-376 ):更新对话元数据

URL 参数管理

系统使用 URL 参数在浏览器导航中维护聊天状态:

// From useGetChatSearchParams
ChatSearchParams.DialogId        // Current dialog ID
ChatSearchParams.ConversationId  // Active conversation ID  
ChatSearchParams.isNew          // New conversation flag

积分点

聊天界面与其他几个 RAGFlow 系统集成:

知识库集成

文档引用 :消息可以包含用于引用知识库文档的 doc_ids
检索显示 :助手响应包括显示源文档的引用数组
文件上传 :用户可以通过 MessageInput 在对话期间上传文档

LLM 集成

模型选择 :对话框指定响应生成的 llm_id 和 llm_setting
流式响应: 通过 SSE 实时生成逐个令牌的响应
提示工程 :可配置的系统提示和对话模板

代理系统集成

代理对话 :支持通过画布执行进行代理支持的对话
共享对话 :与外部用户公开共享对话
多模态响应 :支持文本、音频和结构化数据响应

在这里插入图片描述

Logo

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。

更多推荐