跳至主要內容

LangChain部署报错

pptg大约 1 分钟

1. 请求openaipublic.blob.cor.windows.net超时

1.1 问题

今天把镜像推到服务器上,出现了openaipublic.blob.cor.windows.net,继Dify离线报错出过这个类似问题之后,LangChain也出现了。

1.2 原因

原因是LangChain在用langchain_openai的时候,依旧会去openaipublic.blob.cor.windows.net上拉tiktoken分词器。

1.3 解决方案

  1. 离线下载tiktoken
curl -o tiktoken_cache/cl100k_base.tiktoken https://openaipublic.blob.core.windows.net/encodings/cl100k_base.tiktoken
  1. 配置ChatOpenAI为离线分词器
# 配置资源路径到环境里
tiktoken_cache_dir = os.path.join(os.getcwd(), "tiktoken_cache")
os.environ["TIKTOKEN_CACHE_DIR"] = tiktoken_cache_dir

# 设置离线分词器
self._model = ChatOpenAI(  # type: ignore
    model=model_cfg.model,
    base_url=model_cfg.base_url,
    api_key=model_cfg.api_key,  # type: ignore[arg-type]
    temperature=self._temperature,
    tiktoken_model_name="cl100k_base",  # 使用离线分词器
)










 

  1. 把上面的资源打包进镜像里

2. 容器内无法解析域名

2.1 问题

在本机和本机的docker里,都可以正常访问ai的接口,但是放到服务器上就一直报错连不上。

DEBUG:httpcore.connection:connect_tcp.failed exception=ConnectError(gaierror(-3, 'Temporary failure in name resolution'))

DEBUG:openai._base_client:Encountered Exception

2.2 原因

查了上面报错,原因是我请求的是域名,不是IP,而容器里面又没办法解析域名。

后面又重新打包了一下,塞了一些网络工具进去,果然验证了这个原因。ping和telnet都不通。

RUN apt-get update && apt-get install -y \
    iputils-ping \
    telnet \
    && rm -rf /var/lib/apt/lists/* \
    && pip install --no-cache-dir uv

 
 


2.3 解决方法

伟大的运维之神,帮忙给容器里配了DNS223.5.5.5,然后就通了,后面优化到了Docker打包过程

# 省略前面
...

# 启动服务前设置DNS并执行数据库迁移
CMD sh -c "echo 'nameserver 223.5.5.5' >> /etc/resolv.conf"