Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -72,19 +72,23 @@ def answer_question(question, knowledge_state):
|
|
72 |
# Etapa de Recuperação (sem alterações)
|
73 |
question_embedding = retriever_model.encode(question, convert_to_tensor=True)
|
74 |
cosine_scores = util.cos_sim(question_embedding, knowledge_base_embeddings)
|
75 |
-
top_k = min(
|
76 |
top_results = torch.topk(cosine_scores, k=top_k, dim=-1)
|
77 |
retrieved_context = "\n---\n".join([knowledge_base[i] for i in top_results.indices[0]])
|
78 |
|
|
|
|
|
|
|
|
|
79 |
print(f"\n--- Nova Pergunta de Auditoria ---")
|
80 |
print(f"Pergunta: {question}")
|
81 |
print(f"Contexto Recuperado (Top {top_k}):\n{retrieved_context}")
|
82 |
|
83 |
-
# MUDANÇA: Prompt
|
84 |
prompt = f"""### Instruction:
|
85 |
-
|
86 |
|
87 |
-
**
|
88 |
{retrieved_context}
|
89 |
|
90 |
**Pergunta:**
|
@@ -96,17 +100,16 @@ Você é um assistente de IA. Responda à pergunta do usuário ou execute a tare
|
|
96 |
input_ids = generator_tokenizer(prompt, return_tensors="pt").input_ids
|
97 |
input_length = input_ids.shape[1]
|
98 |
|
99 |
-
#
|
100 |
outputs = generator_model.generate(
|
101 |
input_ids,
|
102 |
-
max_new_tokens=
|
103 |
-
do_sample=False,
|
104 |
eos_token_id=generator_tokenizer.eos_token_id,
|
105 |
-
pad_token_id=generator_tokenizer.eos_token_id
|
106 |
)
|
107 |
|
108 |
-
#
|
109 |
-
# Precisamos remover o prompt inicial da saída gerada.
|
110 |
generated_tokens = outputs[0, input_length:]
|
111 |
answer = generator_tokenizer.decode(generated_tokens, skip_special_tokens=True)
|
112 |
|
|
|
72 |
# Etapa de Recuperação (sem alterações)
|
73 |
question_embedding = retriever_model.encode(question, convert_to_tensor=True)
|
74 |
cosine_scores = util.cos_sim(question_embedding, knowledge_base_embeddings)
|
75 |
+
top_k = min(5, len(knowledge_base)) # Aumentado para 5 para mais contexto
|
76 |
top_results = torch.topk(cosine_scores, k=top_k, dim=-1)
|
77 |
retrieved_context = "\n---\n".join([knowledge_base[i] for i in top_results.indices[0]])
|
78 |
|
79 |
+
# Verificação para garantir que o contexto não está vazio
|
80 |
+
if not retrieved_context.strip():
|
81 |
+
return "Não foi possível encontrar um contexto relevante nos documentos para responder a esta pergunta."
|
82 |
+
|
83 |
print(f"\n--- Nova Pergunta de Auditoria ---")
|
84 |
print(f"Pergunta: {question}")
|
85 |
print(f"Contexto Recuperado (Top {top_k}):\n{retrieved_context}")
|
86 |
|
87 |
+
# MUDANÇA PRINCIPAL: Prompt muito mais direto para forçar o uso do contexto
|
88 |
prompt = f"""### Instruction:
|
89 |
+
Use estritamente a informação fornecida no 'Contexto' para responder à 'Pergunta'. Não adicione informações externas. Se a pergunta for sobre explicar o documento, resuma os pontos principais do contexto.
|
90 |
|
91 |
+
**Contexto:**
|
92 |
{retrieved_context}
|
93 |
|
94 |
**Pergunta:**
|
|
|
100 |
input_ids = generator_tokenizer(prompt, return_tensors="pt").input_ids
|
101 |
input_length = input_ids.shape[1]
|
102 |
|
103 |
+
# Ajuste nos parâmetros de geração
|
104 |
outputs = generator_model.generate(
|
105 |
input_ids,
|
106 |
+
max_new_tokens=300, # Aumentado para permitir resumos mais longos
|
107 |
+
do_sample=False,
|
108 |
eos_token_id=generator_tokenizer.eos_token_id,
|
109 |
+
pad_token_id=generator_tokenizer.eos_token_id
|
110 |
)
|
111 |
|
112 |
+
# Decodificação correta para modelos Causal LM
|
|
|
113 |
generated_tokens = outputs[0, input_length:]
|
114 |
answer = generator_tokenizer.decode(generated_tokens, skip_special_tokens=True)
|
115 |
|