[geekan/MetaGPT]OPENAI_BASE_URL 和 OPENAI_PROXY 无法同时生效?

2024-05-16 928 views
8

使用场景:

  1. MetaGPT 服务所在的机器需要通过代理才能访问互联网
  2. 使用手机搭建/三方搭建的API服务中转

预期行为:可以配置MetaGPT服务的网络代理同时可以设置API服务器的自定义地址

实际测试:同时设置后网络访问失败

回答

7
  1. 如果 OPENAI_BASE_URL 是中转地址,那么运行metagpt的机器和 OPENAI_BASE_URL 是组成的,不需要 OPENAI_PROXY。
  2. 如果 OPENAI_BASE_URL 是OPENAI原地址,国内无法访问,才需要OPENAI_PROXY,OPENAI_PROXY要能够连接到OPENAI原地址。
  3. 同时配置OPENAI_BASE_URL是中转地址和OPENAI_PROXY,相当于从OPENAI_PROXY访问OPENAI_BASE_URL中转地址,可能是不通的,也可能是通的,取决于OPENAI_PROXY的网络情况。
8

通过OPENAI_PROXY设置的代理地址,其他的网络服务均可以放通

从正常逻辑上 OPENAI_PROXY 的设置应该是类似读取 env HTTPS_PROXY

8

是的,OPENAI_PROXY 的逻辑和环境变量中设置代理类似。key.yaml 中你是怎样配置 OPENAI_PROXY 的?贴一下配置内容吧。

6

OPENAI_BASE_URL: " https://cfwus02.opapi.win/v1 " # 外网可以直接访问的API地址 OPENAI_PROXY: " http://127.0.0.1:8080 " # 内到外网的本地代理 OPENAI_API_KEY: "sk- KFCLFUv818xxxx" # API 密钥 OPENAI_API_MODEL: "gpt-4-1106-preview" # 型号

7

@voidking
此问题的任何解决方案都遇到同样的问题,在使用第 3 方 openai API URL 时在代理后面工作

在访问 3rd party openai API URL 之前需要使用系统代理访问互联网

4

@clipsheep6 @butterl 这个问题还存在吗?

0

@geekan使用新的设置方式后还是返回失败,测试脚本在同环境下正常返回

  1. ~/.metagpt/config2.yaml 中的 METAGPT 设置

    llm:
    api_type: "openai"  # or azure / ollama / open_llm etc. Check LLMType for more options
    model: "gpt-3.5-turbo" #"gpt-4-turbo-preview"  # or gpt-3.5-turbo-1106 / gpt-4-1106-preview
    base_url: "https://aigptx.top/v1"  # or forward url / other llm url
    api_key: "sk-xxxxxx"
    proxy: "http://127.0.0.1:8080"
  2. 下面的测试代码与 $ENV 中的代理配合良好

    
    import requests as requests
    import urllib3
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
    api_key = "sk-xxx"
    headers = {
    "Authorization": 'Bearer ' + api_key,
    }
    question = input("输入您的问题\n")
    params = {
    "messages": [
        {
            "role": 'user',
            "content": question
        }
    ],
    "model": 'gpt-3.5-turbo'
    }
    response = requests.post(
    "https://aigptx.top/v1/chat/completions",
    headers=headers,
    json=params,
    stream=False
    )
    res = response.json()
    res_content = res['choices'][0]['message']['content']
    print(res_content)