Rendre la recherche Notion à nouveau géniale : base de données vectorielles

DEV - 20/11
Dans cette série, nous examinons l'implémentation d'un index vectoriel construit à partir du contenu de...

Dans cette série, nous étudions la mise en œuvre d'un index vectoriel construit à partir du contenu des pages Notion de notre entreprise qui nous permet non seulement de rechercher des informations pertinentes, mais également de permettre à un modèle de langage de répondre directement à nos questions avec Notion comme connaissance. base. Dans cet article, nous verrons comment nous avons utilisé une base de données vectorielles pour enfin y parvenir.

Les nombres, les vecteurs et les graphiques sont des données réelles, sauf indication contraire.

La dernière fois, nous avons téléchargé et traité des données de l'API Notion. Faisons quelque chose avec.

Base de données vectorielles

Pour trouver des textes sémantiquement similaires, nous devons calculer la distance entre les vecteurs. Même si nous n'avons que quelques textes courts, nous pouvons le forcer brutalement : calculez la distance entre notre requête et chaque texte intégré un par un et voyez lequel est le plus proche. Cependant, lorsque nous traitons des milliers, voire des millions d’entrées dans notre base de données, nous avons besoin d’un moyen plus efficace de comparer les vecteurs. Comme pour toute autre manière de rechercher parmi un grand nombre d’entrées, un index peut être utile ici. Pour nous faciliter la vie, nous utiliserons Weaviate DB - une base de données vectorielles qui implémente l'index vectoriel HNSW pour améliorer les performances de la recherche vectorielle.

Il existe de nombreuses bases de données vectorielles différentes que vous pouvez utiliser. Nous avons utilisé Weaviate DB car il a des valeurs par défaut raisonnables, y compris des index vectoriels et BM25 fonctionnant immédiatement et de nombreuses fonctionnalités qui peuvent être activées avec des modules (comme le « reclassement » mentionné précédemment). Vous pouvez également envisager l'extension postgres « pgvector » pour profiter des avantages de SQL : relations, jointures, sous-requêtes, etc., tandis que weaviate peut être plus limité à cet égard. Choisis sagement!

Je reviendrai peut-être sur le sujet des index vectoriels à l'avenir, mais dans cet article, j'utiliserai simplement la base de données qui l'implémente. Pour en savoir plus sur HNSW lui-même, regardez ici, et pour en savoir plus sur la configuration de l'index vectoriel dans Weaviate DB, regardez ici.

Base de données Weaviate

Weaviate DB est une base de données vectorielle open source et évolutive que vous pouvez facilement utiliser dans vos propres projets. La bonté vectorielle n'est qu'à un conteneur Docker et vous pouvez l'exécuter comme ceci :

docker run -p 8080:8080 -d semitechnologies/weaviate:latest
Entrer en mode plein écran Quitter le mode plein écran

Weaviate est modulaire et il existe un certain nombre de modules vous permettant d'ajouter des fonctionnalités à votre base de données. Vous pouvez fournir vous-même les vecteurs d'intégration aux entrées de la base de données, mais il existe des modules pour les calculer pour vous, comme le module text2vec-openai qui utilise l'API openAI. Il existe des modules vous permettant de sauvegarder facilement vos données de base de données sur S3, d'ajouter une fonctionnalité de reclassement à vos recherches, et bien d'autres encore. Activer un module est aussi simple que d'ajouter une variable d'environnement :

docker run -p 8080:8080 -d \ -e ENABLE_MODULES=text2vec-openai,backup-s3,reranker-cohere \ semitechnologies/weaviate:latest
Entrer en mode plein écran Quitter le mode plein écran

Maintenant, pour vous connecter à la base de données depuis notre projet TypeScript :

importer weaviate depuis 'weaviate-ts-client' ; const client = weaviate.client({ schéma : 'http', hôte : 'localhost:8080', });
Entrer en mode plein écran Quitter le mode plein écran

Toutes les données de Weaviate DB sont stockées dans des classes (...
[Courte citation de 8% de l'article original]

Loading...