UiPath Documentation
test-cloud
latest
false
Guía de administración de Test Cloud
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

Connect a Mistral model in Azure AI Foundry to UiPath Agents via AI Trust Layer using a custom Integration Service connector.

Nota:

This capability is currently generally available for enterprise customers upon request.

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

  • Custom connectors for AI Trust Layer enabled for your organization (currently available upon request for enterprise customers).
  • 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
  • Organization administrator access in Test Cloud
  • 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.

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