Effizientes Aufskalieren eines benutzerdefinierten Skills
Benutzerdefinierte Skills sind Web-APIs, die eine bestimmte Schnittstelle implementieren. Ein benutzerdefinierter Skill kann für jede öffentlich adressierbare Ressource implementiert werden. Die gängigsten Implementierungen für benutzerdefinierte Skills:
- Azure Functions für benutzerdefinierte Logikskills
- Azure-Web-Apps für einfache Container-KI-Skills
- Azure Kubernetes-Dienst für komplexere oder umfassendere Skills
Skillsetkonfiguration
Die folgenden Eigenschaften für einen benutzerdefinierten Skill werden für die Skalierung verwendet. Arbeiten Sie die Schnittstelle des benutzerdefinierten Skills durch, um einen Eindruck über die Eingaben und Ausgaben zu gewinnen, die von einem benutzerdefinierten Skill implementiert werden sollten.
Legen Sie
batchSize
des benutzerdefinierten Skills fest, um die Anzahl der Datensätze zu konfigurieren, die in einem einzelnen Aufruf des Skills an den Skill gesendet werden.Legen Sie
degreeOfParallelism
fest, um die Anzahl der parallel ausgeführten Anforderungen einzustellen, die der Indexer für Ihren Skill erstellt.Legen Sie
timeout
auf einen Wert fest, der groß genug ist, um eine gültige Antwort des Skills zu erhalten.Legen Sie in der Definition des
indexer
batchSize
auf die Anzahl der Dokumente fest, die aus der Datenquelle gelesen und gleichzeitig angereichert werden sollen.
Überlegungen
Es gibt keine "Eine Größe passt für alle" Empfehlungen. Sie sollten verschiedene Konfigurationen testen, um ein optimales Ergebnis zu erzielen. Hochskalierungsstrategien basieren auf weniger großen Anforderungen oder vielen kleinen Anforderungen.
Kardinalität des Fähigkeitsaufrufs: Stellen Sie sicher, dass Sie wissen, ob die benutzerdefinierten Fähigkeiten einmal für jedes Dokument (
/document/content
) oder mehrmals pro Dokument (/document/reviews_text/pages/*
) ausgeführt werden. Wenn es mehrere Male pro Dokument ist, bleiben Sie auf der unteren Seite vonbatchSize
unddegreeOfParallelism
reduzieren Sie die Änderung, und versuchen Sie, die Batchgröße des Indexers auf inkrementell höhere Werte für mehr Skalierung festzulegen.Koordinieren Sie benutzerdefinierte Fähigkeiten
batchSize
und den IndexerbatchSize
, und stellen Sie sicher, dass Sie keine Engpässe erstellen. Wenn z. B. die Indexerbatchgröße 5 ist und die Größe des Skillbatches 50 beträgt, benötigen Sie 10 Indexerbatches, um eine benutzerdefinierte Skillanforderung auszufüllen. Idealerweise sollte die Skillbatchgröße kleiner oder gleich der Indexerbatchgröße sein.Verwenden Sie für
degreeOfParallelism
die durchschnittliche Anzahl von Anforderungen, die ein Indexerbatch generieren kann, um Ihre Entscheidung zur Festlegung dieses Werts zu leiten. Wenn Ihre Infrastruktur, in der der Skill gehostet wird, zum Beispiel eine Azure-Funktion, diesen Grad an Parallelität nicht unterstützen kann, sollten Sie den Grad an Parallelität verringern. Sie können Ihre Konfiguration mit einigen Dokumenten testen, um Ihr Verständnis der durchschnittlichen Anzahl von Anforderungen zu überprüfen.Obwohl Ihr Objekt skaliert und unterstützt hohe Volumes, hilft das Testen mit einer kleineren Sammlung von Dokumenten bei der Quantifizierung verschiedener Ausführungsstufen. Sie können z. B. die Ausführungszeit Ihres Skills im Verhältnis zu der Gesamtzeit auswerten, die zum Verarbeiten der Teilmenge von Dokumenten benötigt wird. Dies hilft Ihnen, die Frage zu beantworten: Verbringt Ihr Indexer mehr Zeit beim Erstellen eines Batches oder wartet auf eine Antwort von Ihrem Skill?
Berücksichtigen Sie die Auswirkungen der Parallelität auf den Upstream. Wenn die Eingabe für einen benutzerdefinierten Skill die Ausgabe aus einem zuvor ausgeführten Skill ist, werden alle Skills im Skillset effektiv aufskaliert, um eine möglichst geringe Latenz zu erzielen?
Fehlerbehandlung im benutzerdefinierten Skill
Benutzerdefinierte Skills sollten den Erfolgsstatuscode „HTTP 200“ zurückgeben, wenn der Skill erfolgreich ausgeführt wurde. Wenn mindestens ein Datensatz in einem Batch einen Fehler verursacht, sollten Sie den Multistatuscode 207 zurückgeben. Die Liste der Fehler oder Warnungen für den Datensatz sollten eine entsprechende Meldung enthalten.
Alle Elemente in einem Batch, die Fehler verursachen, führen zu einem Fehler bei dem entsprechenden Dokument. Wenn das Dokument erfolgreich verarbeitet werden muss, geben Sie eine Warnung zurück.
Jeder Statuscode über 299 wird als Fehler ausgewertet, und alle Anreicherungen sind fehlgeschlagen und führen zu einem Dokumentfehler.
Häufige Fehlermeldungen
Could not execute skill because it did not execute within the time limit '00:00:30'. This is likely transient. Please try again later. For custom skills, consider increasing the 'timeout' parameter on your skill in the skillset.
Legen Sie den Timeoutparameter für den Skill für eine längere Ausführungsdauer auf „Zulassen“ fest.Could not execute skill because Web Api skill response is invalid.
Ein Hinweis darauf, dass der Skill keine Meldung im Antwortformat des benutzerdefinierten Skills zurückgibt. Dies kann auf eine nicht abgefangene Ausnahme im Skill zurückzuführen sein.Could not execute skill because the Web Api request failed.
Wahrscheinlich durch Autorisierungsfehler oder -ausnahmen verursacht.Could not execute skill.
In der Regel eine Folge der Zuordnung der Skillantwort zu einer vorhandenen Eigenschaft in der Dokumenthierarchie.
Testen von benutzerdefinierten Skills
Testen Sie Ihre benutzerdefinierten Skills zunächst mit einem REST-API-Client, um Folgendes zu überprüfen:
Der Skill implementiert die Schnittstelle des benutzerdefinierten Skills für Anforderungen und Antworten.
Der Skill gibt gültigen JSON-Code mit dem MIME-Typ
application/JSON
zurück.Er gibt einen gültigen HTTP-Statuscode zurück.
Erstellen Sie eine Debugsitzung, um den Skill Ihrem Skillset hinzuzufügen, und stellen Sie sicher, dass er eine gültige Anreicherung ausgibt. Obwohl eine Debugsitzung keine Optimierung der Skillleistung ermöglicht, können Sie so sicherstellen, dass der Skill mit gültigen Werten konfiguriert ist und die erwarteten angereicherten Objekte zurückgibt.
Bewährte Methoden
Obwohl Skills größere Nutzlasten akzeptieren und zurückgeben können, sollten Sie die Antwort auf 150 MB oder weniger einschränken, wenn sie JSON-Code zurückgeben.
Legen Sie die Batchgröße für den Indexer und den Skill fest, um sicherzustellen, dass jeder Datenquellenbatch eine vollständige Nutzlast für den Skill generiert.
Legen Sie für zeitintensive Aufgaben den Timeout auf einen ausreichend hohen Wert fest, um sicherzustellen, dass der Indexer bei der gleichzeitigen Verarbeitung von Dokumenten keine Fehler verursacht.
Optimieren Sie die Batchgröße des Indexers und des Skills sowie den Grad an Parallelität, um das Auslastungsmuster zu generieren, das der Skill erwartet, d. h. wenige große Anforderungen oder viele kleine Anforderungen.
Überwachen Sie benutzerdefinierte Skills mit ausführlichen Protokollen für Fehler, da Szenarien auftreten können, in denen bestimmte Anforderungen infolge der Variabilität der Daten durchgängig Fehler verursachen.