前言¶
当模型需要读取一份本地 PDF 时,常见做法是先把文本整理进上下文,或依赖外部解析服务。下面介绍 sunshine-lang/dsh-pdf,这是一个 DeepSeek Harness(DSH)插件:在本地解析 PDF,提取文本、元数据与页码范围,解析过程无需 API key、无需网络。
这是什么¶
dsh-pdf 由 sunshine-lang 维护,许可证为 MIT。它为 DSH 提供一个 PDF 工具箱,基于 PDF.js / pdfjs-dist 做本地解析,把“读取 PDF 文本、查看标题和总页数、按页码范围取内容”变成模型可以调用的工具。
核心功能¶
- 提供
pdf_read工具,逐页提取文本并带页码标记。 - 支持页码范围选择,例如
"1-3,5"或"all"。 - 读取文档元数据(标题)与总页数。
- 内置文件字节上限、单次解析页数上限、单次调用字符上限。
- 通过 harness 文件系统接缝(
ctx.fs)读取 PDF,读取行为受当前dsh进程的权限与沙箱策略约束。 - 基于 PDF.js / pdfjs-dist 本地解析,解析过程无需 API key、无需网络。
安装与启用¶
package.json 要求 Node >=22.19。从 GitHub 安装时,使用:
dsh plugin --profile web add "github:sunshine-lang/dsh-pdf"
通过 registry 或 GitHub 安装时,依赖会自动处理。本地 link: 安装不会自动安装依赖,需要手动添加。
典型用法¶
启动 Web UI 后,可以向模型提问:
读取
paper.pdf的前 3 页并总结。
也可以询问某页内容:
contract.pdf第 7 页写了什么?
模型会调用 pdf_read。参数 path 必填;可选 pages,取值可以是 "1-3,5" 或 "all"。例如:
{
"path": "paper.pdf",
"pages": "1-3"
}
当输出达到上限时,会在页边界截断并给出提示;模型可以用页码范围继续读取。
内置限制¶
dsh-pdf 内置了三个与读取规模相关的配置项:
maxFileBytes默认20971520(20 MiB),是整个 PDF 的字节上限(含);超过直接报错。maxPages默认500,是单次调用最多解析的页数;超出则截断并提示。maxCharsPerCall默认12000,是单次调用返回的最大字符数;结果在页边界截断。
配置无效时,插件加载会直接失败,并给出可操作的错误信息。
适用场景与注意¶
- 适合在 DSH 中读取本地 PDF 文本、查看标题和总页数、按页码范围分块处理大文档。
- 因为通过
ctx.fs读取 PDF,插件读取文件时会受当前部署的权限与沙箱策略约束;安装前应检查源码和许可证。 - 本地
link:安装不会自动安装依赖;通过 registry 或 GitHub 安装会自动处理。 - 需要 Node
>=22.19。
链接¶
仓库:https://github.com/sunshine-lang/dsh-pdf