Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro na requisição inicial para openAI

Olá, na hora de fazer a primeira requisição para do back para a openAi apresentou o seguinte erro:


Traceback (most recent call last):
  File "/Users/raphaelpfeifer/projetos/chatbot-openai/venv/lib/python3.12/site-packages/flask/app.py", line 1536, in __call__
    return self.wsgi_app(environ, start_response)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/raphaelpfeifer/projetos/chatbot-openai/venv/lib/python3.12/site-packages/flask/app.py", line 1514, in wsgi_app
    response = self.handle_exception(e)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/raphaelpfeifer/projetos/chatbot-openai/venv/lib/python3.12/site-packages/flask/app.py", line 1511, in wsgi_app
    response = self.full_dispatch_request()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/raphaelpfeifer/projetos/chatbot-openai/venv/lib/python3.12/site-packages/flask/app.py", line 919, in full_dispatch_request
    rv = self.handle_user_exception(e)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/raphaelpfeifer/projetos/chatbot-openai/venv/lib/python3.12/site-packages/flask/app.py", line 917, in full_dispatch_request
    rv = self.dispatch_request()
         ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/raphaelpfeifer/projetos/chatbot-openai/venv/lib/python3.12/site-packages/flask/app.py", line 902, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)  # type: ignore[no-any-return]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/raphaelpfeifer/projetos/chatbot-openai/front-chatbot/app.py", line 59, in chat
    texto_reposta = resposta.choices[0].message.content
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Segue o código:

def bot(prompt):
    maximo_tentativas = 1
    repeticao = 0

    while True:
        try:
            prompt_do_sistema = f"""
            Você é um chatbot de atendimento a clientes de um e-commerce.
            Você não deve responder perguntas que não sejam dados do ecommerce informado!
                """
            
            response = cliente.chat.completions.create(
                messages=[
                            {
                                "role": "system",
                                "content": prompt_do_sistema
                            },
                            {
                                "role": "user",
                                "content": prompt
                            }
                        ],
                        temperature=1,
                        max_tokens=256,
                        top_p=1,
                        frequency_penalty=0,
                        presence_penalty=0,
                        modal = modelo)
            return response
        except Exception as erro:
            repeticao += 1
            if repeticao >= maximo_tentativas:
                    return "Erro no GPT: %s" % erro
            print('Erro de comunicação com OpenAI', erro)
            sleep(1)
            

@app.route("/chat", methods=["POST"])
def chat():
    prompt = request.json["msg"]
    resposta = bot(prompt)
    texto_reposta = resposta.choices[0].message.content
    return texto_reposta
3 respostas

Olá Raphael, tudo bem?

Pelo que você descreveu, parece que o erro ocorre na linha onde você tenta acessar resposta.choices[0].message.content. Isso sugere que a resposta da API pode não estar retornando da forma esperada, possivelmente devido a um erro na requisição ou na configuração do cliente.

  1. Verifique a Configuração do Cliente: Certifique-se de que o cliente OpenAI (cliente) está configurado corretamente. Verifique se a chave de API está correta e se você está usando a versão correta da biblioteca OpenAI.

  2. Checar o Modelo: A variável modelo precisa estar definida corretamente com o nome do modelo que você deseja usar (por exemplo, "gpt-3.5-turbo"). Certifique-se de que modal = modelo está correto.

  3. Tratamento de Resposta: Antes de acessar resposta.choices[0].message.content, verifique se resposta contém o que você espera. Você pode adicionar um print para ver o conteúdo de resposta:

    resposta = bot(prompt)
    print(resposta)  # Adicione esta linha para depuração
    texto_reposta = resposta.choices[0].message.content
    
  4. Verifique se há Erros na Resposta: Adicione uma verificação para garantir que resposta.choices existe e tem pelo menos um elemento antes de tentar acessá-lo. Algo como:

    if resposta and 'choices' in resposta and len(resposta.choices) > 0:
        texto_reposta = resposta.choices[0].message.content
    else:
        texto_reposta = "A resposta não contém dados válidos."
    
  5. Logs de Erro: Certifique-se de que os logs de erro estão habilitados para capturar mais detalhes sobre o que pode estar dando errado.

Espero que essas dicas ajudem a resolver o problema. Conte com o apoio do fórum :)

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓

Olá Rafaela, obrigado pela resposta!

Eu peguei o retorno da resposta e veio o seguint conteúdo:


Erro no GPT: Missing required arguments; Expected either ('messages' and 'model') or ('messages', 'model' and 'stream') arguments to be given

Estou passando esses dois parametros obrigatórios que a mensagem cita que estão faltando o messages(como visto no primeiro print) e o modelo tabém está sendo passado:


cliente = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
modelo = "gpt-4"

while True:
        try:
            prompt_do_sistema = f"""
            Você é um chatbot de atendimento a clientes de um e-commerce.
            Você não deve responder perguntas que não sejam dados do ecommerce informado!
                """
            
            response = cliente.chat.completions.create(
                messages=[
                            {
                                "role": "system",
                                "content": prompt_do_sistema
                            },
                            {
                                "role": "user",
                                "content": prompt
                            }
                        ],
                        temperature=1,
                        max_tokens=256,
                        top_p=1,
                        frequency_penalty=0,
                        presence_penalty=0,
                        modal = modelo)
            return response
        except Exception as erro:
            repeticao += 1
            if repeticao >= maximo_tentativas:
                    return "Erro no GPT: %s" % erro
            print('Erro de comunicação com OpenAI', erro)
            sleep(1)
solução!

Eu consegui resolver os problema fazendo algumas modificações no código:

1 - primeiro alterei o parâmetro que estava sendo passado com o nome errado. Estava como "modal" e o certo é "model". 2 - no método bot alterei o retorno para que ele passe o conteúdo do choices diretamente.

o código ficou assim:


def bot(prompt):
    maximo_tentativas = 1
    repeticao = 0

    while True:
        try:
            prompt_do_sistema = f"""
            Você é um chatbot de atendimento a clientes de um e-commerce.
            Você não deve responder perguntas que não sejam dados do ecommerce informado!
                """
            
            response = cliente.chat.completions.create(
                messages=[
                            {
                                "role": "system",
                                "content": prompt_do_sistema
                            },
                            {
                                "role": "user",
                                "content": prompt
                            }
                        ],
                        temperature=1,
                        max_tokens=256,
                        top_p=1,
                        frequency_penalty=0,
                        presence_penalty=0,
                        model = modelo)
            return response.choices[0].message.content
        except Exception as erro:
            repeticao += 1
            if repeticao >= maximo_tentativas:
                    return "Erro no GPT: %s" % erro
            print('Erro de comunicação com OpenAI', erro)
            sleep(1)
            

@app.route("/chat", methods=["POST"])
def chat():
    prompt = request.json["msg"]
    resposta = bot(prompt)
    texto_reposta = resposta
    return texto_reposta