Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Nota:
Esta característica actualmente está en su versión preliminar pública. Esta versión preliminar se ofrece sin contrato de nivel de servicio y no es aconsejable usarla en las cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.
Las estrategias de fragmentación de datos de texto desempeñan un papel clave en la optimización de las respuestas y el rendimiento de RAG. Con la nueva aptitud Diseño de documento que se encuentra actualmente en versión preliminar, puede fragmentar el contenido en función de la estructura del documento, capturar encabezados y fragmentar el cuerpo del contenido en función de la coherencia semántica, como párrafos y oraciones. Los fragmentos se procesan de forma independiente. Dado que los LLM funcionan con varios fragmentos, cuando esos fragmentos son de mayor calidad y son semánticamente coherentes, se mejora la relevancia general de la consulta.
La aptitud Diseño de documento llama al modelo de diseño en Inteligencia de documentos. El modelo articula la estructura de contenido en JSON mediante la sintaxis Markdown (encabezados y contenido), con campos para encabezados y contenido almacenados en un índice de búsqueda en Búsqueda de Azure AI. El contenido que se puede buscar generado a partir de la aptitud Diseño de documento es texto sin formato, pero puede aplicar la vectorización integrada para generar incrustaciones para cualquier campo de los documentos de origen, incluidas las imágenes.
En este artículo, aprenderá a:
- Usa la habilidad Diseño de documento para reconocer la estructura de documentos.
- Uso de la aptitud División de texto para restringir el tamaño del fragmento a cada sección Markdown
- Generación de inserciones para cada fragmento
- Uso de proyecciones de índice para asignar inserciones a campos en un índice de búsqueda
Para fines ilustrativos, en este artículo se usan los archivos PDF del plan de mantenimiento de ejemplo cargados en Azure Blob Storage y, a continuación, indexados mediante el Asistente para importación y vectorización de datos.
Requisitos previos
Una canalización de indexación basada en indexador con un índice que acepta la salida. El índice debe tener campos para recibir encabezados y contenido.
Una proyección de índice para la indexación de uno a varios.
Un origen de datos compatible con el contenido de texto que desea fragmentar.
Conjunto de aptitudes con estas dos habilidades:
Habilidad de Diseño de Documentos que divide documentos en función de los límites de los párrafos. Esta aptitud tiene requisitos de región. Un recurso de varios servicios de Azure AI debe estar en la misma región que Azure AI Search con enriquecimiento de IA.
Aptitud de inserción de Azure OpenAI que genera incrustaciones de vectores. Esta aptitud no tiene requisitos de región.
Preparación de los archivos de datos
Las entradas sin procesar deben estar en un origen de datos compatible y el archivo debe tener un formato que la habilidad de Diseño de Documentos admita.
Entre los formatos de archivos admitidos se incluyen PDF, JPEG, JPG, PNG, BMP, TIFF, DOCX, XLSX, PPTX y HTML.
Los indexadores admitidos pueden ser cualquier indexador que pueda controlar los formatos de archivos admitidos. Entre estos indexadores se incluyen indexadores de blobs, indexadores OneLake e indexadores de archivos.
Entre las regiones admitidas para la experiencia del portal de esta característica se incluyen: Este de EE. UU., Oeste de Europa, Centro-norte de EE. UU. Si va a configurar el conjunto de aptitudes mediante programación, puede usar cualquier región de Documento de inteligencia que también proporcione la característica de enriquecimiento con IA de Búsqueda de Azure AI. Para más información, consulte Productos disponibles por región.
Puede usar Azure Portal, las API REST o un paquete de Azure SDK para crear un origen de datos.
Sugerencia
Cargue los archivos de ejemplo PDF del plan de mantenimiento en el origen de datos compatible para probar la aptitud Diseño de documento y la fragmentación compatible con la estructura en su propio servicio de búsqueda. El Asistente para importar y vectorizar datos es un enfoque fácil sin código para probar esta aptitud. Asegúrese de seleccionar el modo de análisis predeterminado para usar la fragmentación compatible con la estructura. De lo contrario, se usa el modo de análisis de Markdown .
Creación de un índice para la indexación de uno a varios
Este es un ejemplo de carga útil de un único documento de búsqueda diseñado en torno a fragmentos. Siempre que trabaje con fragmentos, necesitará un campo de fragmento y un campo primario que identifique el origen del fragmento. En este ejemplo, los campos primarios son el text_parent_id. Los campos secundarios son los fragmentos vectoriales y no vectoriales de la sección Markdown.
La aptitud Diseño de documento genera encabezados y contenido. En este ejemplo, header_1
hasta header_3
almacena encabezados de documento, tal y como detecta la habilidad. Otro contenido, como párrafos, se almacena en chunk
. El campo text_vector
es una representación vectorial del contenido del campo de fragmento.
Puede usar el Asistente para importar y vectorizar datos en Azure Portal, las API REST o un SDK de Azure para crear un índice. El siguiente índice es muy similar al que crea el asistente de forma predeterminada. Es posible que tenga más campos si agrega vectorización de imagen.
Si no usa el asistente, el índice debe existir en el servicio de búsqueda antes de crear el conjunto de aptitudes o ejecutar el indexador.
{
"name": "my_consolidated_index",
"fields": [
{
"name": "chunk_id",
"type": "Edm.String",
"searchable": true,
"filterable": false,
"retrievable": true,
"stored": true,
"sortable": true,
"facetable": false,
"key": true,
"analyzer": "keyword"
},
{
"name": "text_parent_id",
"type": "Edm.String",
"searchable": false,
"filterable": true,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false,
"key": false
},
{
"name": "chunk",
"type": "Edm.String",
"searchable": true,
"filterable": false,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false,
"key": false
},
{
"name": "title",
"type": "Edm.String",
"searchable": true,
"filterable": false,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false,
"key": false
},
{
"name": "header_1",
"type": "Edm.String",
"searchable": true,
"filterable": false,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false,
"key": false
},
{
"name": "header_2",
"type": "Edm.String",
"searchable": true,
"filterable": false,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false,
"key": false
},
{
"name": "header_3",
"type": "Edm.String",
"searchable": true,
"filterable": false,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false,
"key": false
},
{
"name": "text_vector",
"type": "Collection(Edm.Single)",
"searchable": true,
"filterable": false,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false,
"key": false,
"dimensions": 1536,
"stored": false,
"vectorSearchProfile": "profile"
}
],
"vectorSearch": {
"profiles": [
{
"name": "profile",
"algorithm": "algorithm"
}
],
"algorithms": [
{
"name": "algorithm",
"kind": "hnsw"
}
]
}
}
Definición de un conjunto de aptitudes para la fragmentación y vectorización compatibles con la estructura
Debido a que la habilidad de Diseño de Documento está en versión preliminar, debe usar la API REST Crear conjunto de habilidades (2024-11-01-preview) para este paso. También puede usar Azure Portal.
En esta sección se muestra un ejemplo de una definición de conjunto de habilidades que proyecta secciones de markdown individuales, fragmentos, y sus equivalentes vectoriales como campos en el índice de búsqueda. Usa la aptitud Diseño de documento para detectar encabezados y rellenar un campo de contenido basado en párrafos y oraciones semánticamente coherentes en el documento de origen. Usa la aptitud División de texto para dividir el contenido de Markdown en fragmentos. Usa la aptitud de inserción de Azure OpenAI para vectorizar fragmentos y cualquier otro campo para el que quiera insertar.
Además de las habilidades, el conjunto de habilidades incluye indexProjections
y cognitiveServices
:
indexProjections
se usan para índices que contienen documentos fragmentados. Las proyecciones especifican cómo se asigna el contenido primario-secundario a los campos de un índice de búsqueda para la indexación uno a varios. Para obtener más información, consulte Definición de una proyección de índice.cognitiveServices
asocia una cuenta multiservicio de Azure AI con fines de facturación (la función de Diseño de documentos está disponible a través de precios estándar).
POST {endpoint}/skillsets?api-version=2024-11-01-preview
{
"name": "my_skillset",
"description": "A skillset for structure-aware chunking and vectorization with an index projection around markdown section",
"skills": [
{
"@odata.type": "#Microsoft.Skills.Util.DocumentIntelligenceLayoutSkill",
"name": "my_document_intelligence_layout_skill",
"context": "/document",
"outputMode": "oneToMany",
"inputs": [
{
"name": "file_data",
"source": "/document/file_data"
}
],
"outputs": [
{
"name": "markdown_document",
"targetName": "markdownDocument"
}
],
"markdownHeaderDepth": "h3"
},
{
"@odata.type": "#Microsoft.Skills.Text.SplitSkill",
"name": "my_markdown_section_split_skill",
"description": "A skill that splits text into chunks",
"context": "/document/markdownDocument/*",
"inputs": [
{
"name": "text",
"source": "/document/markdownDocument/*/content",
"inputs": []
}
],
"outputs": [
{
"name": "textItems",
"targetName": "pages"
}
],
"defaultLanguageCode": "en",
"textSplitMode": "pages",
"maximumPageLength": 2000,
"pageOverlapLength": 500,
"unit": "characters"
},
{
"@odata.type": "#Microsoft.Skills.Text.AzureOpenAIEmbeddingSkill",
"name": "my_azure_openai_embedding_skill",
"context": "/document/markdownDocument/*/pages/*",
"inputs": [
{
"name": "text",
"source": "/document/markdownDocument/*/pages/*",
"inputs": []
}
],
"outputs": [
{
"name": "embedding",
"targetName": "text_vector"
}
],
"resourceUri": "https://<subdomain>.openai.azure.com",
"deploymentId": "text-embedding-3-small",
"apiKey": "<Azure OpenAI api key>",
"modelName": "text-embedding-3-small"
}
],
"cognitiveServices": {
"@odata.type": "#Microsoft.Azure.Search.CognitiveServicesByKey",
"key": "<Cognitive Services api key>"
},
"indexProjections": {
"selectors": [
{
"targetIndexName": "my_consolidated_index",
"parentKeyFieldName": "text_parent_id",
"sourceContext": "/document/markdownDocument/*/pages/*",
"mappings": [
{
"name": "text_vector",
"source": "/document/markdownDocument/*/pages/*/text_vector"
},
{
"name": "chunk",
"source": "/document/markdownDocument/*/pages/*"
},
{
"name": "title",
"source": "/document/title"
},
{
"name": "header_1",
"source": "/document/markdownDocument/*/sections/h1"
},
{
"name": "header_2",
"source": "/document/markdownDocument/*/sections/h2"
},
{
"name": "header_3",
"source": "/document/markdownDocument/*/sections/h3"
}
]
}
],
"parameters": {
"projectionMode": "skipIndexingParentDocuments"
}
}
}
Configuración y ejecución del indexador
Una vez creados el origen de datos, el índice y el conjunto de aptitudes, ya puede crear y ejecutar el indexador. Este paso pone la canalización en ejecución.
Al usar la aptitud Diseño de documento, asegúrese de establecer los parámetros siguientes en la definición del indexador:
- El parámetro
allowSkillsetToReadFileData
debe establecerse entrue
. - el parámetro
parsingMode
debe establecerse endefault
.
outputFieldMappings
no es necesario establecerlo en este escenario porque indexProjections
controla el campo de origen para buscar asociaciones de campos. Las proyecciones de índice controlan las asociaciones de campo de la aptitud Diseño de documento y también la fragmentación normal con la aptitud de división para las cargas de trabajo de datos importadas y vectorizadas. Las asignaciones de campos de salida siguen siendo necesarias para las transformaciones o asignaciones de datos complejas con funciones que se aplican en otros casos. Sin embargo, para n fragmentos por documento, las proyecciones de índice controlan esta funcionalidad de forma nativa.
Este es un ejemplo de una solicitud de creación del indexador.
POST {endpoint}/indexers?api-version=2024-11-01-preview
{
"name": "my_indexer",
"dataSourceName": "my_blob_datasource",
"targetIndexName": "my_consolidated_index",
"skillsetName": "my_skillset",
"parameters": {
"batchSize": 1,
"configuration": {
"dataToExtract": "contentAndMetadata",
"parsingMode": "default",
"allowSkillsetToReadFileData": true
}
},
"fieldMappings": [
{
"sourceFieldName": "metadata_storage_path",
"targetFieldName": "title"
}
],
"outputFieldMappings": []
}
Al enviar la solicitud al servicio de búsqueda, se ejecuta el indexador.
Comprobar los resultados
Puede consultar el índice de búsqueda después de que finalice el procesamiento para probar la solución.
Para comprobar los resultados, ejecute una consulta en el índice. Use el Explorador de búsqueda como cliente de búsqueda o cualquier herramienta que envíe solicitudes HTTP. La consulta siguiente selecciona campos que contienen la salida del contenido no vectorial de la sección Markdown y su vector.
Para el Explorador de búsqueda, puede copiar solo el JSON y pegarlo en la vista JSON para la ejecución de consultas.
POST /indexes/[index name]/docs/search?api-version=[api-version]
{
"search": "copay for in-network providers",
"count": true,
"searchMode": "all",
"vectorQueries": [
{
"kind": "text",
"text": "*",
"fields": "text_vector,image_vector"
}
],
"queryType": "semantic",
"semanticConfiguration": "healthplan-doc-layout-test-semantic-configuration",
"captions": "extractive",
"answers": "extractive|count-3",
"queryLanguage": "en-us",
"select": "header_1, header_2, header_3"
}
Si ha usado los archivos PDF del plan de mantenimiento para probar esta aptitud, los resultados del Explorador de búsqueda de la consulta de ejemplo deben ser similares a los resultados del recorte de pantalla siguiente.
La consulta es una consulta híbrida sobre texto y vectores, por lo que verá
@search.rerankerScore
y que los resultados se clasifican por esa puntuación.searchMode=all
significa que todos los términos de consulta deben tenerse en cuenta para una coincidencia (el valor predeterminado es cualquiera).La consulta usa la clasificación semántica, por lo que verá
captions
(también tieneanswers
, pero no se muestran en la captura de pantalla). Los resultados son los más semánticamente relevantes para la entrada de consulta, según lo determinado por el clasificador semántico.La instrucción
select
(no se muestra en la captura de pantalla) especifica los campos de encabezado que detecta y rellena la aptitud Diseño de documento. Puede agregar más campos a la cláusula SELECT para inspeccionar el contenido de fragmentos, títulos o cualquier otro campo humanamente legible.
Consulte también
- Cree o actualice un conjunto de aptitudes.
- Creación de un origen de datos
- Definición de una proyección de índice
- Adjuntar una cuenta de varios Servicios de Azure AI
- Aptitud de diseño de documento
- Habilidad para dividir texto
- Aptitud de inserción de Azure OpenAI
- Creación de un indexador (REST)
- Explorador de búsqueda