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 能力:

  1. 装依赖:npm install pdfjs-dist canvas
  2. 创建 vision.js,调用阿里云千问 VL 模型识图(API Key 申请地址 https://bailian.console.aliyun.com/),图片转 base64 发 HTTPS 请求
  3. 创建 read-pdf.js 放到 ~/.claude/tools/,用 pdfjs-dist 提取 PDF 文本,支持指定页码范围
  4. 在 Claude Code 的 settings.json 里加权限:允许 Bash 调 vision.js 和 read-pdf.js,允许 WebFetch 和 WebSearch

我的 DashScope API Key 是 [把你的 Key 填在这里]

AI 会自动帮你创建好所有脚本、装好依赖、配好权限。你只需要去阿里云申请一个 DashScope API Key 填进去就行。

申请 Key 的步骤:

  1. 打开 https://bailian.console.aliyun.com/
  2. 开通"模型服务"— 选"通义千问 VL Plus"
  3. 在"API-KEY 管理"里创建一个 Key
  4. 把 Key 填到上面那句话里,发给 AI

总结

DeepSeek 虽然没有原生视觉能力,但通过"外挂"方式完全可以补齐:

  • 看图:图片 → base64 → 千问 VL → 文字 → DeepSeek
  • 读 PDF(文字):pdfjs-dist 提取文本 → 直接喂
  • 读 PDF(图形):pdfjs-dist 渲染成 PNG → 走看图流程

思路很简单:把 DeepSeek 不认识的格式,在外面转成纯文本再给它。这套方案不限于嵌入式开发,任何用纯文本模型做复杂任务的场景都适用。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐