大家好,今天我们来聊一个在私有化部署大模型(或 RAGFlow 等工具)时,可能突然跳出来的"拦路虎"。
不少朋友在部署时都遇到过类似这样的报错:
bash
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='openaipublic.blob.core.windows.net', port=443): Max retries exceeded with url: /encodings/cl100k_base.tiktoken (Caused by NameResolutionError("HTTPSConnection(host='openaipublic.blob.core.windows.net', port=443): Failed to resolve 'openaipublic.blob.core.windows.net' ([Errno -3] Temporary failure in name resolution)"))
错误提示最终会指向一个文件下载失败:cl100k_base.tiktoken
这到底是怎么回事?又该怎么解决?今天我们就来拆解一下。
错误信息说了啥?
简单来说,错误提示是:程序在尝试从 openaipublic.blob.core.windows.net 这个地址下载一个名叫 cl100k_base.tiktoken 的文件,但是因为网络问题,连不上这个地址,导致下载失败。
所以核心就一点:网络访问不了这个域名。
为什么会这样?
这个文件是很多大模型组件在初始化时,自动去下载的词表编码文件。如果你的服务器或部署环境不能访问外网,或者因为某些网络策略无法连接这个微软 Azure 的域名,就会触发这个错误。
怎么解决?
解决思路分两种,看你的部署方式是不是在 Docker 里。
✅ 情况一:非 Docker 部署
如果你是在自己的物理机或虚拟机上直接部署,那很简单:
先在终端里试试,直接访问这个链接能不能通:
bash
curl https://openaipublic.blob.core.windows.net/encodings/cl100k_base.tiktoken
如果访问不了,那就需要检查你的服务器网络设置,看是否需要配置代理或开通外网访问权限。
总之,核心就是确保你的物理机或虚拟机能下载到这个文件。
🐳 情况二:Docker 部署(最常见)
这种情况最常见,也最容易让人困惑:"明明我宿主机能上网,为什么容器里就不行?"
因为 Docker 默认的网络模式(bridge)可能会受到网络策略影响,导致容器内部访问不了某些外网地址。
这时候,我们可以换个思路:既然容器下载不了,那我们就提前下载好,然后"喂"给容器。
🛠 解决步骤:
第一步:宿主机下载文件
在你的宿主机(跑 Docker 的那台机器)上,手动下载这个 tiktoken 文件,放到某个目录里,比如:
bash
/home/abc/ragflow/tiktoken_cache/
第二步:关键操作------给文件改名
下载下来后,一定要把文件名改成这个:
bash
9b5ad71b2ce5302211f9c61530b329a4922fc6a4
对,不要保留任何后缀。为什么必须改?后面会解释。
如下图所示:

第三步:修改 Docker 配置
如果你是用 docker-compose.yml 启动的,主要做两处调整:
1.设置环境变量,告诉程序去哪个目录找这个文件:
bash
environment:
- TIKTOKEN_CACHE_DIR=/tiktoken_cache
2.把宿主机存放文件的目录,挂载到容器里的对应位置:
bash
volumes:
- /home/abc/ragflow/tiktoken_cache:/tiktoken_cache
我是在部署ragflow时遇到的问题,修改配置如下:

改完配置,重启容器,问题一般就能解决了。
为什么必须改成那一串神秘字符?
这其实是 OpenAI 源码里设计的一个缓存机制。
我们可以在github找到openai的源码,查看load.py文件:

然后再找到read_file_cached方法,如下图所示:

在代码中,程序并不是直接用原始 URL 作为文件名去查找,而是会把 URL 字符串做一次 SHA1 哈希计算,得到的哈希值(hexdigest)作为缓存文件名。
我们遇到的这个 URL:
bash
https://openaipublic.blob.core.windows.net/encodings/cl100k_base.tiktoken
经过 hashlib.sha1(blobpath.encode()).hexdigest() 计算后,得到的值正是:
bash
9b5ad71b2ce5302211f9c61530b329a4922fc6a4
所以,我们必须把下载的文件改成这个名字,程序才能在缓存目录里找到它。
小结一下
这个问题本质是网络访问受限引发的文件下载失败。 非 Docker 环境,解决网络即可;Docker 环境,则可利用"宿主机下载 + 挂载进容器 + 按哈希改名"的方式绕过网络限制。
如果你在私有化部署时也遇到类似错误,希望这篇内容能帮你快速定位、顺利解决。
如果还有其它部署中的"坑"欢迎留言,我们一起讨论解决。
**原创不易,如果觉得有用,欢迎点赞、在看支持一下。**你的支持,是我持续分享技术干货的最大动力。