给桌面应用加一个 AI 助手:用 Fuzio 嵌入 DeepSeek 聊天
#在诸多企业机构中桌面应用仍然承担着关键业务流程。这两年很多客户都在问同一件事“能不能在我们这套桌面系统里也加一个 AI 助手”技术上其实并不难。Web 框架通常能轻松构建聊天界面。但是真正落地时会撞上一个问题如果让用户跳出主窗口去外部浏览器对话- AI 助手的价值大打折扣。这是一份技术案例分享介绍了我们如何把一个基于 DeepSeek V4 的 Web 聊天界面嵌入到已有的 Java Swing 桌面应用里并通过 Fuzio 让它直接运行在桌面应用窗口内部。需求我们从一个已有的 Swing 应用开始。它有标准的内部业务系统结构左侧导航树、中央多 Tab 工作区、表单、表格。本次开发任务是在不重写应用的前提下加上 AI 助手。项目需满足两项约束条件助手必须嵌于应用窗口内。用户无需切换到浏览器标签页或外部窗口。从应用任意位置一键唤起。不能要求用户先点几下菜单。理论上我们可以借助 Web 框架开发聊天界面但启动独立浏览器的操作会完全违背 “集成式 AI” 的设计初衷。架构整体方案有三层一个 Web 应用承担聊天界面一个 Swing 层管理浮层中间靠 Web 视图组件把两者连起来。聊天应用聊天界面以常规 Web 应用的形式构建采用 JavaScript 前端框架 Vue 开发用户界面并通过DeepSeek V4实现 AI 聊天功能。DeepSeek 的 Chat Completions 接口完全兼容 OpenAI 协议对写过任何 ChatGPT 集成的人来说迁移成本基本为零后续想切到通义千问、智谱、Ollama 也只需要改一个 base URL。最关键的一点是聊天界面 Web 应用无需感知自身是否运行于桌面应用内——对它来说自己就是被加载在一个浏览器环境里。这种解耦让前端工程师可以使用标准 Web 开发工具独立完成聊天界面的开发与测试全程无需编写任何 Java 代码。Swing 应用为了不打扰已有的业务界面我们在既有 Swing 应用程序中 新增GlassPane组件来展示 AI 助手界面。一个覆盖在主窗口所有内容之上的透明面板。当用户点击 “Ask AI” 按钮时应用原有界面之上会弹出一个悬浮窗口该窗口内置浏览器组件专门用于加载聊天 Web 应用。GlassPane是一种可置于窗口最顶层的 Swing 组件既能拦截用户交互事件也能在已有界面内容之上进行绘图渲染。该悬浮窗口包含以下核心元素半透明背景用于淡化现有界面。居中浏览器视图用于显示聊天应用。点击卡片外的遮罩、或者按 Esc 键浮层淡出。用户点击按钮后悬浮窗口会以渐入动画形式弹出点击聊天窗口外的区域即可关闭该悬浮窗口。Web 视图层本方案通过 Fuzio 在 Swing 应用中提供嵌入式 Chromium 浏览器视图。具体涉及以下三个步骤为悬浮窗口创建一个浏览器实例。通过BrowserView包装一个 Chromium 视图将其作为子组件嵌入 GlassPane 容器中。当悬浮窗口弹出时加载对应的聊天 Web 应用。设置 JavaScript - Java 桥接器。Fuzio 内置了 JavaScript 与 Java 的直接通信桥允许 Web UI 直接调用 Java 方法。在本方案中前端通过该桥向 Java 索取每次请求所需的 API Key从而让密钥留在 Java 一侧。集成 DeepSeekDeepSeek 是国内开源大模型团队“深度求索”推出的对话模型系列。本文使用的DeepSeek V4是它面向常规对话场景的最新版本——响应快、价格低、对中文语境理解到位。DeepSeek 的 API 与 OpenAI 协议兼容官方文档直接推荐复用 OpenAI 官方 SDK只需把baseURL指向https://api.deepseek.com、换上 DeepSeek 的 Key 与模型 ID 即可。集成 DeepSeek 涉及 JavaScript - Java 桥接器的基本用法。本文仅展示与本场景相关的最小用法详细使用规则请参阅 Fuzio 文档 · JavaScript。第一步声明可访问的 Java 类。Fuzio 通过JsAccessible注解标识“对 JavaScript 可访问”的类与方法。桥对象不发起任何网络请求只暴露 Key 管理与配置读取的方法JsAccessiblepublicfinalclassAiBridge{/** 返回原始 key sk-xxx未配置时返回 null。 */publicStringgetApiKey(){/* 获取Api Key */}/** 端点与模型放在 Java 端切换 DeepSeek / 智谱 / 自建网关时前端零改动。 */publicStringchatCompletionsBaseUrl(){/* OpenAI 兼容端点的 base URL */}publicStringmodelName(){/* 模型 ID */}}第二步注入桥对象。使用InjectJsCallback将后端对象注入到浏览器中browser.set(InjectJsCallback.class,params-{JsObjectwindowparams.frame().executeJavaScript(window);window.putProperty(fuzioAi,bridge);returnInjectJsCallback.Response.proceed();});该回调会在每个 frame 的 JavaScript 执行之前触发它将后端对象添加到window对象中使其可以在 JavaScript 中通过window.fuzioAi访问。第三步前端发起请求。前端从桥取出 base URL、模型与 API Key构造 OpenAI 客户端再以流式方式发起对话。importOpenAIfromopenai;constbridgewindow.fuzioAi;constclientnewOpenAI({baseURL:bridge.chatCompletionsBaseUrl(),// https://api.deepseek.comapiKey:bridge.getApiKey(),dangerouslyAllowBrowser:true,});conststreamawaitclient.chat.completions.create({model:bridge.modelName(),messages,stream:true},{signal},// 传入 AbortSignal 即可“停止生成”);关于dangerouslyAllowBrowser。OpenAI SDK 默认禁止在浏览器中运行以防 key 被打包进公开的前端代码而泄露。这里的桌面应用是 Fuzio 自有的渲染进程、key 也始终留在 Java 进程风险可控所以显式开启该选项。流式渲染请求体中stream设为true后DeepSeek 按 Server-Sent Events 协议返回响应。DeepSeek 的每个数据块都符合 OpenAI 兼容协议响应结构为{ choices: [{ delta: { ... } }] }。本文实现只需要累积其中的delta.content但理解完整的字段结构有助于后续扩展功能显示推理过程、统计 token 消耗等字段出现位置用途delta.role仅首个数据块标识消息发送方为assistantdelta.content中间数据块本次增量文本当前实现使用delta.reasoning_content思考模式下thinking.typeenabled默认开启推理过程的增量文本finish_reason末尾数据块stop表示正常结束length表示触发了 token 上限usage末尾数据块本轮 token 消耗明细读取响应体forawait(constchunkofstream){constdeltachunk.choices?.[0]?.delta?.content;if(delta)appendToAssistantBubble(delta);}每拿到一段delta.content就立即追加到当前的 assistant 气泡并触发重渲染由此呈现打字机式的流式输出效果。生产环境注意事项在最简配置下这就是核心的请求/响应调用流程。而在生产环境中您仍然需要加入错误处理、身份验证、重试机制或速率限制等功能。后续可扩展方向本文展示的是企业桌面应用集成 AI 的起点一个能够实时对话的内嵌助手。在此基础上可以沿以下方向继续演进方向关键技术企业知识库 AI 搜索RAG检索增强生成 向量数据库业务数据 AI 问答桥对象暴露业务查询方法 Function Calling智能体AgentFunction Calling 工具编排每一条路径都可在当前架构上零侵入扩展。信创平台支持如果你的桌面应用要进政府、金融、能源、运营商这些行业“信创合规”是个绕不开的门槛——常见要求是必须支持银河麒麟 V10、飞腾 ARM64、龙芯 LoongArch64 等。Fuzio 在配置文件里只需要声明对应平台依赖dependencies{implementation(fuzio.win64)// Windows x64implementation(fuzio.mac)// macOS Intelimplementation(fuzio.macArm)// macOS Apple Siliconimplementation(fuzio.linux64)// Linux x64覆盖麒麟/openKylinimplementation(fuzio.linuxArm)// Linux ARM64飞腾implementation(fuzio.linux64Loong)// Linux LoongArch64龙芯implementation(fuzio.swing)}结论为桌面应用程序添加 AI 功能看似需要攻克诸多复杂难题 —— 既要开发聊天界面、完成 AI 功能集成又要将其嵌入既有软件中同时避免对用户操作造成干扰。但在本案例中我们采用的解决方案简洁高效且能快速落地实施。以下三项关键决策是本方案具备可行性的核心原因最小化改造既有 Swing 应用。我们仅为应用新增了一个 GlassPane 悬浮窗口与浏览器容器原有界面的大部分代码均未改动无需进行大规模架构调整与高风险的代码重构。用 Fuzio 嵌入 Web 视图。它为 Swing 提供了嵌入式 Chromium 视图并构建了在桌面窗口内运行聊天界面的基础模块。用 DeepSeek 替代海外模型。最新的 DeepSeek V4 系列原生支持 100 万 token 超长上下文在中文理解、长文档处理与复杂推理上均处于一线水准API 已于 2026 年 5 月 22 日永久降价至原价的四分之一。本方案的应用场景不仅限于 AI 助手功能。实际上任何基于网页的功能模块 —— 例如数据仪表盘、产品文档、统计报表、数据可视化图表等都可通过这种方式嵌入桌面应用程序中。

相关新闻

UE5 UI开发入门:Common UI与Activatable Widgets实战教程

UE5 UI开发入门:Common UI与Activatable Widgets实战教程

1. 项目概述:为什么你需要了解Common UI与Activatable Widgets?如果你刚开始接触UE5的UI开发,面对UMG(虚幻运动图形)编辑器里琳琅满目的控件和蓝图节点,可能会感到有些无从下手。特别是当你想要构建一个带有…

2026/8/7 12:50:02 阅读更多 →
FH8626V300 IPC SoC开发全流程:从环境搭建到图像调优实战

FH8626V300 IPC SoC开发全流程:从环境搭建到图像调优实战

1. 项目概述:从一颗芯片到一个完整的IPC方案 最近在折腾一个智能家居项目,需要用到网络摄像头(IPC),市面上成熟的方案很多,但成本也高。为了追求极致的性价比和更高的可控性,我决定从芯片级入手…

2026/8/7 12:49:01 阅读更多 →
mxGraph图形库入门:核心架构、交互实现与Vue集成实战

mxGraph图形库入门:核心架构、交互实现与Vue集成实战

1. 从零开始:为什么我们需要 mxGraph?如果你正在开发一个需要图形化交互的应用,比如流程图编辑器、网络拓扑图、UML建模工具,甚至是低代码平台中的页面设计器,那么你大概率会遇到一个核心问题:如何高效地绘…

2026/8/7 12:49:01 阅读更多 →

最新新闻

三菱DECO 译码指令

三菱DECO 译码指令

[ DECO DO MO K3] 信号接通后,D00→M0ON,M1-M7 OFFD01→M1ON,其他 OFFD02→M2ON,其他 OFFD03→M3ON,其他 OFFD04→M4ON其他 OFFD05→M5ON,其他OFFD06→M6ON,其他 OFFD07→M7ON,其他 OFF实践出真知,最好用一下,记得牢!!…

2026/8/7 23:07:35 阅读更多 →
Ubuntu 22.04 LTS 新系统环境配置

Ubuntu 22.04 LTS 新系统环境配置

目录 一、安装wps 二、截图工具flameshot 三、必备中文输入法fcitx-googlepinyin安装 四、python3环境 五、解决ssh环境恢复遇到问题 六、CP210X驱动频繁掉线 一、安装wps 搜索wps linux版本,下载到最新版本,进入到deb包下载目录,执行…

2026/8/7 23:07:35 阅读更多 →
Windows防撤回终极神器:让微信QQ撤回消息无所遁形

Windows防撤回终极神器:让微信QQ撤回消息无所遁形

Windows防撤回终极神器:让微信QQ撤回消息无所遁形 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode.com/Gi…

2026/8/7 23:07:35 阅读更多 →
C++中的RTTI和虚函数

C++中的RTTI和虚函数

RTTI: Runtime Type Identification,运行时类型信息程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。C通过以下的两个操作提供RTTI:1)typeid运算符,该运算符返回其表达式或类型名的实际类型。2)dynam…

2026/8/7 23:07:35 阅读更多 →
C++11介绍之移动构造函数、move函数和右值引用

C++11介绍之移动构造函数、move函数和右值引用

移动构造函数和右值引用是C11新增的特性,可以减少资源开销,提升效率。右值引用首先给一个右值引用声明的例子:​ std::string&& r5("Hello World!!"); 这里右值引用r5绑定了一个临时变量,临时变量的内容为"…

2026/8/7 23:07:35 阅读更多 →
2026年自己做一个小程序商城怎么做?工具选择、搭建步骤与运营

2026年自己做一个小程序商城怎么做?工具选择、搭建步骤与运营

一、引言:从“自己拖拽页面”到“自己持续经营”,自助搭建要看完整能力自己做一个小程序商城,并不意味着所有环节都要从零写代码。对多数中小商家来说,更现实的方式是使用标准化后台配置商品、订单、支付、会员和页面,…

2026/8/7 23:06:35 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →