DeepSeek 不能看图怎么办?Claude Code 看图+读 PDF 完整方案(含一键部署)
tags: DeepSeek,AI,Claude Code,PDF,识图,视觉模型,千问 category: 人工智能 type: original
DeepSeek 不能看图怎么办?Claude Code 看图+读 PDF 完整方案(含一键部署)
一句话: DeepSeek 是纯文本模型,没有视觉能力。本文用"外挂"方案(千问VL看图 + pdfjs-dist读PDF)补齐短板,文末附一键部署提示词,复制给AI自动配好。
DeepSeek V4 Pro 很好用,但它有个硬伤——纯文本模型,不能看图,不能直接读 PDF。
我在 Claude Code 里跑 DeepSeek 做嵌入式开发,每天要看芯片数据手册(PDF)、原理图(图片),这两个能力缺一不可。折腾了一周终于搞定了,记录一下完整的方案。
整体思路
DeepSeek 没有眼睛,但我们可以给它装一双:
| 需求 | 方案 | 一句话 |
|---|---|---|
| 看图 | 图片 → base64 → 视觉模型 API → 文字描述 → 喂给 DeepSeek | 用别的模型当"眼睛" |
| 读 PDF(文字型) | pdfjs-dist 直接提取文本 → 喂给 DeepSeek | PDF 本质是文本,提取出来就行 |
| 读 PDF(扫描件/图多) | PDF → 渲染成 PNG → 走"看图"流程 | 把 PDF 当图片处理 |
一句话总结:DeepSeek 不认识的格式,在外面转成纯文本再给它。
一、看图方案
原理
图片文件 (PNG/JPG)
│
▼
转成 base64 字符串
│
▼
调阿里云千问 VL 模型 API (按量付费, 便宜)
│
▼
返回中文描述文字
│
▼
Claude Code 把描述和你的问题一起发给 DeepSeek
DeepSeek 只看到一段文字描述(比如"图片中是一个光模块的原理图,左侧是供电电路……"),但它完全够用了。
核心代码
// vision.js — 独立识图脚本
const fs = require("fs");
const https = require("https");
// 图片 → base64
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")}`;
}
// 调千问 VL API
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,
});
// 发 HTTPS 请求 (用原生模块, 零依赖)
const url = new URL("https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions");
const response = await fetch(url, {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.DASHSCOPE_API_KEY}`,
"Content-Type": "application/json",
},
body,
});
const data = await response.json();
return data.choices[0].message.content;
}
费用
千问 VL Plus 按量付费,一张图大概几分钱,日常开发完全够用。
怎么接入 Claude Code
两种方式:
方式一:MCP 工具(推荐)
配置 mcp-sight,直接在对话里调:
mcp__mcp-sight__see_image --image_path "原理图.png"
方式二:命令脚本
node vision.js "原理图.png" "这里面用的是什么芯片?"
两种方式最终效果一样——图片变成文字描述,DeepSeek 无缝接收。
二、读 PDF 方案
PDF 分两种,处理方式不一样:
类型 1:文字型 PDF(数据手册、标准文档)
芯片数据手册是文档直接导出的,文字信息都在,直接提取文本就行。
// read-pdf.js — 提取 PDF 文本
import { getDocument } from "pdfjs-dist/build/pdf.mjs";
async function readPDF(filePath, startPage, endPage) {
// pdfjs-dist 可以直接读二进制
const data = new Uint8Array(fs.readFileSync(filePath));
const doc = await getDocument({ data }).promise;
console.log(`PDF: ${doc.numPages} 页\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`);
}
}
使用:
# 读第 1 到第 10 页
node read-pdf.js "ADuCM431数据手册.pdf" 1 10
类型 2:扫描件 / 图片多的 PDF(原理图、PCB 图)
原理图导出的 PDF 里文字很少,大部分是图形。这时候要先"渲染成图片",再走看图流程。
// render_pdf.mjs — PDF 转图片
import { getDocument } from "pdfjs-dist/build/pdf.mjs";
import { createCanvas } from "canvas";
async function renderPDF(filePath, outDir) {
const doc = await getDocument({ url: filePath }).promise;
for (let i = 1; i <= doc.numPages; i++) {
const page = await doc.getPage(i);
const viewport = page.getViewport({ scale: 2.0 }); // 2倍缩放, 清晰
// 创建 Canvas 画布
const canvas = createCanvas(viewport.width, viewport.height);
const ctx = canvas.getContext("2d");
// 渲染 PDF 页到 Canvas
await page.render({ canvasContext: ctx, viewport }).promise;
// 输出 PNG
const buf = canvas.toBuffer("image/png");
fs.writeFileSync(`${outDir}/page_${String(i).padStart(3, "0")}.png`, buf);
}
}
渲染完后,每页变成一张 PNG,然后用"看图方案"让千问 VL 分析。
两种方式怎么选
| 场景 | 方法 | 例子 |
|---|---|---|
| 芯片数据手册 | 直接提取文本 | ADuCM431 英文手册 300 页,直接读 |
| 协议标准文档 | 直接提取文本 | OIF-CMIS 规范 PDF,文字+表格 |
| 原理图 | 渲染→图片→识图 | ELSFP 电路原理图 |
| PCB 布局图 | 渲染→图片→识图 | PCB 走线图 |
| 扫描版老文档 | 渲染→图片→识图 | 90 年代扫描的 datasheet |
三、依赖安装
所有工具只需要两个 npm 包:
npm install pdfjs-dist canvas
pdfjs-dist:Firefox 同款 PDF 引擎,提取文本 + 渲染页面canvas:Node.js 端的 Canvas 实现,PDF 渲染成图片用
识图部分用原生 fs + https 模块,零额外依赖。
四、为什么不用 Read 工具直接读图片
Claude Code 的 Read 工具支持读图片,但前提是底层模型有视觉能力。Claude 模型可以,DeepSeek 不行。
如果你用的是 DeepSeek,Read 图片的结果是一团乱码——因为它把图片当二进制文件读了,解析不出来任何有用信息。
所以必须用外部视觉模型做"翻译":图片 → 视觉模型 → 文字描述 → DeepSeek。
五、效果对比
以我的实际使用场景为例——嵌入式开发中读 ADuCM431 数据手册:
| 之前 | 现在 | |
|---|---|---|
| 查寄存器地址 | 打开 PDF 手动翻 | node read-pdf.js datasheet.pdf 120 140,DeepSeek 直接告诉我在哪 |
| 看原理图 | 截图,QQ 发给自己 | node vision.js schematic.png,AI 读完后直接帮分析电路 |
| 看 PCB 走线 | 放大 PDF 慢慢看 | PDF 渲染成 PNG → 识图 → DeepSeek 分析走线是否合理 |
| 芯片选型对比 | 打开 3 个 PDF 来回翻 | 3 个 PDF 分别提取文本,AI 做对比表格 |
省的时间不是一点半点。
六、收费汇总
| 服务 | 用途 | 费用 |
|---|---|---|
| DeepSeek V4 Pro | 主模型, 代码+分析 | 按 token,很便宜 |
| 千问 VL Plus | 图片识别 | 按张,几分钱 |
| pdfjs-dist | PDF 提取 | 免费 |
| canvas | PDF 渲染 | 免费 |
整体成本极低,一天的开发下来可能就几毛钱。
七、一键部署:复制给 AI 自动搞定
不想手动敲代码?复制下面这段话发给 Claude Code 或者任意 AI 编程助手,直接帮你配好:
帮我在当前项目里配置 DeepSeek 看图 + 读 PDF 能力:
- 装依赖:npm install pdfjs-dist canvas
- 创建 vision.js,调用阿里云千问 VL 模型识图(API Key 申请地址 https://bailian.console.aliyun.com/),图片转 base64 发 HTTPS 请求
- 创建 read-pdf.js 放到 ~/.claude/tools/,用 pdfjs-dist 提取 PDF 文本,支持指定页码范围
- 在 Claude Code 的 settings.json 里加权限:允许 Bash 调 vision.js 和 read-pdf.js,允许 WebFetch 和 WebSearch
我的 DashScope API Key 是 [把你的 Key 填在这里]
AI 会自动帮你创建好所有脚本、装好依赖、配好权限。你只需要去阿里云申请一个 DashScope API Key 填进去就行。
申请 Key 的步骤:
- 打开 https://bailian.console.aliyun.com/
- 开通"模型服务"— 选"通义千问 VL Plus"
- 在"API-KEY 管理"里创建一个 Key
- 把 Key 填到上面那句话里,发给 AI
总结
DeepSeek 虽然没有原生视觉能力,但通过"外挂"方式完全可以补齐:
- 看图:图片 → base64 → 千问 VL → 文字 → DeepSeek
- 读 PDF(文字):pdfjs-dist 提取文本 → 直接喂
- 读 PDF(图形):pdfjs-dist 渲染成 PNG → 走看图流程
思路很简单:把 DeepSeek 不认识的格式,在外面转成纯文本再给它。这套方案不限于嵌入式开发,任何用纯文本模型做复杂任务的场景都适用。
更多推荐
所有评论(0)