您可以让 AI 代理查看文档页面,而不是读取其文本转储。GroupDocs.Viewer.Mcp 服务器将 PDF、Word、Excel 或 PowerPoint 文件的任意页面渲染为 PNG 并返回给代理,并且它在您的机器本地完成此操作:

报告.pdf 有多少页?然后显示最后一页。

文档中提供了带有配置和故障排除的逐步版本: 如何让 AI 代理查看文档页面.

为什么在真实文档上文本提取会失败?

文本提取器按阅读顺序返回字符。它不会返回两段之间的条形图、角落里的 “APPROVED” 印章、价格表的列布局,或者完全没有字符的扫描页。基于这些输出工作的代理会自信地回答它只看到一半的文档,而缺失的那一半通常正是您所询问的部分。

解决方案并不是更好的提示,而是不同的输入:将页面作为图像提供给接受图像输入的模型。

错误做法:通过文本提取器处理所有内容

常见的默认做法是将文档转换为文本,将文本粘贴到上下文窗口并提问。它适用于散文。但在四个方面会出现问题,您可以在任何拥有的文档上验证:

  • 布局消失,因此无法回答 “总计在右侧列吗?”。
  • 图表和示意图中的数字消失,因为它们是绘制的,而不是键入的。
  • 印章、签名和手写内容消失。
  • 扫描的 PDF 没有文本。

模型无法修复在文档被读取之前就已丢失的信息。

正确做法:将 PDF 页面渲染为图像供 LLM 使用

render_page 将单页渲染为 PNG,内联返回图像给代理,并将副本保存到您的输出文件夹,文件名为 <name>_page<N>.png。服务器支持 170 多种格式,包括 PDF、DOCX、XLSX、PPTX、ODT、RTF、HTML、EML 和 MSG。具备视觉能力的模型随后会像您一样看到该页面。

代理不应猜测页码,因此它将 render_page 与 get_view_info 配合使用,后者返回文件类型、页数以及每页的尺寸,而无需渲染任何内容。第三个工具 get_license_status 则报告当前的授权模式。

如何为 Claude、Cursor 或 Copilot 运行服务器?

Docker 镜像是自包含的:

docker run --rm -i -v $(pwd)/documents:/data \
  ghcr.io/groupdocs-viewer/viewer-net-mcp:latest

在安装了 .NET 10 SDK 后,dnx GroupDocs.Viewer.Mcp --yes 可在不使用 Docker 的情况下运行相同的服务器。将其注册到 Claude Desktop、Claude Code、Cursor、带有 GitHub Copilot 的 VS Code、Windsurf 等客户端;中心页面列出了每个客户端的精确配置。客户端将服务器作为子进程启动,并通过标准输入输出与其通信,因此不存在入站端口,也无需保护端点。

示例会话

这是一幅基于两种工具文档行为构建的示例,而非实际截图。

You:   How many pages does report.pdf have? Then show me the last one.

Agent: [calls get_view_info on report.pdf]
       report.pdf is a PDF with 2 pages, both 612 x 792 points (US Letter).
       [calls render_page with page = 2]
       Page 2 of 'report.pdf' Saved to: <output folder>/report_page2.png
       Here is what page 2 shows: ...

图像会在支持显示的客户端中内联出现。文本回复是代理对页面所见的描述。

代理决定什么,引擎完成什么?

代理决定哪一页能够回答问题以及向模型询问什么。引擎负责必须精确的部分:打开文件、按照文档的分页方式进行分页并生成 PNG。模型无需猜测页面布局,因为它直接接收渲染后的页面。

真实限制

  • 评估模式。 未授权时,渲染的页面会带有评估水印,且服务器进程最多只能打开 15 个文档。水印可能遮盖您询问的细节。请让代理询问 “viewer 服务器是否已授权?” 以便在依赖其读取结果之前调用 get_license_status。
  • 仅 PNG。 输出为 PNG 图像;没有其他格式选项。
  • 无页码检查。 render_page 不会拒绝超出最后一页的页码。请先使用 get_view_info 检查页数。
  • 模型必须接受图像。 对于仅文本模型,代理仍会获得保存的文件路径,但无法告诉您页面内容。
  • 图像体积大。 每页都是内联 PNG,通常几百千字节。仅渲染任务所需的页面,而不是整个文件。
  • 有一项会离开机器。 渲染的图像会发送给代理,再由代理传递给其使用的模型。使用本地托管的模型则全部保留在机器上。

常见问答

Claude 能看到我的 PDF 页面及其布局吗? 可以,只要将 PDF 页面渲染为图像且所使用的 Claude 模型接受图像输入。render_page 在本地生成该图像并返回给客户端。

我需要将文档上传到任何地方才能渲染吗? 服务器从您挂载的文件夹读取文件并在旁边写入图像;文档不会被服务器上传。页面图像会发送到您的代理模型。

它是否支持 Excel 和 PowerPoint,而不仅仅是 PDF? 支持。PowerPoint 为每张幻灯片渲染一张图像,Excel 工作表会被拆分为页面,可通过 get_view_info 查看页数。

深入了解