如何在离线环境使用llama_index并避免调用tiktoken API?
解决llama_index离线环境下的tiktoken网络请求问题
方法1:预下载编码文件并指定本地缓存路径
tiktoken默认会从远程拉取GPT-2等模型的编码文件(如vocab.bpe),并缓存到本地目录。你可以在联网环境提前下载好这些文件,再迁移到离线环境:
- 先在联网机器上运行以下代码,触发编码文件下载:
import tiktoken # 下载gpt2编码所需文件 tiktoken.get_encoding('gpt2') - 找到tiktoken的缓存目录:Windows为
%USERPROFILE%\.cache\tiktoken,Linux/macOS为~/.cache/tiktoken,将该目录下的所有文件复制到离线环境的对应路径。 - 如果不想使用默认路径,可在离线环境的代码中设置环境变量指定本地缓存目录:
import os # 替换为你存放编码文件的本地路径 os.environ["TIKTOKEN_CACHE_DIR"] = "/your/local/tiktoken_cache_path" # 再导入llama_index from llama_index import VectorStoreIndex, SimpleDirectoryReader
方法2:切换为无需联网的分词器
llama_index支持替换默认的tiktoken分词器,改用本地已安装的分词工具(如spaCy),前提是你已在离线环境提前安装好对应工具和模型:
- 先在联网环境下载spaCy的模型包(如
en_core_web_sm),再迁移到离线环境完成安装。 - 使用spaCy分词器初始化llama_index的服务上下文:
from llama_index import ServiceContext from llama_index.text_splitter import SpacyTextSplitter # 初始化本地spaCy分词器 text_splitter = SpacyTextSplitter() service_context = ServiceContext.from_defaults(text_splitter=text_splitter) # 后续构建索引等操作时传入service_context documents = SimpleDirectoryReader("data").load_data() index = VectorStoreIndex.from_documents(documents, service_context=service_context)
方法3:离线安装tiktoken并预加载编码
在联网机器上完成tiktoken的安装和编码文件预下载,再将整个环境迁移到离线环境:
- 联网机器上创建虚拟环境,安装tiktoken:
pip install tiktoken - 运行代码触发编码下载:
python -c "import tiktoken; tiktoken.get_encoding('gpt2')" - 将虚拟环境目录(包含tiktoken包和缓存的编码文件)复制到离线环境,激活该虚拟环境后即可正常使用llama_index。
内容的提问来源于stack exchange,提问作者Eisen
相关产品推荐
相关产品推荐

