Client.__init__() got an unexpected keyword argument 'proxies'

2025年12月22日 13:33 状态: processing

🚨 错误信息

Client.__init__() got an unexpected keyword argument 'proxies' Traceback (most recent call last): File "/data/sunyongan/sunyongan/digirl-master/digirl/environment/android/evaluate.py", line 714, in <module> evaluator = EndResultEvaluator( File "/data/sunyongan/sunyongan/digirl-master/digirl/environment/android/evaluate.py", line 616, in __init__ self.client = OpenAI( File "/data/sunyongan/sunyongan/miniconda3/envs/DIGIRL-qwen/lib/python3.10/site-packages/openai/_client.py", line 123, in __init__ super().__init__( File "/data/sunyongan/sunyongan/miniconda3/envs/DIGIRL-qwen/lib/python3.10/site-packages/openai/_base_client.py", line 846, in __init__ self._client = http_client or SyncHttpxClientWrapper( File "/data/sunyongan/sunyongan/miniconda3/envs/DIGIRL-qwen/lib/python3.10/site-packages/openai/_base_client.py", line 744, in __init__ super().__init__(**kwargs) TypeError: Client.__init__() got an unexpected keyword argument 'proxies'

🤖 AI解决方案

错误分析

1. 错误翻译

原文:Client.__init__() got an unexpected keyword argument 'proxies'
译文:Client.__init__() 接收到了一个意外的关键字参数 'proxies'

2. 原因分析

  • 根本原因:在初始化 OpenAI 客户端时,传递了一个不受支持的 proxies 参数。OpenAI Python SDK 的最新版本(≥1.0.0)已更改 API 结构,不再直接在 OpenAI() 构造函数中支持 proxies 参数。
  • 具体位置:在 /data/sunyongan/sunyongan/digirl-master/digirl/environment/android/evaluate.py 文件的第 616 行,初始化 OpenAI() 客户端时传入了 proxies 参数。
  • 3. 解决方案

    在新版 OpenAI SDK 中,需要通过 http_client 参数配置代理:
    # 修改前的代码(问题所在):
    # self.client = OpenAI(proxies="http://your-proxy:port")
    
    # 修改后的代码:
    from openai import OpenAI
    import httpx
    
    # 创建一个带有代理配置的 HTTP 客户端
    http_client = httpx.Client(
        proxies="http://your-proxy:port",  # 或使用字典格式:{"http://": "http://proxy:port", "https://": "http://proxy:port"}
        timeout=30.0  # 建议设置超时时间
    )
    
    # 使用自定义的 HTTP 客户端初始化 OpenAI
    self.client = OpenAI(
        api_key="your-api-key",
        http_client=http_client  # 替换原来的 proxies 参数
    )

    4. ️ 预防措施

  • 版本兼容性检查:更新代码前,先检查 OpenAI SDK 的版本号,不同版本可能有不同的 API 接口:
  •    import openai
       print(openai.__version__)  # 查看当前版本
       
  • 查阅官方文档:在更新依赖包或迁移代码时,务必查阅对应版本的官方文档,特别是重大版本更新(如从 0.x 升级到 1.x)。
  • 使用类型提示:在 IDE 中启用类型检查,可以提前发现不存在的参数名,避免运行时错误。
  • 创建配置类:将客户端配置封装到配置类中,便于统一管理和版本适配:

   class OpenAIConfig:
       def __init__(self, api_key, proxy=None):
           self.api_key = api_key
           self.proxy = proxy
           
       def create_client(self):
           if self.proxy:
               http_client = httpx.Client(proxies=self.proxy)
               return OpenAI(api_key=self.api_key, http_client=http_client)
           return OpenAI(api_key=self.api_key)
   

注意:如果不需要代理,直接删除 proxies 参数即可正常初始化 OpenAI 客户端。