Olá! Aprendi que é uma boa prática, ao disponibilizar o serviço de um bot, que ele não seja absolutamente aberto a qualquer pergunta. O que quero dizer?
Se eu substituir a pergunta abaixo:
resposta = cadeia.invoke({"question": "Qual é a correlação entre os anos de experiencia do agente e o tempo de entrega?"})
por
resposta = cadeia.invoke({"question": "Qual a capital do brasil"})
Ele me responderá precisamente que é Brasília.
Fiz outras perguntas como qual o horário em Ruanda e ele também me respondeu adequadamente.
Ou seja, ele estava aberto a usar todo o motor do Gemini, sendo possível fugir totalmente do contexto dos dados do meu dataframe.
A priori, inclui a linha em negrito no prompt, para resolver a questão, inclui a linha em negrito no System Prompt:
system = f"""Você tem acesso a um dataframe pandas df
.
Aqui está a saida de df.head().to_markdown()
:
'''
{df.head().to_markdown()}
'''
Dada uma pergunta do usuário, escreva o código Python para respondê-la.
**Você precisa ignorar expressamente as perguntas que não podem ser respondidas com APENAS com os dados do dataframe pandas df
.**
Retorne SOMENTE o código Python válido e nada mais. \
Não presuma que você tem acesso a nenhuma biblioteca além das bibliotecas Python integradas e pandas.
"""
Mas ao fazê-lo, recebi o erro abaixo:
BadRequestError: Error code: 400 - {'error': {'message': "Failed to call a function. Please adjust your prompt. See 'failed_generation' for more details.", 'type': 'invalid_request_error', 'code': 'tool_use_failed', 'failed_generation': '{}'}}
Diante desse cenário, pergunto: Qual a melhor maneira de tratar a requisição ou o prompt, para garantir que o meu bot sempre se atenha ao contexto?