当前位置: 首页 > 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…...

EhViewer:三招解决漫画阅读的三大痛点,让你的阅读体验提升300%

EhViewer:三招解决漫画阅读的三大痛点,让你的阅读体验提升300% 【免费下载链接】EhViewer 🥥 A fork of EhViewer, feature requests are not accepted. Forked from https://gitlab.com/NekoInverter/EhViewer 项目地址: https://gitcode.…...

从ChatGPT-5到AgentOS:2026奇点大会定义的强化学习新范式,含3个可复用的策略梯度优化模板

第一章:2026奇点智能技术大会:大模型强化学习 2026奇点智能技术大会(https://ml-summit.org) 核心突破:RLHF 2.0 与在线策略蒸馏 本届大会首次公开演示了基于多智能体协同反馈的强化学习新范式 RLHF 2.0,其核心在于将人类偏好建…...

分享 种 .NET 桌面应用程序自动更新解决方案毓

一、Actor 模型:不是并发技巧,而是领域单元 Actor 模型的本质是: Actor 是独立运行的实体 Actor 之间只通过消息交互 Actor 内部状态不可被外部直接访问 Actor 自行决定如何处理收到的消息 Actor 模型真正解决的是: 如何在不共享状…...

从Token级阻塞到毫秒级吐字,大模型流式输出的7层调度链路拆解,含GPU显存压缩比实测数据

第一章:从Token级阻塞到毫秒级吐字:流式输出的范式跃迁 2026奇点智能技术大会(https://ml-summit.org) 传统大语言模型推理长期受限于“全量生成—整体返回”的同步范式:解码器必须等待整个输出序列完成采样、logits计算与token ID映射后&am…...

Claude顾问策略技术深度解析:Opus 4.6幕后指挥,Sonnet/Haiku高效执行

技术分析:Anthropic顾问策略架构设计与性能优化实现原理 前言:AI Agent架构的革命性突破 2026年3月,Anthropic正式发布Claude"顾问策略"(Advisor Strategy),这一技术架构彻底改变了传统AI Agent…...

轨迹张量 + 空间反演:镜像视界如何重写三维空间智能体的底层算法逻辑

摘要当行业还在讨论“视频能识别什么”时,镜像视界(浙江)科技有限公司已经把问题推进到了下一阶段:视频如何直接参与空间计算、行为建模与决策控制。过去的智能视频系统,本质上是在二维图像上做目标检测、属性识别和行…...

灵狐框架 vs. 传统开发:如何用Fox Framework简化WordPress主题定制

灵狐框架 vs. 传统开发:如何用Fox Framework简化WordPress主题定制 WordPress作为全球最流行的内容管理系统,其主题开发一直是开发者关注的焦点。传统开发方式虽然灵活,但往往伴随着大量重复性工作和复杂的代码结构。而灵狐框架(F…...

MetalLB才是给Ingress这个老登做负重前行的那个男人纤

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

【ELF2学习板】基于OpenMP与FFTW的多核并行优化实践:从编译到性能测试

1. 为什么需要多核并行优化FFT计算 第一次在ELF2开发板上跑FFT测试时,我就被它的计算速度惊到了——2048点的复数FFT居然要花好几百微秒。这让我开始思考:RK3588明明有8个CPU核心(4个A76大核4个A55小核),为什么计算时只…...

手把手教你用Docker部署Crawl4AI服务,打造一个随时可用的AI爬虫API

从零构建企业级AI爬虫服务:基于Docker的Crawl4AI全栈部署指南 当你的Python脚本成功运行Crawl4AI爬取第一个网页时,这只是数据采集长征的第一步。真正的挑战在于:如何让这个脚本变成团队随时可用的服务?如何确保它在凌晨三点依然稳…...

电子信息保研面试真题库:钢琴爱好竟成加分项?附5类必问专业课速记清单

电子信息保研面试突围指南:从钢琴键到霍夫曼编码的跨界应答策略 当钢琴的黑白键遇上通信原理的二进制编码,保研面试的考场便成了跨界思维的最佳秀场。去年华南某顶尖院校电子系的面试现场,一位考生用肖邦《夜曲》的节奏变化类比数字信号采样定…...

别再手动改代码了!一个Python脚本搞定Labelme关键点标注到YOLO格式的批量转换

别再手动改代码了!Python自动化实现Labelme关键点到YOLO格式的高效转换 当你在深夜盯着满屏的JSON文件,机械地复制粘贴坐标数据时,是否想过——这些重复劳动本不该占用你宝贵的时间?本文将带你用Python脚本彻底告别手工转换&#…...

offline meta-RL | 总结 FOCAL 等经典工作的数据收集 / 性能测试方法滋

在AI辅助开发的语境下,Skill就是一个包含了领域知识、最佳实践、代码模板的知识包。 以"DAO层CRUD生成"为例,一个Skill包含: /mnt/skills/dao-crud/ ├── SKILL.md # 使用说明 │ ├── 何时使用这个Skill │ …...

TJA1042T待机模式省电秘籍:独立VIO供电与VCC关闭的实测功耗对比

TJA1042T待机模式省电秘籍:独立VIO供电与VCC关闭的实测功耗对比 在电池供电的车载传感器和远程数据记录仪等场景中,每一微安的电流都关乎设备续航。TJA1042T作为NXP经典的CAN收发器,其待机模式下仅需VIO供电的特性,为超低功耗设计…...

液压升降台的设计(说明书+CAD总装图、零件图、液压原理图+任务书+答辩PPT)

液压升降台作为工业与民用领域常见的垂直运输设备,其核心作用在于通过液压系统实现平稳、高效的升降功能,广泛应用于仓库货物搬运、车间设备检修、舞台场景搭建等场景。设计过程中需重点考虑结构强度、液压系统稳定性及操作安全性,确保设备在…...

【GUI-Agent】阶跃星辰 GUI-MCP 解读---()---HITL(Human In The Loop)碳

插件化架构 v3 版本最大的变化是引入了模块化插件系统。此前版本中集成在核心包里的原生功能,现在被拆分成独立的插件。 每个插件都是一个独立的 Composer 包,包含 Swift 和 Kotlin 代码、权限清单以及原生依赖。开发者只需安装实际用到的插件&#xff0…...

液压与气压课程设计

液压与气压传动作为现代工业的核心技术之一,在机械装备、自动化设备等领域发挥着不可替代的作用。其核心原理是通过液体或气体的压力传递能量,实现动力传输与运动控制。相比机械传动,液压系统具备功率密度高、响应速度快、调速范围广等优势&a…...

液压折弯机(全套)2012本科毕业设计

液压折弯机作为金属板材加工领域的核心设备,其全套系统设计直接决定了加工精度与效率。该设备通过液压系统驱动滑块实现垂直运动,配合模具对板材施加压力,使其按预设角度弯曲成型。其核心作用体现在三方面:一是精准控制弯曲角度&a…...

AI Coding越来越强,我们还有必要学Processing吗? · 创意编程家

故障表现 发现请求集群 demo 入口时卡住,并且对应 Pod 没有新的日志输出 rootce-demo-1:~# kubectl get pods -n deepflow-otel-spring-demo -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NO…...

1、MySQL故障排查与运维案例

MySQL故障排查与运维案例全集 一、连接类故障 1. 连接超时 现象:ERROR 2003 (HY000): Cant connect to MySQL server on host (110 "Connection timed out") 排查流程: # 检查网络连通性 nc -zv host 3306 mtr host# 检查防火墙 iptables -L -…...

Windows Server 2019开启SSH服务踩坑全记录:从PowerShell命令到防火墙规则,一篇搞定

Windows Server 2019 SSH服务部署终极指南:从零构建到企业级安全配置 当我们需要在Windows Server环境中实现安全高效的远程管理时,SSH服务已经成为现代运维体系中不可或缺的一环。不同于传统的RDP远程桌面,SSH提供了更轻量级、更安全的命令行…...

手把手教你用Python玩转CALCE锂电池数据集:从数据清洗到LSTM/Transformer模型实战

手把手教你用Python玩转CALCE锂电池数据集:从数据清洗到LSTM/Transformer模型实战 锂电池作为新能源领域的核心组件,其剩余寿命预测一直是工业界和学术界的研究热点。CALCE数据集作为马里兰大学发布的权威锂电池老化数据,包含了多组电池在不同…...

LVGUI图片资源管理新思路:用NXP GUI Guider一键生成合并bin文件,告别手动算地址

LVGUI图片资源管理新思路:用NXP GUI Guider一键生成&合并bin文件,告别手动算地址 在嵌入式GUI开发中,图片资源管理一直是个让人头疼的问题。特别是当项目需要大量高分辨率图片时,如何高效地将这些资源存储到外部Nor Flash并正…...

PotPlayer字幕翻译神器:打破语言壁垒,畅享全球影音盛宴

PotPlayer字幕翻译神器:打破语言壁垒,畅享全球影音盛宴 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu 还在为外…...

告别模糊坐标!自定义你的MATLAB Figure数据提示(DataTip)显示格式

告别模糊坐标!自定义你的MATLAB Figure数据提示(DataTip)显示格式 在科研数据可视化过程中,精确呈现坐标信息往往比我们想象的更重要。想象这样一个场景:你正在分析一组高频采样数据,当鼠标悬停在某个峰值点…...

ArcGIS插件开发实战:用Python打造你的第一个自定义工具(附完整代码)

ArcGIS插件开发实战:用Python打造你的第一个自定义工具(附完整代码) 在GIS领域,ArcGIS作为行业标杆软件,其强大的可扩展性一直备受开发者青睐。想象一下,当你面对重复性操作时,不再需要一遍遍点…...

告别死记硬背:用TensorFlow和tf_geometric实战GraphSAGE,搞定蛋白质网络节点分类

蛋白质网络节点分类实战:用TensorFlow和tf_geometric实现GraphSAGE 在生物信息学领域,蛋白质相互作用网络(PPI)的分析一直是研究热点。传统方法往往需要依赖复杂的特征工程,而图神经网络(GNN)的出现为我们提供了一种端到端的解决方案。本文将…...

Python脚本清理VS重装残留:手把手教你用win32api批量删除注册表垃圾项

Python脚本清理VS重装残留:手把手教你用win32api批量删除注册表垃圾项 开发者在Windows平台上重装Visual Studio时,经常会遇到各种莫名其妙的错误。这些问题的根源往往在于注册表中残留的旧配置项。手动清理不仅效率低下,还容易遗漏关键项。本…...

Exploring Hallucination in Large Language Models: Causes, Detection, and Mitigation Strategies

1. 大语言模型幻觉现象的本质与分类 当你向ChatGPT询问"第一个登月的人是谁",它却回答"1951年的查尔斯林德伯格"——这个明显违背常识的答案就是典型的大语言模型幻觉。这种现象就像AI的"创造性谎言",模型会生成看似合理但…...