Grok与Vue3前端框架对接:构建响应式的AI对话客户端界面

轻婷吖_2813

轻婷吖_2813

2026-06-15

823人浏览

原创

vue3项目需用fetch实现grok sse流式响应,pinia管理消息状态并动态更新content,usescroll配合条件滚动锚定,气泡组件剥离data:前缀渲染markdown,css控制流式动画与交互禁用。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

grok与vue3前端框架对接:构建响应式的ai对话客户端界面

你需要在Vue3项目中接入Grok API,实现一个能实时显示AI逐字回复的对话界面,而不是等整段响应返回后再渲染。这要求前端必须正确处理流式数据、防止DOM频繁重绘、保持消息气泡的滚动锚定,并兼容Grok官方API的SSE格式。

初始化Vue3项目并安装依赖

用Vite创建最小化Vue3项目:npm create vite@latest grok-chat -- --template vue。进入目录后执行npm install。

安装必需依赖:npm install axios pinia @vueuse/core。其中@vueuse/core提供useScroll和useEventListener等实用组合函数,对滚动锚定至关重要。

【不要安装eventsource-polyfill】 Grok的SSE响应头明确要求Content-Type: text/event-stream,而现代浏览器原生EventSource已完全支持该协议,引入polyfill反而会干扰流式中断重连逻辑。

配置Grok API密钥与基础请求封装

在src/env.d.ts中补充类型声明:declare global { interface ImportMetaEnv { readonly VITE_GROK_API_KEY: string } }。

创建src/api/grok.ts,导出fetchStream函数:使用fetch而非axios,因为axios不原生支持SSE流式读取;设置headers为{Authorization: Bearer ${import.meta.env.VITE_GROK_API_KEY}};关键参数是{method: 'POST', body: JSON.stringify({model: 'grok-beta', messages: [{role: 'user', content: prompt}], stream: true})}。

响应体必须设为res.body.getReader(),不能用res.json()——后者会等待完整响应,彻底破坏流式特性。

构建流式消息状态管理(Pinia Store)

运行npm install pinia,然后在src/stores/chat.ts中定义useChatStore:

state包含messages: Message[](每个Message有id、role、content、isStreaming布尔值)、inputValue:string、isLoading:boolean;actions中addUserMessage直接push,addAIMessage则需初始化空字符串并标记isStreaming=true;最关键的是streamChunk(chunk: string)方法——它只更新最后一条AI消息的content += chunk,不触发新消息插入。

vue-composition-api-best-practices
vue-composition-api-best-practices

Vue 3 组合式 API 与

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.5万人学习

Vue3.x 核心篇--十天技能课堂
Vue3.x 核心篇--十天技能课堂

共30课时 | 2.4万人学习

Vue3.x新特性篇--十天基础课堂
Vue3.x新特性篇--十天基础课堂

共20课时 | 1.7万人学习