UiPath Documentation
private-test-cloud
2.2510
true
Guía de administración de Test Cloud privado
Importante :
La localización de contenidos recién publicados puede tardar entre una y dos semanas en estar disponible.

Guía práctica: conectar Mistral a través de AI Trust Layer

Conecta Mistral a través de AI Trust Layer para Test Cloud privado en Automation Suite, incluyendo la configuración necesaria y la guía de verificación.

Esta guía explica cómo conectar un modelo Mistral implementado en Microsoft Azure AI Foundry a agentes de UiPath a través de la característica de configuraciones LLM de AI Trust Layer. Creas un conector de Integration Service personalizado basado en una plantilla de Azure OpenAI y adaptas su enlace de solicitud para los requisitos de la API de Mistral.

Requisitos previos

  • BYO AI Gateway habilitado en tu clúster. Para obtener más información, consulta Configurar AI Trust Layer.
  • Un modelo Mistral implementado en Azure AI Foundry (por ejemplo, mistral-small-2503)
  • La URL del punto final de Azure AI Foundry para tu recurso
  • Una clave API para tu recurso de Azure AI Foundry
  • Acceso de administrador de la organización en Automation Suite
  • Acceso a Integration Service y Connector Builder

Crear el conector personalizado

  1. Ve a Admin > AI Trust Layer > Configuraciones de LLM y selecciona Añadir configuración.
  2. Establece los valores de Tenant, Producto y Característica .
  3. En Configuración del modelo, introduce un alias personalizado en el campo Nombre de LLM y establece Tipo de API en OpenAI.
  4. En el campo Conector , selecciona Crear conector personalizado.
  5. Selecciona la plantilla de Azure OpenAI y luego selecciona Crear conector. El Creador de conectores se abre con la plantilla de Azure OpenAI rellenada previamente.

Editar el conector para la compatibilidad con Mistral

Los modelos Mistral en Azure AI Foundry utilizan una validación de esquema estricta y no aceptan todos los campos que la plantilla de Azure OpenAI envía de forma predeterminada. El enlace preRequest del conector debe resolver estas diferencias antes de que cada solicitud llegue al punto final de Mistral.

Envíos de plantillas de Azure OpenAIMistral en Azure AI Foundry esperaResolución aplicada por enlace
tool_choice: "required" o formulario de objeto"none", "auto" o "any"Se traduce a "any" cuando las herramientas están presentes
parallel_tool_calls CampoCampo no admitido (extra_forbidden)Eliminado del cuerpo de la solicitud
max_completion_tokensmax_tokensSe ha cambiado el nombre del campo
  1. En el Creador de conectores, abre la sección Enganches y selecciona el enganche de solicitud previa .

  2. Reemplaza todo el cuerpo del gancho con el siguiente script:

    // 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);
    
  3. En la configuración del conector, establece la URL base en tu punto final de Azure AI Foundry: https://{your-resource-name}.openai.azure.com/openai.

  4. Establece el Tipo de autenticación para que coincida con tu configuración. Este ejemplo utiliza la clave API (customApiKey), pero puedes utilizar cualquier tipo de autenticación compatible, incluido OAuth : actualiza la configuración del conector en consecuencia.

  5. Selecciona Guardar y, a continuación , publica el conector.

Crear una conexión en Integration Service

  1. En Integration Service, ve a Conexiones y selecciona Añadir conexión.
  2. Selecciona el conector personalizado que has publicado.
  3. En el campo Clave API , introduce tu clave API de Azure AI Foundry.
  4. En el campo Recurso de Azure OpenAI , introduce el nombre de tu recurso: la parte del subdominio de la URL de tu punto final, sin https:// ni .openai.azure.com.
  5. Selecciona Conectar para aprovisionar la conexión.

Completar la configuración de LLM

  1. Vuelve a Admin > AI Trust Layer > Configuraciones de LLM y abre la configuración que iniciaste.
  2. En Configuración del modelo, establece Conector en tu conector publicado y Conexión en la conexión que creaste.
  3. En el campo Identificador de LLM , introduce el nombre de la implementación exactamente como aparece en Azure AI Foundry.
    Nota:

    Los espacios finales en el campo del identificador de LLM provocan un error DeploymentNotFound . Verifique que no haya espacios iniciales o finales antes de guardar.

  4. Selecciona Probar configuración para ejecutar la sonda AI Trust Layer.
  5. Si el sondeo es correcto, selecciona Guardar.

Resultado

La configuración se guarda y el modelo Mistral está disponible para los agentes de UiPath para el producto y la característica que has especificado. Las llamadas se enrutan a través de la AI Trust Layer y aparecen en el registro de auditoría en Origen: Conexión personalizada.

Nota:

Si tienes problemas al crear un conector personalizado, ponte en contacto con el soporte de UiPath para obtener ayuda.

¿Te ha resultado útil esta página?

Conectar

¿Necesita ayuda? Soporte

¿Quiere aprender? UiPath Academy

¿Tiene alguna pregunta? Foro de UiPath

Manténgase actualizado