使用python3调用openai的api,并解决openai访问错误以及APIConnectionError

news/2024/5/20 9:29:46 标签: python, openai

python3openaiapiopenaiAPIConnectionError_0">使用python3调用openai的api,并解决openai访问错误以及APIConnectionError。

前提你需要安装openai库,并且已经注册了自己的chatgpt账号获取到了key,然后在翻墙软件的加持下就可以开始实现上下文情景式的与ai聊天了

pip install openai

openai_9">一、调用openai直接返回完整结果

python">import openai

openai.api_key = 'your key'

messages = [{ "role": "system", "content": '欢迎使用openai!' }]
model = 'gpt-3.5-turbo'

def generate(desc):
    # 避免传入的messages内容过大,保持最新的5条数据
    if len(messages) > 5:
        messages[-5:]
    messages.append({
        "role": 'user',
        "content": desc
    })
    try:
        response = openai.ChatCompletion.create(
            model=model,
            messages=messages,
            # 控制输出的多样性,0-1,其中0表示最保守的输出,1表示最多样化的输出。
            temperature=0.5,
            # 输出的最大长度(输入+输出的token不能大于模型的最大token),可以动态调整
            max_tokens=1500,
            # [控制字符的重复度] -2.0 ~ 2.0 之间的数字,正值会根据新 tokens 在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性
            frequency_penalty=0.2,
            # [控制主题的重复度] -2.0 ~ 2.0 之间的数字,正值会根据到目前为止是否出现在文本中来惩罚新 tokens,从而增加模型谈论新主题的可能性
            presence_penalty=0.15,
        )
        messages.append({
            "role": response['choices'][0]['message']['role'],
            "content": response['choices'][0]['message']['content']
        })
        print(f'收到的完成数据: {response['choices'][0]['message']}')
    except Exception as err:
        print(err)
        return  f'OpenAI API 异常: {err}'

二、流式处理 stream=True

如果通过tornado.websocket在web界面显示,会看到回答的描述,逐字在页面显示出来。就是这种效果

python">import openai

openai.api_key = 'your key'

messages = [{ "role": "system", "content": '欢迎使用openai!' }]
model = 'gpt-3.5-turbo'

def streamhandle(desc):
    # 避免传入的messages内容过大,保持最新的5条数据
    if len(messages) > 5:
        messages[-5:]
    messages.append({
        "role": 'user',
        "content": desc
    })
    try:
        response = openai.ChatCompletion.create(
            model=model,
            messages=messages,
            temperature=0.5,
            max_tokens=1500,
            frequency_penalty=0.2,
            presence_penalty=0.15,
            stream=True,
        )
        
        content = {'role': '', 'content': ''}
        for event in response:
            if event['choices'][0]['finish_reason'] == 'stop':
                print(f'收到的完成数据: {content}')
                break
            for delta_k, delta_v in event['choices'][0]['delta'].items():
                print(f'流响应数据: {delta_k} = {delta_v}')
                content[delta_k] += delta_v
                
        messages.append(content)  # 直接在传入参数 messages 中追加消息
    except Exception as err:
        print(err)

openai_95">记录在调用openai过程中的错误以及解决方法

1.连接超时或访问错误

解决方法:修改openai包下的api_requestor.py 文件
(xxxx\Python\Python38\site-packages\openai)
需要注意点是proxy的端口设置要和你翻墙软件提供的端口一致

python">proxy={
    'http': '127.0.0.1:7890', # 端口=翻墙软件提供的端口
    'https': '127.0.0.1:7890',
}

if not hasattr(_thread_context, "session"):
    _thread_context.session = _make_session()
try:
    result = _thread_context.session.request(
        method,
        abs_url,
        headers=headers,
        data=data,
        files=files,
        stream=stream,
        timeout=request_timeout if request_timeout else TIMEOUT_SECS,
        proxies=proxy
    )

在完成上述操作和再次调用openai服务,可能会出现以下报错

APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x00000144FDC24E48>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。')))

通过将urllib3包版本控制在1.25,来解决APIConnectionError报错问题


http://www.niftyadmin.cn/n/348595.html

相关文章

考研考公太卷了,出国留学能弯道超车吗?

这届年轻人太难了&#xff01; 国内高考人数越来越多&#xff0c;考上好大学的难度很大。2022年&#xff0c;高考报名人数是1193万&#xff0c;但考上本科的只有466万&#xff0c;考上双一流大学的不足50万&#xff0c;上双一流大学考生的比例不到5%。 高考只是卷的开始&…

chatgpt赋能Python-pythonslam

Pythonslam&#xff1a;实现SLAM技术的Python库 在机器人领域&#xff0c;SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;技术是非常重要的。SLAM技术使得机器人能够在未知环境中构建地图并同时确定自己的位置。然而&#xff0c;SLAM算法往往需要强大的计…

映射 Linux 共享文件夹为 Windows 网络驱动器

1. 为 Linux 安装 samba 服务 yum install sambasystemctl start smbsystemctl status smb 2. 查看 samba 运行端口 netstat -tlnp|grep smb 3. 开放 samba 端口 firewall-cmd --zonepublic --add-port139/tcp --permanentfirewall-cmd --zonepublic --add-port445/tcp --…

传输层协议

目录 传输层 端口号 端口号范围划分 认识知名端口号(Well-Know Port Number) netstat pidof UDP协议UDP协议端格式​编辑 UDP的特点 面向数据报 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 TCP协议 TCP协议段格式 确认应答(ACK)机制 超时重传机制 连…

【Linux】shell编程—Here Document免交互

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、免交互概述二、免交互常规用法1.read 命令的读取2.wc -l 的内容行数统计3.passwd用户密码的修改4.cat 查看内容并输出到文件中5.cat 查看交互内容并输出到新的文…

京东云技术团队 —— 浅谈测试用例设计

一、测试用例为什么存在 1.1 定义 测试用例(Test Case)是指对特定的软件产品进行测试任务的描述&#xff0c;体现测试方案、方法、技术和策略。测试用例内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等&#xff0c;最终形成文档类的输出。简而言之&am…

微信小程序xr-frame GLTF

前言&#xff1a;什么是GLTF? 原文解释是&#xff1a;GLTF是一种被广泛使用的文件格式&#xff0c;用来储存3D模型和3D场景。在xr-frame里你可以非常轻松地引入任意GLTF模型&#xff0c;并将其渲染出来。想要更详细的讲解&#xff1a;glTF -传输格式&#xff1b; 优势&#…

C++primer plus 习题+答案

第八章 1.哪种函数适合定义为内联函数&#xff1f; 解释&#xff1a; 一般来说&#xff0c;调用一个函数流程为&#xff1a;当前调用命令的地址被保存下来&#xff0c;程序将跳转到所调用的函数并执行该函数&#xff0c;最后跳转回之前所保存的命令地址。 对于经常需要调…