Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Está me voltando um erro

Olá,

Estou enfrentando um erro ao criar a "persona",

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

Só para entender melhor, estou conectando meu sistema ao LM Studio e usando o modelo de linguagem deepseek-r1-distill-llama-8b.

como pode notar ele reconhece a personalidade mas quebra o codigo logo depois.

app.py

def bot(prompt):
    maximo_tentativas = 1
    repeticao = 0
    personalidade = personas[selecionar_persona(prompt)]

    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!
            Você deve adotar a persona abaixo.
            # Persona
            {personalidade}
            Você deve gerar respostas utilizando o contexto abaixo.
            # Contexto
            {contexto}

            """
            response = cliente.chat.completions.create(
                messages=[
                        {
                                "role": "system",
                                "content": prompt_do_sistema
                        },
                        {
                                "role": "user",
                                "content": prompt
                        }
                ],
                temperature=1,
                #max_tokens=1200,
                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
    final_response = re.sub(r'<think>.*?</think>', '', texto_resposta, flags=re.DOTALL)
    final_response = final_response.strip()
    return final_response

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

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

selecionar_persona.py

cliente = OpenAI(base_url = "http://172.18.10.210:1234/v1/", api_key='lm-studio')
modelo = "model-identifier"

personas = {
    'positivo': """
        Assuma...
    """,
     'neutro': """
        Assuma ...
    """
    'negativo': """
        Assuma ...
    """
}


def selecionar_persona(mensagem_usuario):
    prompt_sistema = """
    Faça uma análise da mensagem informada abaixo para identificar se o sentimento é: positivo, 
    neutro ou negativo. Retorne apenas um dos três tipos de sentimentos informados como resposta.
    """

    resposta = cliente.chat.completions.create(
            model=modelo,
            messages=[
                    {
                            "role": "system",
                            "content": prompt_sistema
                    },
                    {
                            "role": "user",
                            "content" : mensagem_usuario
                    }
            ],
            temperature=1,
    )
    resposta = resposta.choices[0].message.content
    final_response = re.sub(r'<think>.*?</think>', '', resposta, flags=re.DOTALL)
    final_response = final_response.strip()

    return final_response.lower()
1 resposta
solução!

Olá, Filipe. Tudo bem?

Isso pode ocorrer se a função selecionar_persona retornar um valor que não seja uma das chaves definidas no dicionário ('positivo', 'neutro', 'negativo').

Aqui estão algumas sugestões para resolver o problema:

  1. Verifique o retorno da função selecionar_persona: verifique se ela está retornando exatamente 'positivo', 'neutro' ou 'negativo'. Qualquer diferença, mesmo em espaços ou caracteres extras, pode causar o erro.

  2. Adicione um tratamento para valores inesperados: Você pode adicionar uma verificação para garantir que o valor retornado seja uma chave válida no dicionário personas.

    sentimento = selecionar_persona(prompt)
    if sentimento not in personas:
        return "Erro: Sentimento não reconhecido"
    personalidade = personas[sentimento]
    
  3. Imprima o valor retornado: Para depurar, você pode imprimir o valor retornado por selecionar_persona antes de usá-lo, para ver exatamente o que está sendo retornado.

    sentimento = selecionar_persona(prompt)
    print(f"Sentimento detectado: {sentimento}")
    
  4. Verifique se o modelo está configurado corretamente e que o prompt enviado para a análise de sentimento está correto.

Espero ter ajudado e bons estudos.

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