概述
AssistantChat 组件是 LangChat 应用中 AI 助手对话界面的核心入口。它采用原子化设计(Atomic Design),具备高度灵活性,支持多种布局模式(simple, conversation, simple-mode)和集成场景(App, Workflow, Share, Draw.io 等)。
目录结构
组件遵循原子化设计原则:- atoms/: 基础 UI 构建块(如消息气泡原子组件)
- molecules/: 分子组件,由原子组合而成(消息列表
MessageList、输入区域ChatInputArea、简单模型选择器SimpleModelSelector) - organisms/: 组织组件,复杂的功能单元(聊天面板
ChatPanel、会话侧边栏ConversationSidebar) - templates/: 模板组件,定义页面级布局
SimpleChat.vue: 基础简单布局(用于 App/Workflow 调试)ConversationChat.vue: 完整会话布局(带侧边栏历史记录)SimpleLayoutChat.vue: 极简模式布局(带模型选择,用于特定工具场景如 Draw.io)
- composables/: 共享逻辑和状态管理
useChat.ts: 核心聊天逻辑(用于标准和会话模式)useSimpleChat.ts: 简化版聊天逻辑(用于极简模式,直接调用/aigc/simple)useConversations.ts: 会话列表管理
核心组件与布局
1. Templates (布局模板)
- SimpleChat: 无侧边栏,直接展示聊天面板。适用于应用内部调试或嵌入式简单对话。
- ConversationChat: 包含左侧会话历史侧边栏。适用于主应用界面、分享页面等需要管理多轮会话的场景。
- SimpleLayoutChat (New): 极简布局,支持在输入框左下角直接选择推理模型,不需要复杂的助手配置。适用于单一工具场景(如 Text-to-SQL 调试、Draw.io 绘图助手)。
2. State Management (状态管理)
- ChatService: 统一的服务层,负责根据 Assistant 类型选择正确的 API 端点。
- Store Integration: 深度集成
useMessagesStore和useConversationsStore进行状态持久化。
Data Flow (数据流)
- 初始化:
AssistantChat接收assistant对象和layout配置。 - 布局路由:
index.vue根据layout属性(auto,conversation,simple,simple-mode)渲染对应的 Template。 - 聊天交互:
- 用户在
ChatInputArea输入消息。 SimpleModelSelector(仅 simple-mode) 允许切换模型。- Composable (
useChat或useSimpleChat) 处理发送逻辑。 - 后端流式响应通过 SSE 返回,实时更新
MessageList。
- 用户在
使用文档与场景示例
Props 定义
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
assistant | Assistant | Required | 助手配置对象,包含 ID、名称、指令等 |
layout | 'auto' | 'conversation' | 'simple' | 'simple-mode' | 'auto' | 布局模式 |
conversationId | string | undefined | 指定会话 ID,simple 和 simple-mode 模式下建议传入 |
title | string | undefined | 标题(仅 simple-mode 支持顶部展示) |
apiKey | string | undefined | 用于分享页面的 API Key |
Layout 场景介绍
1. Conversation Mode (完整会话模式)
适用场景: 标准的 AI 助手应用,需要保存历史会话记录,支持新建会话、切换会话。 特点: 左侧带有会话列表侧边栏。2. Simple Mode (简单模式)
适用场景: 应用内的临时调试、或者不需要历史记录管理的嵌入式聊天。 特点: 仅展示聊天窗口,使用助手配置中默认的模型。3. Simple Mode with Model Selector (极简模式 - 带模型选择)
适用场景: 独立的工具页面(如 Draw.io 插件、Text-to-SQL 生成器),用户可能需要临时切换不同的推理模型来对比效果,但不涉及复杂的助手配置(如知识库、插件等)。 特点:- 界面极简。
- 输入框左下角提供模型选择器。
- 支持传入
title显示顶部标题。 - 使用
useSimpleChat逻辑,直接调用/aigc/simple接口。
最佳实践
-
Draw.io / 工具集成:
使用
simple-mode。由于这些场景通常需要特定的 System Prompt(如生成特定 XML 格式),可以将 Prompt 放在assistant.instruction中传入。useSimpleChat会将其作为promptText发送给后端。 -
自动布局:
如果不确定使用哪种布局,可以设置
layout="auto"(默认)。组件会根据assistant.chat.conversation.showHistory的配置自动决定使用conversation还是simple布局。 -
消息监听与后处理:
在父组件中,可以通过
useMessagesStore监听消息变化,从而实现对 AI 响应的后处理(例如提取代码块、自动执行操作)。
第二部分:Chat 接口调用架构设计
本章节详细描述聊天消息从用户输入到后端 API 调用的完整数据流,以及相关的服务层和状态管理设计。整体架构图
Services 服务层详解
1. ChatService (services/assistant/ChatService.ts)
ChatService 是聊天功能的核心服务类,负责统一的 API 调用逻辑。
主要职责:
- 根据 Assistant 类型选择正确的 API 端点
- 构建请求参数(包含 modelId、modelConfig、appId 等)
- 发起 SSE 流式请求
2. AssistantService (services/assistant/AssistantService.ts)
AssistantService 负责 Assistant 类型的适配和转换。
主要职责:
- 将后端返回的
AigcApp数据转换为前端使用的AppAssistant类型 - 处理模型配置(modelId、modelConfig)的映射
Stores 状态层详解
1. useMessagesStore (stores/messages/useMessagesStore.ts)
管理所有会话的消息列表。
数据结构:
getMessages(conversationId): 获取指定会话的消息列表addMessage(conversationId, message): 添加消息updateMessage(conversationId, messageId, updates): 更新消息appendMessageContent(conversationId, messageId, content): 追加消息内容(用于流式响应)loadMessages(conversationId): 从后端加载历史消息
2. useConversationsStore (stores/conversations/useConversationsStore.ts)
管理会话状态和缓存。
数据结构:
setActiveConversation(id): 设置当前会话clearActiveConversation(): 清除当前会话getConversation(id): 获取会话详情
3. useSuggestionsStore (stores/suggestions/useSuggestionsStore.ts)
管理 AI 推荐的后续问题(猜你想问)。
核心方法:
setSuggestions(suggestions): 设置推荐问题列表clearSuggestions(): 清除推荐问题
Composables 逻辑层详解
useChat.ts (composables/useChat.ts)
核心聊天逻辑封装,处理完整的消息发送流程。
主要职责:
- 管理 loading 状态
- 构建 Message 对象
- 调用 ChatService.sendMessage()
- 处理 SSE 流式响应事件
- 更新消息内容和状态
消息发送完整流程
以用户在 App 类型助手中发送消息为例:第三部分:扩展指南
添加自定义 Chat 请求参数
如果需要向后端传递额外的聊天参数,请按以下步骤修改:场景 1:从 Assistant 配置中传递参数
如果参数来自助手配置(如modelConfig),在 ChatService.buildParams() 中添加:
场景 2:从发送时动态传递参数
如果参数在发送消息时动态确定,通过options.extra 传递:
场景 3:修改 Assistant 类型定义
如果需要在 Assistant 中添加新字段:- 修改类型定义 (
types/assistant.ts):
- 修改适配器 (
services/assistant/AssistantService.ts):
添加新的 Assistant 类型
- 在
AssistantType枚举中添加新类型 - 在
ChatService.getApiUrl()中添加新的 API 映射 - 在
ChatService.buildParams()中添加新类型的参数构建逻辑 - 在
AssistantService中添加适配器方法
添加新的 StreamEvent 类型
- 在
types/streamEvents.ts中添加新的事件类型 - 在
useChat.ts的事件处理 switch 中添加新的 case 处理逻辑

