WorkBuddy 直连 DeepSeek v4 Flash,一发截图就崩?我们在网关层一招根治

DeepSeek v4 Flash 便宜好用,已经成为企业级大模型的事实标准------谁没接上,谁就掉队。WorkBuddy 则在企业办公领域一骑绝尘,稳坐第一生产力品牌的位置。二者结合,本该如虎添翼。

但真把自建 DeepSeek v4 Flash 推理服务接进 WorkBuddy,你会发现一个令人抓狂的问题:对话框里一发截图,必报错。

折腾各种姿势,结果都是这样:

发截图是刚需行为------总不能每回都先存盘再贴路径。下面看四川汉扬智能自研的 Tokengine 平台,是如何优雅地解决这个问题的。

四川汉扬智能研发的 Tokengine 平台,是上市公司扬电科技在人工智能领域的重要战略布局,目前已开启公测。平台基于自有算力、自研推理框架搭建了 MaaS Token 工厂,并外接第三方供应商提供灵活的算力补充。


一、为什么截图不行?

众所周知,DeepSeek v4 Flash 是纯文本大模型,本身不识图。

DeepSeek 官方 App 专门出了"识图模式"------但这并不意味着大模型本身识图了。它的做法是:网关层面拦截用户发送的图片,转给其他识图服务解析,再把解析出的文本送回 DSv4 主模型处理。

同样的道理,WorkBuddy 内置的 DeepSeek v4 Flash 能识图,也不是模型自身的能力,而是前置网关做了同样的事。总之,DeepSeek v4 Flash 大模型本身从头到尾没收到过图片。

而当你直连自建推理服务、在 WorkBuddy 里直接发截图时,vLLM 推理服务收到的 content 数组里赫然躺着 image_url,于是必然抛出 400 错误:

csharp 复制代码
deepseek-ai/DeepSeek-V4-Flash is not a multimodal model

对应的请求长这样:

json 复制代码
POST /v1/chat/completions
{
  "model": "deepseek-v4-flash",
  "messages": [
    {
      "role": "user",
      "content": [
        { "type": "text", "text": "这是什么?" },
        { "type": "image_url",
          "image_url": {
            "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
          }
        }
      ]
    }
  ],
  "stream": true,
  "temperature": 0.7,
  "max_tokens": 1024
}

多模态请求里,content 是数组而非字符串;粘贴的截图就藏在 image_url 字段里。vLLM 一看就知道:这个模型不吃图,拒绝。


二、各路博主的尝试与弯路

网上有不少人尝试各种"魔法"来绕过这个问题,最主流的一条路是:

使用识图 Skill 外挂视觉大模型。 WorkBuddy 内部有一个名为 Vision 的 Skill,外接视觉大模型,设计初衷是解析图片、将结果文本发送给主模型:

vision:让没有原生 vision 能力的模型获得识图能力。当用户发送图片、分享图片路径,或要求分析/描述/识别图片内容时触发。

听起来能解决问题,但实际上这条路走不通

原因在于:Skill 是作为提示词上下文的一部分存在的,它并不具备在大模型处理请求之前拦截信息的能力 。WorkBuddy 对话框收到截图后,会连同图片一起发给大模型------用不用 Skill,DSv4 收到的请求里都带着 image_url 字段,该报 400 还是报 400。

不过,识图 Skill 虽然解决不了直接发截图的问题,却提供了一条关键思路:

在 WorkBuddy 对话框里,不要发截图,而是指定图片路径。


三、为什么给图片路径就行?

核心在于 WorkBuddy 是 Agent 架构,而非简单的 API 透传:

  1. 在 WorkBuddy 对话框指定图片地址(如 D:/xxx.png),并加载识图 Skill;
  2. DSv4 收到的是一段纯文本路径字符串 D:/xxx.png,能正常处理;
  3. DSv4 识别到这是图片任务,会通知 WorkBuddy 调用识图 Skill 解析图片,将解析出的文本注入上下文,再送回 DSv4 做进一步推理。

核心证据见下图红框------主模型收到的就是路径文本,而非图片 payload:

简单说:只要图片不以 image_url 形式出现在请求里,DSv4 就不会炸。

但问题是------用户不会每次都乖乖存盘贴路径。截图是刚需。


四、网关层旁路解析:优雅且透明

既然 Agent 端的方案不够优雅,那就到服务端做手脚。

汉扬智能的 MaaS 平台在推理服务前面部署了 Higress AI 网关,整体链路如下:

复制代码
WorkBuddy → Higress AI 网关 → LLM Router Service → vLLM 推理服务

我们基于 Higress AI 网关自研了 ai-image-reader WASM 插件。它会在 DSv4 收到请求之前 介入:对直接截图产生的 image_url 请求,先转发给视觉大模型解析,再将解析出的文本注入原始上下文,最后送到 DSv4 处理。

流程如下:

插件支持白名单配置:只对特定模型开启旁路解析逻辑,不影响其他多模态模型的正常调用。我们已经向 Higress 官方提交了 PR,申请将这个插件贡献到开源社区。

实际效果------截图直接发,不再报错:


五、复盘

本文的源头是一个真实的用户反馈:在 WorkBuddy 上直连自建 DeepSeek v4 Flash 推理服务时,无法发送截图。

DeepSeek v4 Flash 是纯文本模型,直连时任何携带 image_url 的请求都会被 vLLM 以 400 拒绝。WorkBuddy 内置版本之所以能识图,靠的是官方前置网关的拦截转译------而我们自建服务没有这一层。

最终落地了两套方案:

方案 体验
Agent 端配置视觉 Skill,改为指定图片路径 能用,但不够优雅,门槛高,用户不可能每次都存盘贴路径
服务端网关层做旁路解析(ai-image-reader 插件) 优雅、透明,用户无感知,直接截图即可

方案②的思路并不复杂:把官方内置大模型在网关层做的事,在自建链路上复刻一遍。 用户不需要改任何习惯,截图照发不误,视觉解析在网关侧自动完成。

这就是汉扬智能自研推理框架向官方能力对齐的一次实践------积极响应真实用户需求,让自建大模型服务也能拥有"开箱即用"的体验。

相关推荐
_山海8 小时前
Bun入门指南
前端·javascript·后端
vx_Biye_Design9 小时前
springboot游泳馆系统93765-计算机课程设计、毕业设计
java·javascript·spring boot·后端·python·spring·课程设计
名字还没想好☜9 小时前
Java NIO ByteBuffer 实战:flip/clear/compact 三个绕晕人的方法与 position/limit 心智模型
java·开发语言·后端·spring·nio
专业程序开发源10 小时前
springbootLivehouse票务系统-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·课程设计·pygame
PC2005_cloud10 小时前
Rust学习笔记:所有权、借用与生命周期——Rust的核心机制
前端·后端
蜗牛互联网10 小时前
语音AI开始边听边说,改变的不只是响应速度
java·人工智能·后端·语音识别
Mav10 小时前
[个人学习记录]从零构建高性能 LLM 推理网关:Go 语言 SSE 流式转发、级联取消与背压
后端
狼爷10 小时前
磁盘IO打满怎么办?我用5个真实案例,总结了这套可复用的排查方法论
后端·性能优化
小羊在睡觉11 小时前
HLS视频
linux·后端·golang
苍何11 小时前
小米版 Codex,干活有点猛啊
后端