问题:
在使用Dify内网环境项目中,出现:当对话正常开始后,系统尝试连接openaipublic.blob.core.windows.net的443端口失败,出现名称解析错误的问题。
原因:
在Dify项目中使用的tiktoken库默认会尝试从OpenAI的公共存储服务下载必要的词汇表文件。在内网环境下无法正常访问。tiktoken库需要两个关键文件来正常工作:1、vocab.bpe - 字节对编码词汇表文件 2、encoder.json - 编码器映射文件
解决方式:
(1)创建本地缓存目录:
bash
mkdir tiktoken
cd tiktoken
(2)下载并重命名文件:
bash
wget https://openaipublic.blob.core.windows.net/gpt-2/encodings/main/vocab.bpe
cp vocab.bpe 6d1cbeee0f20b3d9449abfede4726ed8212e3aee
wget https://openaipublic.blob.core.windows.net/gpt-2/encodings/main/encoder.json
cp encoder.json 6c7ea1a7e38e3a7f062df639a5b80947f075ffe6
(3)配置Docker环境
修改Docker Compose文件,添加api-service环境变量:
bash
environment:
TIKTOKEN_CACHE_DIR: /app/api/.tiktoken/
添加卷映射,将本地缓存目录挂载到容器中:
bash
volumes:
- ./volumes/plugin_daemon:/app/storage
- ./tiktoken:/app/api/.tiktoken
(3)修改库文件路径
对于特定模型插件(如Ollama),可能需要直接修改相关Python库文件中的路径设置:
定位到相关库文件:
Ollama: /App/storage/cwd/langgenius/ollama.../.venv/lib/site-packages/tiktoken_ext/openai_public.py
修改文件中的资源路径,指向本地缓存位置,修改以下位置:
bash
def gpt2():
mergeable_ranks = data_gym_to_mergeable_bpe_ranks(
vocab_bpe_file="/app/api/tiktoken_cache/vocab.bpe",
encoder_json_file="/app/api/tiktoken_cache/encoder.json",
vocab_bpe_hash="1ce1664773c50f3e0cc8842619a93edc4624525b728b188a9e0be33b7726adc5",
encoder_json_hash="196139668be63f3b5d6574427317ae82f612a97c5d1cdaf36ed2256dbf636783",
)