Hier is een complete samenvatting van alles wat we gedaan hebben om je KBA (Knowledge Base Agent) te laten draaien met Python, Flask, FAISS, en Render.


Complete Samenvatting: KBA-project Setup

1. Benodigde bestanden

a. Bestandstructuur

Je projectstructuur moet er als volgt uitzien:

plaintext

Code kopiëren

kba-project/ │-- app.py # Hoofdbestand met Flask-code │-- requirements.txt # Lijst met afhankelijkheden │-- Procfile # Start de app op Render │-- .gitignore # Vermijd node_modules, virtualenv │-- static/ # Optioneel, voor statische bestanden (HTML/CSS) │-- uploads/ # Optioneel, map om bestanden te uploaden


2. De Python Code (app.py)

Maak een bestand app.py en kopieer de volgende code erin:

python

Code kopiëren

from flask import Flask, request, jsonify from flask_cors import CORS from sentence_transformers import SentenceTransformer from langchain_community.vectorstores import FAISS from langchain.embeddings.base import Embeddings from langchain.docstore.document import Document from transformers import pipeline import os # Flask-app configuratie app = Flask(__name__) CORS(app) # 1. 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): return self.model.encode(texts, show_progress_bar=False) def embed_query(self, query): return self.model.encode([query], show_progress_bar=False)[0] embeddings_model = SentenceTransformerWrapper() # 2. Initialiseer BLOOMZ pipeline nlp_pipeline = pipeline("text-generation", model="google/flan-t5-small") # 3. Vooraf ingestelde documenten documents = [ Document(page_content="Er wordt een lunchpauze van 30 minuten opgenomen tussen 12:00 en 13:30 uur."), Document(page_content="Overuren worden geregistreerd in het HR-portaal."), Document(page_content="Overuren worden gecompenseerd met 1,5 keer het normale uurtarief."), ] # 4. Maak FAISS vectorstore document_texts = [doc.page_content for doc in documents] vectorstore = FAISS.from_texts(document_texts, embeddings_model) def retrieve_documents(vraag, k=3): results = vectorstore.similarity_search(vraag, k=k) return [doc.page_content for doc in results] def generate_answer(vraag, context): prompt = f"Gebruik de onderstaande informatie om de vraag te beantwoorden:\n{context}\n\nVraag: {vraag}\nAntwoord:" result = nlp_pipeline(prompt, max_length=200, truncation=True, num_return_sequences=1) return result[0]['generated_text'] @app.route("/kba", methods=["POST"]) def answer_question(): if not request.is_json: return jsonify({"error": "Verwacht JSON-data"}), 400 data = request.get_json() vraag = data.get("vraag", "") if not vraag: return jsonify({"error": "Geen vraag ontvangen."}), 400 relevante_documenten = retrieve_documents(vraag) context = "\n".join(relevante_documenten) antwoord = generate_answer(vraag, context) return jsonify({"vraag": vraag, "antwoord": antwoord}) if __name__ == "__main__": from waitress import serve port = int(os.environ.get("PORT", 5000)) print(f"Running production server on port {port}...") serve(app, host="0.0.0.0", port=port)


3. Dependencies: requirements.txt

Maak een bestand genaamd requirements.txt en voeg de volgende afhankelijkheden toe:

plaintext

Code kopiëren

flask flask-cors waitress sentence-transformers langchain langchain-community transformers faiss-cpu torch --index-url https://download.pytorch.org/whl/cpu


4. Render Startinstellingen: Procfile

Maak een bestand Procfile (zonder extensie) en voeg dit toe:

plaintext

Code kopiëren

web: python app.py


5. Git Setup en Commit

  1. Initialiseer Git in je projectmap:bashCode kopiërengit init
  2. Voeg alle bestanden toe:bashCode kopiërengit add .
  3. Commit je wijzigingen:bashCode kopiërengit commit -m "Initial KBA project setup"
  4. Push naar GitHub:
    • Maak een nieuwe repository aan op GitHub.
    • Koppel je repository lokaal:bashCode kopiërengit remote add origin https://github.com/<gebruikersnaam>/<repository-naam>.git
    • Push de code:bashCode kopiërengit push -u origin main

6. Deploy op Render

  1. Log in op Render.
  2. Maak een nieuwe Web Service aan.
  3. Koppel je GitHub repository aan Render.
  4. Zorg ervoor dat je app:
    • Build command: pip install -r requirements.txt
    • Start command: python app.py
  5. Klik op Manual Deploy.

7. Testen van de KBA API

Gebruik cURL of Postman om de API te testen:

Met cURL:

bash

Code kopiëren

curl -X POST -H "Content-Type: application/json" -d "{\"vraag\":\"Hoe laat is het lunchpauze?\"}" https://jouw-app-url.onrender.com/kba


8. Probleemoplossing

  1. “No open ports detected”:
    • Zorg dat je dynamisch os.environ["PORT"] gebruikt in je code.
  2. Out of Memory:
    • Gebruik kleinere modellen zoals flan-t5-small in plaats van grote modellen.
  3. Logs controleren:
    • Ga naar Render Dashboard > Logs en controleer eventuele foutmeldingen.

Samenvatting van Bestanden

  • app.py: De Flask-server en je KBA-functionaliteit.
  • requirements.txt: Alle Python dependencies.
  • Procfile: Startscript voor Render.
  • .gitignore: Om node_modules of andere ongewenste bestanden uit te sluiten.
  • GitHub Repository: Voor versiebeheer en integratie met Render.

Als je opnieuw wilt beginnen:

  1. Maak een nieuwe projectmap.
  2. Kopieer alle bestanden zoals hierboven beschreven.
  3. Push je project naar GitHub en redeploy op Render.

No responses yet

Leave a Reply

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