在使用LangChain的ChatOpenAI访问LLM的API时,有时会遇到需要通过HTTP代理访问LLM API的场景,或者由于本地网络环境、公司内网等原因,需要关闭SSL证书验证。本文将介绍如何通过httpx客户端在LangChain中实现这两个需求。
- HTTP 代理:在某些网络环境下,直接访问OpenAI服务器可能会受到限制,这时可以通过HTTP代理中转流量,实现正常访问。(当然也可以通过nginx之类的软件配置反向代理实现)
- 关闭SSL验证:有些情况下,代理服务器或本地环境的证书配置不完善,导致SSL验证失败。此时可以选择关闭SSL验证,避免因证书问题导致请求失败。
代码实现
from langchain_openai import ChatOpenAI
import httpx
model = ChatOpenAI(
model=model_name,
temperature=0,
http_client=httpx.Client(
transport=httpx.HTTPTransport(verify=False, proxy="http://127.0.0.1:8199"),
),
)代码详解
上面的代码片段中,主要做了以下几件事:
- 通过
httpx.Client创建了一个自定义的HTTP客户端。 - 在
transport参数中,设置了verify=False,表示关闭SSL证书验证。 - 设置了
proxy="http://127.0.0.1:8199",将所有请求通过本地8199端口的 HTTP 代理转发。 - 将自定义的
http_client传递给ChatOpenAI,让 LangChain在底层请求时使用这个客户端。
注意事项
- 关闭SSL验证会带来安全风险,建议仅在受信任的网络环境或调试阶段使用,生产环境下应尽量保证证书的合法性和安全性。
- 代理地址和端口需根据实际情况调整,确保代理服务可用
- 若使用
async,可能需要修改用httpx.AsyncClient(...)具体没有验证。
提示
为langchain开发的应用设置代理还可以通过#
HTTP_PROXY和HTTPS_PROXY两个环境变量进行设置,但这样就设置给了整个应用,而不仅仅是ChatOpenAI总结
通过自定义httpx客户端,可以非常方便地在LangChain中为ChatOpenAI设置HTTP代理和关闭SSL验证。