终极方案!lightRag/graphRag离线使用tiktoken持续报错SSLError,不改源码,彻底解决!
在lightRag和GraphRag中,build rag对象时,在离线环境下,tiktoken 一直报错,需要获取
https://openaipublic.blob.core.windows.net/encodings/o200k_base.tiktoken 这个资源,
看了很多帖子,要么存在误导,要么就是改源码,非常不友好!
我的解决思路如下:
首先
```非联网状态下,运行下面代码报错:
import os
import tiktoken
encoding = tiktoken.get_encoding("o200k_base")
```
报错:SSLError: HTTPSConnectionPool(host='openaipublic.blob.core.windows.net', port=443): Max retries exceeded with url: /encodings/o200k_base.tiktoken (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:992)')))
需要获取的资源为 https://openaipublic.blob.core.windows.net/encodings/o200k_base.tiktoken
那么浏览器打开,直接手动获取这个文件('o200k_base.tiktoken')。
然后,重要!!重要!!!重要!!!
```
import hashlib
blobpath = "https://openaipublic.blob.core.windows.net/encodings/o200k_base.tiktoken"
cache_key = hashlib.sha1(blobpath.encode()).hexdigest()
print(cache_key)
# 输出 fb374d419588a4632f3f557e76b4b70aebbca790
```
然后配置一个本地tiktoken的缓存文件夹 如: /home/user/tiktoken
将手动获取的文件o200k_base.tiktoken复制到 /home/user/tiktoken 目录下,在该目录下,将o200k_base.tiktoken直接重命名为fb374d419588a4632f3f557e76b4b70aebbca790
然后设置环境变量TIKTOKEN_CACHE_DIR:
os.environ["TIKTOKEN_CACHE_DIR"] = '/home/user/tiktoken'
执行以下代码不再出错
```
import os
import tiktoken
os.environ["TIKTOKEN_CACHE_DIR"] = '/home/user/tiktoken'
encoding = tiktoken.get_encoding("o200k_base")
```
补充:
#如果是 cl100k_base.tiktoken 的情形;
blobpath = "https://openaipublic.blob.core.windows.net/encodings/cl100k_base.tiktoken"
cache_key = hashlib.sha1(blobpath.encode()).hexdigest()
print(cache_key)
# 输出 9b5ad71b2ce5302211f9c61530b329a4922fc6a4
将cl100k_base.tiktoken文件重命名为9b5ad71b2ce5302211f9c61530b329a4922fc6a4 即可。