Dimensione eficientemente uma habilidade personalizada
Habilidades personalizadas são APIs da Web que implementam uma interface específica. Uma habilidade personalizada pode ser implementada em qualquer recurso publicamente endereçável. As implementações mais comuns para habilidades personalizadas são:
- Azure Functions para habilidades lógicas personalizadas
- Aplicativos Web do Azure para habilidades simples de IA em contêineres
- Serviço Kubernetes do Azure para habilidades mais complexas ou maiores.
Configuração do Skillset
As propriedades a seguir em uma habilidade personalizada são usadas para escala. Analise a interface de habilidade personalizada para obter uma introdução às entradas e saídas que uma habilidade personalizada deve implementar.
Conjunto
batchSize
da habilidade personalizada para configurar o número de registros enviados para a habilidade em uma única invocação da habilidade.Defina o
degreeOfParallelism
para calibrar o número de solicitações simultâneas que o indexador faz para sua habilidade.Defina
timeout
um valor suficiente para que a habilidade responda com uma resposta válida.indexer
Na definição, definabatchSize
o número de documentos que devem ser lidos da fonte de dados e enriquecidos simultaneamente.
Considerações
Não existe um conjunto de recomendações "tamanho único". Você deve planejar testar diferentes configurações para alcançar um resultado ideal. As estratégias de expansão são baseadas em menos solicitações grandes ou muitas solicitações pequenas.
Cardinalidade de invocação de habilidade: certifique-se de saber se a habilidade personalizada é executada uma vez para cada documento (
/document/content
) ou várias vezes por documento (/document/reviews_text/pages/*
). Se for várias vezes por documento, permaneça no lado inferior e reduza a rotatividade e tente definir o tamanho do lotedegreeOfParallelism
dobatchSize
indexador para valores incrementalmente mais altos para obter mais escala.Coordene a habilidade
batchSize
personalizada e o indexadorbatchSize
e certifique-se de que não está criando gargalos. Por exemplo, se o tamanho do lote do indexador for 5 e o tamanho do lote de habilidades for 50, você precisará de 10 lotes de indexador para preencher uma solicitação de habilidade personalizada. Idealmente, o tamanho do lote de habilidades deve ser menor ou igual ao tamanho do lote do indexador.Para
degreeOfParallelism
, use o número médio de solicitações que um lote indexador pode gerar para orientar sua decisão sobre como definir esse valor. Se sua infraestrutura que hospeda a habilidade, por exemplo, uma função do Azure, não puder suportar altos níveis de simultaneidade, considere diminuir os graus de paralelismo. Você pode testar sua configuração com alguns documentos para validar seu entendimento do número médio de solicitações.Embora seu objeto seja dimensionado e suporte a grandes volumes, o teste com uma amostra menor de documentos ajuda a quantificar diferentes estágios de execução. Por exemplo, você pode avaliar o tempo de execução de sua habilidade, em relação ao tempo total necessário para processar o subconjunto de documentos. Isso ajuda você a responder à pergunta: seu indexador gasta mais tempo construindo um lote ou esperando por uma resposta de sua habilidade?
Considere as implicações a montante do paralelismo. Se a entrada para uma habilidade personalizada for uma saída de uma habilidade anterior, todas as habilidades no conjunto de habilidades são dimensionadas de forma eficaz para minimizar a latência?
Tratamento de erros na habilidade personalizada
As habilidades personalizadas devem retornar um código de status de sucesso HTTP 200 quando a habilidade for concluída com êxito. Se um ou mais registros em um lote resultarem em erros, considere retornar o código de status múltiplo 207. A lista de erros ou avisos para o registro deve conter a mensagem apropriada.
Quaisquer itens em um lote que erros resultarão na falha do documento correspondente. Se você precisar que o documento seja bem-sucedido, retorne um aviso.
Qualquer código de status acima de 299 é avaliado como um erro e todos os enriquecimentos são falhados, resultando em um documento com falha.
Mensagens de erro comuns
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.
Defina o parâmetro timeout na habilidade para permitir uma duração de execução mais longa.Could not execute skill because Web Api skill response is invalid.
Indicativo de que a habilidade não retorna uma mensagem no formato de resposta de habilidade personalizado. Isso pode ser o resultado de uma exceção não detetada na habilidade.Could not execute skill because the Web Api request failed.
Muito provavelmente causado por erros de autorização ou exceções.Could not execute skill.
Geralmente o resultado da resposta de habilidade sendo mapeada para uma propriedade existente na hierarquia de documentos.
Testando habilidades personalizadas
Comece testando sua habilidade personalizada com um cliente de API REST para validar:
A habilidade implementa a interface de habilidade personalizada para solicitações e respostas
A habilidade retorna JSON válido com o
application/JSON
tipo MIMERetorna um código de status HTTP válido
Crie uma sessão de depuração para adicionar sua habilidade ao conjunto de habilidades e certifique-se de que ela produza um enriquecimento válido. Embora uma sessão de depuração não permita ajustar o desempenho da habilidade, ela permite garantir que a habilidade seja configurada com valores válidos e retorne os objetos enriquecidos esperados.
Melhores práticas
Embora as habilidades possam aceitar e retornar cargas úteis maiores, considere limitar a resposta a 150 MB ou menos ao retornar JSON.
Considere definir o tamanho do lote no indexador e a habilidade para garantir que cada lote de fonte de dados gere uma carga útil completa para sua habilidade.
Para tarefas de execução longa, defina o tempo limite para um valor alto o suficiente para garantir que o indexador não cometa erros ao processar documentos simultaneamente.
Otimize o tamanho do lote do indexador, o tamanho do lote de habilidades e os graus de paralelismo de habilidade para gerar o padrão de carga esperado por sua habilidade, menos solicitações grandes ou muitas solicitações pequenas.
Monitore habilidades personalizadas com logs detalhados de falhas, pois você pode ter cenários em que solicitações específicas falham consistentemente como resultado da variabilidade de dados.