caarleexx commited on
Commit
60d6fb0
·
verified ·
1 Parent(s): 7bf4a99

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -19
app.py CHANGED
@@ -30,7 +30,7 @@ genai.configure(api_key=api_key)
30
 
31
  # Inicializa os dois modelos separadamente
32
  counselor_model = genai.GenerativeModel('gemini-flash-latest')
33
- supervisor_model = genai.GenerativeModel('gemini-2.5-flash-lite')
34
 
35
 
36
  # --- 3. DEFINIÇÃO DOS PROMPTS ---
@@ -56,29 +56,35 @@ Você é um especialista em análise de intenções que opera sob um protocolo d
56
  Sua função é conduzir uma conversa para entender 100% da dúvida de um usuário ANTES de respondê-la.
57
  Sua SAÍDA DEVE SER SEMPRE E SOMENTE um objeto JSON válido.
58
 
59
- **PROTOCOLO DE EXECUÇÃO OBRIGATÓRIO:**
60
- Analise o `estado_pipeline` atual e o `historico_conversa`. Decida qual passo executar. Sua resposta em JSON deve conter o estado COMPLETAMENTE ATUALIZADO.
 
 
 
 
 
 
 
 
 
 
61
  ---
62
  **Passo 1: Análise Primária (Clareza)**
63
- - **Decisão:** Se a clareza for 'baixa', pergunte. Senão, `proximo_passo` = `"passo_2_proposito"`.
64
  ---
65
  **Passo 2: Análise de Propósito (Para Que)**
66
- - **Decisão:** Se a confiança for 'baixa', formule uma pergunta de esclarecimento conversacional, mostrando que entendeu o tópico geral. Senão, `proximo_passo` = `"passo_3_motivacao"`.
67
  ---
68
  **Passo 3: Análise de Motivação (Porquê)**
69
- - **Decisão:** Se a confiança for 'baixa', formule uma pergunta de esclarecimento conversacional. Senão, `proximo_passo` = `"passo_4_coerencia"`.
70
  ---
71
  **Passo 4: Análise de Coerência**
72
- - **Decisão:** Se a coerência for 'baixa', pergunte para resolver a contradição. Senão, `proximo_passo` = `"passo_5_ambiguidade"`.
73
  ---
74
  **Passo 5: Análise de Ambiguidade de Cenário (Validação de Perspectiva)**
75
  - **Meta:** A dúvida pode ter múltiplas respostas válidas dependendo de uma perspectiva oculta?
76
- - **Decisão:**
77
- - Se existem vários cenários válidos, sua tarefa é **formular uma pergunta de esclarecimento conversacional e aberta.**
78
- - **REGRA DE OURO PARA PERGUNTAS:** Suas perguntas NÃO devem ser menus ou listas fechadas (ex: "A ou B?"). Elas DEVEM ser humanizadas seguindo esta estrutura:
79
- 1. **Afirmação de Engajamento:** Comece com uma frase curta que valide o interesse do usuário (ex: "Entendido, esse é um tema fascinante!").
80
- 2. **Ponte de Entendimento:** Demonstre que você entendeu o que foi dito, apresentando os cenários como uma exploração conjunta.
81
- 3. **Pergunta Aberta:** Termine com uma pergunta que convide o usuário a escolher um caminho de forma natural.
82
  - **Exemplo de Pergunta Conversacional Perfeita:**
83
  Dúvida: "Me fale sobre carros". A pergunta no campo `pergunta_para_usuario` DEVE ser algo como:
84
  *"Sério, interessante, eu acho esse mundo fascinante! Os detalhes da engenharia são curiosos. Veja, podemos explorar isso por um lado, analisando o chassi, que é como o esqueleto que dá estrutura e segurança. E também do outro, o motor, que é o coração que dá potência ao carro. Qual desses detalhes da engenharia te desperta mais curiosidade agora?"*
@@ -87,7 +93,7 @@ Analise o `estado_pipeline` atual e o `historico_conversa`. Decida qual passo ex
87
  ---
88
  **Passo 6: Geração da Resposta Final**
89
  - **Meta:** Tenho 100% de clareza para dar uma resposta definitiva.
90
- - **Decisão:** Se todos os passos têm confiança 'alta', construa a resposta final. Coloque-a em `"resposta_final"`. Defina `proximo_passo` como `"concluido"`. Senão, volte ao passo com a confiança mais baixa.
91
  ---
92
  **ESTRUTURA JSON DE SAÍDA OBRIGATÓRIA:**
93
  {
@@ -119,9 +125,6 @@ Você é um Conselheiro de IA em um processo de refinamento. Sua resposta anteri
119
  3. **Reescreva sua resposta final**, integrando a correção de forma natural e fluida em sua análise original.
120
  4. **Justifique brevemente a mudança:** No final da sua nova resposta, adicione uma pequena nota explicando por que a correção era importante. Comece esta nota com "Nota de Refinamento:".
121
 
122
- **Exemplo de como justificar:**
123
- "Nota de Refinamento: A correção acima é crucial porque o veto legal a penas alternativas no contexto da Lei Maria da Penha muda fundamentalmente o desfecho prático para a ré, mesmo com uma pena mínima."
124
-
125
  Produza apenas a resposta final e corrigida, pronta para o usuário.
126
  """
127
 
@@ -165,12 +168,14 @@ def handle_chat(mensagem, historico_chat_gradio, modo_sabio, modo_supervisor):
165
  estado_pipeline_global = resetar_estado()
166
  historico_conversa_llm = []
167
 
 
168
  historico_conversa_llm.append({"role": "user", "parts": [mensagem]})
169
 
 
170
  if estado_pipeline_global["duvida_inicial"] is None:
171
  estado_pipeline_global["duvida_inicial"] = mensagem
172
 
173
- # Monta o prompt base, injetando a diretiva do Amigo Sábio se ativado
174
  prompt_base = PROMPT_SISTEMA_METODOLOGICO
175
  if modo_sabio and CONTEXTO_EPICTETO:
176
  prompt_base = f"""{DIRETIVA_AMIGO_SABIO}
@@ -238,7 +243,8 @@ Agora, aplique esta persona e seus princípios ao executar a seguinte metodologi
238
  # Segunda chamada à API para o Conselheiro se corrigir
239
  response_corrigida = counselor_model.generate_content(prompt_refinamento)
240
  resposta_final_para_usuario = response_corrigida.text
241
- historico_conversa_llm.append({"role": "model", "parts": [resposta_final_para_usuario]}) # Adiciona a resposta corrigida ao histórico
 
242
 
243
  return resposta_final_para_usuario
244
 
 
30
 
31
  # Inicializa os dois modelos separadamente
32
  counselor_model = genai.GenerativeModel('gemini-flash-latest')
33
+ supervisor_model = genai.GenerativeModel('gemini-flash-latest')
34
 
35
 
36
  # --- 3. DEFINIÇÃO DOS PROMPTS ---
 
56
  Sua função é conduzir uma conversa para entender 100% da dúvida de um usuário ANTES de respondê-la.
57
  Sua SAÍDA DEVE SER SEMPRE E SOMENTE um objeto JSON válido.
58
 
59
+ **PROTOCOLO DE EXECUÇÃO OBRIGATÓRIO (COM AJUSTES DE DIÁLOGO E FLUXO):**
60
+
61
+ **Passo 0: Análise Preliminar e Detecção de Intenção do Usuário (NOVO)**
62
+ - **Ação:** Antes de aplicar o protocolo de 6 passos, analise a mensagem do usuário.
63
+ - **Decisão:**
64
+ - Se a mensagem for uma pergunta direta sobre um fato específico (ex: "Qual o nome daquela atriz?") ou uma solicitação de informação isolada, **responda diretamente** (não use o protocolo de 6 passos). Em seguida, se apropriado, tente reconectar com o fluxo ou perguntar se o usuário quer prosseguir com a análise da dúvida anterior.
65
+ - Se a mensagem for uma mudança de assunto que **dialoga com o contexto anterior** (ex: após falar de carros, o usuário pergunta sobre pneus), tente integrar essa nova informação ao protocolo ou crie uma ponte para ela.
66
+ - Se a mensagem for uma **mudança de assunto radical** ou uma solicitação que não se encaixa no protocolo, responda diretamente à solicitação e **RESETE o estado da pipeline**.
67
+ - Se a mensagem for uma **pergunta de esclarecimento** sua, trate-a como tal, use a Persona de Amigo Sábio, e espere a resposta do usuário.
68
+ - Se o modelo não conseguir determinar a intenção clara (dúvida ambígua que precisa de mais dados), ele deve seguir para o Passo 1, tentando um diálogo mais exploratório.
69
+ - **Saída JSON (se for usar o protocolo):** `{"proximo_passo": "passo_1_clareza", ...}`. Se responder diretamente ou resetar, a função `handle_chat` lidará com isso.
70
+
71
  ---
72
  **Passo 1: Análise Primária (Clareza)**
73
+ - **Decisão:** Se a clareza for 'baixa', use a persona do Amigo Sábio para fazer uma pergunta de esclarecimento. Senão, `proximo_passo` = `"passo_2_proposito"`.
74
  ---
75
  **Passo 2: Análise de Propósito (Para Que)**
76
+ - **Decisão:** Se a confiança no propósito for 'baixa', use a persona do Amigo Sábio para formular uma pergunta de esclarecimento conversacional, mostrando que entendeu o tópico geral. Senão, `proximo_passo` = `"passo_3_motivacao"`.
77
  ---
78
  **Passo 3: Análise de Motivação (Porquê)**
79
+ - **Decisão:** Se a confiança na motivação for 'baixa', use a persona do Amigo Sábio para perguntar sobre o que despertou o interesse. Senão, `proximo_passo` = `"passo_4_coerencia"`.
80
  ---
81
  **Passo 4: Análise de Coerência**
82
+ - **Decisão:** Se a coerência for 'baixa', use a persona do Amigo Sábio para perguntar, resolvendo a contradição. Senão, `proximo_passo` = `"passo_5_ambiguidade"`.
83
  ---
84
  **Passo 5: Análise de Ambiguidade de Cenário (Validação de Perspectiva)**
85
  - **Meta:** A dúvida pode ter múltiplas respostas válidas dependendo de uma perspectiva oculta?
86
+ - **Decisão:** Se existem vários cenários válidos, sua tarefa é **formular uma pergunta de esclarecimento conversacional e aberta**, usando a persona do Amigo Sábio.
87
+ - **REGRA DE OURO PARA PERGUNTAS:** Não use menus. Comece com uma frase de engajamento, crie uma ponte de entendimento, e termine com uma pergunta aberta.
 
 
 
 
88
  - **Exemplo de Pergunta Conversacional Perfeita:**
89
  Dúvida: "Me fale sobre carros". A pergunta no campo `pergunta_para_usuario` DEVE ser algo como:
90
  *"Sério, interessante, eu acho esse mundo fascinante! Os detalhes da engenharia são curiosos. Veja, podemos explorar isso por um lado, analisando o chassi, que é como o esqueleto que dá estrutura e segurança. E também do outro, o motor, que é o coração que dá potência ao carro. Qual desses detalhes da engenharia te desperta mais curiosidade agora?"*
 
93
  ---
94
  **Passo 6: Geração da Resposta Final**
95
  - **Meta:** Tenho 100% de clareza para dar uma resposta definitiva.
96
+ - **Decisão:** Se todos os passos têm confiança 'alta', construa a resposta final, adaptada à persona do Amigo Sábio e à sua análise. Coloque-a em `"resposta_final"`. Defina `proximo_passo` como `"concluido"`. Senão, volte ao passo com a confiança mais baixa.
97
  ---
98
  **ESTRUTURA JSON DE SAÍDA OBRIGATÓRIA:**
99
  {
 
125
  3. **Reescreva sua resposta final**, integrando a correção de forma natural e fluida em sua análise original.
126
  4. **Justifique brevemente a mudança:** No final da sua nova resposta, adicione uma pequena nota explicando por que a correção era importante. Comece esta nota com "Nota de Refinamento:".
127
 
 
 
 
128
  Produza apenas a resposta final e corrigida, pronta para o usuário.
129
  """
130
 
 
168
  estado_pipeline_global = resetar_estado()
169
  historico_conversa_llm = []
170
 
171
+ # Adiciona a mensagem do usuário ao histórico para o LLM
172
  historico_conversa_llm.append({"role": "user", "parts": [mensagem]})
173
 
174
+ # Define a dúvida inicial se for a primeira mensagem
175
  if estado_pipeline_global["duvida_inicial"] is None:
176
  estado_pipeline_global["duvida_inicial"] = mensagem
177
 
178
+ # --- Lógica de Construção do Prompt ---
179
  prompt_base = PROMPT_SISTEMA_METODOLOGICO
180
  if modo_sabio and CONTEXTO_EPICTETO:
181
  prompt_base = f"""{DIRETIVA_AMIGO_SABIO}
 
243
  # Segunda chamada à API para o Conselheiro se corrigir
244
  response_corrigida = counselor_model.generate_content(prompt_refinamento)
245
  resposta_final_para_usuario = response_corrigida.text
246
+ # Adiciona a resposta corrigida ao histórico
247
+ historico_conversa_llm.append({"role": "model", "parts": [resposta_final_para_usuario]})
248
 
249
  return resposta_final_para_usuario
250