Zo zet je een Weaviate vectordatabase op voor slimme AI applicaties

Weaviate is een open-source zoekmachine die is ontworpen voor het efficiënt doorzoeken van grote hoeveelheden ongestructureerde data, met name voor natuurlijke taalverwerking.


Het gebruikt vectorrepresentaties om tekstuele data te organiseren en ondersteunt semantische vectorzoekopdrachten, waardoor gebruikers informatie kunnen vinden op basis van de overeenkomst van deze data.


Vectoren zijn wiskundige representaties van data, zoals woorden of concepten. Ze vangen de betekenis en context van de data op een numerieke manier. Weaviate maakt gebruik van deze vectoren om gelijkenissen tussen verschillende stukken informatie te begrijpen.


Als twee vectoren dicht bij elkaar liggen, betekent dit dat de bijbehorende data qua betekenis en context vergelijkbaar zijn. Bijvoorbeeld het woord 'hond' en 'kat' zullen in de vectorruimte dichter bij elkaar liggen dan 'hond' en 'polka'.


Het doel van Weaviate is om snel en effectief informatie op te halen voor diverse toepassingen, zoals natuurlijke taalverwerking en aanbevelingssystemen.


Wil je weten hoe je zo'n vectordatabase opzet, lees dan verder!



Helaas is de Weaviate omgeving niet direct op jouw computer te installeren (nou ja, met heel veel technische kennis misschien wel). Hiervoor dien je eerst Docker te installeren. Als je Docker nog niet hebt geinstalleerd, kijk dan op de website van Docker.


Weaviate is een database, en bevat niet de technologie om zelf vectoren te maken. Gelukkig biedt Weaviate wel de mogelijkheid om modules aan te roepen die dit werk voor je kunnen doen. Wij gaan gebruik maken van de API van OpenAI. Hiervoor dien je een OpenAI API-sleutel te maken, zodat we hun taalmodel kunnen gebruiken. Volg hiervoor de volgende stappen:

1. Ga naar openai.com.

2. Klik op inloggen - meld je aan als je dat nog niet hebt gedaan.

3. Klik op API.

4. Klik vervolgens in het linker uitschuifmenu op de optie API keys.

5. Op de API-keysectie klik je op Create new secret key en volg je de stappen.

6. Om de key te kunnen gebruiken moet je de environment variabele OPENAI_API_KEY aanmaken en de API-key als waarde invullen.


Als je Docker hebt geinstalleerd, en een OpenAI API key hebt gemaakt, kun je een Docker image maken voor je Weaviate databaseomgeving. Maak hiervoor een nieuwe map en noem die (bijvoorbeeld) 'Weaviate-database'. Maak in die map een bestand genaamd 'Dockerfile'. In de dockerfile zet je de volgende tekst:



    # 1. Neem de weaviate image, versie 1.22.0

    FROM semitechnologies/weaviate:1.22.0


    # 2. Stel de benodigde omgevingsvariabelen in

    ENV AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true

    ENV AUTHENTICATION_SCHEME_NONE_ENABLED=true

    ENV PERSISTENCE_DATA_PATH='/var/lib/weaviate'

    ENV DEFAULT_VECTORIZER_MODULE='text2vec-openai'

    ENV ENABLE_MODULES='text2vec-openai,generative-openai'


    # 3. Zet poort 8080 open naar buiten

    EXPOSE 8080


    # 4. Zet de juiste http-configuratie als de container start

    CMD ["--host", "0.0.0.0", "--port", "8080", "--scheme", "http"]



Voordat we nu een container kunnen starten, moeten we van deze Dockerfile nog een image bouwen. Om de image te bouwen moet je met je terminal/CMD naar de map 'Weaviate-database' gaan en het volgende uitvoeren.



   docker build -t weaviate-database .



Als de image is gebouwd, moeten we nog één ding doen voordat de container gestart kan worden. Maak een los bestand 'vars.env' aan waarin we de OpenAI API key zetten. Dit doe je als volgt:



  OPENAI_APIKEY=hier-komt-jouw-openai-api-key



Nu ben je klaar om de container te starten! Pak weer je terminal/CMD erbij en voer het volgende commando uit:



   docker run -p 8080:8080 --env-file vars.env -d weaviate-database



Door in Docker Desktop te kijken of het volgende commando uit te voeren in je terminal/CMD kan je controleren of je container inderdaad actief is:



   docker ps



Als alles gelukt is, moet je een container zien draaien op poort 8080 met de image weaviate-database:



Je bent nu klaar om je vector database te gebruiken!