AIChat聊天助手:把 AI 助手“嵌进”你的业务系统——流式对话、上下文引用与可扩展消息卡片的一站式组件
关键词:AI 聊天组件、悬浮球 AI 助手、Vue ChatPanel、SSE 流式响应、上下文引用、AI 消息插入编辑器、Markdown 自定义组件渲染、语音输入、语音播报、对话历史管理
在企业后台、在线编辑器、简历/招聘系统、内容生产平台这类“用户边做边问”的产品里,AI 能力的落地往往卡在两点:
- 体验复杂度:流式输出、停止生成、历史记录、主题、移动端适配、语音/图片等多模态交互。
- 业务耦合度:AI 输出要能“回写”到业务(插入编辑器/表单),复杂信息要能用结构化 UI 呈现(卡片/轮播/二维码),无法解决的问题要能进入人工闭环(工单)。
ai-suspended-ball-chat 的目标是把这套“产品级 AI 交互底座”封装成一套可配置组件:
SuspendedBallChat:悬浮球形态,全站随处唤起。ChatPanel:独立面板形态,适合工作台/侧栏固定区域集成。
先看效果图(图)
- 组件官网地址: www.npmjs.com/package/ai-…
一句话定位:它不是“聊天 UI”,而是 AI 产品交互底座
很多团队一开始会把 AI 助手理解成“一个对话框”。但真实落地时,成本大头不在输入输出,而在“围绕对话的产品能力”:
- 请求体验:普通请求与 SSE 流式输出并存,支持停止生成。
- 会话管理:对话历史本地存储、最大条数、清空与状态获取。
- 多模态交互:图片上传、语音输入、语音播报。
- 业务联动:把 AI 回复内容插入到业务编辑器;工单提交进入人工闭环。
- 结构化呈现:在 Markdown 对话流里渲染卡片/轮播/二维码等自定义组件。
这就是为什么它更像一套“AI 交互基础设施”,而不是单纯的 Chat UI。
核心特色
- 双模式请求:普通 JSON 与 SSE 流式响应(
enable-streaming)。 - 上下文引用:支持引用页面中(或上传)的文本作为对话上下文(
supported-custom-context/enable-context)。 - 历史记录管理:本地存储、最大条数控制(
enable-local-storage/max-history-count)。 - 语音与多模态:语音输入、语音播报、图片上传(可配置开关)。
- 获取 AI 消息(回写业务):把 AI 回复插入到你的编辑器/表单/应用(
enable-insert-message+clickAssistantMsgCallback)。 - 工单反馈闭环:遇到 AI 无法解决的问题,用户可直接提交工单(
show-feedback-button+onFeedbackSubmit)。 - 对话流自定义组件渲染:Markdown 占位符 + 后端下发配置,实现“对话 + 卡片/轮播/二维码”的混合表达。
- 高可配置 + TypeScript 类型完善:适配不同业务风格与接口协议。
架构设计(图):三层分离 + 多扩展点
不谈实现细节,从概念架构看,它把 AI 助手拆成三层:展示层、会话编排层、连接器层。这样做的目的,是让你用 配置与回调就能完成业务适配。
flowchart TB
U[用户] -->|点击悬浮球/打开面板| UI[UI 展示层\nSuspendedBallChat / ChatPanel]
UI -->|输入文本/语音/图片| Orchestrator[会话编排层\n消息队列/流式状态/历史存储/上下文引用]
Orchestrator -->|普通请求/流式 SSE| Connector[连接器层\n请求封装/协议适配\ncustom-request-config]
Connector --> Backend[你的后端 / 网关 / 模型服务]
Backend -->|JSON 或 SSE 数据块| Connector
Connector --> Orchestrator
Orchestrator -->|渲染 Markdown + 自定义组件| UI
Orchestrator -->|callbacks 事件| Biz[业务侧\n埋点/权限/审计/工单系统/编辑器回写]
- 展示层:承载入口形态(悬浮球/面板)、主题样式与响应式交互。
- 会话编排层:管理消息、流式生命周期、历史记录、上下文引用等“产品能力”。
- 连接器层:对齐普通 JSON 与 SSE 协议,通过
custom-request-config适配鉴权、header、参数加工。
流式对话链路(图):SSE 增量输出如何形成“可感知的生成体验”
你不需要在前端重复造“打字机 + 结束标识 + 停止按钮”这套机制,组件把它抽象成统一能力。对后端要求是:持续发送 JSON 数据块,以 \n\n 分隔,并用 is_end 告知结束。
sequenceDiagram
autonumber
participant User as 用户
participant UI as 组件 UI
participant API as 后端接口
User->>UI: 发送消息
UI->>API: 发起请求(enable-streaming=true)
API-->>UI: data: {code:0,result:"...",is_end:false}
UI-->>User: 增量渲染(流式输出中)
API-->>UI: data: {code:0,result:"...",is_end:false}
UI-->>User: 持续追加渲染
API-->>UI: data: {code:0,result:"",is_end:true}
UI-->>User: 结束态(可播报/可插入/可反馈)
结构化消息呈现(图):在 Markdown 中渲染“卡片/轮播/二维码”等自定义组件
现实业务中,“长回答”经常带来阅读负担,而结构化 UI 能把关键信息变成可点击、可跳转、可复用的操作入口。
组件支持一种占位符语法:在 Markdown 正文里写 [[~n]],同时后端下发编号 n 对应的组件配置(流式或非流式都支持)。
flowchart LR
M["Markdown 文本<br/>这里是正文... [[~1]] ... [[~2]]"] --> P["占位符解析<br/>定位挂载点"]
C["customComponents 配置<br/>或 SSE custom-component 数据块"] --> B["组件工厂/渲染器"]
P --> R["渲染结果:<br/>正文 + 卡片/轮播/二维码等"]
B --> R
适合的业务表达:
- 推荐列表(产品/课程/文章/招聘岗位)用卡片呈现,点击直达。
- 图片对比(前后效果、压缩对比、修复对比)用图片对比组件呈现。
- 多张图/多步骤引导用轮播呈现。
- 二维码把结果“投送”到移动端或企业微信。
两种入口形态(图):悬浮球 vs 面板
同一套能力,提供不同入口形态,解决“全站可用”和“工作台固定承载”的产品差异。
flowchart TB
subgraph Entry[入口形态]
A[ SuspendedBallChat\n悬浮球:随处唤起 ]
B[ ChatPanel\n面板:固定区域承载 ]
end
A --> S[同一套会话能力\n流式/历史/上下文/多模态/回调]
B --> S
业务场景案例(图文结合)
场景 1:AI 简历助手(信息密集型表单)
问题本质:用户在填写“项目经历/技能描述/自我评价”时,需要即时润色与结构化建议。
组件价值点:
- 上下文引用:把当前页面已填写内容作为上下文,提高回答贴合度。
- 回写能力:用户一键把 AI 回复插入到对应表单项。
- 工单闭环:遇到合规/敏感/个性化强的问题,直接提交人工工单。
flowchart LR
F[简历表单输入] -->|引用上下文| AI[AI 对话组件]
AI --> R[生成:要点 + 改写建议]
R -->|插入| F
R -->|不满意/需人工| T[工单提交]
图(体验链接):
体验地址: luckycola.com.cn/public/resu…
场景 2:AI 编程助手(在线编辑器/IDE 类 Web 应用)
问题本质:用户需要“边写边问”,最怕等待、最需要可直接落地的代码/解释/链接。
组件价值点:
- SSE 流式输出:降低等待焦虑,增强生成可感知性。
- 消息插入编辑器:把 AI 回复直接写回代码区,提升闭环效率。
- 结构化组件渲染:用卡片/轮播呈现参考链接、依赖建议、可复用片段。
图(体验链接):
体验地址: luckycola.com.cn/public/dist…
场景 3:运营/内容生产(图文混排、多模态)
- 图片上传:生成标题/摘要/标签/脚本,或识别图中信息。
- 语音输入:移动端口述需求更高效。
- 主题/样式自定义:用 CSS 变量快速贴合品牌后台。
这类场景最重要的是“降低输入成本”和“提升输出可用性”。
落地建议:先跑通闭环,再做体验增强
-
第 1 阶段(MVP)
- 普通 JSON 请求
- 开启本地历史(避免刷新丢失)
- 接上
callbacks做埋点与错误监控
-
第 2 阶段(体验升级)
- 切换 SSE 流式
- 增加停止生成、错误码映射与重试策略
- 增加语音/图片(按业务开关)
-
第 3 阶段(业务表达能力)
- 上下文引用(页面内容/文件)
- 自定义组件渲染(把关键行动点结构化)
- 工单反馈闭环(AI 不确定时转人工)
性能与工程化:包体积与加载时机要提前规划
由于组件支持代码高亮、数学公式等能力,包体积可能偏大。推荐按需加载(动态导入/路由懒加载/Suspense/工厂函数模式),把组件的加载时机放到“用户真的需要 AI 助手”的那一刻。
适用边界:什么时候推荐使用它
-
推荐
- 需要“可嵌入、可配置、可扩展”的 AI 助手入口
- 强依赖流式输出、历史管理、多模态与业务闭环
- 希望用协议对齐任意模型服务,而不是绑定单一平台
-
不太适合
- 只要一个极简对话框、且不需要流式/历史/扩展渲染
- 完全不接受样式覆盖/变量方案,要求深度重做 UI 体系
结语:把 AI 体验沉淀成“组件资产”,而不是“项目负担”
ai-suspended-ball-chat 的核心价值不在“能聊天”,而在于把 AI 产品化过程中最容易重复造轮子的部分沉淀下来:
- 体验层:流式、语音、图片、主题、响应式
- 状态层:历史与会话管理、可停止与可恢复
- 业务层:插入消息、工单闭环、结构化卡片渲染
- 工程层:TS 类型、可配置回调、按需加载建议与版本差异说明
如果你要在多个业务线推广 AI 助手入口,把它作为“统一 AI 交互底座”会更可控:体验一致、协议一致、扩展一致,后续迭代也更像升级基础设施,而不是到处救火。