Categories:

Samenvatting

FunctionaliteitLocatie in codeWaarom belangrijk?
EmbeddingsfunctionaliteitSentenceTransformerWrapper
FAISS.from_texts
retrieve_documents
Zorgt voor semantische matching tussen vragen en documenten.
NLP-functionaliteitpipeline("text2text-generation")
generate_answer
Zorgt voor geformuleerde antwoorden in natuurlijke taal, gebaseerd op de context.

#Deze code combineert document retrieval via een FAISS-vectorstore

en antwoordgeneratie via Flan-T5.

#Stap 1: Importeer vereiste bibliotheken

!pip install -U langchain sentence-transformers faiss-cpu langchain-community

from sentence_transformers import SentenceTransformer
from langchain.vectorstores import FAISS
from langchain.embeddings.base import Embeddings
from langchain.docstore.document import Document
from transformers import pipeline
from google.colab import files

#2. Definieer een Wrapper voor SentenceTransformer

class SentenceTransformerWrapper(Embeddings):
def init(self, model_name=”sentence-transformers/all-MiniLM-L6-v2″):
self.model = SentenceTransformer(model_name)

def embed_documents(self, texts):
    """Genereer embeddings voor een lijst met teksten."""
    return self.model.encode(texts, show_progress_bar=True)

def embed_query(self, query):
    """Genereer een embedding voor een enkele vraag."""
    return self.model.encode([query], show_progress_bar=False)[0]

#Initialiseer het embeddingsmodel via de wrapper

embeddings_model = SentenceTransformerWrapper()

3. Initialiseer Flan-T5 model pipeline

#nlp_pipeline = pipeline(“text2text-generation”, model=”google/flan-t5-base”)

#Gebruik BLOOMZ als krachtiger model

nlp_pipeline = pipeline(“text-generation”, model=”bigscience/bloomz-1b7″)

#4. Upload documenten

uploaded = files.upload()
documents = []

for file_name, file_content in uploaded.items():
content = file_content.decode(‘windows-1252’) # Decodeer inhoud
texts = content.split(‘\n’)
file_documents = [Document(page_content=text.strip(), metadata={“source”: file_name}) for text in texts if text.strip()]
documents.extend(file_documents)

print(f”Aantal documenten: {len(documents)}”)

#5. Maak de FAISS-vectorstore

document_texts = [doc.page_content for doc in documents]
vectorstore = FAISS.from_texts(document_texts, embeddings_model)

#6. Functie voor ophalen van relevante documenten

#def retrieve_documents(vraag, k=3):

#results = vectorstore.similarity_search(vraag, k=k)

#return [result.page_content for result in results]

def retrieve_documents(vraag, k=3):
“””Haal de top k relevante documenten op uit de vectorstore.”””
# Controleer of vectorstore is aangemaakt
if ‘vectorstore’ not in globals():
raise NameError(“Vectorstore is niet gedefinieerd. Zorg ervoor dat je FAISS-vectorstore hebt aangemaakt.”)

# Zoek naar relevante documenten
results = vectorstore.similarity_search(vraag, k=k)
return [doc.page_content for doc in results]

#7. Functie voor antwoord genereren met BLOOMZ

#NEW

#def generate_answer(vraag, context):

#prompt = (

#f”Gebruik alleen de relevante informatie uit onderstaande tekst om de vraag te beantwoorden:\n”

#f”{context}\n\n”

#f”Vraag: {vraag}\n”

#f”Antwoord (alleen waar lunchpauze in voorkomt):”

)

print(f”DEBUG CONTEXTTTTTT:\n{context}”)

#ORG

def generate_answer(vraag, context):

prompt = (
    f"Gebruik de onderstaande informatie om de vraag te beantwoorden:\n"
    f"{context}\n\n"
    f"Vraag: {vraag}\n"
    f"Antwoord (geef alleen het relevante deel van de context):"
)


#prompt = f"Gebruik de onderstaande informatie om de vraag te beantwoorden:{context}\n\nVraag: {vraag}\nAntwoord (geef alleen het relevante deel van de context):"

#prompt = f"Context: {context}\n\nVraag: {vraag}\nAntwoord:"

print(f"DEBUG Prompt:\n{prompt}")  # Debugging
result = nlp_pipeline(prompt, max_length=200, truncation=True, num_return_sequences=1)
print(f"DEBUG Result:\n{result}")  # Debugging
print(f"DEBUG Result[0] Generated tekst:\n{result[0]['generated_text']}")  # Debugging
return result[0]['generated_text']

#OPTIE 1 Filter de context!! Hoort bij: 8. #Hoofdfunctie: Vraag en antwoord

#def filter_context(context, vraag):

# “””Filter de context op basis van trefwoorden in de vraag.”””
# vraag_trefwoorden = [woord.lower() for woord in vraag.split()] # Vraag splitsen in trefwoorden
# relevante_zinnen = []
# for zin in context.split(‘\n’):
# # Voeg zinnen toe die een overlap hebben met trefwoorden in de vraag
# if any(trefwoord in zin.lower() for trefwoord in vraag_trefwoorden):
# relevante_zinnen.append(zin)
# return “\n”.join(relevante_zinnen)

#8. Hoofdfunctie: Vraag en antwoord

def kba_antwoord(vraag):
relevante_documenten = retrieve_documents(vraag)
context = “\n”.join(relevante_documenten)

# OPTIE 1 Filter de context !!
#gefilterde_context = filter_context(context, vraag)
#if not gefilterde_context:
# return “Geen relevante informatie gevonden om deze vraag te beantwoorden.”
#print(f”Gefilterde context:\n{filter_context(context, vraag)}”)
#antwoord = generate_answer(vraag, gefilterde_context)

# OPTIE 2 Origineel
antwoord = generate_answer(vraag, context)

print(f"DEBUG Gevonden documenten:\n{relevante_documenten}")
print(f"DEBUG antwoord in kba_antwoord:\n{antwoord}")

return antwoord

#Testvraag

#vraag = “Wat moet ik doen met bedrijfsapparatuur?”

vraag = “Hoe laat is het lunchpauze?”
antwoord = kba_antwoord(vraag)
print(f”EINDE DEBUG antwoord:\n{antwoord}”)

#print(f”Vraag : {vraag}”)

No responses yet

Leave a Reply

Your email address will not be published. Required fields are marked *