openai的API_KEY使用问题

想尝试一下使用openAI的API_key,用python运行下列程序

import os
import openai
# Set the API key
openai.api_key = os.getenv("OPENAI_API_KEY")
# Define the model and prompt
model_engine = "text-davinci-003"
prompt = "What is the capital of France?"
# Generate a response
completion = openai.Completion.create(
    engine=model_engine,
    prompt=prompt,
    max_tokens=1024,
    n=1,
    stop=None,
    temperature=0.5,
)
# Get the response text
message = completion.choices[0].text
print(message)

开启代理会弹出以下错误:

img

但如果不开启代理,则连接不到openai服务器:

img

但好像我在某个帖子中看到使用API可以无视地域限制地调用openai提供的一些功能,我的KEY是刚申请的还未使用过,有6个月5美元的免费使用额度。所以这里显示的连接失败也不知道是什么问题。
请教各位使用过的有无遇到该问题,都是怎么解决的?或者我的设置有问题?

确保环境变量OPENAI_API_KEY设置为你的key

python调试三板斧 https://ask.csdn.net/questions/7908322/54130133

以上截图中有错误提示“无法连接代理”

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7634713
  • 除此之外, 这篇博客: 通过python 调用OpenAI api_key提交问题解答中的 🌻spyder窗口调用 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在这里插入图片描述

    # -*- coding: utf-8 -*-
    """
    Spyder Editor
    
    This is a temporary script file.
    """
    
    import openai
    openai.api_key = "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"
    
    def completion(prompt):
        completions = openai.Completion.create(
            engine="text-davinci-003",
            prompt=prompt,
            max_tokens=1024,
            n=1,
            stop=None,
            temperature=0.8,
        )
        
        message = completions.choices[0].text
        return message
    
    print(completion("stm32f103vct6串口1初始化代码"))
    
    • 📜openai调用,提问stm32f103vct6串口1初始化代码返回数据:
    波特率为115200
    
    //串口初始化函数
    //bound:波特率
    void uart1_init(u32 bound)
    {
      //GPIO端口设置
      GPIO_InitTypeDef GPIO_InitStructure;
    	USART_InitTypeDef USART_InitStructure;
    	NVIC_InitTypeDef NVIC_InitStructure;
    	 
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);	//使能USART1,GPIOA,AFIO时钟
      	GPIO_PinRemapConfig(GPIO_Remap_USART1, DISABLE);          //取消复用
    	
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.09
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
    	GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA9
    
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
    	GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化PA10
    
      //Usart1 NVIC 配置
      NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口1中断通道
    	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
    	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;		//子优先级3
    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
    	NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器
    
       //USART 初始化设置
    
    	USART_InitStructure.USART_BaudRate = bound;//串口设置波特率
    	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
    	USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
    	USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
    	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
    	USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;	//收发模式
    	USART_Init(USART1, &USART_InitStructure); //初始化串口1
    
    	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断
    	USART_Cmd(USART1, ENABLE);                    //使能串口1
    
    }
    //串口1中断服务程序
    //注意,读取USARTx->SR能避免莫名其妙的错误
    void USART1_IRQHandler(void)                	//串口1中断服务程序
    {
    	u8 Res;
    #if SYSTEM_SUPPORT_OS 	//如果使用OS,由于串口接收中断优先级不能设置过高,因此当遇到串口错误时直接调用OS的相应服务
    	OSIntEnter();    
    #endif
    	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
    	{
    #if EN_USART1_RX			//如果使能接收
    		Res =USART_ReceiveData(USART1);//(USART1->DR);	//读取接收到的数据
    		if((USART_RX_STA&0x8000)==0)//接收未完成
    		{
    			if(USART_RX_STA&0x4000)//接收到了0x0d
    			{
    				if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
    				else USART_RX_STA|=0x8000;	//接收完成了 
    			}
    			else //还没收到0X0D
    			{	
    				if(Res==0x0d)USART_RX_STA|=0x4000;
    				else
    				{
    					USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
    					USART_RX_STA++;
    					if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收	  
    				}		 
    			}
    		}   		 
        	if(USART_RX_STA&0x8000)//接收完成
        	{
    			USART_RX_BUF[USART_RX_STA&0X3FFF]=0;//添加结束符
    			memcpy(USART_TX_BUF,USART_RX_BUF,USART_REC_LEN);
    			USART_RX_STA=0;//接收状态标记清零	  
        	}
    #endif 
    	}	
    	else if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)  //发送中断
    	{
    #if EN_USART1_TX			//如果使能了接收
    		USART1->DR = Tx1Buffer[Tx1Counter++]; //写DR寄存器数据发送
    		if(Tx1Counter == Tx1Count){
    			USART1->CR1 &= ~USART_CR1_TXEIE;		//关闭TX发送中断
    		}
    #endif
    	}
    
    
    print(completion("stm32f103vct6串口1初始化代码"))
    ,总线资源申请好后,调用这个函数初始化
    	return 0;
    }
    
    
    //不使用串口,释放资源
    static void __exit uart_exit(void)
    {
    	//释放设备号
    	unregister_chrdev(dev_no,DEV_NAME);
    	
    	//释放设备结构体
    	cdev_del(&uart_cdev);
    	
    	//删除设备类
    	device_destroy(uart_class,MKDEV(dev_no,0));
    	
    	//释放设备类
    	class_destroy(uart_class);
    
    	//释放资源
    	
    	//1.释放硬件资源:释放ioremap的空间
    	iounmap(va);
    	
    	//2.释放设备号
    	release_region(0x40011000,0x400);
    }
    
    module_init(uart_init);
    module_exit(uart_exit);
    MODULE_LICENSE("GPL");