DHEIVER commited on
Commit
5558e3e
·
verified ·
1 Parent(s): 9962ed4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -13
app.py CHANGED
@@ -1,7 +1,7 @@
1
  import gradio as gr
2
  import torch
3
  from sentence_transformers import SentenceTransformer, util
4
- # MUDANÇA: Usaremos AutoTokenizer e AutoModelForCausalLM para o novo modelo
5
  from transformers import AutoTokenizer, AutoModelForCausalLM
6
  from pypdf import PdfReader
7
  import os
@@ -11,7 +11,7 @@ import os
11
  print("Carregando o modelo de recuperação (Sentence Transformer)...")
12
  retriever_model = SentenceTransformer('all-MiniLM-L6-v2')
13
 
14
- # MUDANÇA: Carregando o modelo DeepSeek
15
  print("Carregando o modelo de geração (DeepSeek)...")
16
  # Nota: "trust_remote_code=True" é necessário para carregar a arquitetura do DeepSeek
17
  generator_tokenizer = AutoTokenizer.from_pretrained(
@@ -69,15 +69,14 @@ def answer_question(question, knowledge_state):
69
 
70
  knowledge_base, knowledge_base_embeddings = knowledge_state
71
 
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
- # MUDANÇA: Aumentado para 7 para mais contexto
76
  top_k = min(7, len(knowledge_base))
77
  top_results = torch.topk(cosine_scores, k=top_k, dim=-1)
78
  retrieved_context = "\n---\n".join([knowledge_base[i] for i in top_results.indices[0]])
79
 
80
- # Verificação para garantir que o contexto não está vazio
81
  if not retrieved_context.strip():
82
  return "Não foi possível encontrar um contexto relevante nos documentos para responder a esta pergunta."
83
 
@@ -85,13 +84,15 @@ def answer_question(question, knowledge_state):
85
  print(f"Pergunta: {question}")
86
  print(f"Contexto Recuperado (Top {top_k}):\n{retrieved_context}")
87
 
88
- # MUDANÇA PRINCIPAL: Prompt mais inteligente para interpretar documentos técnicos
89
  prompt = f"""### Instruction:
90
- Você é um assistente de IA especialista em análise de documentos técnicos. Sua tarefa é analisar o 'Contexto' para responder à 'Pergunta'.
91
- Regras importantes:
92
- 1. Use APENAS a informação do 'Contexto'. Não invente nada.
93
- 2. Não use cabeçalhos de tabelas ou definições de siglas (como 'VI' ou 'VRef') como respostas. Encontre os valores reais associados a eles no texto.
94
- 3. Responda de forma direta e concisa.
 
 
95
 
96
  **Contexto:**
97
  {retrieved_context}
@@ -108,7 +109,7 @@ Regras importantes:
108
  # Ajuste nos parâmetros de geração
109
  outputs = generator_model.generate(
110
  input_ids,
111
- # MUDANÇA: Aumentado para permitir respostas mais detalhadas
112
  max_new_tokens=350,
113
  do_sample=False,
114
  eos_token_id=generator_tokenizer.eos_token_id,
@@ -126,7 +127,7 @@ with gr.Blocks(theme=gr.themes.Soft()) as interface:
126
  knowledge_state = gr.State()
127
  gr.Markdown(
128
  """
129
- # 🤖 RAG - Auditor de Documentos (v7 - Prompt Inteligente)
130
  **1. Carregue seus arquivos**: Envie um ou mais certificados ou documentos nos formatos `.pdf` ou `.txt`.
131
  **2. Processe os arquivos**: Clique no botão para criar a base de conhecimento.
132
  **3. Faça perguntas**: Após o processamento, faça perguntas sobre o conteúdo dos documentos.
 
1
  import gradio as gr
2
  import torch
3
  from sentence_transformers import SentenceTransformer, util
4
+ # Usaremos AutoTokenizer e AutoModelForCausalLM para o novo modelo
5
  from transformers import AutoTokenizer, AutoModelForCausalLM
6
  from pypdf import PdfReader
7
  import os
 
11
  print("Carregando o modelo de recuperação (Sentence Transformer)...")
12
  retriever_model = SentenceTransformer('all-MiniLM-L6-v2')
13
 
14
+ # Carregando o modelo de geração DeepSeek
15
  print("Carregando o modelo de geração (DeepSeek)...")
16
  # Nota: "trust_remote_code=True" é necessário para carregar a arquitetura do DeepSeek
17
  generator_tokenizer = AutoTokenizer.from_pretrained(
 
69
 
70
  knowledge_base, knowledge_base_embeddings = knowledge_state
71
 
72
+ # Etapa de Recuperação
73
  question_embedding = retriever_model.encode(question, convert_to_tensor=True)
74
  cosine_scores = util.cos_sim(question_embedding, knowledge_base_embeddings)
75
+ # Aumentado para 7 para mais contexto
76
  top_k = min(7, len(knowledge_base))
77
  top_results = torch.topk(cosine_scores, k=top_k, dim=-1)
78
  retrieved_context = "\n---\n".join([knowledge_base[i] for i in top_results.indices[0]])
79
 
 
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
 
 
84
  print(f"Pergunta: {question}")
85
  print(f"Contexto Recuperado (Top {top_k}):\n{retrieved_context}")
86
 
87
+ # MUDANÇA PRINCIPAL: Prompt com regras explícitas de extração de entidades
88
  prompt = f"""### Instruction:
89
+ Você é um assistente de IA especialista em extrair informações de documentos técnicos. Analise o 'Contexto' para responder à 'Pergunta' seguindo estas regras rigorosamente:
90
+
91
+ **Regras de Extração:**
92
+ 1. **Use APENAS a informação do 'Contexto'.** Não adicione informações externas.
93
+ 2. **Para perguntas sobre 'cliente':** Procure por linhas que comecem com "Cliente:", "Contratante:", ou um nome de empresa claro. Ignore frases genéricas sobre escopo ou lotes.
94
+ 3. **Para perguntas sobre 'instrumento':** Procure por linhas que comecem com "Instrumento:", "Descrição:", "Objeto:", "TAG:", ou um modelo específico. Ignore descrições de métodos de calibração.
95
+ 4. **Para perguntas sobre 'título' ou 'resumo':** Resuma os dados principais, como o tipo de documento (ex: Certificado de Calibração), o nome do cliente e o instrumento calibrado.
96
 
97
  **Contexto:**
98
  {retrieved_context}
 
109
  # Ajuste nos parâmetros de geração
110
  outputs = generator_model.generate(
111
  input_ids,
112
+ # Aumentado para permitir respostas mais detalhadas
113
  max_new_tokens=350,
114
  do_sample=False,
115
  eos_token_id=generator_tokenizer.eos_token_id,
 
127
  knowledge_state = gr.State()
128
  gr.Markdown(
129
  """
130
+ # 🤖 RAG - Auditor de Documentos (v8 - Extração de Entidades)
131
  **1. Carregue seus arquivos**: Envie um ou mais certificados ou documentos nos formatos `.pdf` ou `.txt`.
132
  **2. Processe os arquivos**: Clique no botão para criar a base de conhecimento.
133
  **3. Faça perguntas**: Após o processamento, faça perguntas sobre o conteúdo dos documentos.