monikode commited on
Commit
1e84b5e
1 Parent(s): c2fdcba

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +65 -0
app.py ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import faiss
3
+ from datasets import load_dataset
4
+ from sentence_transformers import SentenceTransformer
5
+ from transformers import pipeline
6
+ import streamlit as st
7
+
8
+ # Carregar o dataset Customer Support Conversations do Hugging Face
9
+ dataset = load_dataset("bitext/Bitext-customer-support-llm-chatbot-training-dataset", split="train")
10
+ questions = []
11
+ answers = []
12
+
13
+ for i, item in enumerate(dataset):
14
+ if i >= 1000: # Limita a 10 amostras
15
+ break
16
+ questions.append(item["instruction"])
17
+ answers.append(item["response"])
18
+
19
+ # Configuração do modelo de embeddings
20
+ embedder = SentenceTransformer('multi-qa-MiniLM-L6-cos-v1')
21
+
22
+ # Geração dos embeddings das perguntas
23
+ question_embeddings = embedder.encode(questions, convert_to_tensor=False)
24
+
25
+ # Indexação com FAISS
26
+ dimension = question_embeddings.shape[1]
27
+ index = faiss.IndexFlatL2(dimension)
28
+ index.add(np.array(question_embeddings))
29
+
30
+ # Pipeline de geração de resposta
31
+ generator = pipeline("text-generation", model="openai-community/gpt2")
32
+
33
+
34
+ # Função de recuperação de documentos
35
+ def retrieve_documents(query, top_k=2):
36
+ query_embedding = embedder.encode([query])
37
+ distances, indices = index.search(np.array(query_embedding), top_k)
38
+ retrieved = [{"text": answers[idx], "score": distances[0][i]} for i, idx in enumerate(indices[0])]
39
+ return retrieved
40
+
41
+ # Função para geração de resposta com base nos documentos recuperados
42
+ def generate_answer(query):
43
+ # Recuperação dos documentos
44
+ retrieved_docs = retrieve_documents(query)
45
+ context = " ".join([doc["text"] for doc in retrieved_docs])
46
+
47
+ # Geração da resposta com o contexto
48
+ input_text = f"Contexto: {context} Pergunta: {query}"
49
+ answer = generator(input_text, max_length=50, do_sample=False)
50
+
51
+ # Cálculo da pontuação de confiança
52
+ confidence_score = np.mean([doc["score"] for doc in retrieved_docs])
53
+ return answer[0]['generated_text'], confidence_score
54
+
55
+ # Interface com Streamlit
56
+ st.title("Assistente de Suporte ao Cliente com RAG - Hugging Face")
57
+
58
+ question = st.text_input("Digite sua pergunta:")
59
+
60
+ if st.button("Obter Resposta"):
61
+ answer, confidence = generate_answer(question)
62
+ st.write("Resposta:", answer)
63
+ st.write("Pontuação de Confiança:", round(confidence, 2))
64
+
65
+