- Introdução
- Segurança de dados e conformidade
- Organizações
- Autenticação e segurança
- Licenciamento
- Sobre as licenças
- Preço unificado: estrutura do plano de licenciamento
- Ativar sua licença Enterprise
- Migre do Test Suite para o Test Cloud
- Migração de licença
- Atribuição de Licenças a Tenants
- Atribuição de licenças aos usuários
- Desalocando licenças de usuário
- Monitoring license allocation
- Atribuição excessiva de licenças
- Notificações de licenciamento
- Gerenciamento de Licenças de Usuário
- Tenants e serviços
- Contas e funções
- AI Trust Layer
- Sobre a Camada de Confiança da IA
- Verificando o resumo de uso
- Visualização de logs de auditoria
- Gerenciamento de políticas da Camada de confiança da IA
- Mascaramento de PII
- Gerenciamento Autopilot for Everyone
- Configuração de LLMs
- Restrição de chamadas de LLM para seus próprios modelos
- Configuração do OpenTelemetry
- Governando dados contextuais para funcionalidades da GenAI
- Usando modelos de conector
- Guia de instruções: conexão do Mistral por meio da AI Trust Layer
- How-to guide: Connecting open-source models through AI Trust Layer
- Aplicativos Externos
- Notificações
- Geração de logs
- Exportação de dados
- Testes em sua organização
- Solução de problemas
- Migração para o Test Cloud
Connect a Mistral model in Azure AI Foundry to UiPath Agents via AI Trust Layer using a custom Integration Service connector.
This capability is currently generally available for enterprise customers upon request.
Este guia explica como conectar um modelo Mistral implantado no Microsoft Azure AI Foundry aos UiPath Agents por meio do recurso Configurações de LLM da AI Trust Layer. Você cria um conector personalizado do Integration Service baseado em um modelo do Azure OpenAI e adapta seu gancho de solicitação para os requisitos da API do Mistral.
Pré-requisitos
- Custom connectors for AI Trust Layer enabled for your organization (currently available upon request for enterprise customers).
- Um modelo Mistral implantado no Azure AI Foundry (por exemplo,
mistral-small-2503) - O URL do endpoint do Azure AI Foundry para seu recurso
- Uma chave de API para seu recurso Azure AI Foundry
- Organization administrator access in Test Cloud
- Acesso ao Integration Service e ao Connector Builder
Crie o conector personalizado
- Navegue até Admin > AI Trust Layer > configurações do LLM e selecione Adicionar configuração.
- Defina os valores de Tenant, Produto e Recurso .
- Em Configuração do modelo, insira um alias personalizado no campo Nome do LLM e defina o Tipo de API como OpenAI.
- No campo Conector , selecione Criar conector personalizado.
- Selecione o modelo Azure OpenAI e, em seguida, selecione Criar conector. O Connector Builder é aberto com o modelo Azure OpenAI pré-preenchido.
Edite o conector para compatibilidade com o Mistral
Os modelos Mistral no Azure AI Foundry usam uma validação de esquema rigorosa e não aceitam todos os campos que o modelo do Azure OpenAI envia por padrão. O gancho preRequest do conector deve resolver essas diferenças antes que cada solicitação atinja o ponto de extremidade do Mistral.
| Envios de modelo do Azure OpenAI | O Mistral no Azure AI Foundry espera | Resolução aplicada pelo hook |
|---|---|---|
tool_choice: "required" ou formulário de objeto | "none", "auto", ou "any" | Traduzido para "any" quando há ferramentas presentes |
parallel_tool_calls Campo | Campo não compatível (extra_forbidden) | Removido do corpo da solicitação |
max_completion_tokens | max_tokens | O campo foi renomeado |
-
No Construtor de Conector, abra a seção Gatilhos e selecione o hook preRequest .
-
Substitua todo o corpo do hook pelo seguinte 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); -
Nas configurações do conector, defina o URL base como seu endpoint do Azure AI Foundry:
https://{your-resource-name}.openai.azure.com/openai. -
Defina o Tipo de autenticação para corresponder à sua configuração. Este exemplo usa a chave de API (
customApiKey), mas você pode usar qualquer tipo de autenticação compatível, incluindo OAuth — atualize devidamente as configurações do conector. -
Selecione Salvar.
Crie uma conexão no Integration Service
- No Integration Service, navegue até Conexões e selecione Adicionar conexão.
- Selecione o conector personalizado que você publicou.
- No campo chave de API , insira sua chave de API do Azure AI Foundry.
- No campo Recurso do Azure OpenAI , insira seu nome do recurso — a parte do subdomínio do URL do seu ponto de extremidade, sem
https://ou.openai.azure.com. - Selecione Conectar para provisionar a conexão.
Conclua a configuração do LLM
- Retorne ao Administrador > AI Trust Layer > configurações do LLM e abra a configuração que você iniciou.
- Em Configuração do modelo, defina Conector como seu conector publicado e Conexão como a conexão que você criou.
- No campo Identificador do LLM, insira o nome da implantação exatamente como ele aparece no Azure AI Foundry.
Observação:
Espaços à direita no campo Identificador do LLM causam um erro
DeploymentNotFound. Verifique se não há espaços à esquerda ou à direita antes de salvar. - Selecione Configuração de teste para executar a investigação da AI Trust Layer.
- Se a investigação for bem-sucedida, selecione Salvar.
Resultado
A configuração é salva e o modelo Mistral está disponível para os Agentes da UiPath para o produto e a funcionalidade que você especificou. As chamadas são encaminhadas por meio da AI Trust Layer e aparecem no log de auditoria em Origem: conexão personalizada.
Se você encontrar problemas ao criar um conector personalizado, entre em contato com o Suporte da UiPath para obter assistência.