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 está actualmente en versión preliminar pública. Esta versión preliminar se proporciona sin un contrato de nivel de servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no se admitan o que tengan funcionalidades restringidas. Para obtener más información, vea Supplemental Terms of Use for Microsoft Azure Previews.
En una canalización de recuperación agente, la acción de recuperación invoca el procesamiento de consultas en paralelo desde una base de conocimiento. Puede llamar a la acción de recuperación directamente mediante las API REST del servicio de búsqueda o un SDK de Azure. Cada base de conocimiento también expone un punto de conexión del Protocolo de contexto de modelo (MCP) para su consumo por parte de agentes compatibles con MCP.
En este artículo se explica cómo llamar a ambos métodos de recuperación con la implementación opcional de permisos e interpretar la respuesta de tres aspectos. Para configurar una canalización que conecta Búsqueda de Azure AI al Servicio Foundry Agent a través de MCP, consulte Tutorial: Crear una solución de recuperación agente de principio a fin.
Requisitos previos
Un servicio Búsqueda de Azure AI con una base de conocimiento.
Permisos para consultar la base de conocimiento. Configure la autenticación sin claves con el rol Lector de datos de índice de búsqueda asignado a su cuenta de usuario (recomendado) o use una clave de API.
Si la base de conocimiento especifica un LLM, el servicio de búsqueda debe tener una identidad administrada con permisos de Cognitive Services User en el recurso Microsoft Foundry.
- El paquete de versión preliminar
Azure.Search.Documentsmás reciente:dotnet add package Azure.Search.Documents --prerelease
- El paquete de versión preliminar
azure-search-documentsmás reciente:pip install --pre azure-search-documents
- La versión 2025-11-01-preview de las API REST del servicio de búsqueda.
Llamada a la acción de recuperación
Se especifica la acción de recuperación en una base de conocimiento. La entrada es el historial de conversaciones de chat en lenguaje natural, donde la messages matriz contiene la conversación. El motor de recuperación agente solo admite mensajes si el esfuerzo de razonamiento de recuperación es bajo o medio.
using Azure.Identity;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
// Create knowledge base retrieval client
var kbClient = new KnowledgeBaseRetrievalClient(
endpoint: new Uri("<YOUR SEARCH SERVICE URL>"),
knowledgeBaseName: "<YOUR KNOWLEDGE BASE NAME>",
tokenCredential: new DefaultAzureCredential()
);
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent(
"You can answer questions about the Earth at night. "
+ "Sources have a JSON format with a ref_id that must be cited in the answer. "
+ "If you do not have the answer, respond with 'I do not know'."
)
}
) { Role = "assistant" }
);
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent(
"Why is the Phoenix nighttime street grid so sharply visible from space, "
+ "whereas large stretches of the interstate between midwestern cities remain comparatively dim?"
)
}
) { Role = "user" }
);
var result = await kbClient.RetrieveAsync(retrievalRequest);
Console.WriteLine(
(result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text
);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.identity import DefaultAzureCredential
from azure.search.documents.knowledgebases import KnowledgeBaseRetrievalClient
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseMessage,
KnowledgeBaseMessageTextContent,
KnowledgeBaseRetrievalRequest,
SearchIndexKnowledgeSourceParams,
)
# Create knowledge base retrieval client
kb_client = KnowledgeBaseRetrievalClient(
endpoint="<YOUR SEARCH SERVICE URL>",
knowledge_base_name="<YOUR KNOWLEDGE BASE NAME>",
credential=DefaultAzureCredential(),
)
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="assistant",
content=[
KnowledgeBaseMessageTextContent(
text="You can answer questions about the Earth at night. "
"Sources have a JSON format with a ref_id that must be cited in the answer. "
"If you do not have the answer, respond with 'I do not know'."
)
],
),
KnowledgeBaseMessage(
role="user",
content=[
KnowledgeBaseMessageTextContent(
text="Why is the Phoenix nighttime street grid so sharply visible from space, "
"whereas large stretches of the interstate between midwestern cities remain comparatively dim?"
)
],
),
],
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="earth-at-night-blob-ks",
)
],
)
result = kb_client.retrieve(retrieval_request=request)
print(result.response[0].content[0].text)
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
@search-url = <YOUR SEARCH SERVICE URL> // Example: https://my-service.search.windows.net
@accessToken = <YOUR ACCESS TOKEN> // Run: az account get-access-token --scope https://search.azure.com/.default --query accessToken -o tsv
POST {{search-url}}/knowledgebases/{{knowledge-base-name}}/retrieve?api-version=2025-11-01-preview
Content-Type: application/json
Authorization: Bearer {{accessToken}}
{
"messages": [
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "You can answer questions about the Earth at night. Sources have a JSON format with a ref_id that must be cited in the answer. If you do not have the answer, respond with 'I do not know'."
}
]
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "Why is the Phoenix nighttime street grid so sharply visible from space, whereas large stretches of the interstate between midwestern cities remain comparatively dim?"
}
]
}
],
"knowledgeSourceParams": [
{
"knowledgeSourceName": "earth-at-night-blob-ks",
"kind": "searchIndex"
}
]
}
Referencia:Recuperación de Conocimiento - Recuperar
Filtrar en tiempo de consulta (índice de búsqueda)
Al obtener información de un índice de búsqueda, puede aplicar un filtro OData en el momento de la consulta para restringir los resultados a documentos o campos específicos. La expresión de filtro usa la sintaxis de OData y se pasa a través del filterAddOn parámetro .
Sintaxis y ejemplos de filtros
El filterAddOn parámetro acepta expresiones de filtro de OData. Entre los patrones de ejemplo se incluyen:
-
Campos de metadatos:
city eq 'Phoenix',status eq 'active' -
Intervalos de fechas:
publishDate ge 2024-01-01 and publishDate le 2024-12-31 -
Intervalos numéricos:
price ge 100 and price le 5000 -
Coincidencia de texto:
substringof('climate', description),indexof(title, 'urgent') ge 0 -
Operadores lógicos:
(category eq 'News' or category eq 'Analysis') and status eq 'published'
Expresiones de filtro de ejemplo:
status eq 'published'created ge 2025-01-01city eq 'Redmond' and department eq 'Engineering'(priority eq 'High' or priority eq 'Critical') and resolved eq false
Ejemplos por idioma
using Azure.Identity;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
var kbClient = new KnowledgeBaseRetrievalClient(
endpoint: new Uri("<YOUR SEARCH SERVICE URL>"),
knowledgeBaseName: "<YOUR KNOWLEDGE BASE NAME>",
tokenCredential: new DefaultAzureCredential()
);
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent(
"You are a support agent. Answer questions based on published documentation. "
+ "If you don't know the answer, say so."
)
}
) { Role = "assistant" }
);
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent(
"What is the process for submitting an expense report?"
)
}
) { Role = "user" }
);
// Apply a filter to search only published documents
var searchIndexParams = new SearchIndexKnowledgeSourceParams(
knowledgeSourceName: "internal-documentation-ks"
);
searchIndexParams.FilterAddOn = "status eq 'published'";
retrievalRequest.KnowledgeSourceParams.Add(searchIndexParams);
var result = await kbClient.RetrieveAsync(retrievalRequest);
Console.WriteLine(
(result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text
);
from azure.identity import DefaultAzureCredential
from azure.search.documents.knowledgebases import KnowledgeBaseRetrievalClient
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseMessage,
KnowledgeBaseMessageTextContent,
KnowledgeBaseRetrievalRequest,
SearchIndexKnowledgeSourceParams,
)
kb_client = KnowledgeBaseRetrievalClient(
endpoint="<YOUR SEARCH SERVICE URL>",
knowledge_base_name="<YOUR KNOWLEDGE BASE NAME>",
credential=DefaultAzureCredential(),
)
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="assistant",
content=[
KnowledgeBaseMessageTextContent(
text="You are a support agent. Answer questions based on published documentation. "
"If you don't know the answer, say so."
)
],
),
KnowledgeBaseMessage(
role="user",
content=[
KnowledgeBaseMessageTextContent(
text="What is the process for submitting an expense report?"
)
],
),
],
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="internal-documentation-ks",
# Apply a filter to search only published documents
filter_add_on="status eq 'published'",
)
],
)
result = kb_client.retrieve(retrieval_request=request)
print(result.response[0].content[0].text)
POST https://<YOUR SEARCH SERVICE>.search.windows.net/knowledgebases/<YOUR KNOWLEDGE BASE NAME>/retrieve?api-version=2025-11-01-preview
Content-Type: application/json
Authorization: Bearer <YOUR ACCESS TOKEN>
{
"messages": [
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "You are a support agent. Answer questions based on published documentation. If you don't know the answer, say so."
}
]
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "What is the process for submitting an expense report?"
}
]
}
],
"knowledgeSourceParams": [
{
"knowledgeSourceName": "internal-documentation-ks",
"kind": "searchIndex",
"filterAddOn": "status eq 'published'"
}
]
}
Ejemplo de varios filtros
Puede combinar varios filtros para refinar aún más los resultados:
searchIndexParams.FilterAddOn = "(status eq 'published' or status eq 'internal') and created ge 2025-01-01";
filter_add_on="(status eq 'published' or status eq 'internal') and created ge 2025-01-01"
{
"knowledgeSourceName": "internal-documentation-ks",
"kind": "searchIndex",
"filterAddOn": "(status eq 'published' or status eq 'internal') and created ge 2025-01-01"
}
Parámetros de solicitud
Pase los parámetros siguientes para llamar a la acción de recuperación.
| Nombre | Descripción | Tipo | Editable | Obligatorio |
|---|---|---|---|---|
messages |
Articula los mensajes enviados a un LLM. El formato de mensaje es similar a Azure API de OpenAI. | Objeto | Sí | No |
messages.role |
Define de dónde procede el mensaje, como assistant o user. El modelo que usa determina qué roles son válidos. |
Cadena | Sí | No |
messages.content |
El mensaje o la sugerencia enviados al LLM. En esta versión preliminar, deberá ser texto. | Cadena | Sí | No |
knowledgeSourceParams |
Invalida la configuración de recuperación predeterminada por origen de conocimiento. Resulta útil para personalizar la consulta o la respuesta en el momento de la consulta. | Objeto | Sí | No |
Recuperación desde un índice de búsqueda
En el caso de los orígenes de conocimiento que tienen como destino un índice de búsqueda, todos los searchable campos están en el ámbito de la ejecución de consultas. El tipo de consulta implícito es semanticy no hay ningún modo de búsqueda.
Si el índice incluye campos vectoriales, necesita una definición de vectorizador válida para que el motor de recuperación agente pueda vectorizar las entradas de consulta. De lo contrario, se omiten los campos vectoriales.
Para obtener más información, consulte Crear un índice para la recuperación agentica.
Llame al punto de conexión MCP
MCP es un protocolo abierto que normaliza cómo las aplicaciones de inteligencia artificial se conectan a herramientas y orígenes de datos externos.
En Búsqueda de Azure AI, cada base de conocimiento es un servidor MCP independiente que expone la herramienta knowledge_base_retrieve. Cualquier cliente compatible con MCP, incluido Foundry Agent Service, GitHub Copilot, Claude y Cursor, puede invocar esta herramienta para consultar la base de conocimiento.
Formato de punto de conexión de MCP
Cada base de conocimiento tiene un punto de conexión MCP en la siguiente dirección URL:
https://<your-service-name>.search.windows.net/knowledgebases/<your-knowledge-base-name>/mcp?api-version=2025-11-01-preview
Autenticación en el punto de conexión de MCP
El punto de conexión de MCP requiere autenticación a través de encabezados personalizados. Tiene dos opciones:
(Recomendado) Pase un token de portador en el
Authorizationencabezado. La identidad detrás del token debe tener asignado el rol Lector de datos de índice de búsqueda en el servicio de búsqueda. Este enfoque evita almacenar claves en archivos de configuración. Para obtener más información, consulte Connect your app to Búsqueda de Azure AI using identities.Pase una clave de administrador en el
api-keyencabezado. Una clave de administrador proporciona acceso completo de lectura y escritura al servicio de búsqueda, por lo que debe usarlo con precaución. Para obtener más información, consulte Connect to Búsqueda de Azure AI using API keys.
Propina
Cada cliente MCP configura los encabezados personalizados de forma diferente. Por ejemplo:
En Foundry Agent Service, configura la autenticación usando una conexión de proyecto y agrega la herramienta MCP a un agente. El servicio inserta automáticamente los encabezados necesarios en las solicitudes MCP.
En GitHub Copilot, Claude Desktop y clientes similares, configure encabezados en el JSON del servidor MCP, como
mcp.json.
Aplicación de permisos en el momento de la consulta
Si los orígenes de conocimiento contienen contenido protegido con permisos, el motor de recuperación puede filtrar los resultados para que cada usuario solo vea los documentos a los que está autorizado para acceder. Para habilitar este filtrado, pase la identidad del usuario final en la solicitud de recuperación. Sin el token de identidad, los resultados de los orígenes de conocimiento habilitados para permisos se devuelven sin filtrar.
El cumplimiento de permisos tiene dos partes:
Tiempo de ingesta: solo para los orígenes de conocimiento indexados, establezca
ingestionPermissionOptionspara ingerir metadatos de permisos junto con el contenido.Tiempo de consulta: pase el token de acceso del usuario en el
x-ms-query-source-authorizationencabezado.
Configuración durante la ingestión
En la tabla siguiente se muestran los orígenes de conocimiento que requieren configuración en tiempo de ingesta y cómo cada origen aplica permisos.
| Origen de conocimiento | Requiere ingestionPermissionOptions |
Cómo se aplican los permisos |
|---|---|---|
| Blob o ADLS Gen2 | ✅ | Ámbitos de RBAC ingeridos o ACL coincidentes con la identidad del usuario. |
| OneLake | ✅ | Ámbitos de RBAC ingeridos o ACL coincidentes con la identidad del usuario. |
| SharePoint Indexado | ✅ | ACLs de SharePoint importadas comparadas con la identidad del usuario. |
| SharePoint remoto | ❌ | Copilot consulta la API de recuperación de SharePoint directamente utilizando el token del usuario. |
Importante
Si ingestionPermissionOptions no se configuró cuando se creó el origen de conocimiento indexado, no existe ningún metadato de permiso en el índice. Los resultados se devuelven sin filtrar, independientemente del encabezado. Para corregirlo, actualice o vuelva a crear el origen de conocimiento con los valores y ingestionPermissionOptions adecuados.
Autorización en tiempo de consulta
Para pasar la identidad del usuario final, incluya un token de acceso con el ámbito configurado en https://search.azure.com/.default en la solicitud de recuperación. Este token es independiente de la credencial de servicio que se usa para acceder al servicio de búsqueda. No necesita permisos de servicio de búsqueda y solo representa al usuario cuyo acceso a contenido se evalúa. Para obtener más información, consulte Aplicación de ACL y RBAC en tiempo de consulta.
En el SDK de .NET, pase el token como parámetro xMsQuerySourceAuthorization en RetrieveAsync:
using Azure;
using Azure.Identity;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
// Service credential: Authenticates to the search service
var serviceCredential = new DefaultAzureCredential();
// User identity token: Represents the end user for document-level permissions filtering
var userTokenContext = new Azure.Core.TokenRequestContext(
new[] { "https://search.azure.com/.default" }
);
string userToken = (await serviceCredential.GetTokenAsync(userTokenContext)).Token;
// Create the retrieval client with the service credential
var kbClient = new KnowledgeBaseRetrievalClient(
endpoint: new Uri("<YOUR SEARCH SERVICE URL>"),
knowledgeBaseName: "<YOUR KNOWLEDGE BASE NAME>",
tokenCredential: serviceCredential
);
var request = new KnowledgeBaseRetrievalRequest();
request.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent(
"What companies are in the financial sector?")
}
) { Role = "user" }
);
// Pass the user identity token for permissions filtering
var result = await kbClient.RetrieveAsync(
request, xMsQuerySourceAuthorization: userToken);
var text = (result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text;
Console.WriteLine(text);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
En el SDK de Python, pase el token como parámetro x_ms_query_source_authorization en retrieve:
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from azure.search.documents.knowledgebases import KnowledgeBaseRetrievalClient
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseMessage, KnowledgeBaseMessageTextContent,
KnowledgeBaseRetrievalRequest,
)
# Service credential: Authenticates to the search service
service_credential = DefaultAzureCredential()
# User identity token: Represents the end user for document-level permissions filtering
user_token_provider = get_bearer_token_provider(
service_credential, "https://search.azure.com/.default")
user_token = user_token_provider()
# Create the retrieval client with the service credential
kb_client = KnowledgeBaseRetrievalClient(
endpoint="<YOUR SEARCH SERVICE URL>",
knowledge_base_name="<YOUR KNOWLEDGE BASE NAME>",
credential=service_credential,
)
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[KnowledgeBaseMessageTextContent(
text="What companies are in the financial sector?")],
)
]
)
# Pass the user identity token for permissions filtering
result = kb_client.retrieve(
retrieval_request=request, x_ms_query_source_authorization=user_token)
print(result.response[0].content[0].text)
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
En la API REST, incluya el x-ms-query-source-authorization encabezado con el token de acceso del usuario:
@search-url = <YOUR SEARCH SERVICE URL>
@accessToken = <YOUR ACCESS TOKEN> // Service credential
@userAccessToken = <USER ACCESS TOKEN> // User identity token
POST {{search-url}}/knowledgebases/{{knowledge-base-name}}/retrieve?api-version=2025-11-01-preview
Authorization: Bearer {{accessToken}}
Content-Type: application/json
x-ms-query-source-authorization: {{userAccessToken}}
{
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What companies are in the financial sector?"
}
]
}
]
}
Referencia:Recuperación de Conocimiento - Recuperar
Revisión de la respuesta
La recuperación correcta devuelve un 200 OK código de estado. Si la base de conocimiento no se puede recuperar de uno o varios orígenes de conocimiento, devuelve un 206 Partial Content código de estado. La respuesta solo incluye los resultados de las fuentes que tuvieron éxito. Los detalles sobre la respuesta parcial aparecen como errores en la matriz de actividad.
La acción de recuperación devuelve tres componentes principales:
- Respuesta extraída o respuesta sintetizada (dependiendo del modo de salida)
- Matriz de actividad
- Matriz de referencias
Respuesta extraída
La respuesta extraída es una sola cadena unificada que normalmente se pasa a un LLM. El LLM lo consume como datos de contextualización y lo usa para formular una respuesta. La llamada a la API del LLM incluye la cadena unificada y las instrucciones para el modelo, por ejemplo, si se usa la base exclusivamente o como complemento.
El cuerpo de la respuesta también se estructura en el formato de estilo de mensaje de chat. En esta versión preliminar, el contenido se serializa JSON.
"response": [
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "[{\"ref_id\":0,\"title\":\"Urban Structure\",\"terms\":\"Location of Phoenix, Grid of City Blocks, Phoenix Metropolitan Area at Night\",\"content\":\"<content chunk redacted>\"}]"
}
]
}
]
Puntos clave:
content.textes una matriz JSON. Se trata de una sola cadena compuesta por los documentos más relevantes (o fragmentos) que se encuentran en el índice de búsqueda, dadas las entradas del historial de consultas y chat. Esta matriz es los datos de base que usa un modelo de finalización de chat para formular una respuesta a la pregunta del usuario.Esta parte de la respuesta consta de 200 fragmentos o menos, excepto los resultados que no cumplan el umbral mínimo de una puntuación de 2,5 reranker.
La cadena comienza con el identificador de referencia del fragmento (usado con fines de cita) y los campos especificados en la configuración semántica del índice de destino. En este ejemplo, supongamos que la configuración semántica del índice de destino tiene un campo "title", un campo "terms" y un campo "content".
En esta versión preliminar,
content.typetiene un valor válido:text.La
maxOutputSizepropiedad de la base de conocimiento determina la longitud de la cadena.Importante
Un documento que supere el
maxOutputSizepresupuesto de salida se puede omitir silenciosamente de la respuesta sin una advertencia. Para obtener más información, consulte Solución de problemas de respuestas vacías.
Matriz de actividad
La matriz de actividad genera el plan de consulta, que proporciona transparencia operativa para las operaciones de seguimiento, las implicaciones de facturación y las invocaciones de recursos. También incluye subconsultas enviadas a la canalización de recuperación y errores en la recuperación, como fuentes de conocimiento inaccesibles.
La salida incluye los siguientes componentes:
| Sección | Descripción |
|---|---|
| modelQueryPlanning | En el caso de las bases de conocimiento que usan un LLM para la planeación de consultas, esta sección informa sobre los recuentos de tokens usados para la entrada y el recuento de tokens de las subconsultas. |
| actividad específica de la fuente | Para cada origen de conocimiento incluido en la consulta, esta sección informa sobre el tiempo transcurrido y qué argumentos se usaron en la consulta, incluido el clasificador semántico. Los tipos de origen de conocimiento incluyen searchIndex, azureBloby otros orígenes de conocimiento admitidos. |
| razonamiento agéntico | En esta sección se informa sobre el consumo de tokens para el razonamiento agente durante la recuperación, que depende del esfuerzo de razonamiento de recuperación especificado. |
| modelAnswerSynthesis | En el caso de las bases de conocimiento que usan la síntesis de respuestas, esta sección informa sobre el recuento de tokens para formular la respuesta y el recuento de tokens de la salida de la respuesta. |
Este es un ejemplo de la matriz de actividad:
"activity": [
{
"type": "modelQueryPlanning",
"id": 0,
"inputTokens": 2302,
"outputTokens": 109,
"elapsedMs": 2396
},
{
"type": "searchIndex",
"id": 1,
"knowledgeSourceName": "demo-financials-ks",
"queryTime": "2025-11-04T19:25:23.683Z",
"count": 26,
"elapsedMs": 1137,
"searchIndexArguments": {
"search": "List of companies in the financial sector according to SEC GICS classification",
"filter": null,
"sourceDataFields": [ ],
"searchFields": [ ],
"semanticConfigurationName": "en-semantic-config"
}
},
{
"type": "searchIndex",
"id": 2,
"knowledgeSourceName": "demo-healthcare-ks",
"queryTime": "2025-11-04T19:25:24.186Z",
"count": 17,
"elapsedMs": 494,
"searchIndexArguments": {
"search": "List of companies in the financial sector according to SEC GICS classification",
"filter": null,
"sourceDataFields": [ ],
"searchFields": [ ],
"semanticConfigurationName": "en-semantic-config"
}
},
{
"type": "agenticReasoning",
"id": 3,
"retrievalReasoningEffort": {
"kind": "low"
},
"reasoningTokens": 103368
},
{
"type": "modelAnswerSynthesis",
"id": 4,
"inputTokens": 5821,
"outputTokens": 344,
"elapsedMs": 3837
}
]
Matriz de referencias
La matriz de referencias procede directamente de los datos de base subyacentes. Incluye el sourceData utilizado para generar la respuesta. Consta de todos los documentos que el motor de recuperación agente encuentra y semánticamente clasifica. Los campos en el sourceData incluyen un id y campos semánticos: title, terms y content.
id actúa como identificador de referencia para un elemento dentro de una respuesta específica. No es la clave del documento en el índice de búsqueda. Utilizas esto para proporcionar citas.
El propósito de esta matriz es proporcionar una estructura de estilo de mensaje de chat para facilitar la integración. Por ejemplo, si desea serializar los resultados en una estructura diferente o necesita alguna manipulación mediante programación de los datos antes de devolverlos al usuario.
También puedes obtener los datos estructurados del objeto de datos de origen en la matriz de referencias para manipularlos como desees.
Este es un ejemplo de la matriz de referencias:
"references": [
{
"type": "AzureSearchDoc",
"id": "0",
"activitySource": 2,
"docKey": "earth_at_night_508_page_104_verbalized",
"sourceData": null
},
{
"type": "AzureSearchDoc",
"id": "1",
"activitySource": 2,
"docKey": "earth_at_night_508_page_105_verbalized",
"sourceData": null
}
]
Ejemplos
En los ejemplos siguientes se muestran diferentes formas de llamar a la acción de recuperación:
- Invalidación del esfuerzo de razonamiento predeterminado y establecimiento de límites de solicitudes
- Establecimiento de referencias para cada origen de conocimiento
- Uso del esfuerzo mínimo de razonamiento
Invalidación del esfuerzo de razonamiento predeterminado y establecimiento de límites de solicitudes
En este ejemplo se especifica la síntesis de respuesta, por lo que retrievalReasoningEffort debe ser "baja" o "media".
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent("What companies are in the financial sector?")
}
) { Role = "user" }
);
retrievalRequest.RetrievalReasoningEffort = new KnowledgeRetrievalLowReasoningEffort();
retrievalRequest.OutputMode = "answerSynthesis";
retrievalRequest.MaxRuntimeInSeconds = 30;
retrievalRequest.MaxOutputSize = 6000;
var result = await kbClient.RetrieveAsync(retrievalRequest);
Console.WriteLine(
(result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text
);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.search.documents.knowledgebases.models import KnowledgeRetrievalLowReasoningEffort
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[KnowledgeBaseMessageTextContent(text="What companies are in the financial sector?")],
)
],
retrieval_reasoning_effort=KnowledgeRetrievalLowReasoningEffort(),
output_mode="answerSynthesis",
max_runtime_in_seconds=30,
max_output_size=6000,
)
result = kb_client.retrieve(retrieval_request=request)
print(result.response[0].content[0].text)
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
POST {{search-url}}/knowledgebases/kb-override/retrieve?api-version={{api-version}}
Authorization: Bearer {{accessToken}}
Content-Type: application/json
{
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "What companies are in the financial sector?" }
]
}
],
"retrievalReasoningEffort": { "kind": "low" },
"outputMode": "answerSynthesis",
"maxRuntimeInSeconds": 30,
"maxOutputSize": 6000
}
Referencia:Recuperación de Conocimiento - Recuperar
Establecimiento de referencias para cada origen de conocimiento
En este ejemplo se usa el esfuerzo de razonamiento predeterminado especificado en la base de conocimiento. El enfoque de este ejemplo es la especificación de la cantidad de información que se va a incluir en la respuesta.
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent("What companies are in the financial sector?")
}
) { Role = "user" }
);
retrievalRequest.IncludeActivity = true;
// Knowledge source params are configured per source on the request
var result = await kbClient.RetrieveAsync(retrievalRequest);
Console.WriteLine(
(result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text
);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.search.documents.knowledgebases.models import SearchIndexKnowledgeSourceParams
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[KnowledgeBaseMessageTextContent(text="What companies are in the financial sector?")],
)
],
include_activity=True,
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="demo-financials-ks",
include_references=True,
include_reference_source_data=True,
),
SearchIndexKnowledgeSourceParams(
knowledge_source_name="demo-communicationservices-ks",
include_references=False,
include_reference_source_data=False,
),
SearchIndexKnowledgeSourceParams(
knowledge_source_name="demo-healthcare-ks",
include_references=True,
include_reference_source_data=False,
always_query_source=True,
),
],
)
result = kb_client.retrieve(retrieval_request=request)
print(result.response[0].content[0].text)
Reference:KnowledgeBaseRetrievalClient, SearchIndexKnowledgeSourceParams
POST {{search-url}}/knowledgebases/kb-medium-example/retrieve?api-version={{api-version}}
Authorization: Bearer {{accessToken}}
Content-Type: application/json
{
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "What companies are in the financial sector?" }
]
}
],
"includeActivity": true,
"knowledgeSourceParams": [
{
"knowledgeSourceName": "demo-financials-ks",
"kind": "searchIndex",
"includeReferences": true,
"includeReferenceSourceData": true
},
{
"knowledgeSourceName": "demo-communicationservices-ks",
"kind": "searchIndex",
"includeReferences": false,
"includeReferenceSourceData": false
},
{
"knowledgeSourceName": "demo-healthcare-ks",
"kind": "searchIndex",
"includeReferences": true,
"includeReferenceSourceData": false,
"alwaysQuerySource": true
}
]
}
Referencia:Recuperación de Conocimiento - Recuperar
Nota
Para orígenes de conocimiento indexados en OneLake o SharePoint, establezca includeReferenceSourceData en true para incluir en citas las direcciones URL del documento de origen.
Uso del esfuerzo mínimo de razonamiento
En este ejemplo, no hay LLM para la planificación inteligente de consultas ni la síntesis de respuestas. La cadena de consulta va al motor de recuperación por agente para búsqueda de palabras clave o búsqueda híbrida.
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Intents.Add(
new KnowledgeRetrievalSemanticIntent("what is a brokerage")
);
var result = await kbClient.RetrieveAsync(retrievalRequest);
Console.WriteLine(
(result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text
);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseRetrievalRequest,
KnowledgeRetrievalSemanticIntent,
)
request = KnowledgeBaseRetrievalRequest(
intents=[
KnowledgeRetrievalSemanticIntent(
search="what is a brokerage",
)
]
)
result = kb_client.retrieve(retrieval_request=request)
print(result.response[0].content[0].text)
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
POST {{search-url}}/knowledgebases/kb-minimal/retrieve?api-version={{api-version}}
Authorization: Bearer {{accessToken}}
Content-Type: application/json
{
"intents": [
{
"type": "semantic",
"search": "what is a brokerage"
}
]
}
Referencia:Recuperación de Conocimiento - Recuperar
Solución de problemas de respuestas vacías
Se puede encontrar un documento durante el paso de búsqueda, pero aún así puede ser omitido de la respuesta final si su contenido fundamentado supera el maxOutputSize límite de salida. Cuando esto sucede, la matriz de actividad muestra que se encontraron correspondencias, pero la matriz de referencias y el contenido de respuesta fundamentado están vacíos para ese documento. No se devuelve ninguna advertencia de truncamiento o error explícito.
Para evitar este comportamiento, indexe documentos de origen grandes como fragmentos más pequeños con identificadores estables y metadatos de origen. Esto se aplica especialmente a largos manuales, directivas o artículos de knowledge base.
Contenido relacionado
- Recuperación agentiva en Búsqueda de Azure AI
- Aplicación de ACL y RBAC en tiempo de consulta
- Utilice un indexador de blobs o una fuente de conocimiento para ingerir metadatos de ámbitos de RBAC
- Agentic RAG: Crear un motor de recuperación de razonamiento con Búsqueda de Azure AI (vídeo de YouTube)
- Demostración de Azure OpenAI con recuperación mediante agente