Utilice python3 para llamar a la API de openai y resolver errores de acceso de openai y APIConnectionError

Utilice python3 para llamar a la API de openai y resolver errores de acceso de openai y APIConnectionError.

La premisa es que necesita instalar la biblioteca openai y haber registrado su propia cuenta chatgpt para obtener la clave, y luego puede comenzar a chatear con la IA en contexto con el soporte del software over-the-wall.

pip install openai

1. Llame a openai para devolver directamente el resultado completo

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}'

Dos, flujo de procesamiento de flujo = Verdadero

Si se muestra en la interfaz web a través de tornado.websocket, verá la descripción de la respuesta, que se mostrará palabra por palabra en la página. ese es el efecto

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)

Registre los errores y soluciones en el proceso de llamada a openai.

1. Se agotó el tiempo de conexión o se produjo un error de acceso

Solución: modifique el archivo api_requestor.py en el paquete openai
(xxxx\Python\Python38\site-packages\openai).
Tenga en cuenta que la configuración del puerto del proxy debe ser coherente con el puerto proporcionado por su software de firewall.

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
    )

Después de completar las operaciones anteriores y volver a llamar al servicio openai, puede ocurrir el siguiente error

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] 由于目标计算机积极拒绝,无法连接。')))

Resuelva el problema de error APIConnectionError controlando la versión del paquete urllib3 a 1.25

Supongo que te gusta

Origin blog.csdn.net/weixin_42508580/article/details/130810664
Recomendado
Clasificación