Se connecter à des sources de connaissances personnalisées

Copilot Studio inclut des sources de connaissances intégrées telles que SharePoint et Dataverse. De nombreuses organisations utilisent également leurs propres points de terminaison de recherche, comme des API personnalisées, des systèmes de recherche d’entreprise existants ou Recherche Azure AI, tout en conservant un contrôle total sur la requête exécutée.

Copilot Studio prend en charge ce scénario à l’aide du déclencheur OnKnowledgeRequested. Toute rubrique utilisant ce déclencheur sert de source de connaissances personnalisée et fournit des résultats aux réponses génératives.

Cet article explique comment créer et intégrer des sources de connaissances personnalisées dans Copilot Studio à l’aide du déclencheur OnKnowledgeRequested. Vous apprendrez comment Copilot Studio reformule les requêtes, s’intègre à votre propre API de recherche, formatte les résultats pour des réponses génératives, et quelles sont les meilleures pratiques pour la gestion de connaissances personnalisées.

Le déclencheur OnKnowledgeRequested

Utilisez le déclencheur OnKnowledgeRequested dans ces deux situations :

  • Lorsque l’orchestrateur détermine que la récupération de connaissances est nécessaire pour répondre à une requête utilisateur.
  • Lorsqu’un nœud de réponse générative est explicitement invoqué dans la conversation.

Important

Vous pouvez uniquement configurer ce déclencheur dans la vue code à l’aide de YAML. Il n’y a pas de prise en charge du concepteur visuel.

Les rubriques qui utilisent OnKnowledgeRequested ont accès à des variables système qui ne sont pas disponibles dans les rubriques classiques :

  • System.SearchQuery : une version réécrite et consciente du contexte de la requête de l’utilisateur, optimisée pour la recherche sémantique.
  • System.KeywordSearchQuery : une requête réécrite optimisée pour les moteurs de recherche basés sur des mots-clés.
  • System.SearchResults : où la rubrique stocke des extraits de connaissances formatés.

Copilot Studio réécrit intelligemment les requêtes en utilisant l’historique des conversations, garantissant ainsi la préservation du contexte sur plusieurs tours.

Créer une source de connaissances personnalisée

Pour créer une source de connaissances personnalisée, créez une rubrique en utilisant le déclencheur OnKnowledgeRequested qui appelle votre API de recherche et transforme les résultats dans le format attendu par Copilot Studio.

Étape 1 : créer le déclencheur

Créez une nouvelle rubrique dans Copilot Studio, basculez en vue code, puis définissez le déclencheur OnKnowledgeRequested.

kind: AdaptiveDialog
beginDialog:
  kind: OnKnowledgeRequested
  id: main
  intent: {}
  actions:
    # Actions go here
inputType: {}
outputType: {}

Cette structure indique à Copilot Studio que cette rubrique est responsable du traitement des requêtes de connaissances.

Étape 2 : Ajouter une requête HTTP

Ajoutez une action HTTP qui appelle votre point de terminaison de recherche.

Exemple :

- kind: HttpRequestAction
  id: searchRequest
  url: = "https://search-api.contoso.com/search?q=" & System.KeywordSearchQuery
  response: Topic.searchResults
  responseSchema:
    kind: Record
    properties:
      query: String
      results:
        type:
          kind: Table
          properties:
            snippet: String
            title: String
            url: String

Concaténez System.KeywordSearchQuery à votre URL de base, car Copilot Studio réécrit automatiquement la requête de l’utilisateur en tenant compte du contexte de la conversation avant d’effectuer la demande de recherche. Cette étape est importante pour maintenir le contexte lors de conversations multi-tours.

Astuce

Au lieu d’une requête HTTP brute, vous pouvez utiliser toute méthode permettant d’obtenir des résultats à partir d’un point de terminaison de recherche, y compris des connecteurs personnalisés, des connecteurs intégrés comme Recherche Azure AI ou des flux d’assistant.

Exemple de réécriture de requête

  • Requête utilisateur 1 : « Quelle est notre période officielle de conservation des données pour les dossiers clients ? »
  • Requête de suivi : « Est-ce que cela change pour les informations financières ? »
  • Requête complémentaire : « Et y a-t-il des exceptions ? »

La requête réécrite devient : « exceptions à la stratégie de conservation des données, exceptions relatives à la conservation des données clients et financières, dérogations réglementaires, gestion des exceptions aux stratégies, directives de conformité »

Notez que la requête réécrite :

  • Résout « there » en stratégie de conservation des données
  • Réutilise le contexte des échanges précédents : données client et données financières
  • Ajoute une terminologie propre aux stratégies d’entreprise : exceptions, dérogations, exigences réglementaires et directives

Étape 3 : transformer les résultats

Une source de connaissances personnalisée doit fournir des résultats au format attendu par Copilot Studio. Ce format utilise :

  • Contenu : extrait ou passage.
  • ContentLocation (optionnel) : URL.
  • Titre (optionnel) : titre du résultat.

Pour définir la structure de la réponse HTTP, configurez le schéma de réponse dans l’interface utilisateur de Copilot Studio.

  • Pour le type de données de réponse, sélectionnez À partir de données d’exemple.
  • Sélectionnez Obtenir le schéma à partir d’un JSON d’exemple.
  • Collez votre exemple JSON pour générer automatiquement le schéma.

Ce processus génère le schéma de réponse dans votre fichier YAML.

responseSchema:
  kind: Record
  properties:
    query: String
    results:
      type:
        kind: Table
        properties:
          snippet: String
          title: String
          url: String

Ensuite, transformez la réponse de votre API pour correspondre à ce format. Attribuez les données transformées à System.SearchResults.

Exemple de transformation

kind: AdaptiveDialog
beginDialog:
  kind: OnKnowledgeRequested
  id: main
  intent: {}
  actions:
    - kind: HttpRequestAction
      id: searchRequest
      url: ="https://search-api.contoso.com/search?q=" & System.KeywordSearchQuery
      response: Topic.searchResults
      responseSchema:
        kind: Record
        properties:
          query: String
          results:
            type:
              kind: Table
              properties:
                snippet: String
                title: String
                url: String
    
    - kind: SetVariable
      id: setSearchResults
      variable: System.SearchResults
      value: |-
        =ForAll(Topic.searchResults.results,
        {
          Content: snippet,
          ContentLocation: url,
          Title: title
        })

inputType: {}
outputType: {}

L’action SetVariable effectue les deux opérations :

  • La fonction ForAll transforme chaque résultat de recherche, en effectuant le mappage de snippet à Content, url à ContentLocation, et title à Title.
  • La table transformée est assignée à System.SearchResults, qui est la variable que Copilot Studio utilise pour générer des réponses.

Considérations

Gardez à l’esprit ces considérations clés lorsque vous construisez des sources de connaissances personnalisées.

Limites des résultats

Copilot Studio utilise jusqu’à 15 extraits de System.SearchResults pour générer une réponse. Si votre API retourne plus de résultats, envisagez :

  • Le scoring de pertinence est implémenté pour retourner d’abord les meilleurs résultats.
  • Limiter la réponse de votre API à 15 résultats.
  • Le tri donne les résultats par pertinence avant transformation.

Plusieurs rubriques de connaissances personnalisées

Vous pouvez créer plusieurs rubriques en utilisant OnKnowledgeRequested, et chaque rubrique peut interroger différents systèmes backend. Copilot Studio les invoque tous simultanément lorsqu’il a besoin de connaissances. Cette approche vous permet d’interroger différents points de terminaison de recherche ou de mettre en œuvre des stratégies de repli.

Avertissement

La limite de résultats s’applique à tous les sujets de connaissances combinés. Si la Rubrique A retourne 10 résultats et la Rubrique B 8, seuls les 15 meilleurs résultats combinés sont utilisés.

Recommandations

  • Triez ou notez les résultats avant de les retourner.
  • Garder les schémas de réponse cohérents.
  • Utilisez des noms et des descriptions de sujets clairs. Cette pratique est utile lorsque de grands ensembles de résultats nécessitent un filtrage de pertinence.