- Erste Schritte
- Hostverwaltung
- Organisationen
- Mandanten und Dienste
- Authentifizierung und Sicherheit
- Lizenzierung
- Über die Lizenzierung
- Einheitliche Preise: Lizenzierungsplan-Framework
- Aktivieren Ihrer Lizenz
- Zuweisen von Lizenzen zu Mandanten
- Zuweisen von Benutzerlizenzen
- Freigegeben von Benutzerlizenzen
- Überwachung der Lizenzzuweisung
- Lizenzüberzuweisung
- Lizenzierungsbenachrichtigungen
- Benutzerlizenzverwaltung
- Migrieren von Test Suite zu Test Cloud
- Konten und Rollen
- Tests in Ihrer Organisation
- AI Trust Layer
- Über AI Trust Layer
- Checkliste für die AI Trust Layer-Konfiguration
- Unterstützung für Large Language Models
- Verwenden von Connector-Vorlagen
- Anleitung: Verbinden von Missral über AI Trust Layer
- Anleitung: Verbinden von OS-Modellen über AI Trust Layer
- Externe Anwendungen
- Benachrichtigungen
- Protokollierung
- Fehlersuche und ‑behebung
Private Test Cloud-Administratorhandbuch
In diesem Handbuch wird erläutert, wie Sie ein in Microsoft Azure AI Foundry bereitgestelltes Missral-Modell über die Funktion LLM-Konfigurationen der AI Trust Layer mit UiPath Agents verbinden. Sie erstellen einen benutzerdefinierten Integration Service-Connector basierend auf einer Azure OpenAI-Vorlage und passen seinen Anforderungshook an die API-Anforderungen von Missral an.
Voraussetzungen
- BYO-AI Gateway in Ihrem Cluster aktiviert. Weitere Informationen finden Sie unter Konfigurieren der AI Trust Layer.
- Ein in Azure AI Foundry bereitgestelltes Master-Modell (z. B.
mistral-small-2503) - Die Azure AI Foundry-Endpunkt-URL für Ihre Ressource
- Ein API-Schlüssel für Ihre Azure AI Foundry-Ressource
- Administratorzugriff der Organisation in der Automation Suite
- Zugriff auf Integration Service und Connector Builder
Erstellen Sie den benutzerdefinierten Connector
- Gehen Sie zu Administrator > AI Trust Layer > LLM-Konfigurationen und wählen Sie Konfiguration hinzufügen.
- Legen Sie die Werte für Mandant, Produkt und Funktion fest.
- Geben Sie unter Modellkonfiguration ein benutzerdefiniertes Alias in das Feld LLM-Name ein und legen Sie API-Typ auf OpenAI fest.
- Wählen Sie im Feld Connector die Option Benutzerdefinierten Connector erstellen aus.
- Wählen Sie die Azure OpenAI- Vorlage und dann Connector erstellen. Der Connector-Generator wird mit der vorab ausgefüllten Azure OpenAI-Vorlage geöffnet.
Bearbeiten Sie den Connector für die Master-Kompatibilität
Mistral-Modelle auf Azure AI Foundry verwenden eine strikte Schemavalidierung und akzeptieren nicht alle Felder, die die Azure OpenAI-Vorlage standardmäßig sendet. Der preRequest -Hook des Connectors muss diese Unterschiede auflösen, bevor jede Anforderung den Missral-Endpunkt erreicht.
| Azure OpenAI-Vorlage wird gesendet | Mistral auf Azure AI Foundry erwartet | Auflösung wird durch Hook angewendet |
|---|---|---|
tool_choice: "required" oder Objektformulars | "none", "auto" oder "any" | Wird in "any" übersetzt, wenn Tools vorhanden sind |
parallel_tool_calls Feld | Feld nicht unterstützt (extra_forbidden) | Aus Anforderungstext entfernt |
max_completion_tokens | max_tokens | Feld wird umbenannt |
-
Öffnen Sie im Connector-Generator den Abschnitt Hooks und wählen Sie den Hook PreRequest aus.
-
Ersetzen Sie den gesamten Hook-Text durch das folgende Skript:
// Normalize query params and payload for Mistral on Azure AI Foundry. // Removes unsupported fields and adapts tool semantics for Mistral's strict schema. const _reqPath = (typeof request_path !== 'undefined') ? request_path : ''; const _reqParams = (typeof request_parameters !== 'undefined') ? request_parameters : undefined; const _cfg = (typeof configuration !== 'undefined') ? configuration : undefined; if (['/query', '/v1/responses'].includes(_reqPath)) { return done(); } let apiVersion = (_cfg && _cfg['api-version']) ? _cfg['api-version'] : "2023-05-15"; if (_reqParams && _reqParams["api-version"]) { apiVersion = _reqParams["api-version"]; } if (['/listAllModels', '/auth_validation'].includes(_reqPath)) { apiVersion = (_cfg && _cfg['api-version']) ? _cfg['api-version'] : "2023-10-01-preview"; } // Resolve body across different runtime variable names let body = (typeof request_body !== 'undefined' && request_body) ? request_body : ((typeof request_vendor_body !== 'undefined' && request_vendor_body) ? request_vendor_body : ((typeof request !== 'undefined' && request && request.body) ? request.body : undefined)); if (body && typeof body === 'string') { try { body = JSON.parse(body); } catch (e) { /* leave as-is */ } } if (body && typeof body === 'object') { // Remove field rejected by Mistral's strict schema if (Object.prototype.hasOwnProperty.call(body, 'parallel_tool_calls')) { delete body.parallel_tool_calls; } // Normalize tool_choice: Mistral accepts only 'none', 'auto', or 'any' const _allowedToolChoice = new Set(['none', 'auto', 'any']); const _hasTools = Object.prototype.hasOwnProperty.call(body, 'tools') && Array.isArray(body.tools) && body.tools.length > 0; if (Object.prototype.hasOwnProperty.call(body, 'tool_choice')) { if (body.tool_choice === 'required') { body.tool_choice = 'any'; } else if (body.tool_choice && typeof body.tool_choice === 'object') { body.tool_choice = 'any'; } else if (typeof body.tool_choice === 'string' && !_allowedToolChoice.has(body.tool_choice)) { body.tool_choice = _hasTools ? 'any' : 'auto'; } } else if (_hasTools) { // Force tool usage: agent runtime expects tool calls when tools are configured body.tool_choice = 'any'; } // Rename max_completion_tokens to max_tokens if (Object.prototype.hasOwnProperty.call(body, 'max_completion_tokens')) { if (!Object.prototype.hasOwnProperty.call(body, 'max_tokens')) { body.max_tokens = body.max_completion_tokens; } delete body.max_completion_tokens; } } const out = { request_vendor_parameters: { "api-version": apiVersion } }; if (typeof request_body !== 'undefined') out.request_body = body; if (typeof request_vendor_body !== 'undefined') out.request_vendor_body = body; return done(out);// Normalize query params and payload for Mistral on Azure AI Foundry. // Removes unsupported fields and adapts tool semantics for Mistral's strict schema. const _reqPath = (typeof request_path !== 'undefined') ? request_path : ''; const _reqParams = (typeof request_parameters !== 'undefined') ? request_parameters : undefined; const _cfg = (typeof configuration !== 'undefined') ? configuration : undefined; if (['/query', '/v1/responses'].includes(_reqPath)) { return done(); } let apiVersion = (_cfg && _cfg['api-version']) ? _cfg['api-version'] : "2023-05-15"; if (_reqParams && _reqParams["api-version"]) { apiVersion = _reqParams["api-version"]; } if (['/listAllModels', '/auth_validation'].includes(_reqPath)) { apiVersion = (_cfg && _cfg['api-version']) ? _cfg['api-version'] : "2023-10-01-preview"; } // Resolve body across different runtime variable names let body = (typeof request_body !== 'undefined' && request_body) ? request_body : ((typeof request_vendor_body !== 'undefined' && request_vendor_body) ? request_vendor_body : ((typeof request !== 'undefined' && request && request.body) ? request.body : undefined)); if (body && typeof body === 'string') { try { body = JSON.parse(body); } catch (e) { /* leave as-is */ } } if (body && typeof body === 'object') { // Remove field rejected by Mistral's strict schema if (Object.prototype.hasOwnProperty.call(body, 'parallel_tool_calls')) { delete body.parallel_tool_calls; } // Normalize tool_choice: Mistral accepts only 'none', 'auto', or 'any' const _allowedToolChoice = new Set(['none', 'auto', 'any']); const _hasTools = Object.prototype.hasOwnProperty.call(body, 'tools') && Array.isArray(body.tools) && body.tools.length > 0; if (Object.prototype.hasOwnProperty.call(body, 'tool_choice')) { if (body.tool_choice === 'required') { body.tool_choice = 'any'; } else if (body.tool_choice && typeof body.tool_choice === 'object') { body.tool_choice = 'any'; } else if (typeof body.tool_choice === 'string' && !_allowedToolChoice.has(body.tool_choice)) { body.tool_choice = _hasTools ? 'any' : 'auto'; } } else if (_hasTools) { // Force tool usage: agent runtime expects tool calls when tools are configured body.tool_choice = 'any'; } // Rename max_completion_tokens to max_tokens if (Object.prototype.hasOwnProperty.call(body, 'max_completion_tokens')) { if (!Object.prototype.hasOwnProperty.call(body, 'max_tokens')) { body.max_tokens = body.max_completion_tokens; } delete body.max_completion_tokens; } } const out = { request_vendor_parameters: { "api-version": apiVersion } }; if (typeof request_body !== 'undefined') out.request_body = body; if (typeof request_vendor_body !== 'undefined') out.request_vendor_body = body; return done(out); -
Legen Sie in den Connector-Einstellungen die Basis-URL auf Ihren Azure AI Foundry-Endpunkt fest:
https://{your-resource-name}.openai.azure.com/openai. -
Legen Sie den Authentifizierungstyp entsprechend Ihrer Einrichtung fest. In diesem Beispiel wird der API-Schlüssel (
customApiKey) verwendet, aber Sie können jeden unterstützten Authentifizierungstyp verwenden, einschließlich OAuth . Aktualisieren Sie die Connector-Einstellungen entsprechend. -
Wählen Sie Speichern aus und veröffentlichen Sie dann den Connector.
Erstellen Sie eine Verbindung im Integration Service
- Navigieren Sie im Integration Service zu Verbindungen und wählen Sie Verbindung hinzufügen.
- Wählen Sie den benutzerdefinierten Connector aus, den Sie veröffentlicht haben.
- Geben Sie im Feld API-Schlüssel Ihren Azure AI Foundry API-Schlüssel ein.
- Geben Sie im Feld Azure OpenAI-Ressource Ihren Ressourcennamen ein – den Unterdomänenteil Ihrer Endpunkt-URL, ohne
https://oder.openai.azure.com. - Wählen Sie Verbinden aus, um die Verbindung bereitzustellen.
Schließen Sie die LLM-Konfiguration ab
- Kehren Sie zu Administrator > AI Trust Layer > LLM-Konfigurationen zurück und öffnen Sie die von Ihnen gestartete Konfiguration.
- Legen Sie unter Modellkonfiguration Connector auf Ihren veröffentlichten Connector und Verbindung auf die von Ihnen erstellte Verbindung fest.
- Geben Sie im Feld LLM-Bezeichner den Bereitstellungsnamen genau so ein, wie er in Azure AI Foundry angezeigt wird.
Hinweis:
Nachgestellte Leerzeichen im Feld LLM-Bezeichner verursachen einen
DeploymentNotFound-Fehler. Stellen Sie vor dem Speichern sicher, dass keine Leerzeichen am Anfang oder Ende vorhanden sind. - Wählen Sie Testkonfiguration aus, um den AI Trust Layer auszuführen.
- Wenn der Test erfolgreich ist, wählen Sie Speichern aus .
Ergebnis
Die Konfiguration wird gespeichert und das Missral-Modell ist für UiPath Agents für das von Ihnen angegebene Produkt und die Funktion verfügbar. Aufrufe werden durch das AI Trust Layer weitergeleitet und im Prüfungsprotokoll unter Quelle: Benutzerdefinierte Verbindung angezeigt.
Wenn beim Erstellen eines benutzerdefinierten Connectors Probleme auftreten, wenden Sie sich an den UiPath-Support, um Unterstützung zu erhalten.