DeepSeek Harness 配置 deepseek-v4-flash-vision-exp 视觉模型

DeepSeek Harness 配置 deepseek-v4-flash-vision-exp 视觉模型

项目 内容
文档日期 2026-08-21
文档版本 v1.0
模型 deepseek-v4-flash-vision-exp(DeepSeek-V4-Flash-Vision-Exp,多模态视觉模型,2026-08-21 上线)
环境 本机 DSH Web 实例(http://127.0.0.1:3080,pid 514)
相关路径 配置:~/.dsh/settings.yaml;适配器:~/.npm-cache-dsh/_npx/1e7f6d9597241db0/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/index.js(已备份 .bak-vision
模型规格 上下文 1M tokens;支持思考模式与非思考模式;价格与 V4 Flash 相同;图片按尺寸换算 token(官方文档价格页

1. 背景:为什么需要两层改动

DSH 的 dsh-llm-deepseek 适配器:

  1. 模型目录(catalog)默认只有 deepseek-v4-flash / deepseek-v4-pro------新模型不会出现在 Web 模型选择器中;
  2. 序列化层显式拒绝图片内容UNSUPPORTED_CONTENT)------即使模型 ID 透传成功,图片也无法发送。

因此"支持视觉模型" = ① 注册模型目录 + ② 启用适配器图片序列化。


2. 第一步:注册模型目录(settings.yaml)

~/.dsh/settings.yaml 增加 llm-deepseek 段:

yaml 复制代码
# dsh-llm-deepseek: 官方 DeepSeek 模型目录
# 注意:显式列出 models 会替换适配器默认目录,因此需同时包含 flash / pro / vision-exp
llm-deepseek:
  models:
    - id: deepseek-v4-flash
      name: DeepSeek-V4-Flash
    - id: deepseek-v4-pro
      name: DeepSeek-V4-Pro
    - id: deepseek-v4-flash-vision-exp
      name: DeepSeek-V4-Flash-Vision-Exp
      description: DeepSeek 多模态视觉模型(Exp),支持图像理解,上下文 1M
      contextWindow: 1000000
      maxTokens: 256000

机制说明

  • dsh-llm-deepseek 的 settings 段会按字段覆盖插件配置,且 settings.yaml 热加载watch: true)------模型选择器无需重启即可看到新模型;
  • 模型 ID 本身透传(未列入目录的 ID 也能用),目录仅影响选择器展示与上下文窗口/输出上限的解析;
  • 目录条目支持字段:id / name / description / contextWindow / maxTokens

3. 第二步:适配器启用图片序列化(代码补丁)

仅在升级包会被覆盖、需注意(见 §6)。补丁已应用并备份:index.js.bak-vision

修改 dsh-llm-deepseek/lib/index.js,共 5 处:

# 位置 改动
1 modelInfo inputModalities 按模型 ID 判断:含 vision["text","image"],否则 ["text"]
2 serializeMessages 改为 async;系统/助手消息仍拒绝图片;用户消息含图片块时序列化为 OpenAI 风格 content 数组
3 serializeUserParts(新增) 图片块 → { type: "image_url", image_url: { url: "data:<mime>;base64,..." } }(经 attachments.readImage 读取)
4 serializeRequest / request 异步化;request 中:模型非视觉但含图片 → 抛清晰错误 UNSUPPORTED_CONTENT;注入 resolveAttachments
5 插件 apply new DeepSeekAdapter({ ..., resolveAttachments: () => ctx.get("attachments") })

关键代码片段

js 复制代码
// 视觉能力判断
function isVisionCapableModel(model) {
  return model.includes("vision");
}

// 用户消息图片序列化(OpenAI 兼容格式)
async function serializeUserParts(blocks, attachments) {
  // ... text → { type: "text", text }
  // ... image → { type: "image_url", image_url: { url: `data:${mimeType};base64,${base64}` } }
}

// request() 中的能力校验
const hasImage = options.messages.some((m) => contentHasImage(m.content));
if (hasImage && !isVisionCapableModel(options.model)) {
  throw new LlmError(`DeepSeek model "${options.model}" does not support image input; use deepseek-v4-flash-vision-exp for vision`, "UNSUPPORTED_CONTENT");
}

依赖 :图片经 ctx.attachments(durable attachment service)读取,dsh-attachment-local 已在 dsh-base 挂载,无需额外配置。


4. 验证方法(全部通过 ✅)

4.1 视觉端到端(真实 API)

bash 复制代码
node ~/009_dsh/scripts/dsh-vision-test.mjs
  • 测试图:600×300(上蓝 #3B5998 / 下橙 #FF5722,白字 "DSH VISION"),PIL 生成
  • 结果:模型正确回答 "蓝色和橙色,写着 DSH VISION"(in=251 / out=318 tokens)

4.2 负向测试(非视觉模型 + 图片)

  • deepseek-v4-flash + 图片 → 清晰报错 UNSUPPORTED_CONTENT("does not support image input; use deepseek-v4-flash-vision-exp")

4.3 文本回归

  • 隔离 DSH_HOME headless 会话文本任务 → 正常

4.4 语法检查

  • node --check 通过

5. 重启 Web 实例(让运行中的 GUI 加载新适配器代码)

settings.yaml 已热加载(模型选择器可见 vision-exp),但运行中进程内存里仍是旧适配器代码,图片上传需重启生效。

bash 复制代码
# 1) 按端口找到并停止旧进程(注意:不要用 pkill -f "dsh web",会误杀自身 shell)
PID=$(ss -tlnp 2>/dev/null | grep ':3080' | grep -oP 'pid=\K[0-9]+' | head -1)
[ -n "$PID" ] && kill "$PID"

# 2) 等待端口释放
sleep 1

# 3) 重新启动(脚本会设置 npm_config_cache、加载 ark.env 密钥)
cd /home/frank && ./dsh-start.sh

要点

  • 会话已持久化(~/.dsh/sessions/),重启不丢对话;浏览器自动重连或手动刷新页面即可
  • 启动后访问 http://127.0.0.1:3080
  • 验证:会话中点击模型选择器应看到 DeepSeek-V4-Flash-Vision-Exp;附加图片提问即可测试视觉能力

6. 注意事项

  1. 升级覆盖 :适配器改动位于 npx 缓存包(~/.npm-cache-dsh/_npx/1e7f6d9597241db0/),未来 @deepseek-ai/dsh 升级会被覆盖。长期方案 :向 deepseek-ai/deepseek-harness 上游提交此改动(TypeScript 源码 src/llm/deepseek/,而非编译产物);
  2. 目录替换语义 :显式 models 列表整体替换默认目录,务必保留 flash/pro;
  3. 费用 :图片按尺寸换算 token 计费,价格与 V4 Flash 相同(官方说明);
  4. 备份 :适配器原文件备份为 index.js.bak-vision;恢复:cp index.js.bak-vision index.js

7. 相关文档

文档 位置
本记录 ~/009_dsh/doc/memory/20260821-dsh-deepseek-v4-flash-vision-exp-support.md
视觉测试脚本 ~/009_dsh/scripts/dsh-vision-test.mjs
相关推荐
程序猿DD1 小时前
OctaFuse Gateway 2.7.0:按星期计价、用户级模型折扣、百炼ASR模型支持优化
后端·agent
leeyi2 小时前
MultiAgent Host 源码 + ADK prebuilt 三种预制模式(第92篇-E78)
人工智能·aigc·agent
武子康2 小时前
多 Agent 不是多开几个终端:Pi 的 Sub-agent 取舍
人工智能·llm·agent
武子康2 小时前
Email Thread 不是 Agent Session:生产级异步通信网关的状态、幂等与审批合同
人工智能·llm·agent
ryan_9969 小时前
一次讲清大模型应用评测:从 Recall@k、LLM Judge 到 Agent 上线门禁
agent·trace·eval·召回率·大模型评测·evaluation
AI绘画哇哒哒12 小时前
【建议收藏!】35岁后端血泪忠告,这3类人别硬转Agent(过来人亲述)
java·人工智能·后端·ai·程序员·大模型·agent
NeilCarmack13 小时前
Deepseek-harness增加桌面版端序列:第 1 讲 · 命令解析:`pnpm dsh desktop` 的第一步
人工智能·agent·ai agent
ss27313 小时前
小鲸鱼长眼睛了!DeepSeek Harness v0.1.1-rc.1 正式上线,多模态视觉模型来了
deepseek·deepseekharness