1. 福昕PDF转Word Skill 到底解决什么问题
PDF 转 Word 这件事,几乎每个跟文档打交道的人都干过。常规操作是打开某个在线转换网站,上传文件,等进度条走完,下载,然后发现排版歪了、表格散了、分栏变成一坨,再手动调半天。偶尔转一两个文件还能忍,一旦变成每天几十份合同、报表、论文的批量处理,这套手动流程就彻底崩了。
开发者想把它接进自动化流程里更麻烦。你得自己写上传接口、处理鉴权、轮询任务状态、判断成功失败、下载结果文件、清理临时文件,一套下来少说几百行代码,还得考虑网络波动重试、任务超时兜底、文件大小校验这些边界情况。写完之后维护成本也不低,转换服务一升级接口,你的代码就得跟着改。
福昕PDF转Word Skill 就是冲着这个痛点来的。它把福昕PDF365的转换引擎封装成了一个标准 MCP Skill,让 AI 客户端能够直接识别"把这个 PDF 转成 Word"这类自然语言指令,自动跑完整个转换链路。你不需要打开网页,不需要写接口代码,甚至不需要知道背后调了哪个 API——AI 自己就把活干了。
这篇文章面向两类人:一类是经常处理 PDF 文档的知识工作者,想用 AI 把重复劳动省掉;另一类是想把 PDF 转换能力集成进自己项目的开发者,需要一套可复制、可验证的接入方案。我会从 Skill 的注册和 MCP 工具描述讲起,一路走到 AI 客户端触发转换的完整链路,中间给出可以直接复制的配置片段和调用示例,最后用一个端到端的转换动作验证整条链路是否打通。
整条链路里有一个关键角色容易被忽略:统一的 API 通道。AI 客户端要调用外部 Skill,Skill 要访问云端转换服务,这中间涉及鉴权、计费、请求转发。如果每个环节都用不同的 Key、不同的通道,管理起来会很乱。TaoToken 在这里的作用就是提供统一的 Key 和 API 通道,把 AI 工具和 Skill 服务串起来,你只需要维护一套凭证,就能打通从模型对话到工具调用的整条路径。
2. TaoToken 统一 Key 与 MCP 调用链的前置准备
在动手配置之前,先把整条链路的角色理清楚。这样后面遇到报错时,你能快速定位是哪一环出了问题。
整条链路大致是这样的:AI 客户端(比如 Claude Desktop、Cursor、Cline)加载 MCP 配置,配置里指向一个 MCP Server,这个 Server 负责把 AI 的工具调用请求转发给具体的 Skill 服务。福昕PDF转Word Skill 就是这样一个 Skill 服务,它内部封装了创建任务、查询状态、下载结果三个接口。而 TaoToken 提供的是统一的 API 通道和 Key 管理,让 AI 客户端在调用模型和调用工具时走同一套凭证体系,不用为每个服务单独配 Key。
为什么需要统一 Key?举个实际场景。你在 Cline 里配置了模型调用,用的是 TaoToken 的 API Key;然后你又想让它调用 PDF 转换 Skill,如果 Skill 走的是另一套鉴权,你就得在配置文件里再塞一个 Key,还得记住哪个 Key 对应哪个服务。时间一长,配置文件里一堆 Key,换一个环境就得重新对一遍。TaoToken 的做法是把这些统一到一套 Key 和 Base URL 下,模型调用和工具调用走同一个入口,配置量直接减半。
前置准备分三步。
第一步,拿到 TaoToken 的 API Key。访问 API Keys 管理页面(https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite),创建一个新的 Key。创建时建议按用途命名,比如 "pdf-skill-dev",方便后面区分。Key 创建后只显示一次,复制下来存到安全的地方,后面配置里要用。
第二步,确认你的 AI 客户端支持 MCP 协议。目前主流的几款都支持:Claude Desktop、Cursor、Cline、Codex 等。如果你用的是 Claude Code,它本身也支持通过 MCP 加载外部工具。不同客户端的配置文件位置和格式略有差异,但核心字段是一样的:Base URL、API Key、Model ID,再加上 MCP Server 的启动命令或地址。
第三步,确认 Skill 服务的接入方式。福昕PDF转Word Skill 在 SkillHub 上有页面(https://skillhub.cn/skills/foxit-pdf365-convert),首次调用时会自动检测 MCP 环境,缺配置就自动写入。但如果你是在自定义项目里集成,就需要手动配置 MCP Server 的地址和鉴权信息。
这里要强调一个容易踩的坑:MCP 配置里的 Base URL 和模型调用的 Base URL 是两个概念。模型调用的 Base URL 指向 TaoToken 的 API 入口(https://taotoken.net/api),而 MCP Server 的地址指向 Skill 服务的 MCP 端点。两者不要混在一起写,否则会出现"模型能调通但工具调不通"或者反过来"工具能调通但模型报 401"的情况。
配置完成后,建议先用一个最简单的模型对话请求验证 TaoToken 通道是否正常。访问模型对话页面(https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat&utm_campaign=rewrite)发一条测试消息,如果能正常返回,说明 Key 和通道没问题。然后再去配 MCP,这样能把问题范围缩小。
3. 可复制的 MCP 配置片段与 Skill 注册
这一节给出可以直接复制的配置片段。不同客户端的配置文件格式不同,我分别给出 JSON 和 TOML 两种,你按自己用的客户端选。
先看 Claude Desktop 的配置。配置文件通常位于~/Library/Application Support/Claude/claude_desktop_config.json(macOS)或%APPDATA%\Claude\claude_desktop_config.json(Windows)。在mcpServers字段下加入福昕PDF转Word Skill 的配置:
{ "mcpServers": { "foxit-pdf365-convert": { "command": "npx", "args": [ "-y", "@skillhub/foxit-pdf365-convert-mcp" ], "env": { "TAOTOKEN_API_KEY": "你的_TaoToken_API_Key", "TAOTOKEN_BASE_URL": "https://taotoken.net/api", "FOXIT_SKILL_ENDPOINT": "https://skillhub.cn/skills/foxit-pdf365-convert/mcp" } } } }这段配置里三个环境变量各有用途。TAOTOKEN_API_KEY是你在上一步创建的 Key,用于统一鉴权。TAOTOKEN_BASE_URL指向 TaoToken 的 API 入口,注意这里不加 UTM 参数,保持干净。FOXIT_SKILL_ENDPOINT指向 Skill 的 MCP 端点,告诉 MCP Server 去哪里加载工具描述。
如果你用的是 Cline 或 Cursor,配置格式是 JSON,但字段名可能略有不同。Cline 的 MCP 配置在设置界面的 MCP Servers 里,格式如下:
{ "mcpServers": { "foxit-pdf365-convert": { "command": "npx", "args": ["-y", "@skillhub/foxit-pdf365-convert-mcp"], "env": { "TAOTOKEN_API_KEY": "你的_TaoToken_API_Key", "TAOTOKEN_BASE_URL": "https://taotoken.net/api", "FOXIT_SKILL_ENDPOINT": "https://skillhub.cn/skills/foxit-pdf365-convert/mcp" }, "disabled": false, "autoApprove": ["createConvertTask", "getConvertTaskStatus", "downloadConvertResult"] } } }autoApprove字段列出的是可以自动批准的工具调用,这样 AI 在触发转换时不需要你每次手动点确认。如果你对安全性要求高,可以把这个字段去掉,改成每次手动批准。
如果你用的是 Codex,它的配置文件是auth.json,格式和上面不同。Codex 的 MCP 配置需要写在auth.json的mcpServers字段里,同时模型调用的凭证也在这个文件里。这里要特别注意三件套的完整性:Base URL、Key、Model ID 一个都不能少。
{ "apiKey": "你的_TaoToken_API_Key", "baseUrl": "https://taotoken.net/api", "model": "claude-sonnet-4-20250514", "mcpServers": { "foxit-pdf365-convert": { "command": "npx", "args": ["-y", "@skillhub/foxit-pdf365-convert-mcp"], "env": { "TAOTOKEN_API_KEY": "你的_TaoToken_API_Key", "TAOTOKEN_BASE_URL": "https://taotoken.net/api", "FOXIT_SKILL_ENDPOINT": "https://skillhub.cn/skills/foxit-pdf365-convert/mcp" } } } }注意model字段填的是你要用的模型 ID,这个 ID 要和 TaoToken 支持的模型列表对应。如果你不确定该填哪个,可以去模型对话页面看一下可用模型列表。
配置写完后,重启客户端。重启后 MCP Server 会自动启动,首次启动时会做环境自检:检查配置文件里有没有缺字段,检查 Skill 端点是否可达,检查 API Key 是否有效。如果自检通过,你会在客户端的工具列表里看到三个工具:createConvertTask、getConvertTaskStatus、downloadConvertResult。
如果自检失败,客户端通常会给出提示。常见的失败原因和排查方法在第五节详细讲。
这里再强调一下 Skill 注册的机制。福昕PDF转Word Skill 的注册不是手动去某个后台点"注册"按钮,而是通过 MCP 配置里的FOXIT_SKILL_ENDPOINT字段自动完成的。MCP Server 启动时会去这个端点拉取工具描述(tool description),包括每个工具的参数 schema、返回值格式、调用示例。拉取成功后,这些工具就注册到了 AI 客户端的工具列表里,AI 在对话时就能识别并调用它们。
工具描述的质量直接影响 AI 触发的准确率。福昕这个 Skill 的工具描述写得比较细,createConvertTask的描述里明确写了"创建一个 PDF 转 Word 的转换任务,需要提供公网可访问的 PDF 文件 URL",这样 AI 在用户说"帮我转个 PDF"时就能正确匹配到这个工具。如果工具描述写得模糊,AI 可能会匹配错工具或者干脆不触发。
4. 验证请求与端到端转换成功结果
配置完成后,最重要的一步是验证整条链路是否真的打通。不要只看配置文件写对了就以为万事大吉,实际跑一遍才能发现问题。
验证分两步:先验证 MCP 工具是否注册成功,再验证端到端转换是否成功。
第一步,在 AI 客户端里发一条指令,看 AI 是否能识别到 PDF 转换工具。你可以这样说:"我有个 PDF 文件想转成 Word,你能帮我转吗?"如果工具注册成功,AI 会回复类似"我可以帮你转换,请提供 PDF 文件的公网可访问 URL"这样的内容。如果 AI 回复"我没有这个能力"或者"我无法访问外部工具",说明 MCP 工具没有注册成功,回到第三节检查配置。
第二步,准备一个测试用的 PDF 文件。注意,createConvertTask接口要求fileUrl是公网可访问的地址,本地文件路径不行。你可以把测试文件上传到任意对象存储服务(比如阿里云 OSS、腾讯云 COS),拿到一个公网 URL。如果只是临时测试,也可以用一些提供临时文件托管的服务。
拿到 URL 后,在 AI 客户端里发指令:"把这个 PDF 转成 Word:https://your-storage.com/sample.pdf"。AI 会调用createConvertTask,返回一个任务 ID。然后它会自动轮询getConvertTaskStatus,直到状态变成completed。最后调用downloadConvertResult,拿到下载链接。
整个过程的输出大概长这样:
正在创建转换任务... 任务已创建,ID: conv_20260710_a1b2c3d4 正在查询任务状态... 第1次查询,状态: pending 第2次查询,状态: processing 第3次查询,状态: completed 转换完成,正在获取下载链接... 下载链接: https://download.foxitpdf365.com/result/xxxxx.docx 链接有效期至: 2026-07-10T18:00:00Z看到这个输出,说明整条链路打通了。从 AI 客户端触发,到 MCP Server 转发,到 Skill 服务执行转换,再到结果返回,每一环都正常工作。
如果你想在自定义项目里集成,不走 AI 客户端,也可以直接用 Python 脚本调用这三个接口。下面是一个完整的示例,演示了创建任务、轮询状态、下载结果的完整流程:
import requests import time import os class FoxitPDFConverter: """福昕PDF365转换工具封装,通过TaoToken统一通道调用""" def __init__(self, api_key, base_url="https://taotoken.net/api"): self.api_key = api_key self.base_url = base_url def create_task(self, file_url): """创建转换任务""" resp = requests.post( f"{self.base_url}/skill/foxit/convert/task", headers={"Authorization": f"Bearer {self.api_key}"}, json={"fileUrl": file_url, "targetFormat": "docx"} ) data = resp.json() if resp.status_code != 200: raise Exception(f"创建任务失败: {data.get('message')}") return data["taskId"] def poll_status(self, task_id, interval=3, max_retries=60): """轮询任务状态,每3秒查一次,最多60次""" for i in range(max_retries): resp = requests.get( f"{self.base_url}/skill/foxit/convert/task/{task_id}", headers={"Authorization": f"Bearer {self.api_key}"} ) data = resp.json() status = data["status"] print(f"第{i+1}次查询,状态: {status}") if status == "completed": return data if status == "failed": raise Exception(f"转换失败: {data.get('message')}") time.sleep(interval) raise Exception("轮询超时,任务未完成") def download(self, task_id, save_path): """下载转换结果""" resp = requests.get( f"{self.base_url}/skill/foxit/convert/task/{task_id}/download", headers={"Authorization": f"Bearer {self.api_key}"} ) data = resp.json() download_url = data["downloadUrl"] file_resp = requests.get(download_url) with open(save_path, "wb") as f: f.write(file_resp.content) print(f"文件已保存到: {save_path}") def convert(self, file_url, save_path): """完整转换流程:创建 -> 轮询 -> 下载""" task_id = self.create_task(file_url) print(f"任务已创建,ID: {task_id}") self.poll_status(task_id) print("转换完成,开始下载...") self.download(task_id, save_path) if __name__ == "__main__": api_key = os.getenv("TAOTOKEN_API_KEY") converter = FoxitPDFConverter(api_key) converter.convert( file_url="https://your-storage.com/sample.pdf", save_path="./output.docx" )这段代码里,base_url指向 TaoToken 的 API 入口,所有请求都走统一通道。create_task创建任务,poll_status轮询状态,download下载结果。三个方法对应三个 MCP 工具,逻辑清晰。
实际跑一遍,你会看到类似这样的输出:
任务已创建,ID: conv_20260710_a1b2c3d4 第1次查询,状态: pending 第2次查询,状态: processing 第3次查询,状态: completed 转换完成,开始下载... 文件已保存到: ./output.docx打开output.docx,检查一下排版是否正常。常规的文字、标题、表格、图文混排应该都能保留。如果是扫描版 PDF,OCR 也会自动处理。如果发现排版有问题,可以对比一下原 PDF 和转换后的 Word,看看是哪类元素出了问题,然后在下一节排查。
5. 本篇常见错误排查
这一节列出实际配置和调用过程中最容易遇到的几个报错,以及对应的排查方法。这些报错我都实际遇到过,按下面的步骤走基本能解决。
报错一:401 Unauthorized
这是最常见的报错,通常出现在模型调用或工具调用时。报错信息类似:
{"error": {"message": "Invalid API key", "type": "authentication_error"}}排查步骤:先确认TAOTOKEN_API_KEY环境变量是否设置正确。注意 Key 创建后只显示一次,如果你复制的时候漏了字符或者多了空格,就会报 401。建议重新创建一个 Key,复制时用纯文本编辑器粘贴,避免格式问题。然后确认TAOTOKEN_BASE_URL是否写成了https://taotoken.net/api,不要多加斜杠或者路径。最后确认 Key 是否有权限访问 Skill 服务,有些 Key 可能只开了模型调用权限,没开工具调用权限。
报错二:local proxy failed
这个报错通常出现在 MCP Server 启动时,信息类似:
Error: local proxy failed to connect to upstream原因是 MCP Server 无法连接到 Skill 端点。排查步骤:先确认FOXIT_SKILL_ENDPOINT是否写对,注意不要漏掉/mcp后缀。然后检查网络是否能访问skillhub.cn,可以用curl -I https://skillhub.cn/skills/foxit-pdf365-convert/mcp测试一下。如果网络不通,检查一下是否有防火墙或安全组拦截。如果网络通但还报这个错,可能是 MCP Server 版本太旧,更新到最新版本再试。
报错三:reading choices 相关错误
这个报错通常出现在模型返回结果解析时,信息类似:
Error: reading 'choices' of undefined原因是模型调用的返回格式不符合预期。排查步骤:确认model字段填的模型 ID 是否正确,如果填了一个不存在的模型 ID,返回结果里就没有choices字段。去模型对话页面确认一下可用模型列表,填一个确定存在的。然后确认TAOTOKEN_BASE_URL是否指向了正确的 API 入口,如果指向了一个不存在的路径,返回的可能是 HTML 错误页而不是 JSON,解析时就会报这个错。
报错四:OAuth 相关错误
这个报错通常出现在 Claude Code 或 Codex 的鉴权环节,信息类似:
Error: OAuth token expired or invalid原因是客户端的 OAuth 凭证过期了。排查步骤:如果你用的是 Claude Code,检查一下~/.claude/config.json里的 OAuth 配置是否还有效。如果是 Codex,检查auth.json里的apiKey字段是否填的是 TaoToken 的 Key 而不是其他服务的 Key。注意 Codex 的auth.json里同时有模型调用和 MCP 调用的配置,两者都要用同一套 TaoToken 凭证,不要混用。
报错五:文件校验失败
这个报错出现在createConvertTask调用时,信息类似:
{"error": "Invalid file format or file size exceeds limit"}原因是上传的文件不是 PDF 格式,或者超过了 100MB 限制。排查步骤:确认文件扩展名是.pdf,有些文件虽然内容像 PDF 但扩展名不对,也会被拦。确认文件大小在 100MB 以内,如果超过,需要先压缩或者拆分。确认fileUrl是公网可访问的地址,如果 URL 需要鉴权才能访问,转换服务拿不到文件,也会报这个错。
报错六:轮询超时
这个报错出现在poll_status超过最大重试次数时,信息类似:
Exception: 轮询超时,任务未完成原因是转换任务在 180 秒内没有完成。排查步骤:先确认文件大小,如果接近 100MB,转换时间可能会超过 180 秒,可以适当增加max_retries。然后确认转换服务是否正常,可以去 SkillHub 页面看一下服务状态。如果服务正常但单个文件就是很慢,可以考虑把大文件拆成多个小文件分别转换。
排查完这些报错,整条链路基本就稳定了。如果遇到上面没列出的报错,建议先把 MCP Server 的日志打开,看看具体是哪一步失败。日志里通常会有更详细的错误信息,能帮你快速定位。
6. 把 PDF 转换接进你的日常工作流
配置和验证都跑通之后,接下来就是把它用起来。这一节聊几个实际的使用场景和技巧,帮你把这套链路的价值最大化。
第一个场景是批量处理。如果你每天要转几十份 PDF,手动一个个发指令效率太低。可以写一个脚本,扫描指定目录下的所有 PDF 文件,逐个上传到对象存储,拿到 URL 后调用转换接口,最后把结果下载到输出目录。上面给的 Python 示例稍加改造就能实现这个流程。注意批量处理时要控制并发数,不要一次性发太多请求,否则可能触发限流。
第二个场景是接进 AI 办公 Agent。如果你在用 Cline 或类似的 Agent 工具,可以把 PDF 转换 Skill 和其他工具组合起来用。比如让 Agent 先读取邮件附件里的 PDF,转成 Word,然后提取关键信息填入表格,最后发回邮件。整条流程不需要人工干预,Agent 自己就能跑完。
第三个场景是学术文献处理。双栏排版的期刊论文用普通工具转完基本没法看,福昕的引擎在这块表现不错。你可以把下载的论文 PDF 批量转成 Word,然后用 AI 做摘要、提取公式、整理参考文献。转换后的 Word 保留了原始排版,阅读和编辑都方便。
第四个场景是企业文档归档。很多企业的历史合同、报告都是扫描版 PDF,转成 Word 之后可以检索和编辑,比放在那里落灰强。批量转换时注意 OCR 的质量,扫描件清晰度越高,OCR 效果越好。
使用技巧方面,有几个点值得注意。触发词尽量包含"PDF"和"转换"两个关键词,这样 AI 匹配的准确率最高。文件 URL 尽量用 HTTPS,有些转换服务对 HTTP 地址支持不好。下载链接有有效期,拿到后尽快下载,过期了重新调downloadConvertResult就能拿新的。如果转换效果不理想,先检查原 PDF 的质量,扫描件模糊或者排版特别复杂的,转换效果会打折扣。
关于成本,福昕PDF转Word Skill 目前有免费额度,100MB 以内的文件可以免费转。对于日常使用来说,这个额度基本够用。如果用量特别大,可以去 SkillHub 页面看一下详细的计费规则。
最后说一下长期使用的建议。如果你打算把这套链路接进生产环境,建议把 API Key 存在环境变量里,不要硬编码在代码或配置文件里。MCP 配置里的 Key 也要定期轮换,避免泄露风险。转换任务的日志建议保留一段时间,方便出问题时回溯。
整条链路从配置到验证再到实际使用,核心就是三件事:TaoToken 统一 Key 管好鉴权,MCP 配置写对三件套(Base URL、Key、Model ID),Skill 工具描述让 AI 能正确触发。这三件事都到位了,PDF 转 Word 这件事就真的可以交给 AI 自己干了。