Habilidad cognitiva Conformador

La aptitud Conformador se usa para cambiar la forma o modificar la estructura del árbol de enriquecimiento en memoria creado por un conjunto de aptitudes. Si las salidas de aptitud no se pueden asignar directamente a los campos de búsqueda, puede agregar una aptitud conformador para crear la forma de datos que necesita para el índice de búsqueda o el almacén de conocimiento.

Entre los casos de uso principales de esta aptitud se incluyen:

  • Está rellenando un almacén de conocimiento. La estructura física de las tablas y objetos de un almacén de conocimiento se define mediante proyecciones. Una aptitud Conformador agrega granularidad mediante la creación de formas de datos que se pueden insertar en las proyecciones.

  • Quiere asignar varias salidas de aptitud a una sola estructura en el índice de búsqueda, normalmente un tipo complejo, como se describe en el escenario 1.

  • Las aptitudes generan varias salidas, pero quiere combinar en un solo campo (no tiene que ser un tipo complejo), como se describe en el escenario 2. Por ejemplo, combinar títulos y autores en un solo campo.

  • Las aptitudes generan varias salidas con elementos secundarios y quiere combinarlas. Este caso de uso se muestra en el escenario 3.

El nombre de salida de una aptitud Conformador siempre es "output". Internamente, la canalización puede asignar otro nombre, como "analyzedText", como se muestra en los ejemplos siguientes, pero la aptitud Conformador devuelve "output" en la respuesta. Esto podría ser importante si está depurando documentos enriquecidos y observa la discrepancia de nombre, o si compila una habilidad personalizada y estructura la respuesta por sí mismo.

Nota:

Esta aptitud no está enlazada a los servicios de Azure AI. No es facturable y no tiene ningún requisito de clave de los servicios de Azure AI.

@odata.type

Microsoft.Skills.Util.ShaperSkill

Escenario 1: tipos complejos

Piense en un escenario en el que quiere crear una estructura denominada analyzedText con dos miembros: text y sentiment, respectivamente. En un índice, un campo de búsqueda de varias partes se denomina tipo complejo y se suele crear cuando los datos de origen tienen asignada una estructura compleja correspondiente.

Pero otro método para crear tipos complejos es mediante la aptitud Conformador. Al incluir esta aptitud en un conjunto de aptitudes, las operaciones en memoria durante el procesamiento del conjunto de aptitudes pueden generar formas de datos con estructuras anidadas, que luego pueden asignarse a un tipo complejo del índice.

En el ejemplo siguiente, la definición de aptitud proporciona los nombres de miembro como entrada.

{
  "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
  "context": "/document/content/phrases/*",
  "inputs": [
    {
      "name": "text",
      "source": "/document/content/phrases/*"
    },
    {
      "name": "sentiment",
      "source": "/document/content/phrases/*/sentiment"
    }
  ],
  "outputs": [
    {
      "name": "output",
      "targetName": "analyzedText"
    }
  ]
}

Índice de ejemplo

Un indizador invoca a un conjunto de aptitudes, y un indizador requiere un índice. Una representación de campo complejo del índice podría ser similar al ejemplo siguiente.

"name":"my-index",
"fields":[
   { "name":"myId", "type":"Edm.String", "key":true, "filterable":true  },
   { "name":"analyzedText", "type":"Edm.ComplexType",
      "fields":[
         {
            "name":"text",
            "type":"Edm.String",
            "facetable":false,
            "filterable":false,
            "searchable":true,
            "sortable":false  },
         {
            "name":"sentiment",
            "type":"Edm.Double",
            "facetable":true,
            "filterable":true,
            "searchable":true,
            "sortable":true }
      }

Entrada de aptitud

Un documento JSON entrante que proporcionara una entrada útil para esta aptitud Conformador podría ser:

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "text": "this movie is awesome",
                "sentiment": 0.9
            }
        }
    ]
}

Salida de aptitud

La aptitud Conformador genera un nuevo elemento llamado analyzedText con los elementos combinados de text y sentiment. Esta salida se ajusta al esquema de índice. Se va a importar e indexar en un índice de Azure AI Search.

{
    "values": [
      {
        "recordId": "1",
        "data":
           {
            "analyzedText": 
              {
                "text": "this movie is awesome" ,
                "sentiment": 0.9
              }
           }
      }
    ]
}

Escenario 2: consolidación de entrada

En otro ejemplo, imagine que en distintas fases del procesamiento de la canalización ha extraído el título de un libro y los títulos de capítulos de distintas páginas del libro. Ahora podría crear una única estructura compuesta por estas distintas salidas.

La definición de aptitud Conformador de este escenario podría ser similar al ejemplo siguiente:

{
    "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
    "context": "/document",
    "inputs": [
        {
            "name": "title",
            "source": "/document/content/title"
        },
        {
            "name": "chapterTitles",
            "source": "/document/content/pages/*/chapterTitles/*/title"
        }
    ],
    "outputs": [
        {
            "name": "output",
            "targetName": "titlesAndChapters"
        }
    ]
}

Salida de aptitud

En este caso, Conformador acopla todos los títulos de capítulos para crear una matriz única.

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "titlesAndChapters": {
                    "title": "How to be happy",
                    "chapterTitles": [
                        "Start young",
                        "Laugh often",
                        "Eat, sleep and exercise"
                    ]
                }
            }
        }
    ]
}

Escenario 3: consolidación de entrada de contextos anidados

Imagine que tiene títulos de capítulo y números de capítulo de un libro y ha ejecutado el reconocimiento de entidades y frases clave en el contenido y ahora necesita agregar resultados de las diferentes aptitudes en una sola forma con el nombre del capítulo, las entidades y las frases clave.

En este ejemplo se agrega una propiedad opcional sourceContext a la entrada "chapterTitles". Las propiedades source y sourceContext se excluyen mutuamente. Si la entrada está en el contexto de la aptitud, puede usar source. Si la entrada está en un contexto diferente al del contexto de aptitud, use sourceContext. sourceContext requiere que defina una entrada anidada, donde cada entrada tiene un source que identifica el elemento específico usado para rellenar el nodo con nombre.

La definición de aptitud Conformador de este escenario podría ser similar al ejemplo siguiente:

{
    "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
    "context": "/document",
    "inputs": [
        {
            "name": "title",
            "source": "/document/content/title"
        },
        {
            "name": "chapterTitles",
            "sourceContext": "/document/content/pages/*/chapterTitles/*",
            "inputs": [
              {
                  "name": "title",
                  "source": "/document/content/pages/*/chapterTitles/*/title"
              },
              {
                  "name": "number",
                  "source": "/document/content/pages/*/chapterTitles/*/number"
              }
            ]
        }

    ],
    "outputs": [
        {
            "name": "output",
            "targetName": "titlesAndChapters"
        }
    ]
}

Salida de aptitud

En este caso, el Conformador crea un tipo complejo. Esta estructura existe en memoria. Si quiere guardarla en un almacén de conocimiento, tiene que crear una proyección en el conjunto de aptitudes que defina las características de almacenamiento.

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "titlesAndChapters": {
                    "title": "How to be happy",
                    "chapterTitles": [
                      { "title": "Start young", "number": 1},
                      { "title": "Laugh often", "number": 2},
                      { "title": "Eat, sleep and exercise", "number: 3}
                    ]
                }
            }
        }
    ]
}

Consulte también