Implémentation de la mise en cache sémantique à l'aide de Qdrant et Rust

DEV - 30/05
Bonjour le monde! Aujourd'hui, nous allons découvrir la mise en cache sémantique avec Qdrant, dans Rust. À la fin de...

Bonjour le monde! Aujourd'hui, nous allons découvrir la mise en cache sémantique avec Qdrant, dans Rust. À la fin de ce didacticiel, vous disposerez d'une application Rust capable d'effectuer les opérations suivantes :

  • Ingérez un fichier CSV, transformez-le en intégration à l'aide d'un LLM et insérez-le dans Qdrant
  • Créez deux collections dans Qdrant : une pour une utilisation régulière et une pour la mise en cache.
  • Utiliser la mise en cache sémantique pour un accès plus rapide

Vous êtes intéressé par le déploiement ou vous vous êtes perdu et souhaitez trouver un référentiel avec le code ? Vous pouvez trouver ça ici

Qu’est-ce que la mise en cache sémantique et pourquoi l’utiliser ?

Dans un cache de données standard, nous stockons les informations pour permettre une récupération plus rapide ultérieurement. Par exemple, vous pourriez avoir un service Web servi derrière Nginx. Nous pouvons mettre en cache Nginx soit toutes les réponses, soit uniquement les points de terminaison les plus consultés. Cela améliore les performances et réduit la charge sur votre serveur Web.

La mise en cache sémantique à cet égard est assez similaire. À l'aide de bases de données vectorielles, nous pouvons créer des collections de bases de données qui stockent les requêtes elles-mêmes. Par exemple, ces deux questions ont sémantiquement le même sens :

  • Quelles sont les meilleures pratiques pour écrire le langage de programmation Rust ?
  • Quelles sont les meilleures pratiques pour écrire Rustlang ?

Nous pouvons stocker une copie de la requête dans une collection de cache, avec la réponse sous forme de charge utile JSON. Si les utilisateurs posent ensuite une question similaire, nous pouvons récupérer l'intégration et récupérer la réponse à partir de la charge utile. Cela nous évite d'avoir à utiliser un LLM pour obtenir notre réponse.

La mise en cache sémantique présente plusieurs avantages :

  • Les invites qui nécessitent de longues réponses peuvent générer de sérieuses économies.
  • C'est assez facile à mettre en œuvre et assez bon marché : le seul coût est celui du stockage et de l'utilisation du modèle d'intégration.
  • Vous pouvez utiliser un modèle moins cher que votre intégration habituelle

La mise en cache sémantique est normalement utilisée avec RAG - Retrieval Augmented Generation. RAG est un framework permettant la récupération de contexte à partir de matériaux pré-intégrés. Par exemple, des fichiers ou des documents CSV peuvent être transformés en intégrations à l'aide de modèles et stockés dans une base de données. Chaque fois qu'un utilisateur souhaite rechercher des documents similaires à une invite donnée, il intègre l'invite et la recherche dans une base de données donnée.

Bien entendu, il existe de bonnes raisons de ne pas utiliser la mise en cache sémantique. Les invites qui nécessitent des réponses différentes et variées ne trouveront aucune utilité pour la mise en cache sémantique. Ceci est particulièrement pertinent dans l’utilisation de l’IA générative. Récupérer une requête stockée réduira la créativité de la réponse. Quoi qu'il en soit, si une partie de votre pipeline est capable de capitaliser sur la mise en cache sémantique, c'est une bonne idée de le faire.

Configuration du projet

Commencer

Pour commencer, n'oubliez pas d'utiliserlancement de la navette cargo, avec le framework Axum. Nous allons installer nos dépendances à l'aide de l'extrait de shell ci-dessous :

cargo ajouter [email protected] de toute façon async-openai serde serde-json \ navette-qdrant uuid -F uuid/v4,serde/derive
Entrer en mode plein écran Quitter le mode plein écran

Vous pouvez trouver nos documents de démarrage rapide ici.

Configurer des secrets

Pour configurer nos secrets, nous utiliserons unSecrets.tomlfichier situé à la racine de notre proje...
[Courte citation de 8% de l'article original]

Loading...