news 2026/9/13 2:39:50

kotaemon 如何配置 PDF_JS 实现浏览器内 PDF 预览?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
kotaemon 如何配置 PDF_JS 实现浏览器内 PDF 预览?

kotaemon 如何配置 PDF_JS 实现浏览器内 PDF 预览?

【免费下载链接】kotaemonAn open-source RAG-based tool for chatting with your documents.项目地址: https://gitcode.com/GitHub_Trending/kot/kotaemon

kotaemon 的 RAG 问答自带引用标注,但要在浏览器里直接预览 PDF 原文并高亮引用位置,需要额外启用其内置的PDF_JS(PDF.js)查看器。README 将这一步标注为可选步骤:完成配置后,LLM 回答中的 citations(含相关度分数)会直接渲染在浏览器内的 PDF 查看器中。本文适用于非 Docker 的源码安装方式(Python >= 3.10),以及想了解一键安装脚本和 Docker 镜像中该功能如何被预置的读者。

机制:为什么是libs/ktem/ktem/assets/prebuilt目录

应用启动时从PDFJS_PREBUILT_DIR配置读取 PDF.js 前端资源目录。该配置定义在 assets/init.py:

PDFJS_VERSION_DIST: str = config("PDFJS_VERSION_DIST", "pdfjs-4.0.379-dist") PDFJS_PREBUILT_DIR: Path = config( "PDFJS_PREBUILT_DIR", Path(__file__).parent / "prebuilt" / PDFJS_VERSION_DIST )

默认值指向libs/ktem/ktem/assets/prebuilt/pdfjs-4.0.379-dist。pdf_viewer.js 中的查看器元素通过viewer-path="GR_FILE_ROOT_PATH/file=PDFJS_PREBUILT_DIR"从该目录加载资源,所以目录名和位置必须与配置一致,否则查看器无法工作。仓库中所有脚本和 Dockerfile 固定使用 PDF.js4.0.379版本。

准备条件

  1. 克隆仓库并进入项目根目录:

    git clone https://github.com/Cinnamon/kotaemon cd kotaemon
  2. 创建 Python 3.10 环境,二选一(见 README.md 的 Without Docker 一节):

    # 方式一:uv(推荐) uv sync --python 3.10 source .venv/bin/activate
    # 方式二:conda conda create -n kotaemon python=3.10 conda activate kotaemon pip install -e "libs/kotaemon[all]" pip install -e "libs/ktem"

主路径:手动下载并解压 PDF_JS_DIST

README 给出的原始要求是:下载 PDF_JS_DIST 并解压到libs/ktem/ktem/assets/prebuilt。对应命令如下(下载地址与仓库文档一致):

curl -L -o pdfjs-4.0.379-dist.zip \ https://github.com/mozilla/pdf.js/releases/download/v4.0.379/pdfjs-4.0.379-dist.zip mkdir -p libs/ktem/ktem/assets/prebuilt unzip -o pdfjs-4.0.379-dist.zip -d libs/ktem/ktem/assets/prebuilt

解压完成后,检查目录结构应出现libs/ktem/ktem/assets/prebuilt/pdfjs-4.0.379-dist/(zip 包根目录名即pdfjs-4.0.379-dist,与默认配置PDFJS_VERSION_DIST一致)。目录层级错了查看器就会失效,这一步是整个配置的关键。

可选方式:使用仓库自带脚本 download_pdfjs.sh

scripts/download_pdfjs.sh 封装了同样的下载与解压逻辑,版本同样固定为4.0.379。它接收一个参数:目标目录(脚本内变量名为pdfjs_version_dist),在项目根目录执行:

bash scripts/download_pdfjs.sh libs/ktem/ktem/assets/prebuilt/pdfjs-4.0.379-dist

使用该脚本前需注意脚本的实际行为:

  • 检查当前工作目录路径是否含空格,含空格会直接报错退出;
  • 若目标目录已存在,打印 "Skipping download" 并跳过(幂等,可重复执行);
  • 依赖curlunzip;下载完成后会删除中间产物downloaded.zip
  • 脚本只负责放置文件,不会启动应用,也不会改动其他目录。

可选:用环境变量指定其他目录

如果你把 PDF.js 资源放在默认位置之外,需要在启动时用PDFJS_PREBUILT_DIR环境变量指明目录。仓库的一键脚本 run_linux.sh、run_macos.sh 就是按这个方式启动的(Dockerfile 中同样用ENV PDFJS_PREBUILT_DIR覆盖了目录)。对应的手动启动命令:

PDFJS_PREBUILT_DIR=libs/ktem/ktem/assets/prebuilt/pdfjs-4.0.379-dist python app.py

按主路径解压到默认位置时,不设该变量也可直接启动。

启动与验证

  1. 在项目根目录启动 Web 服务:

    python app.py

    应用会自动在浏览器中打开,默认用户名和密码均为admin

  2. 验证功能是否生效:上传一个.pdf文档并在聊天中提问,回答中的 citations(含相关度分数)会在浏览器内 PDF 查看器中直接展示并高亮。这是 README Key Features 中 "Advanced citations with document preview" 描述的效果,也是本功能启用后的预期现象。

  3. 若查看器不显示 PDF,先核对两点:解压后的目录名是否为pdfjs-4.0.379-dist且位于libs/ktem/ktem/assets/prebuilt/下;如资源放在其他位置,是否设置了PDFJS_PREBUILT_DIR

一键安装脚本与 Docker 镜像中的处理

  • scripts/run_linux.shscripts/run_macos.sh(Windows 为scripts/run_windows.bat)这类一键脚本在流程中会自动把 PDF.js 下载到libs/ktem/ktem/assets/prebuilt/pdfjs-4.0.379-dist并在启动 UI 时设置PDFJS_PREBUILT_DIR。但注意副作用:这些脚本还会安装 Miniconda、创建 conda 环境、安装全部依赖并通过scripts/serve_local.py配置本地模型,属于完整安装流程,不建议仅为了启用 PDF 预览单独运行,也不要在已装好环境的情况下重复执行。
  • Docker 用户无需任何额外配置:Dockerfile 在构建镜像时执行RUN bash scripts/download_pdfjs.sh $PDFJS_PREBUILT_DIR,把 PDF.js 预置到镜像内的/app/libs/ktem/ktem/assets/prebuilt/pdfjs-dist。按 README 的docker run ... ghcr.io/cinnamon/kotaemon:main-lite方式运行后访问http://localhost:7860/,浏览器内 PDF 预览开箱可用。

限制说明

  • PDF.js 版本在各处脚本与配置中固定为4.0.379;README 的下载地址与默认配置目录名均基于该版本,更换版本时目录名需与PDFJS_VERSION_DIST/PDFJS_PREBUILT_DIR配置保持对应。
  • 该功能是 README 明确标注的 Optional 步骤,不配置不影响 kotaemon 的其他功能,只是无法在浏览器内直接预览 PDF 与引用高亮。
  • 若通过uvconda手动管理环境,只需执行"准备条件 + 主路径(或脚本方式)+ 启动验证"三步;.env、GraphRAG、本地模型等 README 中的其他配置项与本任务无关,可跳过。

【免费下载链接】kotaemonAn open-source RAG-based tool for chatting with your documents.项目地址: https://gitcode.com/GitHub_Trending/kot/kotaemon

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 2:37:24

3C工厂实战:C# 上位机基于 Modbus 实现 100 台传感器数据采集(生产级架构+零丢包+全场景踩坑)

3C电子组装产线里,传感器是工位的眼睛。光电、光纤、位移、温湿度、扭力、压力这类现场传感器,90%以上都原生支持 Modbus 协议。一个标准工位段少说几十台,整条线下来上百台是常态。 很多新手做上位机采集,上来就是写个 for 循环逐…

作者头像 李华
网站建设 2026/9/13 2:35:39

校园自习预约系统设计:从高并发到状态机的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 2:31:42

teamai-cli:用命令行统一团队AI工作流,搞定提示词、成本与审计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华