Mise en place d'une intégration de services personnalisés

Milvus est une base de données vectorielle que vous pouvez utiliser pour traiter des ensembles de données à grande échelle. Pour les applications nécessitant des capacités de recherche en temps réel et de nombreux utilisateurs simultanés, vous pouvez utiliser Milvus, qui possède une architecture distribuée, des performances élevées et un modèle de données flexible.

Une intégration de services personnalisés permet de rechercher des informations à l'aide d'une fonction de recherche que vous créez. Vous pouvez utiliser une intégration de service personnalisée avec les fonctionnalités de recherche conversationnelle de votre assistant IA pour générer des réponses basées sur l'IA. Cette intégration permet la recherche d'informations à la fois côté serveur et côté client.

Important :

Vous ne pouvez avoir qu'une seule intégration de recherche par environnement. Lorsque vous remplacez l'intégration de recherche existante par d'autres types d'intégration, tels que Elasticsearch ou Milvus, les paramètres de l'intégration de recherche existante sont écrasés.

Sélection d'un service personnalisé

Pour sélectionner un service personnalisé comme intégration de la recherche, utilisez l'une des procédures suivantes :

  • Sélectionner l'intégration de la recherche de services personnalisés dans la page Intégrations

    1. Une fois que vous avez créé une instance du générateur d'assistant IA, rendez-vous dans Accueil > Intégrations.

    2. Cliquez sur Ouvrir dans la tuile Recherche pour afficher la fenêtre "Ouvrir la recherche".

    3. Dans la fenêtre « Recherche ouverte », sélectionnez Draft l'option dans le menu déroulant si vous souhaitez configurer un service personnalisé dans l'environnement de développement de votre assistant IA. Si vous souhaitez configurer le service personnalisé dans l'environnement de production de votre assistant IA, sélectionnez Live l'option correspondante dans le menu déroulant.

    4. Dans la fenêtre suivante "Modifier une nouvelle intégration de recherche existante", sélectionnez la tuile Service personnalisé.

  • Sélection de l'intégration de la recherche de services personnalisés dans la page Environnements

    1. Une fois que vous avez créé une instance du générateur d'assistant IA, rendez-vous dans Accueil > Environnements.

    2. Sélectionnez l'onglet " Draft si vous souhaitez mettre en place le service personnalisé dans l'environnement projet. Si vous souhaitez mettre en place le service personnalisé dans l'environnement réel, sélectionnez l'onglet " Live.

    3. Dans la section Méthodes de résolution, cliquez sur Ajouter à l'intérieur de la tuile Recherche sous Extensions si vous souhaitez ajouter une intégration de recherche de service personnalisée.

Astuce :

Si vous avez déjà ajouté l'intégration de la recherche de services personnalisée, le bouton « Ouvrir » s'affiche à la place du bouton « Ajouter » dans la vignette « Recherche » sous « Extensions ».

  1. Dans la fenêtre "Configurer une nouvelle extension de recherche", sélectionnez la tuile Service personnalisé pour afficher la boîte de dialogue "Intégration de la recherche".

Sélectionner le service des douanes

Configuration d'un service personnalisé avec les informations d'identification du serveur

Pour configurer le service personnalisé sur votre assistant IA à l'aide des identifiants de serveur, procédez comme suit :

  1. Dans la section Connecter votre fournisseur de recherche de la fenêtre Service personnalisé, sélectionnez Fournir des informations d'identification. Par défaut, cette option est sélectionnée.

  2. Remplissez les champs suivants pour permettre à votre assistant IA de se connecter à votre instance de Custom Service :

    • URL

    • Choisir un type d'authentification

      • si vous sélectionnez 'Basic authentication, vous devez fournir un nom d'utilisateur et un mot de passe.

      • si vous sélectionnez " API key, vous devez fournir une clé API.

      • si vous sélectionnez " None, vous ne pouvez pas fournir d'autres détails d'authentification.

  3. Cliquez sur Suivant pour passer à la recherche conversationnelle (facultatif).

  4. Si vous souhaitez activer la recherche conversationnelle, placez le commutateur de recherche conversationnelle sur " on. Pour plus d'informations sur la recherche conversationnelle, voir recherche conversationnelle.

  5. Le remplissage du filtre par défaut et des métadonnées est facultatif. Vous pouvez placer les informations dans ces champs pour que votre serveur effectue des requêtes de recherche. Les métadonnées doivent être un objet JSON et le filtre par défaut peut être une chaîne de texte. Vous pouvez remplacer le filtre par défaut dans une étape d'action qui lance la recherche. Vous ne pouvez pas remplacer les métadonnées par d'autres options et les métadonnées que vous fournissez s'appliquent à toutes les utilisations de cette intégration. Pour plus d'informations, consultez la section « Remplissage des filtres et des métadonnées par défaut pour le serveur ».

  6. Utilisez les onglets Aucun résultat trouvé et Problème de connectivité pour personnaliser les différents messages à partager avec les utilisateurs en fonction du succès de la recherche.

Tableau 1. Messages personnalisés pour les résultats de recherche

Tabulation

Scénario

Exemple de message

Aucun résultat trouvé

Aucun résultat de recherche n'a été trouvé

I searched my knowledge base for information that might address your query, but did not find anything useful to share.

Problèmes de connectivité

Je n'ai pas pu effectuer la recherche pour une raison quelconque

I might have information that could help address your query, but am unable to search my knowledge base at the moment.

  1. Cliquez sur Enregistrer, puis sur Fermer pour terminer la configuration du service personnalisé avec les informations d'identification du serveur.

Sélectionner le serveur du service des douanes

Mise en place d'un service personnalisé par l'intermédiaire de votre client

Pour configurer le service personnalisé sur votre assistant IA via votre client, procédez comme suit :

  1. Dans la section Connecter votre fournisseur de recherche de la fenêtre Service personnalisé, sélectionnez "Par l'intermédiaire de votre client".

  2. Cliquez sur Suivant pour passer à la recherche conversationnelle (facultatif).

  3. Si vous souhaitez activer la recherche conversationnelle, placez le commutateur de recherche conversationnelle sur " on. Pour plus d'informations sur la recherche conversationnelle, voir recherche conversationnelle.

  4. Le remplissage du filtre par défaut et des métadonnées est facultatif. Vous pouvez placer les informations dans ces champs pour que votre serveur effectue des requêtes de recherche. Les métadonnées doivent être un objet JSON et le filtre par défaut peut être une chaîne de texte. Vous pouvez remplacer le filtre par défaut dans une étape d'action qui lance la recherche. Vous ne pouvez pas remplacer les métadonnées par d'autres options et les métadonnées que vous fournissez s'appliquent à toutes les utilisations de cette intégration. Pour plus d'informations, consultez la section « Remplissage des filtres et des métadonnées par défaut pour le client ».

  5. Utilisez les onglets Aucun résultat trouvé et Problème de connectivité pour personnaliser les différents messages à partager avec les utilisateurs en fonction du succès de la recherche.

Tableau 2. Messages personnalisés pour les résultats de recherche

Tabulation

Scénario

Exemple de message

Aucun résultat trouvé

Aucun résultat de recherche n'a été trouvé

I searched my knowledge base for information that might address your query, but did not find anything useful to share.

Problèmes de connectivité

Je n'ai pas pu effectuer la recherche pour une raison quelconque

I might have information that could help address your query, but am unable to search my knowledge base at the moment.

  1. Cliquez sur Enregistrer, puis sur Fermer pour terminer la configuration du service personnalisé côté client.

Mise en place de Milvus pour le service personnalisé

Vous pouvez intégrer directement votre watsonx.data Milvus pour la recherche conversationnelle plutôt que d'utiliser un service personnalisé. Pour plus d'informations, consultez la configuration de l'intégration de la recherche dans Milvus.

Vous devez utiliser la recherche de service personnalisée pour bénéficier de capacités de recherche plus avancées avec Milvus, comme par exemple :

  • Possibilité d'utiliser n'importe quel modèle d'intégration pris en charge par Milvus et watsonx.ai.

Pour obtenir la liste des modèles d'intégration pris en charge par Milvus, consultez la page Milvus supported embedding models.

Configuration d' Milvus. avec les identifiants du serveur

  1. Pour configurer watsonx.data Milvus, consultez le guide de configuration de l'intégration de recherche avec watsonx.data Milvus.

  2. Pour la configuration générale sur votre assistant avec les informations d'identification du serveur, voir Configuration d'un service personnalisé avec les informations d'identification du serveur.

  3. Pour plus d'informations sur les exemples et les références concernant Milvus, consultez [Exemple avec Milvus ]( https://github.com/watson-developer-cloud/assistant-toolkit/blob/master/integrations/extensions/starter-kits/search-with-custom-service/custom-search-server-setup-guide.md#example-with-milvus ).

Configurer Milvus via votre client

Configurez « Milvus » sur votre assistant IA via votre client en suivant les étapes décrites dans la section « Configuration d'un service personnalisé via votre client ».

Mise en place de systèmes de récupération pour un service personnalisé

Pour utiliser un service personnalisé avec votre intégration de recherche, vous devez intégrer votre fonctionnalité de recherche en mettant à disposition un serveur ou en demandant au client qui fait appel à votre assistant IA de fournir les résultats de recherche. Vous pouvez utiliser votre propre système de recherche si son schéma correspond à celui fourni par votre assistant IA. Si votre schéma de récupération ne correspond pas à celui de l'assistant IA, vous devez fournir un wrapper qui assure le mappage des schémas. Vous pouvez déployer le wrapper en tant que service ou votre client de chat peut le démarrer. La création d'un wrapper s'avère utile lorsque vous souhaitez intégrer une source différente ou faire appel à des bibliothèques ou des services qui ne respectent pas le schéma défini pour les résultats de recherche de l'assistant IA.

Configuration d'un serveur pour la récupération de services personnalisés

Un serveur pour la recherche de services personnalisés doit mettre en œuvre l'API suivante :

Requête : POST <server_url>

Demande

{
    "query": "<QUERY>",
    "filter": "<FILTER>", // optional
    "metadata": {
        // optional, you can fill any information here
    }
}

Réponse

{
    
  "search_results": [
    {
      "result_metadata": { // optional
        "score": <SCORE as a number>
      },
      "title": "<TITLE>",
      "body": "<BODY>",
      "url": "<URL>", // optional
      "highlight": { // optional, will be used instead of "body" for Conversational Search if provided
        "body": [
          "<HIGHLIGHT1>",
          "<HIGHLIGHT2>",
           ...
        ]
      }
    }
  ]

}
Important :

Les métadonnées contenues dans la requête et l'objet de réponse dans son ensemble ne doivent pas dépasser 100 Ko.

Configuration d'un client pour la récupération de services personnalisés

Vous pouvez voir la réponse suivante de l 'API /message après avoir effectué une requête de recherche à l'exécution :

{
    "output": {
        "intents": [ ... ],
        "actions": [
            {
                "type": "search",
                "query": "<QUERY>",
                "filter": "<FILTER>",
                "metadata": { // optional
                    /* you can use any JSON object here */
                }
            }
        ]
    }
}

Chaque fois que le client de chat reçoit une réponse sous cette forme (c'est-à-dire qu'il contient une entrée dans la output.actions liste de type search), il transmet les résultats à l 'assistant IA lors de l'appel suivant de la /message API fonction, comme suit :

{
    "input": {
        "message_type": "search_results",
         "search_results": [
          {
            "result_metadata": { // optional
                "score": <SCORE as a number>
            },
            "title": "<TITLE>",
            "body": "<BODY>",
            "url": "<URL>", // optional
            "highlight": { // optional, will be used instead of "body" for Conversational Search if provided
                "body": [
                "<HIGHLIGHT1>",
                "<HIGHLIGHT2>",
                ...
                ]
            }
         }
     ]
  }
}
Important :

La taille de la réponse de votre assistant IA ne doit pas dépasser 100 Ko. Si votre assistant IA reçoit un search_resultsmessage dont le corps dépasse 100 Ko, il renvoie une réponse 400.

Traitement des résultats de recherche dans le cadre de la recherche conversationnelle

Lorsque vous configurez votre service personnalisé en fournissant des informations d'identification du serveur ou en envoyant des résultats à partir de votre client et si vous activez la recherche conversationnelle avec votre service personnalisé, vous obtenez le comportement suivant :

  1. La recherche conversationnelle parcourt les résultats de la recherche du premier au dernier.

  2. A partir de chaque résultat de recherche :

    • Si vous n'avez pas de liste de " highlight.body, il prend le " body comme extrait de texte.

    • Si une liste " highlight.body est présente, il prend chaque élément de cette liste comme un extrait de texte.

  3. Après avoir écarté les extraits de texte en double, il continue à parcourir les résultats de la recherche et les listes " highlight.body jusqu'à ce qu'il obtienne 5 extraits de texte.

  4. La recherche conversationnelle applique un modèle de filtre pré-généré pour comparer la requête et les résultats de la recherche afin de juger de la pertinence des résultats par rapport à la requête. Si le modèle de filtre de pré-génération produit deux scores :

    • Une recherche conversationnelle à faible score renvoie un signal "je ne sais pas". Pour plus d'informations sur le signal "Je ne sais pas", voir la recherche conversationnelle.

    • Une recherche conversationnelle avec un score élevé envoie les extraits ainsi que les titres correspondants au modèle d'IA génératif pour générer une réponse.

  5. Si le texte est trop long pour être traité par le modèle d'IA génératif, il rejette à plusieurs reprises le dernier extrait ou la dernière paire de titres jusqu'à ce qu'il soit court. S'il n'y a pas de texte, la recherche échoue.

  6. La recherche conversationnelle applique la réponse au modèle post-filtre. Si le modèle post-filtre produit deux scores :

    • Une recherche conversationnelle à faible score renvoie un signal "je ne sais pas".

    • Une recherche conversationnelle de haut niveau renvoie la réponse générée avec tous les " search_results à l'application appelante.

Votre assistant IA suit la même procédure pour les autres options de recherche, telles que « Elasticsearch ».

Ajouter des champs distincts pour body et highlight.body

Lorsque le " highlight.body est présent, il est utilisé pour générer des réponses de recherche conversationnelle, sinon le " body est utilisé. Ces deux éléments sont transmis au client dans le cadre de l'objet des résultats de la recherche et le client fournit le contexte de la réponse. Par exemple, le chat web intégré affiche le texte " body. Si vous cliquez sur une carte de citation pour un résultat de recherche, vous ne pouvez pas voir l' URL de ce résultat.

Recommandations pour l'utilisation des champs :

  • Si la technologie de recherche renvoie de courtes parties de documents, utilisez ces parties de documents dans le champ " body et omettez le " highlight.body. Par exemple, de nombreuses solutions de bases de données vectorielles ne stockent que 512 segments de documents.

  • Si la technologie de recherche renvoie à la fois de courtes parties de documents ("passages" ou "highlights" ou "snippets") et le texte intégral des documents, utilisez les parties courtes dans le champ " highlight.body et le texte intégral dans le champ " body.

Ajout de métadonnées facultatives définies par l'utilisateur

Tant pour les clients que pour les serveurs, les schémas de résultats comprennent un champ " metadata et un champ " result_metadata

Recommandations pour l'utilisation des champs :

  • Le champ " metadata envoie les informations de configuration à la capacité de recherche. Parmi les exemples d'informations de configuration utilisées pour une capacité de recherche figurent les noms d'index, les noms de modèles d'intégration, la longueur de passage demandée, les champs à stimuler, etc. Les raisons suivantes expliquent pourquoi il est utile d'utiliser le champ " metadata pour transmettre des informations de configuration au serveur ou au client :

    • Plusieurs assistants peuvent utiliser le même code serveur ou client, mais avec une configuration différente.

    • Même avec un seul assistant, il est facile de mettre à jour les configurations via l'interface de l'assistant.

  • Ce result_metadata champ transmet des informations supplémentaires concernant un résultat de recherche, provenant du serveur ou du client, à l 'assistant IA. L 'assistant IA transmet ces informations dans le cadre de search_results l'objet de la réponse finale. Les applications appelantes utilisent les informations supplémentaires. Par exemple, lorsque le serveur result_metadata envoie les URL des images dans les résultats de recherche, l'application appelante affiche les images en même temps que la réponse.