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

news/2025/10/11 18:04:18/文章来源:https://www.cnblogs.com/yxysuanfa/p/19135681

接上文内容: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.mzph.cn/news/934969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

contenteditable 深度交互教程

contenteditable 交互式教程 - 百灵AI * { box-sizing: border-box; margin: 0; padding: 0; font-family: "Segoe UI", system-ui, -apple-system, sans-serif } body { background: linear-gradient(135de…

【gradio】使用Gradio快速开发前端界面:基础知识

【gradio】使用Gradio快速开发前端界面:基础知识使用Gradio快速开发前端界面:基础知识前言一、什么是Gradio?二、安装Gradio三、快速入门:构建一个简单的文本处理界面四、Gradio 的核心组件五、核心组件的演示六、…

2025风机盘管厂家口碑推荐榜:高效节能与稳定性能的行业首选

2025风机盘管厂家口碑推荐榜:高效节能与稳定性能的行业首选随着建筑行业的快速发展,风机盘管作为中央空调系统中的重要组成部分,其市场需求日益增长。高效节能与稳定性能成为用户选择风机盘管时的重要考量因素。为了…

距离和

http://noip.ybtoj.com.cn/contest/1121/problem/3 1.3 距离和 图解1685. 有序数组中差绝对值之和 14962615. 等值距离和 17932602. 使数组元素全部相等的最少操作次数 19032968. 执行操作使频率分数最大 24441703. 得…

痞子衡嵌入式:在i.MXRT下测试启动特性时可改写OTP Shadow寄存器而不烧OTP

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT下测试启动特性时可改写OTP Shadow寄存器而不烧OTP。我们知道恩智浦 i.MXRT 系列除了 BOOT 相关引脚电平配置之外,主要通过片内 eFuse/OTP 存…

Open WebUI:打造友好且强大的自托管 AI 平台

Open WebUI:打造友好且强大的自托管 AI 平台目录 摘要 一、引言 二、Open WebUI 的概念讲解 (一)功能特性 (二)技术基础 三、Open WebUI 的架构设计 (一)系统架构图 (二)架构模块介绍 四、Open WebUI 的安装与…

直流微电网运行控制仿真算法设计与实现

一、仿真模型构建 1. 核心组件建模电源模块光伏电池:采用单二极管等效电路模型,结合扰动观察法实现MPPT控制 % MPPT控制仿真代码片段 V_pv = linspace(0, V_oc, 1000); % 光伏输出电压范围 I_pv = solar_cell_model…

基于MATLAB的多棵树分类器(随机森林)

一、实现流程 1. 数据预处理 % 加载鸢尾花数据集 load fisheriris X = meas(:,1:2); % 使用前两个特征 Y = species;% 处理缺失值(若有) cleanData = rmmissing([X, categorical(Y)]);% 特征标准化 X_scaled = zsco…

车载360环视平台:米尔RK3576开发板支持12路低延迟推流

在汽车智能化、网联化快速发展的今天,360环视系统 已成为智能驾驶和自动泊车的标配技术。无论是泊车入位、低速行车还是复杂路口的安全辅助,360环视都依赖于 多路摄像头 的实时接入与高效处理。然而,传统硬件平台往…

2025双氧水厂家最新推荐榜:品质卓越与环保安全的首选品牌!

2025双氧水厂家最新推荐榜:品质卓越与环保安全的首选品牌!随着环保意识的不断提升,双氧水作为一种高效、环保的氧化剂,在多个行业中的应用越来越广泛。从工业清洗到医疗消毒,从污水处理到食品加工,双氧水的需求量…

TDengine 3.3.6.0 使用Docker部署3节点集群

一、使用 Docker Swarm 管理 TDengine+Nginxdocker版本为26。 使用docker swarm 进行集群管理。 使用taosAdapter实现RESTful 接口访问。 使用nginx代理访问集群。二、架构设计 基于TDengine 节点 IP:192.168.0.1/db1…

文本切割方案进化概览:从“机械切割”到“智能解构”

文本切割方案进化概览:从“机械切割”到“智能解构”文档分块技术已经走过了三个主要时代,目前正迈向第四个: V1.0 机械时代: 方法: 固定长度分块、字符/Token分块。 缺陷: 完全无视语义和逻辑,粗暴地将文本切开,…

2025氧化镁厂家最新推荐榜:高纯度与稳定性能的行业佼佼者!

2025氧化镁厂家最新推荐榜:高纯度与稳定性能的行业佼佼者!随着工业技术的不断进步,氧化镁作为一种重要的无机化工原料,在多个领域得到了广泛应用。从建筑材料到电子元件,从环保材料到医药行业,氧化镁的应用范围日…

大模型RAG的上下文压缩与过滤

大模型RAG的上下文压缩与过滤一、为什么要压缩 & 过滤检索器一次拉回 top-k 篇文档,其中 80% 的 token 与问题无关 →浪费 LLM 上下文窗口无关内容引入幻觉目标:在“送进 LLM 之前”就把无用段落/句子/ token 丢…

iOS 26 设备文件管理实战指南,文件访问、沙盒导出、系统变更与 uni-app 方案适配

iOS 26 设备文件管理实战指南,文件访问、沙盒导出、系统变更与 uni-app 方案适配pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font…

从“视频孤岛”到“统一视界”:解析视频汇聚平台EasyCVR的核心功能与应用场景

从“视频孤岛”到“统一视界”:解析视频汇聚平台EasyCVR的核心功能与应用场景在物联网和智慧城市高速发展的今天,海量、异构的视频监控设备如何实现统一管理、智能分析与高效应用,成为行业的核心痛点。本文将深入解…

个人博客作业 1:就《现代软件工程》提 5 个问题

个人博客作业 1:就《现代软件工程》提 5 个问题 问题一:如何权衡分析麻痹问题 出处: 第三章《软件工程师的成长》中提到:“想弄清楚所有细节,所有依赖关系之后再动手,分析太多,腿都麻了,没法起步前进,故得名分…

2025 年锅炉优质厂家最新推荐榜单:高效节能与环保性能全方位剖析,助您选到靠谱锅炉供应商

当前,工业生产与民生领域对热能供应的需求持续增长,锅炉作为核心设备,其性能直接影响企业运营成本与环保合规性。但随着国家环保政策不断收紧,氮氧化物、烟尘等排放限值愈发严格,同时能源价格波动加大,传统高能耗…