


{"id":4062,"date":"2024-12-19T23:17:25","date_gmt":"2024-12-19T23:17:25","guid":{"rendered":"https:\/\/yininit.nl\/?post_type=blossom-portfolio&#038;p=4062"},"modified":"2024-12-19T23:21:54","modified_gmt":"2024-12-19T23:21:54","slug":"code","status":"publish","type":"blossom-portfolio","link":"https:\/\/yininit.nl\/index.php\/portfolio\/code\/","title":{"rendered":"KBA Code"},"content":{"rendered":"\n<p>#Deze code combineert document retrieval via een FAISS-vectorstore en antwoordgeneratie via BLOOMZ.<\/p>\n\n\n\n<p><strong>#Stap 1: Importeer vereiste bibliotheken<\/strong><\/p>\n\n\n\n<p>#zie requirements.txt voor alle benodigde pip install zoals: !pip install -U langchain sentence-transformers faiss-cpu langchain-community<\/p>\n\n\n\n<p>from sentence_transformers import SentenceTransformer<br>from langchain.vectorstores import FAISS<br>from langchain.embeddings.base import Embeddings<br>from langchain.docstore.document import Document<br>from transformers import pipeline<br>from google.colab import files <\/p>\n\n\n\n<p># let op, bovenstaande google.colab is niet van toepassing op Productieomgeving!<\/p>\n\n\n\n<p><strong>#2. Definieer een Wrapper voor SentenceTransformer<\/strong><\/p>\n\n\n\n<p>class SentenceTransformerWrapper(Embeddings):<br>def <strong>init<\/strong>(self, model_name=&#8221;sentence-transformers\/all-MiniLM-L6-v2&#8243;):<br>self.model = SentenceTransformer(model_name)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def embed_documents(self, texts):\n    \"\"\"Genereer embeddings voor een lijst met teksten.\"\"\"\n    return self.model.encode(texts, show_progress_bar=True)\n\ndef embed_query(self, query):\n    \"\"\"Genereer een embedding voor een enkele vraag.\"\"\"\n    return self.model.encode(&#91;query], show_progress_bar=False)&#91;0]<\/code><\/pre>\n\n\n\n<p>#Initialiseer het embeddingsmodel via de wrapper<\/p>\n\n\n\n<p>embeddings_model = SentenceTransformerWrapper()<\/p>\n\n\n\n<p><strong>#3. Initialiseer BLOOMZ model pipeline<\/strong><\/p>\n\n\n\n<p>#Gebruik BLOOMZ als krachtiger model dan bijv flan-t5-base<\/p>\n\n\n\n<p>nlp_pipeline = pipeline(&#8220;text-generation&#8221;, model=&#8221;bigscience\/bloomz-1b7&#8243;)<\/p>\n\n\n\n<p><strong>#4. Upload documenten<\/strong><\/p>\n\n\n\n<p>uploaded = files.upload()<br>documents = []<\/p>\n\n\n\n<p>for file_name, file_content in uploaded.items():<br>content = file_content.decode(&#8216;windows-1252&#8217;) # Decodeer inhoud<br>texts = content.split(&#8216;\\n&#8217;)<br>file_documents = [Document(page_content=text.strip(), metadata={&#8220;source&#8221;: file_name}) for text in texts if text.strip()]<br>documents.extend(file_documents)<\/p>\n\n\n\n<p>print(f&#8221;Aantal documenten: {len(documents)}&#8221;)<\/p>\n\n\n\n<p><strong>#5. Maak de FAISS-vectorstore<\/strong><\/p>\n\n\n\n<p>document_texts = [doc.page_content for doc in documents]<br>vectorstore = FAISS.from_texts(document_texts, embeddings_model)<\/p>\n\n\n\n<p><strong>#6. Functie voor ophalen van relevante documenten<\/strong><\/p>\n\n\n\n<p>#def retrieve_documents(vraag, k=3):<\/p>\n\n\n\n<p>#results = vectorstore.similarity_search(vraag, k=k)<\/p>\n\n\n\n<p>#return [result.page_content for result in results]<\/p>\n\n\n\n<p>def retrieve_documents(vraag, k=3):<br>&#8220;&#8221;&#8221;Haal de top k relevante documenten op uit de vectorstore.&#8221;&#8221;&#8221;<br># Controleer of vectorstore is aangemaakt<br>if &#8216;vectorstore&#8217; not in globals():<br>raise NameError(&#8220;Vectorstore is niet gedefinieerd. Zorg ervoor dat je FAISS-vectorstore hebt aangemaakt.&#8221;)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Zoek naar relevante documenten\nresults = vectorstore.similarity_search(vraag, k=k)\nreturn &#91;doc.page_content for doc in results]<\/code><\/pre>\n\n\n\n<p><strong>#7. Functie voor antwoord genereren met BLOOMZ<\/strong><\/p>\n\n\n\n<p><strong>#NEW<\/strong><\/p>\n\n\n\n<p>#def generate_answer(vraag, context):<\/p>\n\n\n\n<p>#prompt = (<\/p>\n\n\n\n<p>#f&#8221;Gebruik alleen de relevante informatie uit onderstaande tekst om de vraag te beantwoorden:\\n&#8221;<\/p>\n\n\n\n<p>#f&#8221;{context}\\n\\n&#8221;<\/p>\n\n\n\n<p>#f&#8221;Vraag: {vraag}\\n&#8221;<\/p>\n\n\n\n<p>#f&#8221;Antwoord (alleen waar lunchpauze in voorkomt):&#8221;<\/p>\n\n\n\n<p>#)<\/p>\n\n\n\n<p>#print(f&#8221;DEBUG CONTEXT:\\n{context}&#8221;)<\/p>\n\n\n\n<p><strong>#ORG<\/strong><\/p>\n\n\n\n<p>def generate_answer(vraag, context):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>prompt = (\n    f\"Gebruik de onderstaande informatie om de vraag te beantwoorden:\\n\"\n    f\"{context}\\n\\n\"\n    f\"Vraag: {vraag}\\n\"\n    f\"Antwoord (geef alleen het relevante deel van de context):\"\n)\n\n\n#prompt = f\"Gebruik de onderstaande informatie om de vraag te beantwoorden:{context}\\n\\nVraag: {vraag}\\nAntwoord (geef alleen het relevante deel van de context):\"\n\n#prompt = f\"Context: {context}\\n\\nVraag: {vraag}\\nAntwoord:\"\n\nprint(f\"DEBUG Prompt:\\n{prompt}\")  # Debugging\nresult = nlp_pipeline(prompt, max_length=200, truncation=True, num_return_sequences=1)\nprint(f\"DEBUG Result:\\n{result}\")  # Debugging\nprint(f\"DEBUG Result&#91;0] Generated tekst:\\n{result&#91;0]&#91;'generated_text']}\")  # Debugging\nreturn result&#91;0]&#91;'generated_text']<\/code><\/pre>\n\n\n\n<p><strong>#8. Hoofdfunctie: Vraag en antwoord<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">#def filter_context(context, vraag):<\/h1>\n\n\n\n<p>def kba_antwoord(vraag):<br>relevante_documenten = retrieve_documents(vraag)<br>context = &#8220;\\n&#8221;.join(relevante_documenten)<\/p>\n\n\n\n<p><strong># OPTIE 1 Filter de context<br><\/strong># &#8220;&#8221;&#8221;Filter de context op basis van trefwoorden in de vraag.&#8221;&#8221;&#8221;<br># vraag_trefwoorden = [woord.lower() for woord in vraag.split()] # Vraag splitsen in trefwoorden<br># relevante_zinnen = []<br># for zin in context.split(&#8216;\\n&#8217;):<br># # Voeg zinnen toe die een overlap hebben met trefwoorden in de vraag<br># if any(trefwoord in zin.lower() for trefwoord in vraag_trefwoorden):<br># relevante_zinnen.append(zin)<br># return &#8220;\\n&#8221;.join(relevante_zinnen)<\/p>\n\n\n\n<p><strong># Vervolg OPTIE 1 Filter de context<br><\/strong>#gefilterde_context = filter_context(context, vraag)<br>#if not gefilterde_context:<br># return &#8220;Geen relevante informatie gevonden om deze vraag te beantwoorden.&#8221;<br>#print(f&#8221;Gefilterde context:\\n{filter_context(context, vraag)}&#8221;)<br>#antwoord = generate_answer(vraag, gefilterde_context)<\/p>\n\n\n\n<p><strong># OPTIE 2 Origineel<br><\/strong>antwoord = generate_answer(vraag, context)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>print(f\"DEBUG Gevonden documenten:\\n{relevante_documenten}\")\nprint(f\"DEBUG antwoord in kba_antwoord:\\n{antwoord}\")\n\nreturn antwoord<\/code><\/pre>\n\n\n\n<p><strong>#Testvraag<\/strong><\/p>\n\n\n\n<p>#vraag = &#8220;Wat moet ik doen met bedrijfsapparatuur?&#8221;<\/p>\n\n\n\n<p>vraag = &#8220;Hoe laat is het lunchpauze?&#8221;<br>antwoord = kba_antwoord(vraag)<br>print(f&#8221;EINDE DEBUG antwoord:\\n{antwoord}&#8221;)<\/p>\n\n\n\n<p>#print(f&#8221;Vraag : {vraag}&#8221;)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>#Deze code combineert document retrieval via een FAISS-vectorstore en antwoordgeneratie via BLOOMZ. #Stap 1: Importeer vereiste bibliotheken #zie requirements.txt voor alle benodigde pip install zoals: !pip install -U langchain sentence-transformers faiss-cpu langchain-community from sentence_transformers import SentenceTransformerfrom langchain.vectorstores import FAISSfrom langchain.embeddings.base import Embeddingsfrom langchain.docstore.document import Documentfrom transformers import pipelinefrom google.colab import files # let op, bovenstaande [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"template":"","blossom_portfolio_categories":[17],"class_list":["post-4062","blossom-portfolio","type-blossom-portfolio","status-publish","hentry","blossom_portfolio_categories-kba"],"_links":{"self":[{"href":"https:\/\/yininit.nl\/index.php\/wp-json\/wp\/v2\/blossom-portfolio\/4062","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yininit.nl\/index.php\/wp-json\/wp\/v2\/blossom-portfolio"}],"about":[{"href":"https:\/\/yininit.nl\/index.php\/wp-json\/wp\/v2\/types\/blossom-portfolio"}],"author":[{"embeddable":true,"href":"https:\/\/yininit.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/yininit.nl\/index.php\/wp-json\/wp\/v2\/media?parent=4062"}],"wp:term":[{"taxonomy":"blossom_portfolio_categories","embeddable":true,"href":"https:\/\/yininit.nl\/index.php\/wp-json\/wp\/v2\/blossom_portfolio_categories?post=4062"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}