DeepSeek 不能看图怎么办?Claude Code 配 TaoToken 读图+读 PDF 完整方案

发布时间:2026/9/28 18:40:04
DeepSeek 不能看图怎么办?Claude Code 配 TaoToken 读图+读 PDF 完整方案 1. DeepSeek 读图读 PDF 的真实困境DeepSeek 是纯文本模型这件事在写代码、做推理时几乎无感但一旦你把它接进 Claude Code 当主力模型问题立刻暴露你丢一张原理图截图进去它返回的是一堆二进制乱码你让它读一份 300 页的芯片数据手册 PDF它连文件都打不开。这不是 DeepSeek 弱而是它的能力边界就在文本上——它没有视觉编码器也没有 PDF 解析层。我平时用 Claude Code 做嵌入式开发每天要面对两类文件芯片数据手册PDF动辄几百页和原理图/PCB 截图PNG/JPG。DeepSeek 在这两个场景下完全帮不上忙但它的代码分析和逻辑推理又确实好用换掉可惜。所以真正要解决的不是换模型而是给 DeepSeek 补一条视觉输入链路把图片和 PDF 在外面转成纯文本再喂给它。这套方案的核心思路一句话DeepSeek 不认识的格式在外面转成文字再给它。图片走视觉模型转文字文字型 PDF 走文本提取扫描件 PDF 走渲染成图再转文字。整条链路通过 TaoToken 统一 Key 和 API 通道接入不用在多个平台之间来回切换配置。下面从接入准备开始一步步把这条链路搭起来。2. TaoToken 前置准备统一 Key 与 API 通道TaoToken 在这里的角色是统一入口你不需要为每个模型单独申请 Key、单独记 Base URL、单独配环境变量。一个 Key 走通所有模型调用Claude Code 的 settings.json 里只写一份配置就行。对这套DeepSeek 主模型 视觉模型辅助的方案来说统一通道能省掉大量切换成本。先拿到 Key。打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后在控制台创建 API Key。控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsole 。Key 创建后只显示一次复制保存好。API 端点统一用 https://taotoken.net/api 注意这个地址不加 UTM 参数直接作为 Base URL 填进配置。模型对话调试可以在 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodels 里先验证 Key 是否可用确认能正常返回再往下配。如果你后续要长期跑编码任务或 Agent 流程可以看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-plan 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdoc API Keys 管理页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keys 。Claude Code 相关的 Anthropic 兼容配置参考 https://taotoken.net/claudecode-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentClaudeCodeAnthropic 。注意Key 不要硬编码进脚本提交到 Git。统一放环境变量settings.json 里用$TAOTOKEN_API_KEY引用。3. Claude Code settings.json 可复制配置骨架Claude Code 的配置文件在~/.claude/settings.json。下面这份骨架把 TaoToken 通道、DeepSeek 主模型、视觉辅助脚本权限一次性配好你可以直接复制后改 Key。{ env: { TAOTOKEN_API_KEY: sk-你的Key填这里, TAOTOKEN_BASE_URL: https://taotoken.net/api, ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的Key填这里 }, permissions: { allow: [ Bash(node ~/.claude/tools/vision.js:*), Bash(node ~/.claude/tools/read-pdf.js:*), Bash(node ~/.claude/tools/render-pdf.mjs:*), WebFetch, WebSearch ] }, model: deepseek-chat }配置说明ANTHROPIC_BASE_URL指向 TaoToken 的 API 地址Claude Code 会把请求发到这里再路由到对应模型。permissions.allow里放行三个脚本分别对应识图、读文字型 PDF、渲染扫描件 PDF。脚本统一放~/.claude/tools/目录方便 Claude Code 用绝对路径调用。装依赖只需要两个 npm 包npm install pdfjs-dist canvaspdfjs-dist是 Firefox 同款 PDF 引擎负责提取文本和渲染页面canvas提供 Node.js 端的 Canvas 实现把 PDF 页渲染成 PNG 用。识图脚本用原生fs和fetch零额外依赖。4. 读图与读 PDF 的完整脚本与验证4.1 识图脚本 vision.js图片转文字的核心是读文件 → 转 base64 → 调视觉模型 → 拿回文字描述。视觉模型走 TaoToken 通道和主模型共用同一个 Key。// ~/.claude/tools/vision.js const fs require(fs); function imageToBase64(filePath) { const data fs.readFileSync(filePath); const ext filePath.split(.).pop().toLowerCase(); const mime { jpg: jpeg, png: png, webp: webp }[ext] || jpeg; return data:image/${mime};base64,${data.toString(base64)}; } async function seeImage(imagePath, prompt 请详细描述这张图片的内容包括所有文字、元件标号和连线关系。) { const imageUrl imageToBase64(imagePath); const body JSON.stringify({ model: qwen-vl-plus, messages: [{ role: user, content: [ { type: image_url, image_url: { url: imageUrl } }, { type: text, text: prompt } ] }], max_tokens: 1024 }); const res await fetch(${process.env.TAOTOKEN_BASE_URL}/v1/chat/completions, { method: POST, headers: { Authorization: Bearer ${process.env.TAOTOKEN_API_KEY}, Content-Type: application/json }, body }); const data await res.json(); return data.choices[0].message.content; } const [,, img, q] process.argv; seeImage(img, q).then(console.log).catch(e console.error(识图失败:, e.message));调用方式node ~/.claude/tools/vision.js 原理图.png 这里面用的是什么芯片供电部分怎么接的4.2 文字型 PDF 提取脚本 read-pdf.js芯片数据手册、协议标准这类文档文字信息都在直接提取文本即可不需要走视觉模型。// ~/.claude/tools/read-pdf.js const fs require(fs); const { getDocument } require(pdfjs-dist/legacy/build/pdf.js); async function readPDF(filePath, startPage 1, endPage 10) { const data new Uint8Array(fs.readFileSync(filePath)); const doc await getDocument({ data }).promise; console.log(PDF 共 ${doc.numPages} 页读取 ${startPage}-${endPage} 页\n); for (let i startPage; i endPage; i) { const page await doc.getPage(i); const content await page.getTextContent(); const text content.items.map(it it.str).join( ); console.log( 第 ${i} 页 \n${text}\n); } } const [,, file, s, e] process.argv; readPDF(file, Number(s) || 1, Number(e) || 10).catch(e console.error(读取失败:, e.message));调用方式node ~/.claude/tools/read-pdf.js ADuCM431数据手册.pdf 120 1404.3 扫描件 PDF 渲染脚本 render-pdf.mjs原理图导出的 PDF、扫描版老文档文字很少、图形为主先渲染成 PNG 再走识图流程。// ~/.claude/tools/render-pdf.mjs import fs from fs; import { getDocument } from pdfjs-dist/legacy/build/pdf.js; import { createCanvas } from canvas; async function renderPDF(filePath, outDir) { const doc await getDocument({ url: filePath }).promise; if (!fs.existsSync(outDir)) fs.mkdirSync(outDir, { recursive: true }); for (let i 1; i doc.numPages; i) { const page await doc.getPage(i); const viewport page.getViewport({ scale: 2.0 }); const canvas createCanvas(viewport.width, viewport.height); const ctx canvas.getContext(2d); await page.render({ canvasContext: ctx, viewport }).promise; const buf canvas.toBuffer(image/png); fs.writeFileSync(${outDir}/page_${String(i).padStart(3, 0)}.png, buf); console.log(已渲染第 ${i} 页); } } const [,, file, out] process.argv; renderPDF(file, out || ./pdf-pages).catch(e console.error(渲染失败:, e.message));调用方式node ~/.claude/tools/render-pdf.mjs 原理图.pdf ./pages node ~/.claude/tools/vision.js ./pages/page_001.png 分析这页原理图的电源部分4.4 验证请求与成功结果配好后先做一次最小验证。在 Claude Code 里直接说帮我读一下 ~/docs/datasheet.pdf 的第 50 到 55 页告诉我这个芯片的 I2C 寄存器地址。Claude Code 会调用read-pdf.js返回类似 第 50 页 Register 0x00: Device ID ... 0x01: Control ...然后它基于提取的文本给出寄存器地址分析。识图验证同理丢一张原理图截图让它调vision.js返回中文描述后再做电路分析。两条链路都通了说明配置成功。5. 本篇常见错排查报错Cannot find module pdfjs-dist依赖没装到脚本能找到的目录。在~/.claude/tools/下执行npm init -y npm install pdfjs-dist canvas确保 node_modules 和脚本同级。识图返回 401 或 403Key 没生效。检查TAOTOKEN_API_KEY是否在 settings.json 的 env 里正确填写以及脚本里是否用了process.env.TAOTOKEN_API_KEY。Key 前后不要有空格。PDF 提取出来是空白大概率是扫描件文字层不存在。改用render-pdf.mjs渲染成 PNG 再走识图。判断方法用read-pdf.js读几页如果输出全是空格或乱码就是扫描件。渲染报错canvas相关canvas包在部分系统需要编译工具链。Linux 下先装libcairo2-dev libpango1.0-dev libjpeg-dev libgif-devmacOS 用brew install pkg-config cairo pango。Claude Code 不调用脚本检查permissions.allow里的路径是否和实际脚本路径一致。路径写错会导致权限不匹配Claude Code 会拒绝执行。图片太大导致请求超时base64 后体积膨胀约 33%。超过 5MB 的图先压缩或者用render-pdf.mjs的 scale 参数控制渲染尺寸scale 设 1.5 通常够用。6. 长期编码与 Agent 场景的接入建议这套方案跑通后日常开发基本不用再手动开 PDF 翻页。查寄存器地址直接让 Claude Code 读指定页码范围看原理图截图直接丢给它分析PCB 走线图渲染后让它判断布局是否合理。DeepSeek 负责代码和逻辑视觉模型负责看TaoToken 负责把两边串起来。如果你要长期跑编码任务或搭 Agent 流程建议走 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-plan 统一通道下模型切换和额度管理都更省心。接入细节和参数说明看文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdoc Key 管理在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keys 。Claude Code 的 Anthropic 兼容配置参考 https://taotoken.net/claudecode-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentClaudeCodeAnthropic 。模型对话调试用 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodels 。一个实用技巧把vision.js和read-pdf.js的调用封装成 Claude Code 的自定义命令比如/see和/pdf这样在对话里直接敲命令就行不用每次写完整 node 路径。脚本里的 prompt 也可以按你的场景定制比如专门针对原理图优化成提取所有元件标号、封装类型和网络连接返回的结构化程度会更高。