Créez un service de recherche intelligente en exploitant les capacités multimodales de Lindorm, telles que la récupération hybride combinant le texte intégral et les vecteurs.
Présentation
La recherche intelligente est une méthode de récupération alimentée par l'IA qui comprend en profondeur l'intention de l'utilisateur et offre des services de questions-réponses précis, efficaces et conversationnels.
Cette solution vous aide à mettre en place des fonctionnalités de recherche intelligente pour relever les défis suivants :
Configuration et itération rapides : Une infrastructure prête à l'emploi qui réduit les barrières techniques et diminue les coûts de développement et d'exploitation.
Gestion de la croissance des données : Prise en charge du traitement de données à grande échelle et optimisation des performances de récupération, ce qui réduit les investissements matériels et la charge opérationnelle.
Amélioration de la précision et de la flexibilité de la récupération : Déploiement et ajustement fin de modèles personnalisés pour répondre aux besoins métier spécifiques, garantissant ainsi des résultats de recherche plus pertinents pour vos cas d'utilisation.
Concentrez-vous sur l'innovation au cœur de votre activité tout en offrant une expérience de recherche plus intelligente et plus efficace.
Architecture
L'exemple suivant, basé sur Python, illustre la création d'un service de recherche intelligente à l'aide de la récupération hybride (texte intégral et vecteurs) de Lindorm. Le diagramme d'architecture présente uniquement les composants liés au déploiement et à l'application de Lindorm.
Étape 1 : Activation des capacités multimodales de Lindorm
Connectez-vous à la console Lindorm.
Dans le coin supérieur gauche de la page, cliquez sur Create.
-
Sur la page d'achat de Lindorm, configurez les paramètres suivants :
Paramètre
Description
Type de produit
Sélectionnez Lindorm.
Configuration de l'instance
Sélectionnez Wide Table Engine, LTS Engine, Search Engine, Vector Engine et AI Engine.
Remarque-
Lorsque vous activez le moteur d'IA, vous devez également sélectionner un modèle DashScope.
-
Le moteur vectoriel dépend du moteur de recherche. Vous devez les activer simultanément.
-
Pour plus de détails sur la création d'une instance et ses paramètres, consultez Créer une instance.
-
Vous pouvez modifier les spécifications et les nœuds de l'instance selon les besoins de votre activité. Pour en savoir plus, consultez Modifier les spécifications de l'instance.
-
Cliquez sur Buy Now et suivez les instructions de la page d'achat pour finaliser le paiement.
Étape 2 : Configuration d'une liste d'autorisation d'adresses IP
Ajoutez l'adresse IP de votre client à la liste d'autorisation d'adresses IP de Lindorm. Pour configurer cette liste, consultez Configurer une liste d'autorisation d'adresses IP.
Étape 3 : Téléchargement du code
Téléchargez l'exemple de code lindorm_smart_search pour configurer et créer votre service de recherche intelligente.
Étape 4 : Configuration de l'environnement
Environnement d'exécution
Assurez-vous d'avoir installé Python 3.10 ou une version ultérieure.
Installation des dépendances
pip3 install -r requirements.txt
Configuration des endpoints Lindorm
Configurez les endpoints de connexion pour les moteurs Lindorm dans le script env du code téléchargé. Pour obtenir les endpoints de connexion, consultez Afficher les endpoints de connexion.
# AI host (Configure the AI engine endpoint)
AI_HOST="ld-bp17j28j2y7pm****-proxy-ai-pub.lindorm.aliyuncs.com"
AI_PORT="9002"
# Row host (Configure the MySQL-compatible endpoint for the wide-column engine)
ROW_HOST="ld-bp17j28j2y7pm****-proxy-lindorm-pub.lindorm.aliyuncs.com"
ROW_PORT="33060"
# Search host (Configure the search engine endpoint)
SEARCH_HOST="ld-bp17j28j2y7pm****-proxy-search-pub.lindorm.aliyuncs.com"
SEARCH_PORT="30070"
# Lindorm user password (Configure the Lindorm user password)
LD_USER="root"
LD_PASSWORD="test****"
# Location of the training dataset
LOAD_FILE_PATH="data/cmrc2018_train.json"
# Maximum number of results to return
SEARCH_TOP_K="5"
Installation de Jupyter Notebook
-
Installez Jupyter.
pip3 install jupyter -
Générez le fichier de configuration ~/.jupyter/jupyter_notebook_config.py.
jupyter notebook --generate-config -
Générez un hachage de mot de passe pour l'accès à Jupyter.
from passlib.hash import argon2 print(argon2.hash('Vector123'))Le résultat correspond au hachage du mot de passe pour la configuration de Jupyter Notebook. Voici un exemple de sortie :
$argon2id$v=19$m=65536,t=3,p=4$4TyndM75H8N4b+291xqjdA$n0QSxlv/uCLjGR0TX/jbD/XFlEu9BzQGI1b2Mcu6gxg -
Exécutez la commande
vim ~/.jupyter/jupyter_notebook_config.pypour ouvrir et modifier le fichier de configuration.# Add the following configurations at the end of the file. c.NotebookApp.ip = '*' # Specify the default directory for the notebook. # Whether to open a browser upon notebook startup. Set to False. c.NotebookApp.open_browser = False # The default access port. You can change this. c.NotebookApp.port = 9000 # Replace the content after argon2 with the Jupyter password hash obtained in the previous step. c.NotebookApp.password = 'argon2:$argon2id$v=19$m=65536,t=3,p=4$4TyndM75H8N4b+291xqjdA$n0QSxlv/uCLjGR0TX/jbD/XFlEu9BzQGI1b2Mcu6gxg' # Important: Files accessed in Jupyter must be in this directory. c.NotebookApp.notebook_dir = u'/data/lindorm/LindormDemo' # Set the desired display location when you open Jupyter Notebook. You can set it to a frequently used path. -
Démarrez le service Jupyter. Lancez-le au premier plan pour vérifier l'absence d'erreurs au démarrage. Pour arrêter le service, appuyez sur
Ctrl+Cafin de terminer le processus.jupyter notebookRemarqueDans un environnement de production, exécutez le service Jupyter en arrière-plan. Cela évite les interruptions en cas de fermeture du terminal et simplifie la gestion des processus. Pour démarrer en arrière-plan, exécutez la commande suivante :
nohup jupyter notebook --allow-root >/tmp/jupyter.log 2>&1 &.
Étape 5 : Exécution du script .ipynb
Dans Jupyter, suivez les instructions du fichier lindorm_demo.ipynb et exécutez les cellules de code séquentiellement.
Les sections suivantes décrivent les principales étapes de déploiement.
Flux de travail de déploiement
Étapes de déploiement
|
Étape |
Description |
Moteurs impliqués |
|
Créer une table parente (base de connaissances) |
Créez une table parente pour stocker le texte original de la base de connaissances.
|
moteur wide-column |
|
Créer une table enfant (base de connaissances segmentée) |
Créez une table enfant pour stocker les fragments de texte après le découpage du texte original. Vous pouvez segmenter le texte par longueur ou par une combinaison de longueur et de ponctuation.
|
moteur wide-column |
|
Créer un pipeline de recherche |
Créez un pipeline d'ingestion et un pipeline de recherche pour la table enfant. Lors de l'ingestion, le contenu de la table enfant est automatiquement synchronisé avec le moteur de recherche, qui génère des embeddings et les écrit dans le moteur vectoriel. Lors d'une requête, le texte est automatiquement intégré (embedded) et la récupération vectorielle est effectuée via le moteur vectoriel.
|
moteur wide-column moteur de recherche moteur vectoriel |
|
Créer des index de recherche et vectoriels |
Créez des index de recherche et vectoriels pour améliorer l'efficacité de la récupération. Cet exemple utilise un index IVFBQ. Si votre jeu de données est petit, vous pouvez utiliser un index HNSW.
|
moteur wide-column moteur de recherche moteur vectoriel |
|
Configurer les pipelines pour l'index de recherche |
Configurez les pipelines d'ingestion et de recherche par défaut pour l'index de recherche.
|
moteur de recherche moteur vectoriel |
|
Créer un index vectoriel |
Pour les index IVFPQ et IVFBQ, vous devez déclencher manuellement la construction de l'index après avoir écrit une quantité suffisante de données. Une fois la construction terminée, vous pouvez écrire et interroger les données sans reconstruction. Pour plus d'informations, consultez Créer un index.
|
index full-text index vectoriel |
Méthodes de récupération
Options de récupération : récupération full-text, récupération vectorielle ou récupération hybride combinant full-text et vecteurs.
Réorganisation (reranking) : avec ou sans réorganisation.
Contexte de l'invite (prompt) : utilisation du document parent original ou des fragments de texte extraits.
|
Méthode de récupération |
Description |
Flux de travail |
|
Récupération hybride full-text et vectorielle |
Combine les résultats de la récupération full-text et de la récupération vectorielle.
|
|
|
Récupération hybride full-text et vectorielle + réorganisation |
Effectue une récupération hybride, puis réorganise les résultats.
|
|
|
Récupération hybride full-text et vectorielle + réorganisation + invite |
|
|
|
Récupération hybride full-text et vectorielle + réorganisation + Invite contextuelle |
|
|