tiktoken 0.9.0 离线模式失效问题及解决方案

手把手教你解决Lightrag离线部署中的TIKTOKEN_CACHE_DIR错误(附o200k_base.tiktoken文件下载方法) 本文详细解析了Lightrag在离线部署时因缺少o200k_base.tiktoken文件而引发的TIKTOKEN_CACHE_DIR错误。文章从问题根源入手,提供了分步诊断方法、核心解决方案(包括文件下载与重命名),并指导如何正确配置环境变量以彻底解决此问题,确保Lightrag在无网络环境下顺利启动。 阅读详情

一、问题背景

最近在内网环境部署 OpenManus 项目时,遇到了一个令人头疼的问题:即使已经正确配置了 tiktoken 的离线缓存,程序仍然会尝试从网络下载编码文件,导致连接超时异常。

二、错误现象

运行以下测试代码:

python

import tiktoken
enc = tiktoken.get_encoding("cl100k_base")
print(enc.encode("Hello"))

抛出如下异常:

text

requests.exceptions.ConnectionError: HTTPSConnectionPool(host='openaipublic.blob.core.windows.net', port=443): 
Max retries exceeded with url: /encodings/cl100k_base.tiktoken 
(Caused by NameResolutionError("Failed to resolve 'openaipublic.blob.core.windows.net'"))

即使在环境变量中设置了离线模式和缓存路径:

bash

set TIKTOKEN_OFFLINE=1
set TIKTOKEN_CACHE_DIR=C:\Users\admin\.cache\tiktoken

问题依然存在。

三、环境信息

项目信息
tiktoken 版本0.9.0
Python 版本3.12.13
操作系统Windows 10 / Ubuntu 22.04
安装方式pip install tiktoken

四、问题分析

4.1 根本原因

通过分析调用栈发现,tiktoken 0.9.0 版本在加载编码文件时,即使本地缓存文件存在且环境变量已设置,仍然会优先尝试从网络下载。

调用链路如下:

text

tiktoken.get_encoding()
  └── load_tiktoken_bpe()
      └── read_file_cached()
          └── read_file()  ← 这里直接发起网络请求

4.2 版本对比

版本离线缓存行为状态
0.5.0✅ 正常使用本地缓存可用
0.6.0-0.8.x⚠️ 部分版本有问题不稳定
0.9.0❌ 忽略本地缓存,强制联网存在 Bug
0.10.0+❓ 尚未测试未知

4.3 问题定位

在 tiktoken/load.py 中,read_file 函数直接使用 requests.get() 获取文件,没有优先检查本地缓存:

python

def read_file(blobpath: str) -> bytes:
    # 问题代码:直接发起网络请求
    resp = requests.get(blobpath)
    resp.raise_for_status()
    return resp.content

而 read_file_cached 函数虽然会检查缓存,但在某些条件下仍然会调用 read_file。

五、解决方案

方案一:降级到稳定版本(推荐)

最可靠的解决方法是降级到 0.5.0 版本:

bash

# 卸载当前版本
pip uninstall tiktoken -y

# 安装稳定版本
pip install tiktoken==0.5.0

# 使用 conda 安装(预编译,更稳定)
conda install -c conda-forge tiktoken=0.5.0 -y

方案二:使用 conda 安装最新版

conda 源中的版本通常是预编译的,可能已经修复了部分问题:

bash

conda install -c conda-forge tiktoken -y

方案三:设置离线环境变量(部分有效)

虽然不能完全解决问题,但设置以下环境变量可以减少网络请求:

bash

set TIKTOKEN_OFFLINE=1
set TIKTOKEN_CACHE_DIR=C:\Users\用户名\.cache\tiktoken
set TRANSFORMERS_OFFLINE=1
set HF_HUB_OFFLINE=1

方案四:手动放置缓存文件

确保编码文件存放在正确位置:

bash

# Windows 默认路径
C:\Users\用户名\.cache\tiktoken\

# Linux/Mac 默认路径
~/.cache/tiktoken/

需要下载的文件:

  • cl100k_base.tiktoken (GPT-4 编码器)

  • p50k_base.tiktoken

  • r50k_base.tiktoken

  • o200k_base.tiktoken

方案五:创建假的 tiktoken 模块(终极方案)

如果只是想绕过 tiktoken 运行其他项目,可以创建假的模块:

python

# fake_tiktoken.py
import sys

class Encoding:
    def __init__(self, name):
        self.name = name
    
    def encode(self, text, **kwargs):
        return [ord(c) for c in text]
    
    def decode(self, tokens):
        return ''.join(chr(t) for t in tokens if t < 0x110000)

def get_encoding(name):
    print(f"[离线模式] 使用假编码器: {name}")
    return Encoding(name)

sys.modules['tiktoken'] = sys.modules.get('__main__')

六、验证修复

运行以下命令验证问题是否解决:

bash

python -c "import tiktoken; enc = tiktoken.get_encoding('cl100k_base'); print(enc.encode('Hello'))"

预期输出(正常):

text

[9906, 37556]

七、经验总结

  1. 版本选择很重要:对于离线环境,尽量选择经过验证的稳定版本,不要盲目追求最新版

  2. 优先使用 conda:conda 提供的预编译包通常比 pip 源码编译更可靠

  3. 环境变量要提前设置:必须在导入 tiktoken 之前设置 TIKTOKEN_OFFLINE 环境变量

  4. 文件位置要正确:确保缓存文件在正确的用户目录下

3天干完6个月的活,Claude把模型搬上AMD 一条挺刺激的消息:Anthropic 给投资人的材料里有一张幻灯片,写着它的 Claude Mythos Preview 只花了大约​,就摸清了怎么让另一个 Claude 模型在 AMD 的 MI355X 上跑起来。同一处还写了个对照数字:过去给一块新芯片做推理适配,通常要几十名工程师、​。3 天对 6 个月,这个比值太扎眼,当天中文互联网上就冒出一堆「英伟达的护城河塌了」的说法。我把能翻到的材料都翻了一遍,越看越觉得,塌掉的那一小块是真的,可塌的位置和很多人想的不一样。 阅读详情

相关推荐

如何处理动态语言(Python / JS)的“隐形”调用链?

本文揭示动态语言(Python/JS)中静态AST解析导致调用链“断链”的核心问题,提出通过运行时追踪补全图谱的解决方案。基于Code-Graph-RAG的cgr trace机制,分别利用pytest插件与V8 Profiler捕获真实调用路径,将动态边合并至静态图谱,并在权重体系中提升动态边优先级。实践表明,该方法可显著提升图谱覆盖率,实现“结构+行为”双视角理解代码,为MCP与Rerank系统提供可靠支持。

xianyinsuifeng的博客 421

解决OpenInterpreter安装痛点:tiktoken模块构建失败的终极方案

你是否在安装OpenInterpreter时遇到过tiktoken模块构建失败的问题?本文将深入分析这一常见错误的技术根源,并提供系统化的解决方案,帮助你顺利部署这个强大的AI代码解释器。读完本文后,你将掌握:tiktoken模块的作用与依赖关系、5种主流操作系统的修复方案、预编译二进制包的使用技巧,以及如何通过源码编译彻底解决问题。 ## 问题背景与影响范围 tiktoken是OpenAI开...

gitblog_01133的博客 819

经典蓝牙中的Sniff、Hold与Park模式

若主设备在Sniff Attempt窗口外发送数据,从设备无法接收,需依赖重传机制。移动时立即传输数据。:Sniff Interval=20ms,Attempt=1时隙。:传感器每2秒唤醒一次同步信标,主设备按需唤醒特定传感器采集数据。Slave进入Sniff模式:每20ms唤醒1个时隙监听数据。:设备需要短暂执行高优先级任务(如扫描其他蓝牙设备)。:无数据传输超时后,设备可能自动进入Sniff模式。:主设备通过信标唤醒从设备,或从设备主动请求退出(:平衡功耗与响应速度,适合间歇性数据传输设备。

shishuangquan111的博客 1676

Maxkb离线环境添加vllm向量模型时报Max retries exceeded with url: /encodings/cl100k_base.tiktoken解决方案

原因是因为在langchain中需要用到openai的/encodings/cl100k_base.tiktoken来对输入进行encoding,当缓存中没有时会去访问openaipublic.blob.core.windows.net进行下载,所以在没有网络的情况下会发生报错。在使用maxkb时需要将其部署到没有外网的机器上,然后在添加本地vllm部署的向量模型时发生报错。我的是用maxkb源码自己打包的镜像所以直接在docker-compose.yml中添加就好了。

qq1193869996的博客 988

XGBoost特征重要性为0的问题:深度解析与应对策略

在机器学习领域,XGBoost(Extreme Gradient Boosting)作为一款高效且强大的集成学习算法,已经被广泛应用于各类预测任务中。然而,在实际应用过程中,许多数据科学家和工程师们遇到了一个令人困惑的现象——某些特征的重要性值为0。这不仅影响了模型的解释性,还可能导致特征选择过程中的误判。本文将深入探讨这一问题,分析其背后的原因,并提供相应的解决方案。在深入探讨特征重要性为0的问题之前,我们首先需要了解XGBoost是如何计算特征重要性的。XGBoost提供了三种常见的特征重要性计算方法:

cda2024的博客 1706

保姆级教程:在Linux上用IGH EtherCAT主站搞定从站时钟同步(附sync_datagram报文详解)

本文详细介绍了在Linux系统上使用IGH EtherCAT主站实现从站时钟同步的保姆级教程,重点解析了sync_datagram报文的结构和工作原理。通过实战案例和代码示例,帮助开发者掌握微秒级同步精度的实现方法,适用于工业自动化领域的高精度设备协同控制。

weixin_30733003的博客 263

离线环境下tiktoken库get_encoding的SSL超时问题解决方案

本文深入剖析了在离线或网络受限环境中,tiktoken库调用get_encoding方法时遇到的SSL超时问题根源。核心解决方案是通过手动下载词表文件、计算哈希值并重命名,最后设置TIKTOKEN_CACHE_DIR环境变量,强制tiktoken从本地缓存加载,从而彻底绕过网络请求,解决SSL连接超时错误。

weixin_28235513的博客 404

音视频入门:H264、H265概念总结

添加链接描述 什么是H.264与H.265 H.264与H.265都是视频压缩格式,由于视频本身的码流太大,所以需要经过压缩然后再通过网络进行传输。H.264是目前比较主流的压缩算法,像视频会议设备一般都采用这个编码格式。基础的H.264可以支持在1M带宽下传输720P30帧/秒的图像;H.264 HIGH PROFILE支持在512K带宽下传输720P30帧/秒的图像。 H.265是比较新的压缩算法,可以更一步提高压缩比,随着我们现在生活中出现的视频格式越来越大(比如现在基本都是1080P甚至4K的显示器

weixin_40673765的博客 8938

解决tiktoken库调用get_encoding时SSL超时

解决tiktoken库调用get_encoding时SSL超时

yufanwenshu的博客 4739

深入解析CRC-16校验算法及其Verilog硬件实现

本文深入解析了CRC-16校验算法的原理及其在Verilog中的硬件实现方法。从基础的模2除法到串行和并行实现方案,详细介绍了LFSR结构、状态转移分析以及工业应用中的优化技巧。通过实际案例和性能对比,帮助开发者理解如何选择适合的CRC实现方案,确保数据传输的可靠性。

yolo5detector的博客 322

第一讲:halcon模板匹配捆绑测量矩形检测芯片针脚

使用halcon模板匹配捆绑测量矩形,检测位置发生变换的芯片针脚缺陷。

uiopmn1的博客 2995

tiktoken 0.9.0离线模式失效排查:缓存目录、环境变量与校验逻辑全解析

在自然语言处理与模型服务部署中,分词器负责将文本切分为token序列,是GPT类模型进行数据预处理和token计数的核心组件。许多分词器在首次使用时需要联网下载词表文件,并默认缓存到本地目录,这种“首次拉取”机制在网络受限的内网或离线环境下极易引发加载失败。当tiktoken升级至0.9.0后,其缓存读取逻辑变得更严格,不仅检查文件是否存在,还对文件的完整性和元信息进行校验,导致即使本地已有词表文件,也可能因缺失关联元信息或环境变量指向变化而触发重新下载,最终抛出ConnectionError或缓存无效异常

weixin_28363123的博客 302

C#串口通信革命:RJCP.DLL.SerialPortStream实战全解析

本文介绍了如何通过RJCP.DLL.SerialPortStream库实现高性能串口通信解决方案。相比.NET自带的SerialPort类,该库提供了完全的异步非阻塞IO、动态缓冲区控制和多线程事件驱动等优势,特别适合工业自动化和物联网场景。文章详细讲解了环境搭建、核心功能对比,并通过代码示例展示了端口配置、异步通信管道搭建等关键技术。最后以Modbus RTU协议为例,演示了高级协议封装方法,为开发者提供了完整的工业级串口通信实现方案。

墨夶的博客 1880

tiktoken 0.9.0离线环境报错:缓存策略变更与完整的本地化解决方案

在处理自然语言任务时,分词器(Tokenizer)是将文本转换为模型可读Token序列的基础组件,而BPE(Byte Pair Encoding)算法因其高效压缩能力被广泛采用。OpenAI开源的tiktoken库正是实现这一过程的常用工具,其编码方案被LangChain、LlamaIndex等框架大量依赖。但在真实的工程实践中,离线或内网环境下的模型部署经常面临依赖资源缺失的挑战。tiktoken 0.9.0版本修改了BPE词表文件的缓存与加载机制,导致原本在0.8.x版本中可用的本地缓存不再自动生效,应

weixin_29061997的博客 97

零基础实战:云开发家政维修小程序搭建指南

欢迎来到这本关于构建家政维修小程序的电子书!在当今数字化的浪潮中,线上服务已成为我们生活中不可或缺的一部分。从点餐购物到居家维修,人们越来越习惯通过指尖轻点来解决各种需求。正是基于这样的背景,我们希望通过这个系列,手把手地带领大家从零开始,搭建一个功能完备、体验流畅的家政维修平台。这不仅仅是一本技术教程,更是一次将想法变为现实的探索之旅。我们将深入浅出地讲解如何运用云开发等现代技术,实现从用户下单、支付,到客服派单、工人接单,再到订单完成和权限管理等一系列核心业务流程。

低代码布道师的博客 3433

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Gemini 3.1 Pro百万上下文实战:原生长上下文范式解析

长上下文处理是大模型落地企业知识管理的核心能力,其本质并非单纯扩大token容量,而是重构模型对记忆、关联与结构化理解的底层机制。传统RAG依赖外部检索,易受语义漂移与信息割裂影响;而原生长上下文支持跨段落、跨文档的语义锚定与实体一致性建模,实现真正端到端的信息整合。该能力在技术文档分析、多源合规审查、代码库联合推理等场景中展现出显著优势——不仅提升答案完整性与可溯源性,更降低系统延迟与运维复杂度。本文聚焦Gemini 3.1 Pro的1M context实战,深入解析其动态token压缩、注意力热力重分布

weixin_33798152的博客 386

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

h2oGPT Docker 部署实战:环境搭建、镜像构建与 vLLM/TGI 推理服务集成指南

本文以 h2oGPT 仓库的 [Docker 部署文档](https://link.gitcode.com/i/750e8b29d8ca5cc63dc23eb529c2c28a) 为主体,完整讲解如何在本机通过 Docker 容器化运行 h2oGPT 私有聊天应用:从 Ubuntu 上搭建 CPU/GPU 推理所需的 Docker 与 NVIDIA Container Toolkit 环境,到拉取

gitblog_01020的博客 321

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

空间节点画布:用空间索引解决LLM上下文漂移的工程实践

在大模型应用与智能体开发中,上下文漂移是导致模型“遗忘”与回答矛盾的常见成因。本质上,问题并不在于上下文窗口的长度,而在于信息组织方式——线性文档让关键约束容易被稀释、被距离掩埋。RAG 与 Prompt 工程虽能部分缓解,但检索噪声与结构缺失依然存在。空间节点画布提供了一种新思路:将信息节点放置在可定位的坐标中,以空间距离和显式链接作为可解释的检索索引,再通过上下文组装层控制 token 预算,动态构建贴近当前问题的高质量上下文。这一方法适用于知识库工具、智能体长期记忆和多轮对话场景,能从根源上降低漂移风

weixin_34099526的博客 350

本地化部署 DeepSeek,构建单细胞与空间转录组 AI 分析平台

本地化部署 DeepSeek,构建单细胞与空间转录组 AI 分析平台

weixin_53637133的博客 181

【第 009 讲】全面掌握 Python 注释:注释的定义与作用 | 单行注释 | 三引号与多行注释 | 注释使用的最佳实践

本文系统讲解 Python 注释的完整知识体系:从注释的定义与作用讲起,梳理单行注释的书写位置、临时屏蔽用法与 PEP 8 排版规范,剖析注释被忽略的底层机制;进而说明三引号字符串的本质与嵌套问题;最后给出注释使用的三条实践原则,帮助读者写好可读性高的注释。

大模型全栈工程师 · Thanks_ks 575

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 432

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 243

【每天一个 Python 小案例30】Python 基础知识综合小项目:我的工具盒

作为系列收官,本篇把前 29 篇的知识点合成一个能直接用的命令行工具"我的工具盒":计算器(用 ast 解析表达式,不碰 eval)、单位换算与温度转换(一张换算表 + 特例分支)、记账与分类统计(Decimal + JSON 持久化)、以及用"字典当命令表"把菜单和业务逻辑解耦的主循环。文中对比了 eval 的安全隐患与 ast 白名单的做法,解释了 lambda 闭包在字典里的写法与晚绑定陷阱,并在最后给出整个系列的知识地图,把变量、数据结构、控制流、函数、类、异常、文件、标准库八块内容对应到具体篇目。

xinjiyaya的博客 427

yolo 和 deft 算法的区别

你应该是打错了:是,不是 defrat;

曾大强博客 258

两张表合并之后,行数悄悄多了一倍

pandas merge 行数异常膨胀源于右表键不唯一,导致数据静默复制。实测显示,未聚合的右表(756行)与左表合并后行数增至504行,合计膨胀3.5倍,但无报错。validate 参数仅在检查键唯一性时有效,one_to_one 和 many_to_one 可拦截问题,但需结合 duplicated() 前置检查。正确做法为先按键聚合右表,再合并,避免重复。建议合并前后核对行数、合计,并使用 indicator=True 排查匹配情况,确保数据一致性。

patrickstar231的博客 240

蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级 备考:莫队算法离线区间查询详解

备赛进行时:第十八届蓝桥杯软件赛报名已于 2026-10-08 10:00 开启、12-18 14:00 截止,省赛定在 2027-04-10(C/C++·Python 程序设计 9:00–13:00);中国电子学会 2026 年 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名 9/23–12/2 16:00、统考 12-12;全国青少年信息素养大赛 2026—2027 赛季算法应用主题赛也已进入复盘练兵窗口。

IT_Scratch的博客 175
上一篇: 我的创作纪念日
下一篇: Opencode 安装指南:在 Windows 上配置开源 AI 编程助手
冷色系里的一抹暖调
博客等级 码龄9年 12粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值