Compartir a través de


Crear un origen de conocimiento remoto de SharePoint

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 para las versiones preliminares de Microsoft Azure.

Un origen de conocimiento remoto de SharePoint usa la API de recuperación de Copilot para consultar contenido textual directamente desde SharePoint en Microsoft 365, devolviendo resultados al motor de recuperación agente para combinar, clasificar y formular respuestas. Este origen de conocimiento no usa ningún índice de búsqueda y solo se consulta el contenido textual.

En el momento de la consulta, el origen de conocimiento remoto de SharePoint llama a la API de recuperación de Copilot en nombre de la identidad del usuario, por lo que no se necesitan cadenas de conexión en la definición del origen de conocimiento. Todo el contenido al que un usuario tiene acceso está en el ámbito de la recuperación de conocimiento. Para limitar sitios o restringir la búsqueda, establezca una expresión de filtro. El arrendatario de Azure y el arrendatario de Microsoft 365 deben usar el mismo arrendatario de Microsoft Entra ID, y la identidad del llamante debe ser reconocida por ambos arrendatarios.

  • Puede usar filtros para definir el ámbito de la búsqueda por direcciones URL, intervalos de fechas, tipos de archivo y otros metadatos.

  • Los permisos de SharePoint y las etiquetas de Purview se respetan en las solicitudes de contenido.

  • El uso se factura a través de Microsoft 365 y una licencia de Copilot.

Al igual que cualquier otro origen de conocimiento, especifique un origen de conocimiento remoto de SharePoint en una base de conocimiento y use los resultados como datos de base cuando un agente o bot de chat llama a una acción de recuperación en el momento de la consulta.

Prerrequisitos

Para el desarrollo local, el motor de recuperación de agentes utiliza su token de acceso para llamar a SharePoint en su nombre. Para más información sobre el uso de un token de acceso personal en las solicitudes, consulte Conexión a Azure AI Search.

Limitaciones

Las siguientes limitaciones de la API de recuperación de Copilot se aplican a los orígenes de conocimiento remotos de SharePoint.

  • No hay compatibilidad con conectores de Copilot ni contenido de OneDrive. El contenido solo se recupera de sitios de SharePoint.

  • Límite de 200 solicitudes por usuario por hora.

  • Límite de caracteres de consulta de 1500 caracteres.

  • Las consultas híbridas solo se admiten para las siguientes extensiones de archivo: .doc, .docx, .pptx, .pdf, .aspx y .one.

  • No se admite la recuperación multilingüe (contenido notextual, incluidas tablas, imágenes y gráficos).

  • Máximo de 25 resultados de una consulta.

  • La API de recuperación de Copilot devuelve los resultados como desordenados.

  • Las expresiones de filtro del lenguaje de consulta de palabras clave (KQL) no válidas se omiten y la consulta continúa ejecutándose sin el filtro.

Comprobación de fuentes de conocimiento existentes

Una fuente de conocimiento es un objeto reutilizable de nivel superior. Conocer los orígenes de conocimiento existentes resulta útil para reutilizar o asignar nombres a nuevos objetos.

Ejecute el código siguiente para enumerar los orígenes de conocimiento por nombre y tipo.

// List knowledge sources by name and type
using Azure.Search.Documents.Indexes;

var indexClient = new SearchIndexClient(new Uri(searchEndpoint), credential);
var knowledgeSources = indexClient.GetKnowledgeSourcesAsync();

Console.WriteLine("Knowledge Sources:");

await foreach (var ks in knowledgeSources)
{
    Console.WriteLine($"  Name: {ks.Name}, Type: {ks.GetType().Name}");
}

También puede devolver una única fuente de conocimiento por nombre para revisar su definición json.

using Azure.Search.Documents.Indexes;
using System.Text.Json;

var indexClient = new SearchIndexClient(new Uri(searchEndpoint), credential);

// Specify the knowledge source name to retrieve
string ksNameToGet = "earth-knowledge-source";

// Get its definition
var knowledgeSourceResponse = await indexClient.GetKnowledgeSourceAsync(ksNameToGet);
var ks = knowledgeSourceResponse.Value;

// Serialize to JSON for display
var jsonOptions = new JsonSerializerOptions 
{ 
    WriteIndented = true,
    DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.Never
};
Console.WriteLine(JsonSerializer.Serialize(ks, ks.GetType(), jsonOptions));

El siguiente JSON es una respuesta de ejemplo para un origen de conocimiento remoto de SharePoint.

{
  "name": "my-sharepoint-ks",
  "kind": "remoteSharePoint",
  "description": "A sample remote SharePoint knowledge source",
  "encryptionKey": null,
  "remoteSharePointParameters": {
    "filterExpression": "filetype:docx",
    "containerTypeId": null,
    "resourceMetadata": [
      "Author",
      "Title"
    ]
  }
}

Creación de una fuente de conocimiento

Ejecute el código siguiente para crear un origen de conocimiento remoto de SharePoint.

Las claves de API se usan para la conexión de cliente a Azure AI Search y Azure OpenAI. Azure AI Search usa el token de acceso para conectarse a SharePoint en Microsoft 365 en su nombre. Solo puede recuperar el contenido al que tiene permiso para acceder. Para más información sobre cómo obtener un token de acceso personal y otros valores, consulte Conexión a Azure AI Search.

Nota:

También puede usar el token de acceso personal para acceder a Azure AI Search y Azure OpenAI si configura asignaciones de roles en cada recurso. El uso de claves de API le permite omitir este paso en este ejemplo.

// Create a remote SharePoint knowledge source
using Azure.Search.Documents.Indexes;
using Azure.Search.Documents.Indexes.Models;
using Azure.Search.Documents.KnowledgeBases.Models;
using Azure;

var indexClient = new SearchIndexClient(new Uri(searchEndpoint), credential);

var knowledgeSource = new RemoteSharePointKnowledgeSource(name: "my-remote-sharepoint-ks")
{
    Description = "This knowledge source queries .docx files in a trusted Microsoft 365 tenant.",
    RemoteSharePointParameters = new RemoteSharePointKnowledgeSourceParameters()
    {
        FilterExpression = "filetype:docx",
        ResourceMetadata = { "Author", "Title" }
    }
};

await indexClient.CreateOrUpdateKnowledgeSourceAsync(knowledgeSource);
Console.WriteLine($"Knowledge source '{knowledgeSource.Name}' created or updated successfully.");

Propiedades específicas del origen

Puede pasar las siguientes propiedades para crear un origen de conocimiento remoto de SharePoint.

Nombre Description Tipo Modificable Obligatorio
name El nombre del origen de conocimiento, que debe ser único dentro de la colección de orígenes de conocimiento y seguir las directrices de nomenclatura de los objetos de Azure AI Search. String No
description Descripción del origen de conocimiento. String No
encryptionKey Una clave administrada por el cliente para cifrar información confidencial en el origen de conocimiento. Objeto No
remoteSharePointParameters Parámetros específicos de orígenes de conocimiento remotos de SharePoint: filterExpression, resourceMetadatay containerTypeId. Objeto No No
filterExpression Expresión escrita en el KQL de SharePoint, que se usa para especificar sitios y rutas de acceso al contenido. String No
resourceMetadata Lista delimitada por comas de campos de metadatos estándar: autor, nombre de archivo, fecha de creación, tipo de contenido y tipo de archivo. Array No
containerTypeId Id. de contenedor para la conexión integrada de SharePoint Embedded. Cuando no se especifica, se usa SharePoint Online. String No

Ejemplos de expresiones de filtro

No todas las propiedades de SharePoint se admiten en el filterExpression. Para obtener una lista de las propiedades admitidas, consulte la referencia de la API. A continuación se muestra más información sobre las propiedades consultables que puede usar en el filtro: propiedades consultables.

Obtenga más información sobre los filtros KQL en la referencia de sintaxis.

Example Expresión de filtro
Filtrar a un único sitio por identificador "filterExpression": "SiteID:\"00aa00aa-bb11-cc22-dd33-44ee44ee44ee\""
Filtrar varios sitios por id. "filterExpression": "SiteID:\"00aa00aa-bb11-cc22-dd33-44ee44ee44ee\" OR SiteID:\"11bb11bb-cc22-dd33-ee44-55ff55ff55ff\""
Filtrar archivos en una ruta de acceso específica "filterExpression": "Path:\"https://my-demo.sharepoint.com/sites/mysite/Shared Documents/en/mydocs\""
Filtrar a un intervalo de fechas específico "filterExpression": "LastModifiedTime >= 2024-07-22 AND LastModifiedTime <= 2025-01-08"
Filtrar a archivos de un tipo de archivo específico "filterExpression": "FileExtension:\"docx\" OR FileExtension:\"pdf\" OR FileExtension:\"pptx\""
Filtrar a archivos de una etiqueta de protección de información específica "filterExpression": "InformationProtectionLabelId:\"f0ddcc93-d3c0-4993-b5cc-76b0a283e252\""

Asignar a una base de conocimiento

Si está satisfecho con el origen de conocimiento, continúe con el paso siguiente: especifique el origen de conocimiento en una base de conocimiento.

Una vez configurada la base de conocimiento, use la acción recuperar para consultar el origen de conocimiento.

Consulta de una base de conocimiento

La acción de recuperación de la base de conocimiento proporciona la identidad de usuario que autoriza el acceso al contenido de Microsoft 365.

Azure AI Search usa el token de acceso para llamar a la API de recuperación de Copilot en representación de la identidad del usuario. El token de acceso se proporciona en el punto de conexión de recuperación como encabezado xMsQuerySourceAuthorization HTTP.

using Azure;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;

// Get access token
var credential = new DefaultAzureCredential();
var tokenRequestContext = new Azure.Core.TokenRequestContext(new[] { "https://search.azure.com/.default" });
var accessToken = await credential.GetTokenAsync(tokenRequestContext);
string token = accessToken.Token;

// Create knowledge base retrieval client
var baseClient = new KnowledgeBaseRetrievalClient(
    endpoint: new Uri(searchEndpoint),
    knowledgeBaseName: knowledgeBaseName,
    credential: new AzureKeyCredential()
);

var spMessages = new List<Dictionary<string, string>>
{
    new Dictionary<string, string>
    {
        { "role", "user" },
        { "content", @"contoso product planning" }
    }
};

// Create retrieval request
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
foreach (Dictionary<string, string> message in spMessages) {
    if (message["role"] != "system") {
        retrievalRequest.Messages.Add(new KnowledgeBaseMessage(content: new[] { new KnowledgeBaseMessageTextContent(message["content"]) }) { Role = message["role"] });
    }
}
retrievalRequest.RetrievalReasoningEffort = new KnowledgeRetrievalLowReasoningEffort();
var retrievalResult = await baseClient.RetrieveAsync(retrievalRequest, xMsQuerySourceAuthorization: token);

Console.WriteLine((retrievalResult.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent).Text);

La respuesta podría ser similar a la siguiente:

Contoso's product planning for the NextGen Camera includes a 2019 launch with a core package design and minor modifications for three product versions, featuring Wi-Fi enabled technology and a new mobile app for photo organization and sharing, aiming for 100,000 users within six months [ref_id:0][ref_id:1]. Research and forecasting are central to their planning, with phase two research focusing on feedback from a diverse user group to shape deliverables and milestones [ref_id:0][ref_id:1].

La solicitud de recuperación también toma un filtro KQL (filterExpressionAddOn) si desea aplicar restricciones en el momento de la consulta. Si especifica filterExpressionAddOn tanto en la acción de recuperación del origen de conocimiento como en la de la base de conocimiento, los filtros se combinarán utilizando una operación lógica AND.

Las consultas que hacen preguntas sobre el propio contenido son más eficaces que las preguntas sobre dónde se encuentra un archivo o cuándo se actualizó por última vez. Por ejemplo, si le pregunta, "Where is the keynote doc for Ignite 2024", podría obtener "No se encontró ningún contenido relevante para la consulta" porque el propio contenido no divulga su ubicación. Un filtro de metadatos es una mejor solución para las consultas específicas de fecha o ubicación de archivos.

Una mejor pregunta que formular es "¿Cuál es la documentación principal de Ignite 2024". La respuesta incluye la respuesta sintetizada, la actividad de consulta y los recuentos de tokens, además de la dirección URL y otros metadatos.

{
    "resourceMetadata": {
        "Author": "Nuwan Amarathunga;Nurul Izzati",
        "Title": "Ignite 2024 Keynote Address"
    }
},
"rerankerScore": 2.489522,
"webUrl": "https://contoso-my.sharepoint.com/keynotes/nuamarth_contoso_com/Documents/Keynote-Ignite-2024.docx",
"searchSensitivityLabelInfo": {
        "displayName": "Confidential\\Contoso Extended",
        "sensitivityLabelId": "aaaaaaaa-0b0b-1c1c-2d2d-333333333333",
        "tooltip": "Data is classified and protected. Contoso Full Time Employees (FTE) and non-employees can edit, reply, forward and print. Recipient can unprotect content with the right justification.",
        "priority": 5,
        "color": "#FF8C00",
        "isEncrypted": true
    }

Eliminación de una fuente de conocimiento

Para poder eliminar un origen de conocimiento, debe eliminar cualquier base de conocimiento que haga referencia a ella o actualizar la definición de la base de conocimiento para quitar la referencia. En el caso de los orígenes de conocimiento que generan una canalización de índice e indexador, también se eliminan todos los objetos generados . Sin embargo, si usó un índice existente para crear un origen de conocimiento, el índice no se eliminará.

Si intenta eliminar un origen de conocimiento que está en uso, se produce un error en la acción y devuelve una lista de bases de conocimiento afectadas.

Para eliminar un origen de conocimiento:

  1. Obtenga una lista de todas las bases de conocimiento del servicio de búsqueda.

    using Azure.Search.Documents.Indexes;
    
    var indexClient = new SearchIndexClient(new Uri(searchEndpoint), credential);
    var knowledgeBases = indexClient.GetKnowledgeBasesAsync();
    
    Console.WriteLine("Knowledge Bases:");
    
    await foreach (var kb in knowledgeBases)
    {
        Console.WriteLine($"  - {kb.Name}");
    }
    

    Una respuesta de ejemplo podría ser similar a la siguiente:

     Knowledge Bases:
       - earth-knowledge-base
       - hotels-sample-knowledge-base
       - my-demo-knowledge-base
    
  2. Obtenga una definición de base de conocimiento individual para comprobar si hay referencias de origen de conocimiento.

    using Azure.Search.Documents.Indexes;
    using System.Text.Json;
    
    var indexClient = new SearchIndexClient(new Uri(searchEndpoint), credential);
    
    // Specify the knowledge base name to retrieve
    string kbNameToGet = "earth-knowledge-base";
    
    // Get a specific knowledge base definition
    var knowledgeBaseResponse = await indexClient.GetKnowledgeBaseAsync(kbNameToGet);
    var kb = knowledgeBaseResponse.Value;
    
    // Serialize to JSON for display
    string json = JsonSerializer.Serialize(kb, new JsonSerializerOptions { WriteIndented = true });
    Console.WriteLine(json);
    

    Una respuesta de ejemplo podría ser similar a la siguiente:

     {
       "Name": "earth-knowledge-base",
       "KnowledgeSources": [
         {
           "Name": "earth-knowledge-source"
         }
       ],
       "Models": [
         {}
       ],
       "RetrievalReasoningEffort": {},
       "OutputMode": {},
       "ETag": "\u00220x8DE278629D782B3\u0022",
       "EncryptionKey": null,
       "Description": null,
       "RetrievalInstructions": null,
       "AnswerInstructions": null
     }
    
  3. Elimine la base de conocimiento o actualice la base de conocimiento para quitar el origen de conocimiento si tiene varios orígenes. En este ejemplo se muestra la eliminación.

    using Azure.Search.Documents.Indexes;
    var indexClient = new SearchIndexClient(new Uri(searchEndpoint), credential);
    
    await indexClient.DeleteKnowledgeBaseAsync(knowledgeBaseName);
    System.Console.WriteLine($"Knowledge base '{knowledgeBaseName}' deleted successfully.");
    
  4. Elimine la fuente de conocimiento.

    await indexClient.DeleteKnowledgeSourceAsync(knowledgeSourceName);
    System.Console.WriteLine($"Knowledge source '{knowledgeSourceName}' deleted successfully.");
    

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 para las versiones preliminares de Microsoft Azure.

Un origen de conocimiento remoto de SharePoint usa la API de recuperación de Copilot para consultar contenido textual directamente desde SharePoint en Microsoft 365, devolviendo resultados al motor de recuperación agente para combinar, clasificar y formular respuestas. Este origen de conocimiento no usa ningún índice de búsqueda y solo se consulta el contenido textual.

En el momento de la consulta, el origen de conocimiento remoto de SharePoint llama a la API de recuperación de Copilot en nombre de la identidad del usuario, por lo que no se necesitan cadenas de conexión en la definición del origen de conocimiento. Todo el contenido al que un usuario tiene acceso está en el ámbito de la recuperación de conocimiento. Para limitar sitios o restringir la búsqueda, establezca una expresión de filtro. El arrendatario de Azure y el arrendatario de Microsoft 365 deben usar el mismo arrendatario de Microsoft Entra ID, y la identidad del llamante debe ser reconocida por ambos arrendatarios.

  • Puede usar filtros para definir el ámbito de la búsqueda por direcciones URL, intervalos de fechas, tipos de archivo y otros metadatos.

  • Los permisos de SharePoint y las etiquetas de Purview se respetan en las solicitudes de contenido.

  • El uso se factura a través de Microsoft 365 y una licencia de Copilot.

Al igual que cualquier otro origen de conocimiento, especifique un origen de conocimiento remoto de SharePoint en una base de conocimiento y use los resultados como datos de base cuando un agente o bot de chat llama a una acción de recuperación en el momento de la consulta.

Prerrequisitos

Para el desarrollo local, el motor de recuperación de agentes utiliza su token de acceso para llamar a SharePoint en su nombre. Para más información sobre el uso de un token de acceso personal en las solicitudes, consulte Conexión a Azure AI Search.

Limitaciones

Las siguientes limitaciones de la API de recuperación de Copilot se aplican a los orígenes de conocimiento remotos de SharePoint.

  • No hay compatibilidad con conectores de Copilot ni contenido de OneDrive. El contenido solo se recupera de sitios de SharePoint.

  • Límite de 200 solicitudes por usuario por hora.

  • Límite de caracteres de consulta de 1500 caracteres.

  • Las consultas híbridas solo se admiten para las siguientes extensiones de archivo: .doc, .docx, .pptx, .pdf, .aspx y .one.

  • No se admite la recuperación multilingüe (contenido notextual, incluidas tablas, imágenes y gráficos).

  • Máximo de 25 resultados de una consulta.

  • La API de recuperación de Copilot devuelve los resultados como desordenados.

  • Las expresiones de filtro del lenguaje de consulta de palabras clave (KQL) no válidas se omiten y la consulta continúa ejecutándose sin el filtro.

Comprobación de fuentes de conocimiento existentes

Una fuente de conocimiento es un objeto reutilizable de nivel superior. Conocer los orígenes de conocimiento existentes resulta útil para reutilizar o asignar nombres a nuevos objetos.

Ejecute el código siguiente para enumerar los orígenes de conocimiento por nombre y tipo.

# List knowledge sources by name and type
import requests
import json

endpoint = "{search_url}/knowledgesources"
params = {"api-version": "2025-11-01-preview", "$select": "name, kind"}
headers = {"api-key": "{api_key}"}

response = requests.get(endpoint, params = params, headers = headers)
print(json.dumps(response.json(), indent = 2))

También puede devolver una única fuente de conocimiento por nombre para revisar su definición json.

# Get a knowledge source definition
import requests
import json

endpoint = "{search_url}/knowledgesources/{knowledge_source_name}"
params = {"api-version": "2025-11-01-preview"}
headers = {"api-key": "{api_key}"}

response = requests.get(endpoint, params = params, headers = headers)
print(json.dumps(response.json(), indent = 2))

El siguiente JSON es una respuesta de ejemplo para un origen de conocimiento remoto de SharePoint.

{
  "name": "my-sharepoint-ks",
  "kind": "remoteSharePoint",
  "description": "A sample remote SharePoint knowledge source",
  "encryptionKey": null,
  "remoteSharePointParameters": {
    "filterExpression": "filetype:docx",
    "containerTypeId": null,
    "resourceMetadata": [
      "Author",
      "Title"
    ]
  }
}

Creación de una fuente de conocimiento

Ejecute el código siguiente para crear un origen de conocimiento remoto de SharePoint.

Las claves de API se usan para la conexión de cliente a Azure AI Search y Azure OpenAI. Azure AI Search usa el token de acceso para conectarse a SharePoint en Microsoft 365 en su nombre. Solo puede recuperar el contenido al que tiene permiso para acceder. Para más información sobre cómo obtener un token de acceso personal y otros valores, consulte Conexión a Azure AI Search.

Nota:

También puede usar el token de acceso personal para acceder a Azure AI Search y Azure OpenAI si configura asignaciones de roles en cada recurso. El uso de claves de API le permite omitir este paso en este ejemplo.

# Create a remote SharePoint knowledge source
from azure.core.credentials import AzureKeyCredential
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import RemoteSharePointKnowledgeSource, RemoteSharePointKnowledgeSourceParameters

index_client = SearchIndexClient(endpoint = "search_url", credential = AzureKeyCredential("api_key"))

knowledge_source = RemoteSharePointKnowledgeSource(
    name = "my-remote-sharepoint-ks",
    description= "This knowledge source queries .docx files in a trusted Microsoft 365 tenant.",
    encryption_key = None,
    remote_share_point_parameters = RemoteSharePointKnowledgeSourceParameters(
        filter_expression = "filetype:docx",
        resource_metadata = ["Author", "Title"],
        container_type_id = None
    )
)

index_client.create_or_update_knowledge_source(knowledge_source)
print(f"Knowledge source '{knowledge_source.name}' created or updated successfully.")

Propiedades específicas del origen

Puede pasar las siguientes propiedades para crear un origen de conocimiento remoto de SharePoint.

Nombre Description Tipo Modificable Obligatorio
name El nombre del origen de conocimiento, que debe ser único dentro de la colección de orígenes de conocimiento y seguir las directrices de nomenclatura de los objetos de Azure AI Search. String No
description Descripción del origen de conocimiento. String No
encryption_key Una clave administrada por el cliente para cifrar información confidencial en el origen de conocimiento. Objeto No
remote_share_point_parameters Parámetros específicos de orígenes de conocimiento remotos de SharePoint: filter_expression, resource_metadatay container_type_id. Objeto No No
filter_expression Expresión escrita en el KQL de SharePoint, que se usa para especificar sitios y rutas de acceso al contenido. String No
resource_metadata Lista delimitada por comas de campos de metadatos estándar: autor, nombre de archivo, fecha de creación, tipo de contenido y tipo de archivo. Array No
container_type_id Id. de contenedor para la conexión integrada de SharePoint Embedded. Cuando no se especifica, se usa SharePoint Online. String No

Ejemplos de expresiones de filtro

No todas las propiedades de SharePoint se admiten en el filterExpression. Para obtener una lista de las propiedades admitidas, consulte la referencia de la API. A continuación se muestra más información sobre las propiedades consultables que puede usar en el filtro: propiedades consultables.

Obtenga más información sobre los filtros KQL en la referencia de sintaxis.

Example Expresión de filtro
Filtrar a un único sitio por identificador "filterExpression": "SiteID:\"00aa00aa-bb11-cc22-dd33-44ee44ee44ee\""
Filtrar varios sitios por id. "filterExpression": "SiteID:\"00aa00aa-bb11-cc22-dd33-44ee44ee44ee\" OR SiteID:\"11bb11bb-cc22-dd33-ee44-55ff55ff55ff\""
Filtrar archivos en una ruta de acceso específica "filterExpression": "Path:\"https://my-demo.sharepoint.com/sites/mysite/Shared Documents/en/mydocs\""
Filtrar a un intervalo de fechas específico "filterExpression": "LastModifiedTime >= 2024-07-22 AND LastModifiedTime <= 2025-01-08"
Filtrar a archivos de un tipo de archivo específico "filterExpression": "FileExtension:\"docx\" OR FileExtension:\"pdf\" OR FileExtension:\"pptx\""
Filtrar a archivos de una etiqueta de protección de información específica "filterExpression": "InformationProtectionLabelId:\"f0ddcc93-d3c0-4993-b5cc-76b0a283e252\""

Asignar a una base de conocimiento

Si está satisfecho con el origen de conocimiento, continúe con el paso siguiente: especifique el origen de conocimiento en una base de conocimiento.

Una vez configurada la base de conocimiento, use la acción recuperar para consultar el origen de conocimiento.

Consulta de una base de conocimiento

La acción de recuperación de la base de conocimiento proporciona la identidad de usuario que autoriza el acceso al contenido de Microsoft 365.

Azure AI Search usa el token de acceso para llamar a la API de recuperación de Copilot en representación de la identidad del usuario. El token de acceso se proporciona en el punto de conexión de recuperación como encabezado x-ms-query-source-authorization HTTP.

from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from azure.core.credentials import AzureKeyCredential
from azure.search.documents.knowledgebases import KnowledgeBaseRetrievalClient
from azure.search.documents.knowledgebases.models import KnowledgeBaseMessage, KnowledgeBaseMessageTextContent, KnowledgeBaseRetrievalRequest, RemoteSharePointKnowledgeSourceParams

# Get access token
identity_token_provider = get_bearer_token_provider(DefaultAzureCredential(), "https://search.azure.com/.default")
token = identity_token_provider()

# Create knowledge base retrieval client
kb_client = KnowledgeBaseRetrievalClient(endpoint = "search_url", knowledge_base_name = "knowledge_base_name", credential = AzureKeyCredential("api_key"))

# Create retrieval request
request = KnowledgeBaseRetrievalRequest(
    include_activity = True,
    messages = [
        KnowledgeBaseMessage(role = "user", content = [KnowledgeBaseMessageTextContent(text = "What was covered in the keynote doc for Ignite 2024?")])
    ],
    knowledge_source_params = [
        RemoteSharePointKnowledgeSourceParams(
            knowledge_source_name = "my-remote-sharepoint-ks",
            filter_expression_add_on = "ModifiedBy:\"Adele Vance\"",
            include_references = True,
            include_reference_source_data = True
        )
    ]
)

# Pass access token to retrieve from knowledge base
result = kb_client.retrieve(retrieval_request = request, x_ms_query_source_authorization = token)
print(result.response[0].content[0].text)

La solicitud de recuperación también toma un filtro KQL (filter_expression_add_on) si desea aplicar restricciones en el momento de la consulta. Si especifica filter_expression_add_on tanto en la acción de recuperación del origen de conocimiento como en la de la base de conocimiento, los filtros se combinarán utilizando una operación lógica AND.

Las consultas que hacen preguntas sobre el propio contenido son más eficaces que las preguntas sobre dónde se encuentra un archivo o cuándo se actualizó por última vez. Por ejemplo, si le pregunta, "Where is the keynote doc for Ignite 2024", podría obtener "No se encontró ningún contenido relevante para la consulta" porque el propio contenido no divulga su ubicación. Un filtro de metadatos es una mejor solución para las consultas específicas de fecha o ubicación de archivos.

Una mejor pregunta que formular es "¿Cuál es la documentación principal de Ignite 2024". La respuesta incluye la respuesta sintetizada, la actividad de consulta y los recuentos de tokens, además de la dirección URL y otros metadatos.

{
    "resourceMetadata": {
        "Author": "Nuwan Amarathunga;Nurul Izzati",
        "Title": "Ignite 2024 Keynote Address"
    }
},
"rerankerScore": 2.489522,
"webUrl": "https://contoso-my.sharepoint.com/keynotes/nuamarth_contoso_com/Documents/Keynote-Ignite-2024.docx",
"searchSensitivityLabelInfo": {
        "displayName": "Confidential\\Contoso Extended",
        "sensitivityLabelId": "aaaaaaaa-0b0b-1c1c-2d2d-333333333333",
        "tooltip": "Data is classified and protected. Contoso Full Time Employees (FTE) and non-employees can edit, reply, forward and print. Recipient can unprotect content with the right justification.",
        "priority": 5,
        "color": "#FF8C00",
        "isEncrypted": true
    }

Eliminación de una fuente de conocimiento

Para poder eliminar un origen de conocimiento, debe eliminar cualquier base de conocimiento que haga referencia a ella o actualizar la definición de la base de conocimiento para quitar la referencia. En el caso de los orígenes de conocimiento que generan una canalización de índice e indexador, también se eliminan todos los objetos generados . Sin embargo, si usó un índice existente para crear un origen de conocimiento, el índice no se eliminará.

Si intenta eliminar un origen de conocimiento que está en uso, se produce un error en la acción y devuelve una lista de bases de conocimiento afectadas.

Para eliminar un origen de conocimiento:

  1. Obtenga una lista de todas las bases de conocimiento del servicio de búsqueda.

    # Get knowledge bases
    import requests
    import json
    
    endpoint = "{search_url}/knowledgebases"
    params = {"api-version": "2025-11-01-preview", "$select": "name"}
    headers = {"api-key": "{api_key}"}
    
    response = requests.get(endpoint, params = params, headers = headers)
    print(json.dumps(response.json(), indent = 2))
    

    Una respuesta de ejemplo podría ser similar a la siguiente:

     {
         "@odata.context": "https://my-search-service.search.windows.net/$metadata#knowledgebases(name)",
         "value": [
         {
             "name": "my-kb"
         },
         {
             "name": "my-kb-2"
         }
         ]
     }
    
  2. Obtenga una definición de base de conocimiento individual para comprobar si hay referencias de origen de conocimiento.

    # Get a knowledge base definition
    import requests
    import json
    
    endpoint = "{search_url}/knowledgebases/{knowledge_base_name}"
    params = {"api-version": "2025-11-01-preview"}
    headers = {"api-key": "{api_key}"}
    
    response = requests.get(endpoint, params = params, headers = headers)
    print(json.dumps(response.json(), indent = 2))
    

    Una respuesta de ejemplo podría ser similar a la siguiente:

     {
       "name": "my-kb",
       "description": null,
       "retrievalInstructions": null,
       "answerInstructions": null,
       "outputMode": null,
       "knowledgeSources": [
         {
           "name": "my-blob-ks",
         }
       ],
       "models": [],
       "encryptionKey": null,
       "retrievalReasoningEffort": {
         "kind": "low"
       }
     }
    
  3. Elimine la base de conocimiento o actualice la base de conocimiento para quitar el origen de conocimiento si tiene varios orígenes. En este ejemplo se muestra la eliminación.

    # Delete a knowledge base
    from azure.core.credentials import AzureKeyCredential 
    from azure.search.documents.indexes import SearchIndexClient
    
    index_client = SearchIndexClient(endpoint = "search_url", credential = AzureKeyCredential("api_key"))
    index_client.delete_knowledge_base("knowledge_base_name")
    print(f"Knowledge base deleted successfully.")
    
  4. Elimine la fuente de conocimiento.

    # Delete a knowledge source
    from azure.core.credentials import AzureKeyCredential 
    from azure.search.documents.indexes import SearchIndexClient
    
    index_client = SearchIndexClient(endpoint = "search_url", credential = AzureKeyCredential("api_key"))
    index_client.delete_knowledge_source("knowledge_source_name")
    print(f"Knowledge source deleted successfully.")
    

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 para las versiones preliminares de Microsoft Azure.

Un origen de conocimiento remoto de SharePoint usa la API de recuperación de Copilot para consultar contenido textual directamente desde SharePoint en Microsoft 365, devolviendo resultados al motor de recuperación agente para combinar, clasificar y formular respuestas. Este origen de conocimiento no usa ningún índice de búsqueda y solo se consulta el contenido textual.

En el momento de la consulta, el origen de conocimiento remoto de SharePoint llama a la API de recuperación de Copilot en nombre de la identidad del usuario, por lo que no se necesitan cadenas de conexión en la definición del origen de conocimiento. Todo el contenido al que un usuario tiene acceso está en el ámbito de la recuperación de conocimiento. Para limitar sitios o restringir la búsqueda, establezca una expresión de filtro. El arrendatario de Azure y el arrendatario de Microsoft 365 deben usar el mismo arrendatario de Microsoft Entra ID, y la identidad del llamante debe ser reconocida por ambos arrendatarios.

  • Puede usar filtros para definir el ámbito de la búsqueda por direcciones URL, intervalos de fechas, tipos de archivo y otros metadatos.

  • Los permisos de SharePoint y las etiquetas de Purview se respetan en las solicitudes de contenido.

  • El uso se factura a través de Microsoft 365 y una licencia de Copilot.

Al igual que cualquier otro origen de conocimiento, especifique un origen de conocimiento remoto de SharePoint en una base de conocimiento y use los resultados como datos de base cuando un agente o bot de chat llama a una acción de recuperación en el momento de la consulta.

Prerrequisitos

Para el desarrollo local, el motor de recuperación de agentes utiliza su token de acceso para llamar a SharePoint en su nombre. Para más información sobre el uso de un token de acceso personal en las solicitudes, consulte Conexión a Azure AI Search.

Limitaciones

Las siguientes limitaciones de la API de recuperación de Copilot se aplican a los orígenes de conocimiento remotos de SharePoint.

  • No hay compatibilidad con conectores de Copilot ni contenido de OneDrive. El contenido solo se recupera de sitios de SharePoint.

  • Límite de 200 solicitudes por usuario por hora.

  • Límite de caracteres de consulta de 1500 caracteres.

  • Las consultas híbridas solo se admiten para las siguientes extensiones de archivo: .doc, .docx, .pptx, .pdf, .aspx y .one.

  • No se admite la recuperación multilingüe (contenido notextual, incluidas tablas, imágenes y gráficos).

  • Máximo de 25 resultados de una consulta.

  • La API de recuperación de Copilot devuelve los resultados como desordenados.

  • Las expresiones de filtro del lenguaje de consulta de palabras clave (KQL) no válidas se omiten y la consulta continúa ejecutándose sin el filtro.

Comprobación de fuentes de conocimiento existentes

Una fuente de conocimiento es un objeto reutilizable de nivel superior. Conocer los orígenes de conocimiento existentes resulta útil para reutilizar o asignar nombres a nuevos objetos.

Usar Fuentes de conocimiento - Obtener (API REST) para listar las fuentes de conocimiento por nombre y tipo.

### List knowledge sources by name and type
GET {{search-url}}/knowledgesources?api-version=2025-11-01-preview&$select=name,kind
api-key: {{api-key}}

También puede devolver una única fuente de conocimiento por nombre para revisar su definición json.

### Get a knowledge source definition
GET {{search-url}}/knowledgesources/{{knowledge-source-name}}?api-version=2025-11-01-preview
api-key: {{api-key}}

El siguiente JSON es una respuesta de ejemplo para un origen de conocimiento remoto de SharePoint.

{
  "name": "my-sharepoint-ks",
  "kind": "remoteSharePoint",
  "description": "A sample remote SharePoint knowledge source",
  "encryptionKey": null,
  "remoteSharePointParameters": {
    "filterExpression": "filetype:docx",
    "containerTypeId": null,
    "resourceMetadata": [
      "Author",
      "Title"
    ]
  }
}

Creación de una fuente de conocimiento

Usar orígenes de conocimiento: crear o actualizar (API REST) para crear un origen de conocimiento remoto de SharePoint.

Las claves de API se usan para la conexión de cliente a Azure AI Search y Azure OpenAI. Azure AI Search usa el token de acceso para conectarse a SharePoint en Microsoft 365 en su nombre. Solo puede recuperar el contenido al que tiene permiso para acceder. Para más información sobre cómo obtener un token de acceso personal y otros valores, consulte Conexión a Azure AI Search.

Nota:

También puede usar el token de acceso personal para acceder a Azure AI Search y Azure OpenAI si configura asignaciones de roles en cada recurso. El uso de claves de API le permite omitir este paso en este ejemplo.

POST {{search-url}}/knowledgesources/my-remote-sharepoint-ks?api-version=2025-11-01-preview
api-key: {{api-key}}
Content-Type: application/json

{
    "name": "my-remote-sharepoint-ks",
    "kind": "remoteSharePoint",
    "description": "This knowledge source queries .docx files in a trusted Microsoft 365 tenant.",
    "encryptionKey": null,
    "remoteSharePointParameters": {
        "filterExpression": "filetype:docx",
        "resourceMetadata": [ "Author", "Title" ],
        "containerTypeId": null
    }
}

Propiedades específicas del origen

Puede pasar las siguientes propiedades para crear un origen de conocimiento remoto de SharePoint.

Nombre Description Tipo Modificable Obligatorio
name El nombre del origen de conocimiento, que debe ser único dentro de la colección de orígenes de conocimiento y seguir las directrices de nomenclatura de los objetos de Azure AI Search. String No
kind El tipo de origen de conocimiento, que es remoteSharePoint en este caso. String No
description Descripción del origen de conocimiento. String No
encryptionKey Una clave administrada por el cliente para cifrar información confidencial en el origen de conocimiento. Objeto No
remoteSharePointParameters Parámetros específicos de orígenes de conocimiento remotos de SharePoint: filterExpression, resourceMetadatay containerTypeId. Objeto No No
filterExpression Expresión escrita en el KQL de SharePoint, que se usa para especificar sitios y rutas de acceso al contenido. String No
resourceMetadata Lista delimitada por comas de campos de metadatos estándar: autor, nombre de archivo, fecha de creación, tipo de contenido y tipo de archivo. Array No
containerTypeId Id. de contenedor para la conexión integrada de SharePoint Embedded. Cuando no se especifica, se usa SharePoint Online. String No

Ejemplos de expresiones de filtro

No todas las propiedades de SharePoint se admiten en el filterExpression. Para obtener una lista de las propiedades admitidas, consulte la referencia de la API. A continuación se muestra más información sobre las propiedades consultables que puede usar en el filtro: propiedades consultables.

Obtenga más información sobre los filtros KQL en la referencia de sintaxis.

Example Expresión de filtro
Filtrar a un único sitio por identificador "filterExpression": "SiteID:\"00aa00aa-bb11-cc22-dd33-44ee44ee44ee\""
Filtrar varios sitios por id. "filterExpression": "SiteID:\"00aa00aa-bb11-cc22-dd33-44ee44ee44ee\" OR SiteID:\"11bb11bb-cc22-dd33-ee44-55ff55ff55ff\""
Filtrar archivos en una ruta de acceso específica "filterExpression": "Path:\"https://my-demo.sharepoint.com/sites/mysite/Shared Documents/en/mydocs\""
Filtrar a un intervalo de fechas específico "filterExpression": "LastModifiedTime >= 2024-07-22 AND LastModifiedTime <= 2025-01-08"
Filtrar a archivos de un tipo de archivo específico "filterExpression": "FileExtension:\"docx\" OR FileExtension:\"pdf\" OR FileExtension:\"pptx\""
Filtrar a archivos de una etiqueta de protección de información específica "filterExpression": "InformationProtectionLabelId:\"f0ddcc93-d3c0-4993-b5cc-76b0a283e252\""

Asignar a una base de conocimiento

Si está satisfecho con el origen de conocimiento, continúe con el paso siguiente: especifique el origen de conocimiento en una base de conocimiento.

Una vez configurada la base de conocimiento, use la acción recuperar para consultar el origen de conocimiento.

Consulta de una base de conocimiento

La acción de recuperación de la base de conocimiento proporciona la identidad de usuario que autoriza el acceso al contenido de Microsoft 365.

Azure AI Search usa el token de acceso para llamar a la API de recuperación de Copilot en representación de la identidad del usuario. El token de acceso se proporciona en el punto de conexión de recuperación como encabezado x-ms-query-source-authorization HTTP.

Asegúrese de generar un token de acceso para el inquilino que tiene el servicio de búsqueda.

POST {{search-url}}/knowledgebases/remote-sp-kb/retrieve?api-version={{api-version}}
api-key: {{api-key}}
Content-Type: application/json
x-ms-query-source-authorization: {{access-token}}

{
    "messages": [
        {
            "role": "user",
            "content": [
                { "type": "text", "text": "What was covered in the keynote doc for Ignite 2024?" }
            ]
        }
    ],
    "includeActivity": true,
    "knowledgeSourceParams": [
        {
            "filterExpressionAddOn": "ModifiedBy:\"Adele Vance\"",
            "knowledgeSourceName": "my-remote-sharepoint-ks",
            "kind": "remoteSharePoint",
            "includeReferences": true,
            "includeReferenceSourceData": true
        }
    ]
}

La solicitud de recuperación también toma un filtro KQL (filterExpressionAddOn) si desea aplicar restricciones en el momento de la consulta. Si especifica filterExpressionAddOn tanto en la acción de recuperación del origen de conocimiento como en la de la base de conocimiento, los filtros se combinarán utilizando una operación lógica AND.

Las consultas que hacen preguntas sobre el propio contenido son más eficaces que las preguntas sobre dónde se encuentra un archivo o cuándo se actualizó por última vez. Por ejemplo, si le pregunta, "Where is the keynote doc for Ignite 2024", podría obtener "No se encontró ningún contenido relevante para la consulta" porque el propio contenido no divulga su ubicación. Un filtro de metadatos es una mejor solución para las consultas específicas de fecha o ubicación de archivos.

Una mejor pregunta que formular es "¿Cuál es la documentación principal de Ignite 2024". La respuesta incluye la respuesta sintetizada, la actividad de consulta y los recuentos de tokens, además de la dirección URL y otros metadatos.

{
    "resourceMetadata": {
        "Author": "Nuwan Amarathunga;Nurul Izzati",
        "Title": "Ignite 2024 Keynote Address"
    }
},
"rerankerScore": 2.489522,
"webUrl": "https://contoso-my.sharepoint.com/keynotes/nuamarth_contoso_com/Documents/Keynote-Ignite-2024.docx",
"searchSensitivityLabelInfo": {
        "displayName": "Confidential\\Contoso Extended",
        "sensitivityLabelId": "aaaaaaaa-0b0b-1c1c-2d2d-333333333333",
        "tooltip": "Data is classified and protected. Contoso Full Time Employees (FTE) and non-employees can edit, reply, forward and print. Recipient can unprotect content with the right justification.",
        "priority": 5,
        "color": "#FF8C00",
        "isEncrypted": true
    }

Eliminación de una fuente de conocimiento

Para poder eliminar un origen de conocimiento, debe eliminar cualquier base de conocimiento que haga referencia a ella o actualizar la definición de la base de conocimiento para quitar la referencia. En el caso de los orígenes de conocimiento que generan una canalización de índice e indexador, también se eliminan todos los objetos generados . Sin embargo, si usó un índice existente para crear un origen de conocimiento, el índice no se eliminará.

Si intenta eliminar un origen de conocimiento que está en uso, se produce un error en la acción y devuelve una lista de bases de conocimiento afectadas.

Para eliminar un origen de conocimiento:

  1. Obtenga una lista de todas las bases de conocimiento del servicio de búsqueda.

    ### Get knowledge bases
    GET {{search-endpoint}}/knowledgebases?api-version=2025-11-01-preview&$select=name
    api-key: {{api-key}}
    

    Una respuesta de ejemplo podría ser similar a la siguiente:

     {
         "@odata.context": "https://my-search-service.search.windows.net/$metadata#knowledgebases(name)",
         "value": [
         {
             "name": "my-kb"
         },
         {
             "name": "my-kb-2"
         }
         ]
     }
    
  2. Obtenga una definición de base de conocimiento individual para comprobar si hay referencias de origen de conocimiento.

    ### Get a knowledge base definition
    GET {{search-endpoint}}/knowledgebases/{{knowledge-base-name}}?api-version=2025-11-01-preview
    api-key: {{api-key}}
    

    Una respuesta de ejemplo podría ser similar a la siguiente:

     {
       "name": "my-kb",
       "description": null,
       "retrievalInstructions": null,
       "answerInstructions": null,
       "outputMode": null,
       "knowledgeSources": [
         {
           "name": "my-blob-ks",
         }
       ],
       "models": [],
       "encryptionKey": null,
       "retrievalReasoningEffort": {
         "kind": "low"
       }
     }
    
  3. Elimine la base de conocimiento o actualice la base de conocimiento quitando el origen de conocimiento si tiene varios orígenes. En este ejemplo se muestra la eliminación.

    ### Delete a knowledge base
    DELETE {{search-endpoint}}/knowledgebases/{{knowledge-base-name}}?api-version=2025-11-01-preview
    api-key: {{api-key}}
    
  4. Elimine la fuente de conocimiento.

    ### Delete a knowledge source
    DELETE {{search-endpoint}}/knowledgesources/{{knowledge-source-name}}?api-version=2025-11-01-preview
    api-key: {{api-key}}