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
相关推荐
熊猫钓鱼>_>8 小时前
MetaAI深度研究研究报告
ai·meta·大模型·llm·agent·web·metaai
zhanghaha13149 小时前
AI Agent_6 AI 底层架构
ai·agent
枫叶丹49 小时前
AI 进入日常工作后,任务应该怎样重新拆分
人工智能·chatgpt·开源·agent·codex
deepseek239 小时前
OpenAI Dots 常驻智能体拆解:聊天免费、主动研究只读、委派才计费,动作分级才是本体
人工智能·openai·agent
智能RPA9 小时前
金融行业智能体自动化平台对比评测报告(银行核心与监管报送场景)
人工智能·金融·自动化·agent·rpa
去伪存真10 小时前
从乱码到高精度检索:探矿业务中 TXT、Word、PDF 与网页的 RAG 清洗之道
前端·agent
张彦峰ZYF10 小时前
Agent规模化治理与持续运营:从“几十个智能体”迈向企业级控制平面
人工智能·agent·agent registry
沉默王二10 小时前
31岁罗福莉,晋升小米最高职级22级
人工智能·openai·agent
染指111011 小时前
127.Agent-LangChain核心组件-模型输出后json修复
人工智能·langchain·agent·agents
科技峰行者12 小时前
Bedrock AgentCore在亚马逊云科技中国区域正式可用,助力企业加速AI Agent规模化部署
人工智能·科技·agent·亚马逊·亚马逊云科技