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
- Initialiseer Git in je projectmap:bashCode kopiëren
git init
- Voeg alle bestanden toe:bashCode kopiëren
git add .
- Commit je wijzigingen:bashCode kopiëren
git commit -m "Initial KBA project setup"
- Push naar GitHub:
- Maak een nieuwe repository aan op GitHub.
- Koppel je repository lokaal:bashCode kopiëren
git remote add origin https://github.com/<gebruikersnaam>/<repository-naam>.git
- Push de code:bashCode kopiëren
git push -u origin main
6. Deploy op Render
- Log in op Render.
- Maak een nieuwe Web Service aan.
- Koppel je GitHub repository aan Render.
- Zorg ervoor dat je app:
- Build command:
pip install -r requirements.txt
- Start command:
python app.py
- Build command:
- 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
- “No open ports detected”:
- Zorg dat je dynamisch
os.environ["PORT"]
gebruikt in je code.
- Zorg dat je dynamisch
- Out of Memory:
- Gebruik kleinere modellen zoals
flan-t5-small
in plaats van grote modellen.
- Gebruik kleinere modellen zoals
- 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:
- Maak een nieuwe projectmap.
- Kopieer alle bestanden zoals hierboven beschreven.
- Push je project naar GitHub en redeploy op Render.
No responses yet