首页
/ LightRAG 离线部署完全指南:分层依赖、Tiktoken 缓存与完整无网安装工作流

LightRAG 离线部署完全指南:分层依赖、Tiktoken 缓存与完整无网安装工作流

2026-09-05 12:19:29作者:胡易黎Nicole

LightRAG 依赖 pipmaster 动态安装可选组件,并会在首次使用时从网络下载 tiktoken BPE 编码模型,这些“运行时取网”行为在无网环境中必然失败。本篇基于官方文档 docs/OfflineDeployment.md,系统讲解如何用分层 extras 依赖组、lightrag-download-cache 命令行工具和 pip download 本地包目录,在完全断网的服务器上完成 LightRAG 的可复现安装,并覆盖 spaCy 智能标题模型的离线准备与常见故障排查。读完本文,你可以独立完成“在线环境备料 → 介质传输 → 离线安装 → 验证”的全链路部署。

前提说明:如果使用 Docker 部署 LightRAG,则无需参考本文——LightRAG 的 Docker 镜像已为离线运行做了预配置(详见 Docker 部署指南)。本文面向非 Docker 的 pip 部署场景。

1. 为什么离线部署需要特殊处理:动态安装机制

LightRAG 对可选功能采用动态包安装(基于 pipmaster):根据文件类型和配置,在运行时按需 pip install 对应依赖。在离线环境中,这些动态安装会失败。因此离线部署的核心思路是:提前把所有依赖装进本地包目录,并预先下载所有需要联网获取的缓存文件

从源码结构看,动态安装的入口分散在各后端实现中。例如 Neo4j 后端在 lightrag/kg/neo4j_impl.py 中执行 pm.install("neo4j"),LLM 绑定模块如 lightrag/llm/anthropic.py 也通过 import pipmaster as pm 触发按需安装。API 服务入口 lightrag/api/lightrag_server.py 同样引用了 pipmaster

1.1 哪些组件会被动态安装

类别 涉及包
存储后端 redisneo4jpymilvuspymongoasyncpgqdrant-client
LLM 提供商 openaianthropicollamazhipuaiaioboto3voyageaillama-indexlmdeploytransformerstorch
Tiktoken 模型 从 OpenAI CDN 下载的 BPE 编码模型

需要注意两个边界事实(与 pyproject.toml 中 extras 定义一致):

  • 文档解析依赖pypdfpython-docxpython-pptxopenpyxl)现已随 api extras 组预装,不再需要动态安装;
  • 依赖 transformerstorchcuda 的包不纳入离线依赖组。因此 Docling 等文档抽取工具,以及 Hugging Face、LMDeploy 等本地 LLM 模型不在离线安装支持范围之内。这类高算力服务不应直接集成进 LightRAG,Docling 将以独立服务的方式解耦部署。

2. 分层依赖组:按用途裁剪安装面

LightRAG 在 pyproject.toml 中定义了灵活的分层依赖组,对应仓库根目录下的 requirements-offline.txtrequirements-offline-storage.txtrequirements-offline-llm.txtrequirements-offline-smart-heading.txt

Group 说明 适用场景
api API 服务 + 文档解析 带 PDF、DOCX、PPTX、XLSX 支持的 FastAPI 服务
offline-storage 存储后端 Redis、Neo4j、MongoDB、PostgreSQL 等
offline-llm LLM 提供商 OpenAI、Anthropic、Ollama 等
offline 完整离线包 API + 存储 + LLM(全部功能)

pyproject.toml 可以看到,offline 组的实际定义是 lightrag-hku[api,offline-storage,offline-llm],即它是其余三组的超集组合。

说明:文档解析(PDF、DOCX、PPTX、XLSX)包含在 api extras 组中,此前的 offline-docs 组已并入 api 以获得更好的集成度。

2.1 安装示例(extras 方式)

# 安装 API 及文档解析能力
pip install lightrag-hku[api]

# 安装 API 和存储后端
pip install lightrag-hku[api,offline-storage]

# 安装全部离线依赖(离线部署推荐)
pip install lightrag-hku[offline]

2.2 使用单独的 requirements 文件

如果不用 extras,也可以直接用仓库随附的 requirements 文件,版本约束与 pyproject.toml 保持一致:

# 仅存储后端(faiss-cpu、redis、neo4j、pymilvus、pymongo、asyncpg、pgvector、qdrant-client、opensearch-py)
pip install -r requirements-offline-storage.txt

# 仅 LLM 提供商(openai、anthropic、ollama、zhipuai、aioboto3、voyageai、llama-index 等)
pip install -r requirements-offline-llm.txt

# 全部离线依赖(API + 存储 + LLM)
pip install -r requirements-offline.txt

3. 快速上手:两种离线部署路径

3.1 路径一:使用 pip 的离线 extras

# 在线环境:安装全部离线依赖
pip install lightrag-hku[offline]

# 下载 tiktoken 缓存
lightrag-download-cache

# 创建离线包
pip download lightrag-hku[offline] -d ./offline-packages
tar -czf lightrag-offline.tar.gz ./offline-packages ~/.tiktoken_cache

# 传输到离线服务器
scp lightrag-offline.tar.gz user@offline-server:/path/to/

# 离线环境:安装
tar -xzf lightrag-offline.tar.gz
pip install --no-index --find-links=./offline-packages lightrag-hku[offline]
export TIKTOKEN_CACHE_DIR=~/.tiktoken_cache

3.2 路径二:使用 Requirements 文件

# 在线环境:下载包
pip download -r requirements-offline.txt -d ./packages

# 传输到离线服务器
tar -czf packages.tar.gz ./packages
scp packages.tar.gz user@offline-server:/path/to/

# 离线环境:安装
tar -xzf packages.tar.gz
pip install --no-index --find-links=./packages -r requirements-offline.txt

4. Tiktoken 缓存管理:token 计数的离线命门

LightRAG 使用 lightrag/utils.py 中的 TiktokenTokenizer 作为默认分词器(默认模型为 gpt-4o-mini),而 tiktoken 会在首次使用时下载 BPE 编码模型。离线环境下必须提前下载这些模型。

4.1 使用内置 CLI 命令

lightrag-download-cachepyproject.toml 中注册的命令行入口,实现位于 lightrag/tools/download_cache.py。安装 LightRAG 后可直接使用:

# 下载到默认位置(输出中会打印确切路径)
lightrag-download-cache

# 下载到指定目录
lightrag-download-cache --cache-dir ./tiktoken_cache

# 只下载指定模型
lightrag-download-cache --models gpt-4o-mini gpt-4

该命令还支持 --tiktoken--spacy--spacy-dir--spacy-install 等参数:单独指定 --cache-dir--models 即会选中 tiktoken 下载;--spacy 分支独立于 tiktoken 运行,不会触碰 tiktoken 缓存(见 download_cache.py 的参数定义)。

4.2 默认下载的模型

  • gpt-4o-mini(LightRAG 默认)
  • gpt-4o
  • gpt-4
  • gpt-3.5-turbo
  • text-embedding-ada-002
  • text-embedding-3-small
  • text-embedding-3-large

另外,从 download_cache.py 的源码可以确认,默认列表还额外包含 cl100k_base 编码(LightRAG 的默认编码之一),共 8 项。工具对“模型名”与“编码名”做了区分:属于 cl100k_basep50k_baser50k_baseo200k_base 的走 tiktoken.get_encoding(),其余走 tiktoken.encoding_for_model()download_cache.pydownload_cache.py)。

4.3 在离线环境设置缓存位置

# 方式 1:环境变量(临时)
export TIKTOKEN_CACHE_DIR=/path/to/tiktoken_cache

# 方式 2:写入 ~/.bashrc 或 ~/.zshrc(持久化)
echo 'export TIKTOKEN_CACHE_DIR=~/.tiktoken_cache' >> ~/.bashrc
source ~/.bashrc

# 方式 3:复制到默认位置
cp -r /path/to/tiktoken_cache ~/.tiktoken_cache/

一个容易踩坑的细节:tiktoken 在导入时读取 TIKTOKEN_CACHE_DIR 环境变量。download_cache.py 因此特意在 import tiktoken 之前设置该变量,并在注释中明确说明这一点——如果你在离线脚本里自行操作 tiktoken,也要注意设置时序。

5. spaCy 模型:原生 docx smart_heading 的可选离线准备

原生 docx 解析器的可选 smart_heading 引擎参数使用 spaCy 做句子切分 / NER 启发式判断。该依赖是惰性加载的:只在文档以 smart_heading=true 解析时才加载;若未启用 smart_heading,完全不需要本节内容。缺失模型时会在解析点抛出硬错误(绝不静默降级)。若通过 DOCX_SMART_HEADING=true 全局开启,或配置了带 native(smart_heading=true)LIGHTRAG_PARSER 规则,检查会提前到服务启动阶段——服务器会在启动时校验模型并快速失败,同时给出安装指引。

Docker 部署不需要本节:主 LightRAG 镜像已打包 spaCy 运行时和两个固定版本模型(lite 镜像只含运行时,在其上启用 smart_heading 仍需自行安装模型)。以下步骤适用于非 Docker 的 pip 部署。

5.1 为什么模型版本被严格钉死

两个语言模型被固定到精确版本(zh_core_web_sm / en_core_web_sm 3.8.0),因为 smart_heading 承诺确定性的重解析结果——模型版本漂移会静默改变 NER 与句子切分判断。zh 模型的 tokenizer 后端 spacy-pkuseg(固定为 1.0.1)随模型 wheel 一并分发,原因相同。这些 pin 在 download_cache.pySPACY_MODEL_WHEELSrequirements-offline-smart-heading.txt 中保持同步;spaCy 运行时则由 api extras 中的 spacy>=3.8,<3.8.14 提供(见 pyproject.toml)。

5.2 在线环境准备

# spaCy 运行时(api extra 已包含)
pip install lightrag-hku[api]
# 或:pip install -r requirements-offline-smart-heading.txt(运行时 + 模型)

# 为离线传输准备:下载运行时 + 模型 wheels 到 ./packages
pip download -r requirements-offline-smart-heading.txt -d ./packages

# 或只下载固定版本的模型 wheels(默认到 ./spacy_models)
# --spacy 独立于 tiktoken 缓存下载,不会触碰 tiktoken
lightrag-download-cache --spacy-dir ./spacy_models

# 或直接在当前环境中安装
lightrag-download-cache --spacy-install

5.3 离线环境安装

# 从传输来的 wheel 目录按名称安装。注意:不要在这里使用
# `-r requirements-offline-smart-heading.txt`:其中的模型 pin 是
# GitHub 直链,即使加了 --no-index,pip 仍会走网络拉取直链依赖。
pip install --no-index --find-links=./packages spacy zh_core_web_sm en_core_web_sm
# 或者只安装 lightrag-download-cache --spacy 下载的模型 wheels:
pip install --no-index --find-links=./spacy_models zh_core_web_sm en_core_web_sm

这一点在 requirements-offline-smart-heading.txt 的文件头注释中也有明确警告,是离线安装中非常隐蔽的一个坑。

6. 完整离线部署工作流(四步法)

Step 1:在线环境准备

# 1. 安装带离线依赖的 LightRAG
pip install lightrag-hku[offline]

# 2. 下载 tiktoken 缓存
lightrag-download-cache --cache-dir ./offline_cache/tiktoken

# 3. 下载全部 Python 包
pip download lightrag-hku[offline] -d ./offline_cache/packages

# 4. 创建传输归档
tar -czf lightrag-offline-complete.tar.gz ./offline_cache

# 5. 校验内容
tar -tzf lightrag-offline-complete.tar.gz | head -20

Step 2:传输到离线环境

# 使用 scp
scp lightrag-offline-complete.tar.gz user@offline-server:/tmp/

# 或使用 U 盘/物理介质
# 将 lightrag-offline-complete.tar.gz 拷入 U 盘

Step 3:离线环境安装

# 1. 解压归档
cd /tmp
tar -xzf lightrag-offline-complete.tar.gz

# 2. 安装 Python 包
pip install --no-index \
    --find-links=/tmp/offline_cache/packages \
    lightrag-hku[offline]

# 3. 配置 tiktoken 缓存
mkdir -p ~/.tiktoken_cache
cp -r /tmp/offline_cache/tiktoken/* ~/.tiktoken_cache/
export TIKTOKEN_CACHE_DIR=~/.tiktoken_cache

# 4. 写入 shell profile 持久化
echo 'export TIKTOKEN_CACHE_DIR=~/.tiktoken_cache' >> ~/.bashrc

Step 4:验证安装

# 测试 Python 导入
python -c "from lightrag import LightRAG; print('✓ LightRAG imported')"

# 测试 tiktoken
python -c "from lightrag.utils import TiktokenTokenizer; t = TiktokenTokenizer(); print('✓ Tiktoken working')"

# 测试可选依赖(如已安装)
python -c "import redis; print('✓ Redis available')"

其中第二条验证命令正是直接实例化 TiktokenTokenizerlightrag/utils.py),它会触发 tiktoken 从 TIKTOKEN_CACHE_DIR 指向的缓存读取 gpt-4o-mini 的 BPE 模型——如果缓存文件缺失或环境变量未设置,这一步会立即暴露问题,是验证离线部署是否完备的最直接探针。

7. 故障排查

问题 1:Tiktoken 报网络错误

现象Unable to load tokenizer for model gpt-4o-mini

解决

# 确认 TIKTOKEN_CACHE_DIR 已设置
echo $TIKTOKEN_CACHE_DIR

# 验证缓存文件存在
ls -la ~/.tiktoken_cache/

# 若为空,需要先在在线环境下载缓存

问题 2:动态包安装失败

现象Error installing package xxx

解决:预装你实际需要的组件(见 pyproject.toml 中的分组定义):

# API 与文档解析
pip install lightrag-hku[api]

# 存储后端
pip install lightrag-hku[offline-storage]

# LLM 提供商
pip install lightrag-hku[offline-llm]

问题 3:运行时缺少依赖

现象ModuleNotFoundError: No module named 'xxx'

解决

# 查看已安装包
pip list | grep -i xxx

# 安装缺失组件
pip install lightrag-hku[offline]  # 安装全部离线依赖

问题 4:tiktoken 缓存权限不足

现象PermissionError: [Errno 13] Permission denied

解决

# 确保缓存目录权限正确
chmod 755 ~/.tiktoken_cache
chmod 644 ~/.tiktoken_cache/*

# 或改用用户可写目录
export TIKTOKEN_CACHE_DIR=~/my_tiktoken_cache
mkdir -p ~/my_tiktoken_cache

8. 最佳实践

  1. 先在线验证:去离线之前,务必先在联网环境完整测试一遍部署流程。

  2. 保持缓存更新:每当有新模型发布时,定期更新离线缓存。

  3. 记录你的部署:记下你实际用到了哪些可选依赖,便于后续维护。

  4. 版本固定:生产环境建议固定版本:

    pip freeze > requirements-production.txt
    
  5. 最小化安装:只装需要的部分,例如只需要 API + 文档解析时:

    pip install lightrag-hku[api]
    # 再按需手动添加特定 LLM:pip install openai
    

9. 延伸阅读

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
528
588
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
906
1.83 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
891
5.78 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.53 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.34 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
987
506
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384