Zephyrnet-logo

Bouw bedrijfsklare generatieve AI-oplossingen met Cohere Foundation-modellen in Amazon Bedrock en Weaviate vectordatabase op AWS Marketplace | Amazon-webservices

Datum:

Generatieve AI-oplossingen hebben het potentieel om bedrijven te transformeren door de productiviteit te verhogen en de klantervaringen te verbeteren, en het gebruik van grote taalmodellen (LLM's) bij deze oplossingen is steeds populairder geworden. Het bouwen van proofs of concept is relatief eenvoudig omdat het geavanceerd is funderingsmodellen zijn verkrijgbaar bij gespecialiseerde providers via een eenvoudige API-oproep. Daarom zijn organisaties van verschillende groottes en in verschillende sectoren begonnen hun producten en processen opnieuw uit te vinden met behulp van generatieve AI.

Ondanks hun rijkdom aan algemene kennis hebben state-of-the-art LLM's alleen toegang tot de informatie waarvoor ze zijn opgeleid. Dit kan leiden tot feitelijke onjuistheden (hallucinaties) wanneer de LLM wordt gevraagd tekst te genereren op basis van informatie die hij tijdens de opleiding niet heeft gezien. Daarom is het van cruciaal belang om de kloof te overbruggen tussen de algemene kennis van de LLM en uw eigen gegevens om het model te helpen nauwkeurigere en contextuelere reacties te genereren en tegelijkertijd het risico op hallucinaties te verminderen. De traditionele manier van finetunen is weliswaar effectief, maar kan rekenintensief en duur zijn en vereist technische expertise. Een andere optie om te overwegen wordt genoemd Ophalen van Augmented Generation (RAG), dat LLM's voorziet van aanvullende informatie uit een externe kennisbron die eenvoudig kan worden bijgewerkt.

Bovendien moeten ondernemingen de gegevensbeveiliging garanderen bij het omgaan met bedrijfseigen en gevoelige gegevens, zoals persoonlijke gegevens of intellectueel eigendom. Dit is vooral belangrijk voor organisaties die actief zijn in sterk gereguleerde sectoren, zoals de financiële dienstverlening, de gezondheidszorg en de biowetenschappen. Daarom is het belangrijk om de stroom van uw gegevens door de generatieve AI-toepassing te begrijpen en te controleren: waar bevindt het model zich? Waar worden de gegevens verwerkt? Wie heeft toegang tot de gegevens? Zullen de gegevens worden gebruikt om modellen te trainen, waardoor uiteindelijk het risico bestaat dat gevoelige gegevens naar openbare LLM's lekken?

In dit bericht wordt besproken hoe bedrijven nauwkeurige, transparante en veilige generatieve AI-applicaties kunnen bouwen en tegelijkertijd de volledige controle over bedrijfseigen gegevens kunnen behouden. De voorgestelde oplossing is een RAG-pijplijn die gebruikmaakt van een AI-native technologiestapel, waarvan de componenten van de grond af aan zijn ontworpen met AI als kern, in plaats van dat AI-mogelijkheden als bijzaak worden toegevoegd. We demonstreren hoe u een end-to-end RAG-applicatie kunt bouwen met behulp van Cohere's taalmodellen door Amazonebodem en Weaviate vectordatabase op AWS Marketplace. De bijbehorende broncode is beschikbaar in de gerelateerde GitHub-repository gehost door Weaviate. Hoewel AWS niet verantwoordelijk is voor het onderhouden of bijwerken van de code in de repository van de partner, moedigen we klanten aan om rechtstreeks contact op te nemen met Weaviate over eventuele gewenste updates.

Overzicht oplossingen

Het volgende architectuurdiagram op hoog niveau illustreert de voorgestelde RAG-pijplijn met een AI-native technologiestapel voor het bouwen van nauwkeurige, transparante en veilige generatieve AI-oplossingen.

Figuur 1: RAG-workflow met behulp van de taalmodellen van Cohere via Amazon Bedrock en een Weaviate-vectordatabase op AWS Marketplace

Als voorbereidingsstap voor de RAG-workflow wordt een vectordatabase, die als externe kennisbron dient, opgenomen met de aanvullende context uit de bedrijfseigen gegevens. De daadwerkelijke RAG-workflow volgt de vier stappen die in het diagram worden geïllustreerd:

  1. De gebruiker voert zijn vraag in.
  2. De gebruikersquery wordt gebruikt om relevante aanvullende context uit de vectordatabase op te halen. Dit wordt gedaan door de vectorinbedding van de gebruikersquery te genereren met een inbeddingsmodel om een ​​vectorzoekopdracht uit te voeren om de meest relevante context uit de database op te halen.
  3. De opgehaalde context en de gebruikersquery worden gebruikt om een ​​promptsjabloon aan te vullen. De ophaal-uitgebreide prompt helpt de LLM een relevantere en nauwkeurigere voltooiing te genereren, waardoor hallucinaties worden geminimaliseerd.
  4. De gebruiker ontvangt een nauwkeuriger antwoord op basis van zijn vraag.

De AI-native technologiestapel die in het architectuurdiagram wordt geïllustreerd, heeft twee belangrijke componenten: Cohere-taalmodellen en een Weaviate-vectordatabase.

Cohere-taalmodellen in Amazon Bedrock

De Cohere-platform brengt taalmodellen met state-of-the-art prestaties naar bedrijven en ontwikkelaars via een eenvoudige API-aanroep. Er zijn twee belangrijke soorten taalverwerkingsmogelijkheden die het Cohere Platform biedt – generatief en inbedding – en elk wordt bediend door een ander type model:

  • Tekstgeneratie Met commando – Ontwikkelaars hebben toegang tot eindpunten die generatieve AI-mogelijkheden aandrijven, waardoor toepassingen mogelijk zijn zoals conversatie, het beantwoorden van vragen, copywriting, samenvattingen, informatie-extractie en meer.
  • Tekstweergave Met embed – Ontwikkelaars hebben toegang tot eindpunten die de semantische betekenis van tekst vastleggen, waardoor toepassingen mogelijk zijn zoals vectorzoekmachines, tekstclassificatie en clustering, en meer. Cohere Embed bestaat in twee vormen: een Engelstalig model en een meertalig model, beide zijn dat het geval nu beschikbaar op Amazon Bedrock.

Het Cohere Platform stelt ondernemingen in staat hun generatieve AI-oplossing privé en veilig aan te passen via de Amazon Bedrock-implementatie. Amazon Bedrock is een volledig beheerde cloudservice waarmee ontwikkelingsteams snel generatieve AI-applicaties kunnen bouwen en schalen terwijl u uw gegevens en applicaties veilig en privé houdt. Uw gegevens worden niet gebruikt voor serviceverbeteringen, worden nooit gedeeld met externe modelaanbieders en blijven in de Regio waar de API-aanroep wordt verwerkt. De gegevens worden tijdens het transport en in rust altijd gecodeerd en u kunt de gegevens coderen met uw eigen sleutels. Amazon Bedrock ondersteunt beveiligingsvereisten, waaronder het in aanmerking komen voor de Amerikaanse Health Insurance Portability and Accountability Act (HIPAA) en naleving van de Algemene Verordening Gegevensbescherming (AVG). Bovendien kunt u uw generatieve AI-applicaties veilig integreren en eenvoudig inzetten met behulp van de AWS-tools waarmee u al bekend bent.

Weaviate vectordatabase op AWS Marketplace

Weviaten is een AI-native vector-database Dat maakt het voor ontwikkelingsteams eenvoudig om veilige en transparante generatieve AI-applicaties te bouwen. Weaviate wordt gebruikt om zowel vectorgegevens als bronobjecten op te slaan en te doorzoeken, wat de ontwikkeling vereenvoudigt door de noodzaak te elimineren om afzonderlijke databases te hosten en te integreren. Weaviate levert semantische zoekprestaties van minder dan een seconde en kan worden geschaald om miljarden vectoren en miljoenen tenants te verwerken. Met een unieke uitbreidbare architectuur integreert Weaviate native met Cohere-basismodellen die in Amazon Bedrock worden ingezet om de gemakkelijke vectorisatie van gegevens te vergemakkelijken en de generatieve mogelijkheden ervan vanuit de database te gebruiken.

De Weaviate AI-native vectordatabase biedt klanten de flexibiliteit om deze in te zetten als een BYOC-oplossing (bring-your-own-cloud) of als een beheerde service. Deze vitrine maakt gebruik van de Weaviate Kubernetes Cluster op AWS Marketplace, onderdeel van het BYOC-aanbod van Weaviate, dat containergebaseerde schaalbare implementatie binnen uw AWS-tenant en VPC mogelijk maakt met slechts een paar klikken met behulp van een AWS CloudFormatie sjabloon. Deze aanpak zorgt ervoor dat uw vectordatabase in uw specifieke regio wordt geïmplementeerd, dicht bij de basismodellen en bedrijfseigen gegevens, om de latentie te minimaliseren, de locatie van gegevens te ondersteunen en gevoelige gegevens te beschermen, terwijl wordt voldaan aan potentiële wettelijke vereisten, zoals de AVG.

Gebruik case-overzicht

In de volgende secties laten we zien hoe u een RAG-oplossing kunt bouwen met behulp van de AI-native technologiestack met Cohere, AWS en Weaviate, zoals geïllustreerd in het oplossingsoverzicht.

Het voorbeeldgebruik genereert gerichte advertenties voor vakantieverblijven op basis van een doelgroep. Het doel is om de gebruikersquery voor de doelgroep (bijvoorbeeld ‘gezin met kleine kinderen’) te gebruiken om de meest relevante vakantievermelding op te halen (bijvoorbeeld een advertentie met speeltuinen in de buurt) en vervolgens een advertentie te genereren voor de opgehaalde vermelding afgestemd op de doelgroep.

Figuur 2: Eerste paar rijen met vakantieverblijven die beschikbaar zijn via Inside Airbnb.

De dataset is beschikbaar vanaf Binnen Airbnb en is gelicentieerd onder a Creative Commons Naamsvermelding 4.0 Internationale licentie. De bijbehorende code vindt u in de GitHub-repository.

Voorwaarden

Als u de AWS-services in de volgende zelfstudie wilt volgen en gebruiken, moet u ervoor zorgen dat u een AWS-account.

Schakel componenten van de AI-native technologiestack in

Eerst moet u de relevante componenten inschakelen die worden besproken in het oplossingenoverzicht in uw AWS-account. Voer de volgende stappen uit:

  1. Links Amazon Bedrock-console, kiezen Toegang tot modellen in het navigatievenster.
  2. Kies Beheer modeltoegang in de rechterbovenhoek.
  3. Selecteer de funderingsmodellen van uw keuze en vraag toegang aan.

Figuur 3: Beheer de modeltoegang in de Amazon Bedrock-console.

Vervolgens stelt u een Weaviate-cluster in.

  1. Abonneer je op de Weaviate Kubernetes Cluster op AWS Marketplace.
  2. Start de software met behulp van a CloudFormation-sjabloon volgens uw gewenste beschikbaarheidszone.

De CloudFormation-sjabloon is vooraf ingevuld met standaardwaarden.

  1. Voor Stack naam, voer een stapelnaam in.
  2. Voor helmauthenticatietype, wordt aanbevolen om authenticatie in te schakelen door in te stellen helmauthenticationtype naar apikey en het definiëren van een helmauthenticatieapikey.
  3. Voor helmauthenticatieapikey, voer uw Weaviate API-sleutel in.
  4. Voor helmkaartversie, voer uw versienummer in. Het moet minimaal v.16.8.0 zijn. Verwijs naar de GitHub repo voor de nieuwste versie.
  5. Voor helmenabledmodules, zorg ervoor dat tex2vec-aws en generative-aws zijn aanwezig in de lijst met ingeschakelde modules binnen Weaviate.

Figuur 4: CloudFormation-sjabloon.

Het invullen van deze sjabloon duurt ongeveer 30 minuten.

Maak verbinding met Weaviate

Voer de volgende stappen uit om verbinding te maken met Weaviate:

  1. In het Amazon SageMaker-console, navigeren naar Notebook-exemplaren in het navigatievenster via Notitieboek > Notebook-exemplaren aan de linkerzijde.
  2. Maak een nieuw notebookexemplaar.
  3. Installeer het Weaviate-clientpakket met de vereiste afhankelijkheden:
$ pip install weaviate-client

  1. Maak verbinding met uw Weaviate-instantie met de volgende code:
import weaviate

client = weaviate.Client(
  url = "http://<YOUR-WEAVIATE-URL>",
 auth_client_secret=weaviate.AuthApiKey(api_key="YOUR-WEAVIATE-API-KEY"),
    additional_headers={
        "X-AWS-Access-Key": "<YOUR-AWS-ACCESS-KEY>",
        "X-AWS-Secret-Key": "<YOUR-AWS-SECRET-ACCESS-KEY>"
    }
)

Lever de volgende informatie:

  • Weaviate-URL – Toegang tot Weaviate via de load balancer-URL. In de Amazon Elastic Compute-cloud (Amazon EC2) console, kies Loadbalancers in het navigatievenster en zoek de load balancer. Zoek naar de kolom DNS-naam en voeg deze toe http:// voor.
  • Weaviate API-sleutel – Dit is de sleutel die u eerder in de CloudFormation-sjabloon hebt ingesteld (helmauthenticationapikey).
  • AWS-toegangssleutel en geheime toegangssleutel – U kunt de toegangssleutel en de geheime toegangssleutel voor uw gebruiker ophalen in de AWS Identiteits- en toegangsbeheer (IAM)-console.

Figuur 5: AWS Identity and Access Management (IAM)-console om de AWS-toegangssleutel en geheime toegangssleutel op te halen.

Configureer de Amazon Bedrock-module om Cohere-modellen in te schakelen

Vervolgens definieert u een gegevensverzameling (class) genoemd Listings om de dataobjecten van de lijsten op te slaan, wat analoog is aan het maken van een tabel in een relationele database. In deze stap configureert u de relevante modules om het gebruik van Cohere-taalmodellen die op Amazon Bedrock worden gehost, mogelijk te maken vanuit de Weaviate-vectordatabase. De vectorizer (“text2vec-aws“) en generatieve module (“generative-aws“) zijn gespecificeerd in de definitie van gegevensverzameling. Beide modules hebben drie parameters:

  • "onderhoud" - Gebruiken "bedrock” voor Amazon Bedrock (of gebruik “sagemaker" voor Amazon SageMaker JumpStart)
  • "Regio" – Voer de regio in waar uw model wordt geïmplementeerd
  • "model" – Geef de naam van het funderingsmodel op

Zie de volgende code:

collection_definition = {
    "class": "Listings",
    "moduleConfig": {
        "text2vec-aws": {
            "service": "bedrock",
            "region": "us-east-1",
            "model": "cohere.embed-english-v3",
        },
        "generative-aws": {
            "service": "bedrock",
            "region": "us-east-1",
            "model": "cohere.command-text-v14"
        }
    },
    "vectorizer": "text2vec-aws"
}

Neem gegevens op in de Weaviate-vectordatabase

In deze stap definieert u de structuur van de gegevensverzameling door de eigenschappen ervan te configureren. Naast de naam en het gegevenstype van de eigenschap kunt u ook configureren of alleen het gegevensobject wordt opgeslagen of dat het samen met de vectorinbedding wordt opgeslagen. In dit voorbeeld host_name en property_type zijn niet gevectoriseerd:

collection_definition["properties"] = [
        { "name": "host_name", "dataType": ["text"], 
     "moduleConfig": {"text2vec-aws": {"skip": True}}
        },
        { "name": "property_type", "dataType": ["text"], 
     "moduleConfig": {"text2vec-aws": {"skip": True}}
        }
        { "name": "description", "dataType": ["text"] },
        {"name": "neighborhood_overview", "dataType": ["text"] },
]

Voer de volgende code uit om de verzameling in uw Weaviate-instantie te maken:

client.schema.create_class(collection_definition)

U kunt nu objecten toevoegen aan Weaviate. Voor maximale efficiëntie maakt u gebruik van een batchimportproces. Voer de volgende code uit om gegevens te importeren. Tijdens het importeren gebruikt Weaviate de gedefinieerde vectorizer om voor elk object een vectorinbedding te creëren. De volgende code laadt objecten, initialiseert een batchproces en voegt objecten één voor één toe aan de doelverzameling:

from weaviate.util import generate_uuid5
import pandas as pd

# Read CSV file
csv_file = './data/listings.csv'
df = pd.read_csv(csv_file, usecols = ['host_name', 
                                      'property_type',
                                      'description', 
                                      'neighborhood_overview', 
                                        ])

df.fillna('', inplace=True)

# Configure batch
client.batch.configure(batch_size=100) 

# Initialize batch process
with client.batch as batch:
    for _, row in df.iterrows():
        listing_object = {
            "host_name": row["host_name"],
            "property_type" : row["property_type"],
            "description": row["description"],
            "neighborhood_overview" : row["neighborhood_overview"],
        }
        batch.add_data_object(
            class_name = "Listings",
            data_object = listing_object,
            uuid = generate_uuid5(listing_object)
        )

Ophalen Augmented Generation

U kunt een RAG-pijplijn bouwen door een generatieve zoekopdracht op uw Weaviate-instantie te implementeren. Hiervoor definieert u eerst een promptsjabloon in de vorm van een f-string die de gebruikersquery ({target_audience}) direct en de aanvullende context ({{host_name}}, {{property_type}}, {{description}} en {{neighborhood_overview}}) uit de vectordatabase tijdens runtime:

   prompt_template = f"""You are a copywriter.
    Write a short advertisement for the following vacation stay.
    Host: {{host_name}}
    Property type: {{property_type}}
    Description: {{description}}
    Neighborhood: {{neighborhood_overview}}
    Target audience: {target_audience}
    """

Vervolgens voert u een generatieve zoekopdracht uit. Hierdoor wordt het gedefinieerde generatieve model opgeroepen met een prompt die bestaat uit de gebruikersquery en de opgehaalde gegevens. Met de volgende query wordt één aanbiedingsobject opgehaald (.with_limit(1)) Van de Listings verzameling die het meest lijkt op de gebruikersquery (.with_near_text({"concepts": target_audience})). Vervolgens wordt de gebruikersquery (target_audience) en de eigenschappen van de opgehaalde vermeldingen (["description", "neighborhood", "host_name", "property_type"]) worden in de promptsjabloon ingevoerd. Zie de volgende code:

   result = client.query
                .get("Listings", 
            ["description", "neighborhood", "host_name", "property_type"])
                .with_near_text({"concepts": target_audience})
                .with_limit(1)
                .with_generate(single_prompt=prompt_template)
                .do()

In het volgende voorbeeld ziet u dat het voorgaande stuk code for target_audience = “Family with small children” haalt een vermelding op van de host Marre. Het promptsjabloon is aangevuld met de vermeldingsgegevens van Marre en de doelgroep:

"You are a copywriter.
Write a short advertisement for the following vacation stay.
Host: Marre
Property type: Entire townhouse
Description: Welcome to our lovely home! You've come to the right place ...
Neighborhood: THE NEIGHBORHOOD:<br /><br />We are in the city centre ...
Target audience: Family with small children"

Op basis van de ophaal-uitgebreide prompt genereert het Cohere-opdrachtmodel de volgende gerichte advertentie:

"Looking for a kid-friendly home away from home in one of the trendiest areas of 
Amsterdam? Look no further than this stylish townhouse in the heart of the city! 
Our 120ft² space is perfect for a family of four or a group of adults, with two 
bedrooms featuring elevated beds suitable for kids and one bedroom with a single 
bed. The ground floor features a spacious living room, a kitchen with a large 
dining table, and a half bath while heading upstairs leads you to a master bedroom 
and a full bathroom. Our central location means you're just steps away from the 
best cafes, restaurants, and bars that the city has to offer, and the Vondelpark 
and other attractions are only a short walk away! Supermarkets and paid parking 
are also conveniently located nearby. Experience the best of Amsterdam in a 
laid-back,local way and create unforgettable memories with your family at our 
cozy townhouse."

Alternatieve aanpassingen

U kunt alternatieve aanpassingen maken aan verschillende componenten in de voorgestelde oplossing, zoals de volgende:

  • De taalmodellen van Cohere zijn ook beschikbaar via Amazon SageMaker JumpStart, dat toegang biedt tot geavanceerde basismodellen en ontwikkelaars in staat stelt LLM's te implementeren Amazon Sage Maker, een volledig beheerde service die een breed scala aan tools samenbrengt om krachtige, goedkope machine learning voor elk gebruiksscenario mogelijk te maken. Weaviate is ook geïntegreerd met SageMaker.
  • Een krachtige aanvulling op deze oplossing is de Cohere Eindpunt opnieuw rangschikken, beschikbaar via SageMaker JumpStart. Reranking kan de relevantie van zoekresultaten van lexicale of semantische zoekopdrachten verbeteren. Rerank werkt door semantische relevantiescores te berekenen voor documenten die door een zoeksysteem worden opgehaald en de documenten te rangschikken op basis van deze scores. Voor het toevoegen van Rerank aan een applicatie is slechts één regel codewijziging nodig.
  • Om tegemoet te komen aan de verschillende implementatievereisten van verschillende productieomgevingen, kan Weaviate op verschillende aanvullende manieren worden ingezet. Het is bijvoorbeeld beschikbaar als directe download van Weaviate-website, die loopt Amazon Elastic Kubernetes-service (Amazon EKS) of lokaal via havenarbeider or Kubernetes. Het is ook verkrijgbaar als beheerde service die veilig kan worden uitgevoerd binnen een VPC of als een openbare cloudservice die wordt gehost op AWS met een gratis proefperiode van 14 dagen.
  • U kunt uw oplossing in een VPC aanbieden met behulp van Amazon virtuele privécloud (Amazon VPC), waarmee organisaties AWS-diensten kunnen lanceren in een logisch geïsoleerd virtueel netwerk, dat lijkt op een traditioneel netwerk maar met de voordelen van de schaalbare infrastructuur van AWS. Afhankelijk van het geclassificeerde gevoeligheidsniveau van de gegevens kunnen organisaties in deze VPC's ook de internettoegang uitschakelen.

Opruimen

Om onverwachte kosten te voorkomen, verwijdert u alle bronnen die u als onderdeel van dit bericht heeft ingezet. Als u de CloudFormation-stack hebt gestart, kunt u deze verwijderen via de AWS CloudFormation-console. Houd er rekening mee dat er mogelijk enkele AWS-bronnen zijn, zoals Amazon elastische blokwinkel (Amazon EBS) volumes en AWS Sleutelbeheerservice (AWS KMS) sleutels, die mogelijk niet automatisch worden verwijderd wanneer de CloudFormation-stack wordt verwijderd.

Figuur 6: Verwijder alle bronnen via de AWS CloudFormation-console.

Conclusie

In dit bericht werd besproken hoe bedrijven nauwkeurige, transparante en veilige generatieve AI-applicaties kunnen bouwen en toch de volledige controle over hun gegevens kunnen behouden. De voorgestelde oplossing is een RAG-pijplijn die gebruikmaakt van een AI-native technologiestapel als een combinatie van Cohere-basismodellen in Amazon Bedrock en een Weaviate-vectordatabase op AWS Marketplace. De RAG-aanpak stelt ondernemingen in staat de kloof te overbruggen tussen de algemene kennis van de LLM en de bedrijfseigen gegevens, terwijl hallucinaties tot een minimum worden beperkt. Een AI-native technologiestack maakt snelle ontwikkeling en schaalbare prestaties mogelijk.

U kunt beginnen met experimenteren met RAG proofs of concept voor uw bedrijfsklare generatieve AI-toepassingen met behulp van de stappen die in dit bericht worden beschreven. De bijbehorende broncode is beschikbaar in de gerelateerde GitHub-repository. Bedankt voor het lezen. Geef gerust commentaar of feedback in het opmerkingengedeelte.


Over de auteurs

James Yi is een Senior AI/ML Partner Solutions Architect in het Technology Partners COE Tech-team bij Amazon Web Services. Hij heeft een passie voor het samenwerken met zakelijke klanten en partners bij het ontwerpen, implementeren en schalen van AI/ML-applicaties om bedrijfswaarde te creëren. Buiten zijn werk houdt hij van voetballen, reizen en tijd doorbrengen met zijn gezin.

Leonie Monigatti is een ontwikkelaarsadvocaat bij Weaviate. Haar focusgebied is AI/ML, en ze helpt ontwikkelaars meer te leren over generatieve AI. Buiten haar werk deelt ze haar ervaringen op het gebied van data science en ML ook op haar blog en op Kaggle.

Meor Amer is een Developer Advocate bij Cohere, een leverancier van geavanceerde natuurlijke taalverwerkingstechnologie (NLP). Hij helpt ontwikkelaars bij het bouwen van geavanceerde applicaties met Cohere’s Large Language Models (LLM’s).

Mijd Mao is een Senior AI/ML Partner Solutions Architect in het Emerging Technologies-team bij Amazon Web Services. Hij heeft een passie voor het samenwerken met zakelijke klanten en partners bij het ontwerpen, implementeren en schalen van AI/ML-applicaties om zo hun bedrijfswaarden te ontsluiten. Buiten zijn werk houdt hij van vissen, reizen en pingpongen.

spot_img

Laatste intelligentie

spot_img