2
respostas

A thread do assistente não está funcionando

Olá fiz a integração da thread do assistente com a aplicação e não foi funcionou. seguem os códigos:

app.py

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

    while True:
        try:
            cliente.beta.threads.messages.create(
                 thread_id=thread.id,
                 role = "user",
                 content = prompt
            )

            run = cliente.beta.threads.runs.create(
                 thread_id = thread.id,
                 assistant_id = assistente.id
            )

            while run.status != "completed":
                 run = cliente.beta.threads.runs.retrieve(
                      thread_id = thread.id,
                      run_id=run.id
                 )

            historico = list(cliente.beta.threads.messages.list(thread_id=thread.id).data)
            resposta = historico[0]
            return resposta.content[0].text.value   
        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

assistente_ecommerce.py

def criar_thread():
    return cliente.beta.threads.create()

def criar_assistente():
    assistente = cliente.beta.assistants.create(
        name="Atendente EcoMart",
        instructions= 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!
            Além disso, adote a persona abaixo para responder ao cliente.

            ## Contexto
            {contexto}

            ## Persona
            {personas["neutro"]}
        """,
        model = modelo
    )
    return assistente

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

Boa tarde!

  • No seu código, você usa thread.id, mas não mostra onde essa thread foi criada. Se criar_thread() não foi chamado antes, vai dar erro.
  • O mesmo vale para o assistente. Ele precisa ser criado com criar_assistente() antes de ser usado no bot(prompt).

Você tem duas opções pra resolver:

Opção 1: Criar thread e assistente fora da função

thread = criar_thread()
assistente = criar_assistente()

def bot(prompt):
    ...

Opção 2: Criar dentro da função (menos eficiente, mas mais seguro para testes)

def bot(prompt):
    thread = criar_thread()
    assistente = criar_assistente()
    ...

Use traceback para ver o erro completo:

except Exception as erro:
    import traceback
    traceback.print_exc()

Olá, obrigado pelo retorno. Desculpe não ter colocado o código todo, mas eu já havia feito a parte de criar tanto a thread quanto o assistente. Segue o código. O erro persiste


from flask import Flask,render_template, request, Response
from openai import OpenAI
from dotenv import load_dotenv
import os
from time import sleep
from helpers import *
from selecionar_persona import *
from selecionar_documento import *
from assistente_ecomart import *

load_dotenv()

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

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

assistente = criar_assistente()
thread = criar_thread()

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

    while True:
        try:
            cliente.beta.threads.messages.create(
                 thread_id=thread.id,
                 role = "user",
                 content = prompt
            )

            run = cliente.beta.threads.runs.create(
                 thread_id = thread.id,
                 assistant_id = assistente.id
            )

            while run.status != "completed":
                 run = cliente.beta.threads.runs.retrieve(
                      thread_id = thread.id,
                      run_id=run.id
                 )

            historico = list(cliente.beta.threads.messages.list(thread_id=thread.id).data)
            resposta = historico[0]
            return resposta.content[0].text.value   
        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

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

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