Freigeben über


Herstellen einer Verbindung mit benutzerdefinierten Wissensquellen

Copilot Studio enthält integrierte Wissensquellen wie SharePoint und Dataverse. Viele Organisationen verwenden auch eigene Suchendpunkte, z. B. benutzerdefinierte APIs, vorhandene Unternehmenssuchsysteme oder Azure AI Search, während die vollständige Kontrolle über die ausgeführte Abfrage erhalten bleibt.

Copilot Studio unterstützt dieses Szenario mit dem OnKnowledgeRequested Trigger. Jedes Thema, das diesen Auslöser verwendet, dient als benutzerdefinierte Wissensquelle und trägt zu generierenden Antworten bei.

In diesem Artikel wird erläutert, wie Sie benutzerdefinierte Wissensquellen mithilfe des OnKnowledgeRequested Triggers in Copilot Studio erstellen und integrieren. Sie erfahren, wie Copilot Studio Abfragen umschreibt, wie Sie eine Verbindung mit Ihrer eigenen Such-API herstellen, wie Sie Ergebnisse für generative Antworten formatieren und bewährte Methoden beim Arbeiten mit benutzerdefiniertem Wissen verwenden.

Der OnKnowledgeRequested-Trigger

Verwenden Sie den OnKnowledgeRequested Trigger in diesen beiden Situationen:

  • Wenn der Orchestrator feststellt, dass der Abruf von Wissen erforderlich ist, um eine Benutzerabfrage zu beantworten.
  • Wenn ein generativer Antwortknoten in der Unterhaltung explizit aufgerufen wird.

Von Bedeutung

Sie können diesen Trigger nur in der Codeansicht mithilfe von YAML konfigurieren. Es gibt keine Unterstützung für visuelle Designer.

Themen, die OnKnowledgeRequested verwenden, haben Zugriff auf Systemvariablen, die in regulären Themen nicht verfügbar sind.

  • System.SearchQuery: Eine kontextabhängige, umgeschriebene Version der Abfrage des Benutzers, die für die semantische Suche optimiert ist.
  • System.KeywordSearchQuery: Eine umgeschriebene Abfrage, die für Schlüsselwortbasierte Suchmaschinen optimiert ist.
  • System.SearchResults: Wo das Thema formatierte Wissensausschnitte speichert.

Copilot Studio schreibt Abfragen mithilfe des Gesprächsverlaufs intelligent um und stellt sicher, dass der mehrstufige Kontext beibehalten wird.

Erstellen einer benutzerdefinierten Wissensquelle

Um eine benutzerdefinierte Wissensquelle zu erstellen, erstellen Sie ein Thema mit dem Trigger, der OnKnowledgeRequested Ihre Such-API aufruft, und transformiert Ergebnisse in das Format, das Copilot Studio erwartet.

Schritt 1: Erstellen des Triggers

Erstellen Sie ein neues Thema in Copilot Studio, wechseln Sie zur Codeansicht, und definieren Sie den OnKnowledgeRequested Trigger.

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

Diese Struktur teilt Copilot Studio mit, dass dieses Thema für die Erfüllung von Wissensanforderungen verantwortlich ist.

Schritt 2: Hinzufügen einer HTTP-Anforderung

Fügen Sie eine HTTP-Aktion hinzu, die Ihren Suchendpunkt aufruft.

Beispiel:

- 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

Verketten Sie System.KeywordSearchQuery auf Ihre Basis-URL, da Copilot Studio die Benutzerabfrage automatisch basierend auf dem Unterhaltungskontext umformuliert, bevor die Suchanfrage gestellt wird. Dieser Schritt ist wichtig, um den Kontext in mehrstufigen Unterhaltungen aufrechtzuerhalten.

Tipp

Statt einer rohen HTTP-Anforderung können Sie jede Methode nutzen, die Ergebnisse von einem Suchendpunkt abruft, einschließlich benutzerdefinierter Connectoren, integrierter Connectoren wie Azure AI Search oder Agentenflüsse.

Beispiel für die Abfrageumschreibung

  • Benutzerabfrage 1: "Was ist unser offizieller Datenaufbewahrungszeitraum für Kundendatensätze?"
  • Nachverfolgungsabfrage: "Ändert sich dies für Finanzinformationen?"
  • Nachverfolgungsabfrage: "Und gibt es Ausnahmen?"

Die umformulierte Abfrage wird zu: „Ausnahmen von der Datenaufbewahrungsrichtlinie Ausnahmen bei der Aufbewahrung von Kunden- und Finanzdaten regulatorische Befreiungen Umgang mit Ausnahmen Compliance-Richtlinien“

Beachten Sie, dass die umgeschriebene Abfrage:

  • Löst „dort“ gemäß der Datenaufbewahrungsrichtlinie auf
  • Zieht den Kontext aus beiden vorherigen Wendungen voran: Kundendaten + Finanzdaten
  • Fügt Unternehmensrichtlinienformulierung hinzu: Ausnahmen, Befreiungen, regulatorisch, Richtlinien

Schritt 3: Transformieren von Ergebnissen

Eine benutzerdefinierte Wissensquelle muss Ergebnisse im Format ausgeben, das Copilot Studio erwartet. Dieses Format verwendet:

  • Inhalt: Snippet oder Ausschnitt.
  • ContentLocation (optional): URL.
  • Titel (optional): Titel des Ergebnisses.

Um die Struktur der HTTP-Antwort zu definieren, konfigurieren Sie das Antwortschema in der Copilot Studio-Benutzeroberfläche.

  • Wählen Sie Aus Beispieldaten als Antwortdatentyp aus.
  • Wählen Sie " Schema aus JSON-Beispiel abrufen" aus.
  • Fügen Sie Ihre JSON-Beispielnutzlast ein, um das Schema automatisch zu generieren.

Dieser Prozess generiert das Antwortschema in Ihrer YAML-Datei.

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

Transformieren Sie als Nächstes die Antwort Ihrer API so, dass sie diesem Format entspricht. Weisen Sie die umgewandelten Daten System.SearchResults zu.

Beispieltransformation

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: {}

Die SetVariable Aktion führt beide Vorgänge aus:

  • Die ForAll-Funktion transformiert jedes Suchergebnis, indem sie snippet zu Content, url zu ContentLocation und title zu Title zuordnet.
  • Die transformierte Tabelle wird System.SearchResults zugewiesen, was die Variable ist, die Copilot Studio zum Generieren von Antworten verwendet.

Überlegungen

Beachten Sie diese wichtigen Überlegungen beim Erstellen benutzerdefinierter Wissensquellen.

Ergebnisgrenzen

Copilot Studio verwendet bis zu 15 Codeausschnitte aus System.SearchResults , um eine Antwort zu generieren. Wenn Ihre API weitere Ergebnisse zurückgibt, sollten Sie Folgendes in Betracht ziehen:

  • Implementieren der Relevanzbewertung, um zuerst die besten Ergebnisse zurückzugeben.
  • Wir beschränken die API-Antwort auf 15 Ergebnisse.
  • Sortieren von Ergebnissen nach Relevanz vor der Transformation.

Mehrere benutzerdefinierte Wissensthemen

Sie können mehrere Themenbereiche mit OnKnowledgeRequested erstellen, und jedes Themenbereich kann unterschiedliche Back-End-Systeme abfragen. Copilot Studio ruft alle gleichzeitig auf, wenn es Wissen benötigt. Mit diesem Ansatz können Sie verschiedene Suchendpunkte abfragen oder Fallbackstrategien implementieren.

Warnung

Das Ergebnislimit gilt für alle kombinierten Wissensthemen. Wenn Thema A 10 Ergebnisse zurückgibt und Thema B 8 zurückgibt, werden nur die 15 besten kombinierten Ergebnisse verwendet.

Empfehlungen

  • Sortieren oder bewerten Sie Ergebnisse, bevor sie zurückgegeben werden.
  • Halten Sie Antwortschemas konsistent.
  • Verwenden Sie klare Themennamen und Beschreibungen. Diese Vorgehensweise ist nützlich, wenn große Ergebnismengen durch Relevanzfilterung verarbeitet werden müssen.