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

Unity发布京东小游戏反

从 UI 工程师到 AI 应用架构者13 年前我的工作是让按钮在 IE6 上对齐13 年后我用 fetch-event-source 订阅大模型的“思维流”用 OCR 解锁图片中的文字——前端正在成为 AI 产品的第一道体验防线。最近我基于 Vue 3 Vite TypeScript Ant Design Vue 开发了一款企业级 AI 多语翻译平台。它支持文本/图片/文档多模态输入大模型动态切换通义千问、DeepSeek 等行业领域定制医疗、法律、金融SSE 流式输出使用 fetch-event-source今天我将逐行拆解核心代码带你复现这一高价值 AI 应用的前端架构。一、技术选型为什么是 fetch-event-source虽然浏览器原生支持 EventSource但在现代前端工程中我们更倾向使用 microsoft/fetch-event-source基于 fetch天然支持 AbortController可取消请求支持 自定义 headers用于鉴权更好的 TypeScript 类型支持与 Axios/Vite 生态无缝集成安装npm install microsoft/fetch-event-source二、OCR 图片识别前端只管“传”和“显”用户上传一张英文菜单截图系统自动提取文字并翻译。前端不碰 OCR 算法但要管理全流程状态。真实代码实现来自 文本_r9uv.txt1. 系统配置加载含文件大小限制// src/views/translation/index.vueconst loadSystemPublicConfig async () {try {const response await findSystemPublicConfig({ configKey: upload_file_max_limit_mb });const config response.data[0];systemConfig.value.uploadFileMaxLimit parseInt(config.value) || 10; // 默认10MB} catch (error) {ElMessage.error(加载系统配置失败);}};2. 文件选择与校验const handleFileSelect (event: Event) {const input event.target as HTMLInputElement;if (input.files input.files.length 0) {const file input.files[0];const maxSize systemConfig.value.uploadFileMaxLimit * 1024 * 1024;if (file.size maxSize) {message.error(文件不能超过 ${systemConfig.value.uploadFileMaxLimit} MB);return;}currentFile.value file;startParsing(file);}};3. 调用 OCR 接口Ant Design Vue 组件反馈const handleObtainFileContentText async () {if (!currentFile.value) return;const formData new FormData();formData.append(file, currentFile.value);try {const response await obtainFileContentText(formData);if (response.success) {sourceLanguageText.value response.data.contentText;currentUploadStatus.value success;} else {currentUploadStatus.value failed;message.error(response.message || 解析失败);}} catch (error) {currentUploadStatus.value failed;message.error(网络错误请重试);}};关键设计状态分为 idle | parsing | success | failed对应四个 UI 区块避免用户困惑。三、大模型动态集成让选择“无感而智能”AI 模型不是越多越好而是要默认最优 动态适配。真实代码实现1. 加载模型与语种字典// 加载大模型列表const loadLargeModelDictionary async () {const response await findLargeModelDictionary({ keyword: });largeModelList.value response.data;if (largeModelList.value.length 0) {const firstModel largeModelList.value[0];selectedModelId.value firstModel.id;await loadLargeModelLanguageSupport(firstModel.id); // 关键联动语种}};// 加载某模型支持的语种const loadLargeModelLanguageSupport async (modelId: string) {const response await findLargeModelLanguageSupport({ largeModelId: modelId });languageSupportList.value response.data;};2. 行业领域初始化const loadIndustrySectorDictionary async () {const response await findIndustrySectorDictionary({ keyword: });industrySectorList.value response.data;// 业务逻辑若默认为 general则跳过if (defaultIndustrySector.value general industrySectorList.value.length 1) {defaultIndustrySector.value industrySectorList.value[1].code;}};3. Ant Design Vue 下拉框绑定v-model:valueselectedModelIdstylewidth: 100%changehandleModelChangev-foritem in largeModelList:keyitem.id:valueitem.id{{ item.name }}四、SSE 流式翻译用 fetch-event-source 实现“打字机效果”这是体验升级的核心我们使用 microsoft/fetch-event-source 替代原生 EventSource。完整流式翻译实现结合你的项目结构import { fetchEventSource } from microsoft/fetch-event-source;// 存储控制器用于取消请求let abortController: AbortController | null null;const handleTranslate async () {if (isTranslating.value) return;// 重置结果translationResult.value ;isTranslating.value true;// 创建 AbortControllerabortController new AbortController();const params new URLSearchParams({largeModelId: selectedModelId.value,sourceLangCode: selectedSourceLangCode.value,targetLangCode: selectedTargetLangCode.value,industrySector: defaultIndustrySector.value,enableDeepThinking: String(enableDeepThinking.value),content: sourceLanguageText.value.trim(),});try {await fetchEventSource(/api/v1/large-model/translate/stream${params}, {method: GET,headers: {Authorization: Bearer ${getToken()}, // 从 Pinia 或 localStorage 获取},signal: abortAssistant.signal, // 支持取消onmessage(event) {if (event.data) {translationResult.value event.data;nextTick(() {scrollToBottom();});}},onclose() {isTranslating.value false;},onerror(err) {console.error(SSE Error:, err);message.error(翻译服务异常请稍后重试);isTranslating.value false;abortController.abort(); // 主动关闭},});} catch (error) {if (abortController.signal.aborted) {console.log(翻译已取消);} else {message.error(连接失败);}isTranslating.value false;}};// 取消翻译const cancelTranslation () {if (abortController) {abortController.abort();isTranslating.value false;message.info(翻译已取消);}};自动滚动到底部const scrollToBottom () {const container document.querySelector(.translation-result-content);if (container) {container.scrollTop container.scrollHeight;}};为什么不用 WebSocketSSE 是 单向流服务端 → 客户端完美匹配“AI 生成文本”场景fetch-event-source 提供 Promise 风格 API更符合现代前端习惯五、工程化亮点13年经验的沉淀1. 响应式布局PC/Mobile 适配const updateMainHeight () {const mainEl document.querySelector(.main) as HTMLElement;if (!mainEl) return;if (isMobile.value) {mainEl.style.minHeight 100vh;mainEl.style.height auto;} else {mainEl.style.height 100vh;mainEl.style.minHeight auto;}};2. 内存清理防止泄漏onUnmounted(() {if (abortController) {abortController.abort();}window.removeEventListener(resize, checkIsMobile);});3. 防重复提交 加载状态typeprimary:loadingisTranslatingclickhandleTranslate:disabled!sourceLanguageText.trim(){{ isTranslating 翻译中... : 开始翻译 }}结语前端的价值在“AI 与人之间”这个项目让我确信AI 时代前端工程师的不可替代性在于“体验设计”。我们用 fetch-event-source 把冰冷的 token 流变成温暖的“打字机”我们用 Ant Design Vue 让复杂配置变得简单我们用状态机管理 OCR 的每一步不让用户迷失。颊瞥谅闻

相关文章:

Unity发布京东小游戏反

从 UI 工程师到 AI 应用架构者 13 年前,我的工作是让按钮在 IE6 上对齐; 13 年后,我用 fetch-event-source 订阅大模型的“思维流”,用 OCR 解锁图片中的文字——前端,正在成为 AI 产品的第一道体验防线。 最近&#x…...

MCP服务器架构设计图首次公开:含时序一致性保障机制、跨域设备注册拓扑、双向心跳状态机(2024 Q2最新LTS版)

第一章:MCP服务器架构设计图概览与核心设计哲学MCP(Modular Control Plane)服务器并非传统单体控制平面的简单重构,而是一种以“可插拔、可观测、可演进”为根基的分布式控制面架构。其设计图呈现清晰的分层结构:底层为…...

从SVM到LSTM:我的谣言检测模型优化踩坑实录(附PHEME/微博数据集对比)

从SVM到LSTM:我的谣言检测模型优化踩坑实录 去年夏天接手社交媒体谣言检测项目时,我完全没料到这个看似标准的文本分类任务会如此充满挑战。团队最初的想法很简单:用传统机器学习方法快速搭建基线,再逐步升级到深度学习模型。但当…...

小白/程序员必看:收藏这份强化学习训练智能体的实战指南(HelloAgents实战篇)

本文介绍了如何使用强化学习训练智能体,从LLM训练流程讲起,对比了PBRFT与Agentic RL的区别,并详细阐述了Agentic RL的六大核心能力:推理、工具使用、记忆、规划、自我改进和感知。文章还介绍了HelloAgents框架如何集成强化学习库T…...

APSIM模型---农田管理优化、作物品种和株型筛选、农田固碳和温室气体排放等

随着数字农业和智慧农业的发展,基于过程的农业生产系统模型在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农田固碳和温室气体排放等领域扮演着越来越重要的作用。APSIM (Agricultural Production Systems sIMulator)模型是世界知名的作物生…...

使用钉钉远程操作你的claude code露

先回顾:三次握手(建立连接)核心流程(实际版) 为了让挥手流程衔接更顺畅,咱们先快速回顾三次握手的实际核心,避免上下文脱节: 第一步(客户端→服务器)&#xf…...

我的前半生

大家好,我是李文涛。2026年,我步入了人生的不惑之年。回望来时路,快四十载光阴如白驹过隙。今天想和大家分享一下我的前半生——一个从秦岭深处走出的小镇青年,是如何一步步走到今天的。1、 在最美的地方,度过最纯真的…...

Java全栈开发工程师面试实录:从基础到高阶的深度技术探讨

Java全栈开发工程师面试实录:从基础到高阶的深度技术探讨 一、开场介绍 面试官(李工):你好,我是李工,目前在一家互联网大厂负责后端架构设计。今天来聊聊你的技术背景和项目经验。 应聘者(张伟&…...

基于贝叶斯优化的稀疏高斯过程回归(BO-SGPR)多输入单输出回归模型【MATLAB】

基于贝叶斯优化的稀疏高斯过程回归(BO-SGPR)多输入单输出回归模型【MATLAB】 在处理复杂的非线性回归、小样本学习以及带有不确定性量化的预测任务时,高斯过程回归(Gaussian Process Regression, GPR) 因其强大的理论基…...

Tun模式浏览器无法使用网络

环境Win11,v2软件表现情况打开Tun模式后发现无法连接网络,v2的dns配置保持默认。本文方法适用于打开Tun模式时,虚拟网卡可以正常创建,但是仍然无法联网的情况。在开始里搜索查看网络连接,这里是可以正常创建的。解决方…...

避坑指南:企业引入AI编程助手,选CodeGeex还是Copilot企业版?

企业级AI编程助手选型实战:CodeGeex与Copilot企业版的深度博弈 当技术决策者站在数字化转型的十字路口,选择一款适合企业长期发展的AI编程助手绝非简单的功能对比。这背后涉及数据主权、团队协作范式、技术债务管理等一系列战略考量。我们曾见证某金融科…...

AI 时代:祛魅、适应与重新定义宋

指令替换 项目需求:将加法指令替换为减法 项目目录如下 /MyProject ├── CMakeLists.txt # CMake 配置文件 ├── build/ #构建目录 │ └── test.c #测试编译代码 └── mypass2.cpp # pass 项目代码 一,测试代码示例 test.c // test.c #includ…...

视觉问答(VQA)前沿进展:5大创新数据集与顶会论文精要解析

1. 视觉问答(VQA)技术现状与挑战 视觉问答(VQA)作为计算机视觉与自然语言处理的交叉领域,近年来发展迅猛。简单来说,VQA就是让计算机看懂图片内容后,回答人类提出的自然语言问题。比如给出一张…...

财税合规数字化建设与税务师事务所行业实践

随着企业监管趋严与数字化不断深入,财税合规已成为企业经营管理中的重要环节。无论是中小企业还是集团公司,都需要建立规范的财务流程,完善纳税申报机制,强化风险自查能力,以实现合法合规,稳定经营。财税合…...

VL1_四选一多路器:从RTL设计到覆盖率验证的全流程解析

1. 四选一多路器的基本概念与应用场景 四选一多路器(4-to-1 Multiplexer)是数字电路设计中最基础的组合逻辑电路之一。简单来说,它就像一个智能开关,能够根据控制信号从四个输入信号中选择一个输出。这种电路在实际项目中应用非常…...

实时行情系统设计:从协议选择到高可用架构,再到数据源选型蘸

一、核心问题及解决方案(按踩坑频率排序) 问题 1:误删他人持有锁——最基础也最易犯的漏洞 成因:释放锁时未做身份校验,直接执行 DEL 命令删除键。典型场景:服务 A 持有锁后,业务逻辑耗时超过锁…...

CET中电技术如何助光伏企业在“四可“时代抢占先机?

2026年,"十五五"规划开局之年,新能源行业正经历一场深刻的变革。从2025年5月30日136号文推动投资主体转变,到2026年1月30日114号文将"四可"能力从试点推广期正式升级为政策强制标准,分布式光伏的并网逻辑已被…...

无侵入式Allegro许可证使用数据采集方案

无侵入式Allegro许可证使用收数据方案拿这些个年我跟各种许可证打交道,从最开始的Named User整到并发许可、角色绑定,真是踩过不少坑。你要是想解决阿里云、Enovia、3DEXPERIENCE这伙软件的许可证管理问题,传统方法要么成本高,要么…...

_EMD-KPCA-LSTM 基于经验模态分解和核主成分分析的长短期记忆网络多维时间序列预测_matlab_实现基于EMD-KPCA-LSTM多维时间序列预测模型,与LSTM和EMD-LSTM进行对比

EMD-KPCA-LSTM 基于经验模态分解和核主成分分析的长短期记忆网络多维时间序列预测MATLAB代码(含LSTM、EMD-LSTM、EMD-KPCA-LSTM三个模型的对比) matlab 参考文档:基于EMD-PCA-LSTM的光伏功率预测模型 研究内容:本案例使用数据集是…...

2.76亿|国网浙江电力 2026 年第一次物资框架采购成交候选人名单出炉

4月3日,国网浙江电力2026年第一次物资类框架协议竞争性谈判采购推荐的成交候选人名单公示(采购编号:ZBGW26-003),涵盖线路防雷、通信配件、量子加密模组、带电作业机器人附件等 23 类细分品类。中标总金额27552.5万元&…...

VMD 1.9.4实战:如何高效查看蛋白质-配体分子动力学模拟轨迹(附帧数优化技巧)

VMD 1.9.4实战:如何高效查看蛋白质-配体分子动力学模拟轨迹(附帧数优化技巧) 分子动力学模拟已成为研究蛋白质-配体相互作用的重要工具,而可视化分析则是理解模拟结果的关键环节。Visual Molecular Dynamics(VMD&#…...

实战复盘】游戏上市公司合同系统实施案例(六):被忽视的IT力量——为什么业务主导的项目更需要IT深度参与?

本文为《游戏上市公司合同系统实施案例》系列第六篇。 👉 (一)业务背景|(二)多维预算|(三)合同预警|(四)安全攻防|&#x…...

STM32 UART 通信详解

通用异步收发传输器(UART)是STM32微控制器中最基础、最常用的串行通信接口之一。它通过简单的两根信号线(TX和RX)实现全双工异步数据交换,广泛应用于与PC调试、传感器模块、蓝牙/Wi-Fi模块等的通信。一、UART协议基础1…...

Yii::$app->getAuthManager();的庖丁解牛

Yii::$app->getAuthManager() 是 Yii2 权限控制系统(RBAC)的唯一入口和核心代理。 它的本质是:通过服务定位器(Service Locator)模式,从全局应用容器中获取实现了 yii\rbac\ManagerInterface 接口的授权…...

革新性动物森友会存档编辑工具:NHSE全流程定制指南

革新性动物森友会存档编辑工具:NHSE全流程定制指南 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE NHSE(Animal Crossing: New Horizons save editor)是一款专业…...

别再乱删了!手把手教你用官方工具彻底卸载Autodesk全家桶(3ds Max/CAD)

彻底告别安装失败!Autodesk软件专业卸载与重装全指南 你是否曾经遇到过这样的困扰:明明已经卸载了3ds Max或AutoCAD,重新安装时却频频报错?那些隐藏在系统深处的残留文件就像顽固的污渍,无论你怎么擦洗都挥之不去。本…...

一网推百度爱采购代运营助力泰铖自动化斩获海量精准询盘

在工业制造数字化升级的当下,百度爱采购已然成为机械设备企业开拓线上客源的核心阵地,然而诸多中小厂商因缺乏专业运营手段,难以发挥平台价值。张家港市泰铖自动化设备有限公司主营半自动弯管机、缩管机、倒角机与切管机,曾面临线…...

每刻报销单到金蝶云星空:从API调用到数据写入全教程

每刻报销单集成至金蝶云星空的技术方案分享 在本次案例中,我们探讨的是如何通过轻易云数据集成平台实现每刻报销单的数据无缝对接到金蝶云星空系统。整个方案分为三个具体执行部分:付款申请、特殊付款申请单以及专项付款申请单。从获取数据,…...

从Stuxnet到S7CommPlus:一个C#程序员的工控协议安全入门笔记

从Stuxnet到S7CommPlus:一个C#程序员的工控协议安全入门笔记 工业控制系统(ICS)安全一直是个神秘而重要的领域。作为一名C#开发者,我曾以为这离我的日常开发很远,直到偶然接触到Stuxnet病毒的故事——这个专门针对西门…...

哪款头戴式蓝牙耳机性价比高?十大热门平价头戴式耳机品牌推荐!

2026年头戴耳机市场新老品牌争奇斗艳,从入门到高端让人目不暇接。作为一名经历过选择困难的音频爱好者,我完全理解这种幸福的烦恼:参数术语堆砌、营销话术包装,让人难辨虚实。在实测过多款产品后,我发现关键要避开这些…...