
我跟朋友说:在 Claude Code 中用 DeepSeek-V4-Flash,你就别想实现直接粘贴图片识图功能了。
这是死路。不可能,绝对不可能。Claude Code 压根不会把图落盘,也不存路径,你连图在哪儿都不知道。

我说这话时,正在给 ModLens 做粘贴支持。这个工具是做来给 DeepSeek-V4-Flash 这类纯文本模型外挂看图能力的,逻辑上很简单:拿到粘贴图片在电脑上的路径,交给看图引擎,换回文字描述。它只认路径。而在 Claude Code 中粘贴图片,恰恰是拿不到图片路径的。
这篇文章就讲讲我是怎么打自己脸的。
正路、死路、歪路
先说对照组。Codex 处理粘贴堪称楷模:图一贴进来,先存成临时文件,再往消息里塞一个文本标签,<image path="/tmp/xxx.png">。就算模型声明了纯文本,Codex 把图片剥掉,也会把路径留下。图躺在磁盘上,门牌号写在消息里,外挂工具顺着门牌号就能摸过去。
Claude Code 是另一个极端。粘贴的图不存到磁盘上,直接从内存发走。没有存盘,没有标签,图从头到尾不落地。走网关接 DeepSeek-V4-Flash 的人贴一张图,要么把请求直接搞挂,要么被网关剥得只剩一个「不支持的图片」占位符。
官方不留正道,我试过自己凿一条。唯一能打主意的机制是 hooks:Claude Code 允许你配置一段脚本,在特定时机自动运行,比如你按下回车发消息的那一刻。思路听起来顺:赶在发送的瞬间去读系统剪贴板,刚贴的图八成还躺在里面。
调研下来,这条歪路两头都是坑。一头是剪贴板不可靠:有些来源放进去的图,标注的格式(MIME 类型)和实际内容对不上,读出来不保证还原成你贴的那张。另一头更别扭:这方案得先往用户的 Claude Code 配置里装 hook。一个外挂看图的小工具,落地第一步是改你主力工具的配置文件,这份重量和冒犯,跟它要解决的问题完全不成比例。毙掉。
眼前是死路,正路是别人家的,歪路探了也不通。开头那个结论,就是在这时下的。证据看起来没什么破绽。
满世界找一张图
结论是下了,我还是不死心。图片的数据总得在某个瞬间存在于某个地方,哪怕只存在一毫秒。
于是做了个笨实验:贴一张图,然后满盘找它。临时目录翻了,编辑器缓存翻了,系统 tmp 翻了,连回收站都翻了。四路搜下来一无所获。一个正常人做到这一步应该会放弃了。但我不是正常人,我是那种会把「此路不通」写进文档然后继续走这条路的人。
但还有最后一个地方没翻:会话记录。
Claude Code 为了让你能恢复历史对话,会把每条消息原样存进你电脑上的会话记录,一个会话一个文件。打开一看,图片就躺在里面,以文本编码(base64)的形式,完完整整。
就像洗出去送人的照片被人收走了,底片还压在你自己的抽屉里。想要,随时再洗一张。
关键在时序。这一笔写在消息发出之前:网关剥网关的,本地记本地的。同一条消息落了两次笔,一次被剥了图,一次原样留底。把编码数据抠出来还原成图片文件,跟原图逐字节一致。
死路不过是未被叩响的暗门。

找回来不难,找对才难
于是 ModLens 多了一个命令:
modlens recover-paste
从会话记录里把最近粘贴的图找回来,存成真实文件。工具看到占位符自动跑这一步,贴图从死路变成十几秒的绕行。

找回来只是第一步,真正难的是保证找回来的正是你刚贴的那张。
运行命令的子进程拿不到自己属于哪个会话,这是 Claude Code 的著名欠账,好几个 issue 排队讨要。我第一版的做法是按文件修改时间猜最新会话,自己测了十几遍,每次都准,觉得这方案稳了,写好文档,发了出去。
当天就有读者问了一句:「并发开两个会话,你怎么保证找的是我这个?」
我看着这句话看了三十秒。
答不上来。
猜最新的,两个会话同时在跑,猜到哪个算哪个?把旧会话的图拿过来冒充新粘贴,那比找不到还糟。回去重查,挖到一条新料:Claude Code 从 v2.1.9 起会把工具配置文本里的 ${CLAUDE_SESSION_ID} 占位符替换成真实 ID。于是定位变成三级:能拿到精确的会话 ID 就用 ID,拿不到就扫全部会话、挑真正持有最新粘贴图的那份,再不行手动指定文件。
当初把我问住的那个并发场景,现在是测试用例。
暗门遍地都是
思路一旦成立,就值得举一反三。
Pi 的会话记录和 Claude Code 同一种存法,照搬即通。OpenCode 把记录放进了一个小数据库文件(SQLite),思路不变,换个读法。于是 recover-paste 三家通吃。
三家通吃带来一个新问题:你怎么知道自己此刻在哪家?找错了家,捞上来的就是别家工具的旧图。所以动手前它先核对运行环境的多重指纹,认清自己此刻正被哪个工具调用,只读那一家的存储。至于 Codex,它的粘贴本来就有路径,用不上这个命令,检测到会直接拒绝执行,免得误用。
最后说句老实话。会话记录格式是这些工具的内部实现,没有兼容承诺,哪天人家改了存法,这个命令就得跟着改。所以保底方案永远摆在那儿:把图片文件拖进终端,路径以纯文本进消息,哪个工具都通。这套外挂看图能力的完整用法,写在《免费给你的 DeepSeek-V4-Flash 加上图片识别能力》里。
被推翻的结论
回头看,这件事最有意思的地方不在代码。
「粘贴进 Claude Code 的图,外面的工具拿不到」,下这个结论的时候,证据确凿:不存盘,不留标签,官方没留正道,连 hooks 加剪贴板的歪路都探过了,走不通。它只漏算了一件事:工具为了自己的会话恢复,早就把一切原样存好了。
界面剥掉的东西,硬盘还替你留着。所谓死路,往往只是你还没学会抬头看窗,低头看河。