
DeepSeek 不是 VLM 模型微信发来图片文字就超时或秒回看不到图片本文给出完整的三层架构方案让任何文本模型都能处理图文混合消息。文章目录问题场景我的日常工作模式为什么需要 Codex目标实际效果演示场景一图文场景二文档文架构概览第1层tools.media CLI 自动拦截codex-image-analyze.mjs第2层AGENTS.md 调度规则为什么必须写成规则而非建议第3层LLM 自身兜底文档处理为什么不用 Codex踩坑记录最终效果关键文件清单代码仓库问题场景用 DeepSeek V4 Flash 作为 openclaw 主模型用户通过微信发送一条消息包含图片 文字描述期望 AI 理解图片内容后结合文字给出回复。实际发生的是微信发图文 → DeepSeek → 30-900 秒超时 → Request timed out # 或者 微信发图文 → DeepSeek → 0.5 秒回复 你没附带图片我看不到根因很简单DeepSeek V4 Flash 在本文环境中作为纯文本主模型使用不具备视觉能力。openclaw 把整张图片base64塞进 prompt模型处理不过来。同样的问题也出现在文档附件.docx、.pdf——模型收到后秒回没有文件。我的日常工作模式在展开方案之前先介绍一下我的主力工具链——这套组合可以在一台 Windows 机器上运转工具角色说明Claude Code主力编程助手Windows 原生负责代码审查、重构、项目开发DeepSeek V4 Flashopenclaw 主模型通过 API 调用处理微信日常对话、翻译审校WSL Codex(OpenAI Codex CLI)图片分析 / 疑难咨询WSL2 Ubuntu 内运行Plus 会员调用 GPT-5.5openclawAI 网关部署在 Windows 宿主机对接微信渠道统一调度模型为什么需要 CodexCodex CLI 在 WSL 里运行Plus 会员可以调用 GPT-5.5——它有原生的视觉能力。当 DeepSeek无视觉收到微信图片时由 Codex 负责看图并返回文字描述DeepSeek 再基于描述回复用户。Claude Code ← 主力编码 DeepSeek ← 微信对话主引擎 Codex ← 图片分析 / 难题介入三者在 openclaw 的调度下协同用户只需在微信里发消息感受不到背后的模型切换。目标实现一个三层架构让用户感觉不到模型的能力边界图片文字 → 自动分析图片结合用户文字给出一次合并回复文档文字 → 自动提取文档内容结合用户文字给出一次合并回复尽量不回复看不到图片或没文件LLM 行为无法 100% 保证但规则可以显著降低概率实际效果演示场景一图文用户在微信发了一张截图附带文字 “这个报错是什么意思”用户发送: [一张 openclaw 报错截图] 这个报错是什么意思 openclaw 回复 (一次合并): 这张截图显示 openclaw 的 Agent 回复前失败原因是 session 文件被锁定超时。错误提示包含进程 ID 37392 和锁文件路径 建议用 openclaw logs --follow 查看详细日志。大概率是 之前的会话异常退出后锁文件未释放重启 Gateway 可以解决。 需要我帮你重启吗背后发生的事tools.media拦截图片 →codex-image-analyze.mjs→ WSL Codex 分析 → DeepSeek 收到图片描述 用户文字→ 合并回复。场景二文档文用户在微信发了一个 .docx 文件附带文字 “帮我审校这份技术方案”用户发送: [附件2_XXX技术研究-详细设计说明书.docx] 帮我审校这份技术方案 openclaw 回复 (一次合并): 这份文档是XXX技术研究的详细设计说明书。 我看了下内容结构完整包含系统架构、数据流设计、安全分级 算法等核心章节。有几个建议 1. 第3章的API接口定义缺少错误码说明 2. XXX标准建议引用国标GB/T 39786-2021 3. 性能指标部分缺压力测试数据 需要我展开修改某个章节吗背后发生的事LLM 收到文档附件标记 → 用exec调python-docx提取文本 → 结合用户文字审校 → 合并回复。架构概览如果图片未显示以下是等价的 Mermaid 结构图图片非图片微信 图文第1层: tools.media CLICodex 分析 → 文字描述第2层: AGENTS.md 规则检測附件 → 禁止秒回 → 调 Codex/exec第3层: LLM合并为一次回复 → 微信第1层tools.media CLI 自动拦截openclaw 2026.6.10 的tools.media配置支持 CLI 类型的图片处理{tools:{media:{image:{models:[{type:cli,command:node,args:[C:\\Users\\用户名\\.openclaw\\scripts\\codex-image-analyze.mjs,{{MediaPath}}],maxChars:500,// 描述上限复杂图可调至 1000-2000maxBytes:10485760,// 10MB 图片上限timeoutSeconds:120// Codex 分析超时}]}}}}这层在消息到达 LLM之前拦截图片调用本地脚本转成文字描述。codex-image-analyze.mjs脚本的核心逻辑是接收 Windows 路径 → 转 WSL 路径 → stdin 传给 Codex → 返回文字import{spawn}fromnode:child_process;constmediaPathprocess.argv[2];// C:\Users\...\xxx.jpg → /mnt/c/Users/.../xxx.jpgconstwslPathmediaPath.replace(/\\/g,/).replace(/^([A-Z]):/i,(_,d)/mnt/${d.toLowerCase()});constpromptAnalyze this image:${wslPath}. Reply in Chinese, concise, one paragraph.;constprocspawn(wsl.exe,[-e,bash,-c,cd /mnt/d/AI/openclaw ; timeout 90 codex exec],{timeout:120_000});letstdout;proc.stdout.on(data,d{stdoutd.toString();});proc.on(close,code{if(code!0)process.exit(code??1);// 提取 Codex 的最后一段回复constlinesstdout.split(\n);for(letilines.length-1;i0;i--){if(lines[i].trim()codex){console.log(lines.slice(i1).join(\n).trim());process.exit(0);}}console.log(stdout.trim());});proc.stdin.write(prompt);proc.stdin.end();关键细节用 stdin 传 prompt 而非命令行参数避免嵌套引号转义地狱。 替换为你的视觉模型本文使用 WSL Codex 是因为我本地刚好有 Codex CLI。你可以把analyzeImageViaWsl函数中的wsl.exe codex exec替换为任何视觉模型 API 调用OpenAI GPT-4o/GPT-5调用https://api.openai.com/v1/chat/completions传图片 base64Gemini调用 Gemini API 或使用 Gemini CLIQwen-VL通过 DashScope / 阿里云 API本地 Ollamaollama run llava 描述这张图片: path只需要改spawn的目标——输入 Windows 路径输出中文描述其余架构不变。第2层AGENTS.md 调度规则tools.media可能因为脚本失败、超时或配置未加载而没产出分析结果。第2层是 AGENTS.md 中的显式规则告诉 LLM 必须处理附件## Image Dispatch (Highest Priority) → The image IS attached. Do NOT reply no image attached → tools.media analyzes the image via Codex before you see the message → **Treat the Codex image analysis user text as ONE combined request.** Merge both into a single cohesive reply. → If no analysis result, call Codex via the bundled script: node C:\Users\用户名\.openclaw\scripts\codex-image-analyze.mjs \ image_path_from_media_marker Do NOT modify or concatenate the path. ## Document File Handling → The file IS attached. Do NOT reply no file attached → Read using available tools (python-docx, pdftotext, etc.) → Respond based on actual content为什么必须写成规则而非建议早期版本写的是route to WSL Codex这种模糊指令——LLM 会回复好的我来调 Codex然后继续干别的。三处关键措辞措辞效果Do NOT reply no image attached负向约束阻止最快路径Treat as ONE combined request正向指令强调整合Do NOT modify or concatenate the path防 LLM 拼接路径出错第3层LLM 自身兜底如果前两层都失败极端情况LLM 仍然可以自己判断看到[media attached: ...]标记 → 知道有附件 → 用exec工具调 Codex 脚本。三层下来用户永远不会看到看不到图片这种回复。文档处理为什么不用 Codex图片必须走 Codex 是因为主模型 DeepSeek 没有视觉能力——这是硬限制。文档.docx、.pdf不同——LLM 可以用exec工具直接调用python-docx或pdftotext提取文本不需要外部模型。依赖安装.docx需要pip install python-docxPDF 需要pdftotextpoppler-utils或PyPDF2。扫描版 PDF 需要额外 OCRTesseract本文方案不涵盖扫描件。# LLM 可以自己执行python-cfrom docx import Document; docDocument(file.docx); \ print(\n.join([p.text for p in doc.paragraphs]))所以文档只用了第2层AGENTS.md 规则和第3层LLM 兜底没有第1层自动拦截。踩坑记录#坑根因解决1tools.mediaCommand failedPowerShell 脚本嵌套引号转义错误改用 Node.js stdin 传参2LLM 回复没看到图片AGENTS.md 规则太模糊LLM 走最快路径加Do NOT reply负向约束3LLM 把图片分析和文字分开回复没强调整合加Treat as ONE combined request4LLM 调wsl.exe路径拼接错误LLM 不会正确构造 WSL 路径改用封装好的.mjs脚本5before_dispatchhook 从未触发openclaw #5513 已知 bug放弃 hook改用 AGENTS.md 规则驱动6图片超时 900 秒系统 prompt 太大(45KB)裁剪 AGENTS.md 到 3KBprompt 降 30%最终效果用户: [一张截图] 这个报错是什么意思 AI: 这张截图显示 openclaw 的 Agent 回复前失败原因是 session 文件被锁定超时。错误信息提示进程 ID 和锁文件路径建议用 openclaw logs --follow 查看详细日志。大概率是之前的会话异常 退出后锁文件未释放重启 Gateway 可以解决。一次回复图文整合用户无感。关键文件清单~/.openclaw/ ├── openclaw.json # tools.media CLI 配置 ├── scripts/codex-image-analyze.mjs # WSL Codex 图片分析脚本 └── workspace/AGENTS.md # Image Dispatch Document Rules环境openclaw 2026.6.10 DeepSeek V4 Flash WSL2 Codex Windows 11代码仓库codex-image-analyze.mjs完整源码https://gitcode.com/gcw_A202cbBm/codex-image-analyze如果您觉得有用欢迎点赞、转发、评论、关注。