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

[Dúvida] Chat não responde as perguntas.

Meu código está igual ao do instrutor, porém quando eu faço uma pergunta, o chat da esse erro:

href="?debugger=yes&cmd=resource&f=console.png">

AttributeError

AttributeError: 'str' object has no attribute 'choices'

Traceback (most recent call last)

return self.wsgi_app(environ, start_response) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

response = self.handle_exception(e) ^^^^^^^^^^^^^^^^^^^^^^^^

response = self.full_dispatch_request() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

rv = self.handle_user_exception(e) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

rv = self.dispatch_request() ^^^^^^^^^^^^^^^^^^^^^^^ return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

texto_resposta = resposta.choices[0].message.content ^^^^^^^^^^^^^^^^

AttributeError: 'str' object has no attribute 'choices'

código:

from flask import Flask,render_template, request, Response
from openai import OpenAI
from dotenv import load_dotenv
import os
from time import sleep
load_dotenv()

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

app = Flask(__name__)
app.secret_key = 'alura'

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 e-commerce 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
        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_resposta = resposta.choices[0].message.content
    return texto_resposta

@app.route("/")
def home():
    return render_template("index.html")

if __name__ == "__main__":
    app.run(debug = True)
5 respostas

Oii, Felipe, tudo bem?

Você pode me dizer, por favor, qual é a videoaula/atividade do curso? Assim consigo te ajudar com mais eficiência :)

Abraços!

Fico no aguardo e à disposição

Olá Maria, Boa noite! A minha duvida se refere ao curso Python e GPT: crie seu chatbot com IA, na primeira seção do curso, sendo a aula 7 (Criação do bot)

solução!

Oi, Felipe!

Você pode tentar alterar a parte da função chat(), por favor? Deste modo:

@app.route("/chat", methods=["POST"])
def chat():
    prompt = request.json["msg"]
    resposta = bot(prompt)
    if isinstance(resposta, str):
        return resposta
    else:
        texto_resposta = resposta.choices[0].message.content
        return texto_resposta

No código acima, primeiro verificamos se a variável resposta é uma string (o que indicaria um erro). Caso seja, retornamos a mensagem de erro. Caso contrário, extraímos o conteúdo da resposta do objeto resposta e o retornamos.

Se não ainda não funcionar, pode me dar um retorno aqui.

Abraços!

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

O erro anterior foi resolvido, porém agora surgiu outro:

Erro no GPT: Error code: 404 - {'error': {'message': 'The model gpt-4 does not exist or you do not have access to it.', 'type': 'invalid_request_error', 'param': None, 'code': 'model_not_found'}}

Aqui está meu código com a alteração anterior:

from flask import Flask,render_template, request, Response
from openai import OpenAI
from dotenv import load_dotenv
import os
from time import sleep

load_dotenv()

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

app = Flask(__name__)
app.secret_key = 'alura'

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 e-commerce 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
        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)
    if isinstance(resposta, str):
        return resposta
    else:
        texto_resposta = resposta.choices[0].message.content
        return texto_resposta

@app.route("/")
def home():
    return render_template("index.html")

if __name__ == "__main__":
    app.run(debug = True)

Eu também já criei o arquivo .env e coloquei a chave API para acessar os serviços da OpenIA.

Oi, Felipe. Espero que você esteja bem!

Desculpe a demora.

O erro diz que você não possui acesso ao modelo gpt-4. Você pode tentar usar outro nome específico da API da OpenAI para o modelo do gpt-4. Por exemplo, o nome gpt-4.0-turbo.

Tente alterar, por favor, dentro de modelo, nesta linha:

modelo = "gpt-4"

Outro ponto: você pode alterar o código contendo a seguinte parte:

cliente = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

Para este:

openai.api_key = os.getenv("OPENAI_API_KEY")

Aqui a chave da API é diretamente atribuída ao atributo api_key do módulo openai. Isso configura a chave da API globalmente para todas as chamadas subsequentes à API OpenAI.

Além disso, lembre-se de alterar a chave dentro da parte openai.api_key = os.getenv("OPENAI_API_KEY").

Se ainda não der certo, pode nos retornar aqui.

Abraços!

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

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software