Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
ForAlltransforme chaque résultat de recherche, en effectuant le mappage desnippetàContent,urlàContentLocation, ettitleà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.