当前位置: 首页 > news >正文

【Vue】LangChain4j大模型对话-前端页面完成(vite+vue3+router)

接上文内容:https://blog.csdn.net/2401_84926677/article/details/151962893

一、介绍

本文继承上一章LangChain4j实现后端对话接口的内容,继续介绍LangChain4j实现简单的前端页面,达成与大模型的可视化聊天功能。

二、步骤

1. 使用vite创建前端项目

前端项目创建方式:https://blog.csdn.net/2401_84926677/article/details/151410780

2. 下载安装依赖

3. 安装vue-router@4

npm install vue-router@4

4. main.js

// 导入Vue核心库和根组件App.vue
import { createApp } from 'vue'
import App from './App.vue'
// 导入路由配置
import router from './router'
// 创建Vue应用实例
const app = createApp(App)
// 安装路由插件
app.use(router)
// 挂载应用到DOM元素#app
app.mount('#app')

5. 创建views和router文件夹

分别创建index.js配置路由和ChatView.vue聊天页面

6. router/index.js

// 导入Vue Router相关函数和聊天页面组件
import { createRouter, createWebHistory } from 'vue-router'
import ChatView from '../views/ChatView.vue'
// 定义路由配置数组
const routes = [{// 根路径路由path: '/',// 路由名称name: 'Chat',// 对应的组件component: ChatView}
]
// 创建路由实例
const router = createRouter({// 使用HTML5 History模式history: createWebHistory(),// 路由配置routes
})
// 导出router实例供main.js使用
export default router

7. ChatView.vue

前端实现后端接口适配的流式响应

html部分
javascript部分
<script setup>
// 导入Vue的响应式API
import { ref, nextTick } from 'vue'
// 响应式数据定义
const messages = ref([])           // 聊天记录
const userInput = ref('')          // 用户输入内容
const isLoading = ref(false)       // 加载状态
const messagesContainer = ref(null) // 消息容器引用
/*** 发送消息到后端API* 处理用户输入,调用后端接口,并流式显示返回结果*/
const sendMessage = async () => {// 验证输入内容和加载状态if (!userInput.value.trim() || isLoading.value) return// 添加用户消息到聊天记录messages.value.push({type: 'user',content: userInput.value})// 保存用户输入并清空输入框const messageToSend = userInput.valueuserInput.value = ''isLoading.value = true// 滚动到底部await scrollToBottom()try {// 调用后端API,发送用户消息const response = await fetch(`/api/chat?message=${encodeURIComponent(messageToSend)}`)const reader = response.body.getReader()const decoder = new TextDecoder('utf-8')// 添加AI消息占位符messages.value.push({type: 'ai',content: ''})// 滚动到底部await scrollToBottom()// 逐步读取流数据并更新消息while (true) {const { done, value } = await reader.read()if (done) breakconst chunk = decoder.decode(value, { stream: true })messages.value[messages.value.length - 1].content += chunk// 每次更新后滚动到底部await scrollToBottom()}} catch (error) {// 错误处理console.error('Error:', error)messages.value[messages.value.length - 1].content = '抱歉,发生错误,请稍后重试。'} finally {// 重置加载状态isLoading.value = false}
}
/*** 滚动到聊天记录底部* 确保最新消息始终可见*/
const scrollToBottom = async () => {await nextTick()if (messagesContainer.value) {messagesContainer.value.scrollTop = messagesContainer.value.scrollHeight}
}
</script>

8. App.vue

<script setup>
/* 根组件,使用setup语法糖 */
</script>

9. 运行项目

10. 页面效果

测试

流式输出正常:

http://www.jsqmd.com/news/11711/

相关文章:

  • 【Vue】LangChain4j大模型对话-前端页面完成(vite+vue3+router)
  • 【gradio】使用Gradio快速开发前端界面:基础知识
  • 2025风机盘管厂家口碑推荐榜:高效节能与稳定性能的行业首选
  • Open WebUI:打造友好且强大的自托管 AI 平台
  • 直流微电网运行控制仿真算法设计与实现
  • 车载360环视平台:米尔RK3576开发板支持12路低延迟推流
  • 基于MATLAB的多棵树分类器(随机森林)
  • TDengine 3.3.6.0 使用Docker部署3节点集群
  • 05-字符设备驱动之ioctl
  • 文本切割方案进化概览:从“机械切割”到“智能解构”
  • 2025氧化镁厂家最新推荐榜:高纯度与稳定性能的行业佼佼者!
  • 大模型RAG的上下文压缩与过滤
  • iOS 26 设备文件管理实战指南,文件访问、沙盒导出、系统变更与 uni-app 方案适配
  • 从“视频孤岛”到“统一视界”:解析视频汇聚平台EasyCVR的核心功能与应用场景
  • 个人博客作业 1:就《现代软件工程》提 5 个问题
  • 2025 年锅炉优质厂家最新推荐榜单:高效节能与环保性能全方位剖析,助您选到靠谱锅炉供应商
  • 2025 年商用洗碗机源头厂家最新推荐榜:聚焦实力企业,为餐饮及企事业单位选购提供可靠参考
  • EHOME平台EasyCVR视频诊断功能指南:一文读懂其可识别的所有视频质量问题
  • 解决FinalShell无法本地连接虚拟机(VMware)中的Linux的问题
  • html介绍+运用
  • 2025 年 氨糖软骨素厂家哪家好?傦力宝产品选购指南,解析研发实力与品质优势
  • 【SPIE出版】2025年信息工程、智能信息技术与人工智能国际学术会议(IEITAI 2025)
  • go读取二进制文件编译信息
  • 2025锯床厂家最新推荐榜:精准切割与高效性能的行业首选!
  • 基于LangChain 实现 Advanced RAG-后检索优化(下)-上下文压缩与过滤
  • 2025.10.10 图论
  • xshell把界面转发到xming
  • 基于LangChain 实现 Advanced RAG-后检索优化(上)-Reranker
  • 使用AI创建angular项目
  • 大模型在软件研发协同演进