
1. OpenClaw 的 image 与 pdf 工具到底在解决什么问题OpenClaw 是一个本地优先的 Agent 运行时它把「读图」和「读 PDF」拆成了两个独立工具image和pdf。这两个工具的本质是把本地文件或远程 URL 交给一个视觉/文档模型去分析然后把结果以文本形式回灌给主对话模型。听起来简单但真正跑起来的时候卡点往往不在工具本身而在模型请求的出口——也就是 Base URL 和鉴权配置。我见过太多人在本地把 OpenClaw 装好、把image工具打开结果一调用就报401或者local proxy failed。原因通常只有一个工具内部调用的模型端点还是默认的官方地址而你的网络环境或账号体系根本走不通。这时候需要做的就是把 OpenClaw 里所有模型请求的 Base URL 统一改到一个可用的聚合入口比如 TaoToken。这篇文章聚焦两件事第一把image和pdf两个工具的执行链路拆开讲清楚让你知道每一步在干什么第二给出可复制的 Base URL 与鉴权配置片段并附上一次 image 识别和一次 pdf 抽取的端到端验证动作。目标很明确——让你确认链路是否真正生效而不是「看起来配好了」。适合谁看如果你正在本地跑 OpenClaw需要处理图片理解或 PDF 文档解析并且希望把模型调用统一到一个可控的 Base URL 上那这篇就是写给你的。下面从工具拆解开始逐步走到配置和验证。2. 拆解 image 工具从 Schema 到视觉模型调用2.1 image 工具的输入契约image工具的 Schema 定义在源码第 29155 行附近核心参数有六个prompt、image、images、model、maxBytesMb、maxImages。其中image用于单图images用于多图最多 20 张。这个上限不是随便定的它对应的是视觉模型单次请求能接受的图像数量上限。工具在createImageTool里做的第一件事是检查agentDir。如果agentDir为空并且配置里也没有显式的图像模型配置工具直接返回null也就是不可用。这一步很关键——很多人以为工具没生效是模型问题其实是agentDir没传。接下来是解析图像模型配置resolveImageModelConfigForTool。它会从cfg和agentDir里读出一个可用的视觉模型配置。如果读不到同样返回null。所以image工具能不能用取决于两件事agentDir有没有以及图像模型配置有没有。2.2 图片加载与沙盒限制收集图片候选之后工具会做去重、数量检查然后进入加载阶段。加载阶段有几个分支值得注意第一URL 格式检查。它用正则判断是不是 Windows 盘符路径、有没有 scheme、是不是file:、http(s):、data:。如果 scheme 存在但又不是这几种直接返回unsupported_image_reference。第二沙盒模式。如果sandboxConfig存在HTTP URL 会被直接拒绝抛Sandboxed image tool does not allow remote URLs.。这意味着在沙盒里你只能用本地路径或file://。第三路径解析。非沙盒模式下~开头的路径会被展开为用户目录沙盒模式下则走resolveSandboxedBridgeMediaPath并且有一个inboundFallbackDir为media/inbound。加载媒体时loadWebMedia会带上maxBytes和localRoots。如果媒体类型不是image直接抛Unsupported media type。最后所有图片被组装成{ buffer, mimeType }数组交给runImagePrompt。2.3 真正发出请求的地方runImagePrompt是image工具真正调用视觉模型的地方。它接收cfg、agentDir、imageModelConfig、modelOverride、prompt和图片数组。这里的imageModelConfig决定了请求发往哪个 Base URL、用哪个 API Key、走哪个模型 ID。也就是说如果你想把image工具的请求改到 TaoToken改的就是imageModelConfig里的 Base URL 和鉴权信息。这个配置通常来自 OpenClaw 的全局配置文件而不是工具代码本身。工具代码只负责「读配置」不负责「写配置」。理解这一点很重要image工具本身不关心你用的是哪家服务它只关心imageModelConfig里有没有一个可用的端点。所以配置的正确位置在 OpenClaw 的模型配置层而不是在工具调用参数里。3. 把 Base URL 改到 TaoToken 的完整配置片段3.1 配置文件的位置与结构OpenClaw 的模型配置通常放在用户目录下的配置文件中常见的是~/.openclaw/config.json或项目根目录的openclaw.config.json。具体路径取决于你的安装方式但结构是一致的一个models或providers节点下面挂多个模型配置。下面是一个可复制的 JSON 片段把图像模型和 PDF 模型都指向 TaoToken 的 API 入口。注意 Base URL 用的是https://taotoken.net/api不带任何多余路径。{ models: { imageModel: { provider: openai-compatible, baseUrl: https://taotoken.net/api, apiKey: sk-your-taotoken-key, model: gpt-4o, maxBytesMb: 20, maxImages: 20 }, pdfModel: { provider: openai-compatible, baseUrl: https://taotoken.net/api, apiKey: sk-your-taotoken-key, model: claude-3-5-sonnet, maxBytesMb: 30, maxPages: 50 } } }这里有三件套必须写全Base URL、API Key、Model ID。缺任何一个工具都会在解析配置阶段返回null表现为「工具不可用」。3.2 如果你用的是 TOML 配置有些 OpenClaw 版本或衍生项目用 TOML。对应的片段如下[models.imageModel] provider openai-compatible baseUrl https://taotoken.net/api apiKey sk-your-taotoken-key model gpt-4o maxBytesMb 20 maxImages 20 [models.pdfModel] provider openai-compatible baseUrl https://taotoken.net/api apiKey sk-your-taotoken-key model claude-3-5-sonnet maxBytesMb 30 maxPages 50TOML 和 JSON 只是格式差异字段含义完全一致。关键是baseUrl必须指向https://taotoken.net/api不要多加/v1或其他后缀除非你的客户端明确要求。3.3 环境变量方式如果你不想把 Key 写进配置文件可以用环境变量。OpenClaw 通常会读取OPENCLAW_IMAGE_BASE_URL、OPENCLAW_IMAGE_API_KEY这类变量。对应的设置方式export OPENCLAW_IMAGE_BASE_URLhttps://taotoken.net/api export OPENCLAW_IMAGE_API_KEYsk-your-taotoken-key export OPENCLAW_PDF_BASE_URLhttps://taotoken.net/api export OPENCLAW_PDF_API_KEYsk-your-taotoken-key环境变量的优先级通常高于配置文件但具体行为要看你的 OpenClaw 版本。建议先用配置文件跑通再考虑环境变量覆盖。3.4 关于 API Key 的获取API Key 需要在 TaoToken 的控制台里创建。访问https://taotoken.net/api-keys可以管理你的 Key。创建之后复制出来填到上面的apiKey字段里。注意 Key 只显示一次丢了就得重新建。如果你还没决定用哪个模型可以先到模型对话页面试一下https://taotoken.net/model-chat确认模型能正常响应再回来配 OpenClaw。这样能排除「Key 本身有问题」这个变量。4. 端到端验证一次 image 识别和一次 pdf 抽取4.1 验证 image 工具配置写好后先别急着跑复杂任务。准备一张本地图片比如~/test/cat.jpg然后在 OpenClaw 的对话里触发image工具。你可以直接说「分析这张图片/Users/you/test/cat.jpg」。工具内部会走一遍我们前面拆解的流程检查agentDir、解析图像模型配置、加载图片、调用runImagePrompt。如果配置正确你会看到类似这样的返回{ content: [ { type: text, text: 这张图片展示了一只橘色的猫坐在窗台上背景是模糊的绿色植物。 } ], details: { image: /Users/you/test/cat.jpg } }如果返回的是401或Unauthorized说明 API Key 不对。如果返回local proxy failed说明 Base URL 没生效请求还在往默认地址发。如果返回Unsupported media type说明文件不是图片或者 MIME 检测失败。4.2 验证 pdf 工具PDF 工具的验证类似。准备一个~/test/report.pdf然后说「总结这份 PDF 的前 3 页/Users/you/test/report.pdfpages 用 1-3」。pdf工具会先检查agentDir再解析 PDF 模型配置然后加载 PDF、解析页码范围、提取内容最后调用runPdfPrompt。成功时返回{ content: [ { type: text, text: 这份文档的前三页主要介绍了项目背景、目标用户和核心功能模块。 } ], details: { pdf: /Users/you/test/report.pdf, pages: 1-3 } }注意pages参数支持1-5、1,3,5-7、10-这几种格式。parsePageRange会把它们解析成页码数组并且受maxPages限制。如果你传了超出范围的页码会被截断到maxPages。4.3 确认链路真正生效怎么确认请求真的发到了 TaoToken而不是别的地方最直接的办法是看 TaoToken 控制台的请求日志。每次image或pdf工具调用都会产生一条记录包含模型、时间、token 消耗。如果你在控制台看到了对应的请求说明链路通了。另一个办法是故意把 API Key 改错看是否报401。如果改错了还正常返回说明请求根本没走你配的 Base URL而是走了缓存或默认端点。这个反向验证很有用。5. 本篇常见错误排查5.1 401 Unauthorized这是最常见的错误。原因通常是 API Key 没填、填错、或者填到了错误的字段。检查三件事Key 是否以sk-开头、是否复制完整、是否填在了apiKey而不是api_key或其他变体。如果你用的是环境变量确认变量名和 OpenClaw 读取的一致。5.2 local proxy failed这个错误说明请求发出去了但没到达目标端点。常见原因是 Base URL 写错比如多加了/v1、少了https://、或者写成了taotoken.net而不是taotoken.net/api。另一个可能是本地网络对https请求做了拦截。先确认 Base URL 是https://taotoken.net/api再用curl直接测一下curl -X POST https://taotoken.net/api/chat/completions \ -H Authorization: Bearer sk-your-taotoken-key \ -H Content-Type: application/json \ -d {model:gpt-4o,messages:[{role:user,content:hi}]}如果curl能通OpenClaw 不通那就是配置没被读到。5.3 reading choices 报错这个错误通常出现在解析模型响应时。原因是模型返回的结构和客户端预期的不一致。比如你配的模型 ID 不支持视觉输入但image工具仍然把图片发了过去模型返回了一个错误结构客户端在解析choices时就崩了。解决办法是确认model字段填的是支持视觉的模型比如gpt-4o或claude-3-5-sonnet。5.4 OAuth 相关错误如果你用的是 OAuth 方式鉴权而不是 API Key可能会遇到OAuth token expired或invalid_grant。OpenClaw 的image和pdf工具默认走 API Key 鉴权OAuth 需要额外配置。建议先用 API Key 跑通再考虑 OAuth。5.5 工具返回 null 或不可用如果image或pdf工具直接返回null说明createImageTool或createPdfTool在检查阶段就退出了。原因只有两个agentDir为空或者模型配置解析失败。检查agentDir是否传了以及models.imageModel/models.pdfModel是否存在且字段完整。6. 把配置固化下来让每次调用都走同一条链路配置跑通之后建议把 JSON 或 TOML 片段固化到版本控制里但不要把 API Key 提交上去。可以用.env文件加.gitignore的方式管理 Key配置文件里只留占位符。如果你需要长期跑编码或 Agent 任务可以考虑用 Coding Plan它更适合高频调用场景。如果只是偶尔验证模型能力模型对话页面就够用。接入文档里有更完整的参数说明遇到不确定的字段可以先查文档再改配置。最后提醒一点image和pdf工具的最大数量限制分别是 20 和 10maxBytesMb也有默认上限。如果你处理的文件经常超限调大这两个参数之前先确认你的模型端点支持多大的请求体。否则请求会在传输层就被拒绝报错信息可能和配置无关排查起来更绕。