View a markdown version of this page

Amazon Kendra Cambio de disponibilidad de de - Amazon Kendra

Amazon Kendra dejará de estar abierto a nuevos clientes a partir del 30 de julio de 2026. Si desea utilizar el servicio, inscríbase antes del 30 de julio. Para obtener capacidades similares a Amazon Kendra, explore las bases de conocimiento de Amazon Bedrock. Más información.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Amazon Kendra Cambio de disponibilidad de de

Descripción general de

Tras considerarlo detenidamente, hemos tomado la decisión de ponerlo Amazon Kendra en modo de mantenimiento, que entrará en vigor el 30 de junio de 2026. A partir de esta fecha, no se desarrollarán nuevas funciones o capacidades para el servicio y, a partir del 30 de julio de 2026, el servicio dejará de aceptar nuevos clientes.

Durante el modo de mantenimiento, el servicio seguirá siendo totalmente compatible y AWS seguirá proporcionando correcciones de errores y actualizaciones de seguridad a los clientes actuales; sin embargo, ya no se tendrán en cuenta las solicitudes de nuevas funciones.

Recomendamos a los clientes que migren sus aplicaciones de Kendra e implementen cualquier aplicación de búsqueda nueva en la base de conocimiento gestionada de Amazon Bedrock (BMKB) para obtener capacidades similares a las de Kendra y funciones más avanzadas para los casos de uso de IA generativa y de IA agencial. Bedrock Managed Knowledge Base es una solución RAG totalmente gestionada, con conectores integrados, análisis inteligente, almacén vectorial gestionado con búsqueda híbrida, además de la capacidad de generar respuestas (con una API de recuperación y generación) y realizar un razonamiento de varios pasos en múltiples bases de conocimiento (con una API de recuperación de agentes). BMKB también le permite ajustar las estrategias de fragmentación y los modelos de incrustación para optimizarlos para su aplicación específica, así como elegir el modelo básico para la generación de respuestas. Este nuevo nivel de funciones y flexibilidad conlleva costes predecibles en función del tamaño de la base de conocimientos consumida, el número de consultas realizadas y el uso de la LLM.

Guía de migración

La mayoría de las Amazon Kendra cargas de trabajo empresariales de búsqueda y RAG pueden migrar desde Amazon Bedrock Managed Knowledge Base (BMKB) si se planifica cuidadosamente. No todas las funciones de Kendra están disponibles directamente en la base de conocimiento gestionada de Bedrock, pero muchas se pueden implementar mediante soluciones alternativas. Esta guía proporciona una ruta de migración completa y gradual para que los clientes actuales de Kendra hagan la transición de sus aplicaciones a BMKB, que incluye el mapeo de la arquitectura, la traducción de API, ejemplos de código, análisis de carencias de funciones y soluciones alternativas recomendadas.

Características de la base de conocimientos gestionada de Amazon Bedrock

BMKB gestiona toda la canalización de RAG de principio a fin. Admite modelos de incrustación, incluidos Amazon Titan Text Embeddings V2, Cohere Embed English v3, Cohere Embed Multilingual v3, Cohere Embed v4 y Amazon Nova Multimodal Embeddings, todos fijos en 1024 dimensiones con vectores float32. El almacén vectorial gestionado es gestionado en su totalidad por Bedrock, lo que elimina la necesidad de aprovisionar o gestionar OpenSearch bases de datos de Aurora u otras bases de datos vectoriales. Las estrategias de fragmentación incluyen Default (con un tamaño fijo de aproximadamente 300 fichas), Fixed-size MaxTokens y OverlapPercentage configurables, Hierarchical (padre-hijo con configuraciones de niveles) y No Chunking; la fragmentación semántica no es compatible con las bases de conocimiento gestionadas.

Actualmente, BMKB admite siete conectores de fuentes de datos: Amazon S3, Confluence, Microsoft SharePoint, Web Crawler, Google Drive OneDrive, Microsoft y un conector personalizado. El servicio siempre realiza una búsqueda híbrida (palabra clave más semántica) y no ofrece un modo de búsqueda solo semántico.

Comparación de arquitecturas entre Amazon Kendra y la base de conocimientos gestionada por Bedrock
Característica Kendra Base de conocimientos gestionada por Bedrock
Conectores nativos Más de 32 conectores 7 conectores
Incrustación Administrado internamente Customer-selectable (Titan V2, Cohere, Nova)
Tienda de vectores Gestionado internamente Totalmente gestionado por Bedrock
Tipo de búsqueda Palabra clave, semántica o híbrida Híbrido (palabra clave más semántica)
Soporte RAG Requiere una integración LLM externa API nativa RetrieveAndGenerate
Recuperación de agentes No disponible Recuperación nativa de múltiples iteraciones
Resultados máximos 100 pasajes (API de recuperación) 100 resultados (API de recuperación)

Pasos para realizar la migración

Configuración de la base de conocimientos gestionada de Amazon Bedrock

Paso 1: Configurar las funciones de IAM

Cree una función de IAM que conceda permiso a Bedrock para acceder a sus fuentes de datos e invocar modelos de incrustación. La política de confianza debe permitir que bedrock.amazonaws.com asuma el rol, y la política de permisos debe incluir el acceso a tus buckets de S3 y al modelo de incrustación seleccionado.

Configuración de IAM (código Python):

import boto3 import json iam = boto3.client('iam') trust_policy = { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "bedrock.amazonaws.com"}, "Action": "sts:AssumeRole" }] } iam.create_role( RoleName="BedrockKBRole", AssumeRolePolicyDocument=json.dumps(trust_policy), Description="Role for Bedrock Managed Knowledge Base" ) permissions_policy = { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": [ "arn:aws:s3:::your-bucket-name", "arn:aws:s3:::your-bucket-name/*" ] }, { "Effect": "Allow", "Action": ["bedrock:InvokeModel"], "Resource": ["arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0"] } ] } iam.put_role_policy( RoleName="BedrockKBRole", PolicyName="BedrockKBPermissions", PolicyDocument=json.dumps(permissions_policy) )

Paso 2: Crear una base de conocimientos gestionada

Utilice la CreateKnowledgeBase API del tipo MANAGED para crear la base de conocimientos:

import boto3 bedrock_agent = boto3.client("bedrock-agent", region_name="us-east-1") response = bedrock_agent.create_knowledge_base( name="my-managed-kb", description="Migrated from Kendra index", roleArn="arn:aws:iam::123456789012:role/BedrockKBRole", knowledgeBaseConfiguration={ "type": "MANAGED", "managedKnowledgeBaseConfiguration": { "embeddingModelArn": "arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-embed-text-v2:0", "embeddingModelConfiguration": { "bedrockEmbeddingModelConfiguration": { "embeddingDataType": "FLOAT32" } } } } ) kb_id = response["knowledgeBase"]["knowledgeBaseId"] print(f"Created knowledge base: {kb_id}")

Paso 3: Configurar las fuentes de datos

Cree una fuente de datos S3 con la configuración del conector gestionado:

response = bedrock_agent.create_data_source( knowledgeBaseId=kb_id, name="my-s3-data-source", description="Product documentation from S3", dataSourceConfiguration={ "type": "MANAGED_KNOWLEDGE_BASE_CONNECTOR", "managedKnowledgeBaseConnectorConfiguration": { "connectorParameters": { "type": "S3", "version": "1", "connectionConfiguration": { "bucketName": "your-bucket-name", "bucketOwnerAccountId": "123456789012" }, "filterConfiguration": { "inclusionPrefixes": ["documents/"] } } } }, vectorIngestionConfiguration={ "parsingConfiguration": { "parsingStrategy": "SMART_PARSING" } } ) data_source_id = response["dataSource"]["dataSourceId"] print(f"Created data source: {data_source_id}")
nota

CreateDataSource es asíncrono para las bases de conocimiento gestionadas. El estado de la fuente de datos pasa de CREATING a AVAILABLE, normalmente en un plazo de 2 a 5 minutos. No proceda a la ingestión hasta que el estado esté DISPONIBLE.

Paso 4: Iniciar y monitorear la ingestión

Activa la ingesta de documentos y el sondeo para completarlos:

import time ingestion_response = bedrock_agent.start_ingestion_job( knowledgeBaseId=kb_id, dataSourceId=data_source_id, description="Initial ingestion" ) ingestion_job_id = ingestion_response["ingestionJob"]["ingestionJobId"] print(f"Started ingestion job: {ingestion_job_id}") while True: job_response = bedrock_agent.get_ingestion_job( knowledgeBaseId=kb_id, dataSourceId=data_source_id, ingestionJobId=ingestion_job_id ) job = job_response["ingestionJob"] status = job["status"] stats = job.get("statistics", {}) print(f"Status: {status} | Scanned: {stats.get('numberOfDocumentsScanned', 0)} | " f"Indexed: {stats.get('numberOfNewDocumentsIndexed', 0)} | " f"Failed: {stats.get('numberOfDocumentsFailed', 0)}") if status == "COMPLETE": print("Ingestion complete!") break elif status in ("FAILED", "STOPPED"): print(f"Ingestion {status}: {job.get('failureReasons', [])}") break time.sleep(30)

Ejemplos de código y mapeo de migración de API

Mapeo de operaciones de API

Mapeo de operaciones de API de Kendra a BMKB
Operación API Kendra API BMKB Cliente
Crear index/KB kendra.create_index () bedrock-agent.create_knowledge_base () kendra → bedrock-agent
Añadir fuente de datos kendra.create_data_source (Type="S3") bedrock-agent.create_data_source () kendra → bedrock-agent
Sync/ingest documentos kendra.start_data_source_sync_job () bedrock-agent.start_ingestion_job () kendra → bedrock-agent
Añadir documentos por lotes kendra.batch_put_document () No se admite directamente (utilice la carga desde S3 + la ingestión) kendra → S3 + bedrock-agent
Recupera pasajes kendra.retrieve (=...) QueryText bedrock-agent-runtime.retrieve () kendra → bedrock-agent-runtime
Buscar con filtros AttributeFilter: {"EqualsTo": {...}} filter: {"igual a»: {...}} Mismo patrón, diferente sintaxis
Generación de RAG N/A (se requiere un LLM externo) bedrock-agent-runtime.retrieve_and_generate () Nueva capacidad

Migración de la API Retrieve

Antes (Kendra):

kendra_client = boto3.client("kendra") response = kendra_client.retrieve( IndexId="your-kendra-index-id", QueryText="How do I configure VPC endpoints?", AttributeFilter={ "EqualsTo": { "Key": "_category", "Value": {"StringValue": "networking"} } }, PageSize=10 ) for item in response["ResultItems"]: print(item["DocumentTitle"]) print(item["Content"])

Después (BMKB):

bedrock_runtime = boto3.client("bedrock-agent-runtime", region_name="us-east-1") response = bedrock_runtime.retrieve( knowledgeBaseId="your-kb-id", retrievalQuery={ "text": "How do I configure VPC endpoints?" }, retrievalConfiguration={ "managedSearchConfiguration": { "numberOfResults": 10, "filter": { "equals": { "key": "category", "value": "networking" } } } } ) for result in response["retrievalResults"]: print(f"Score: {result['score']}") print(f"Content: {result['content']['text']}") print(f"Source: {result['location']['s3Location']['uri']}")

Las principales diferencias son: el texto de la consulta pasa de AttributeFilter ser un parámetro de nivel superior a un campo de recuperación anidado; pasa a ser un filtro dentro de los campos gestionadosSearchConfiguration; y los resultados incluyen un Query.text campo de puntuación de relevancia.

Se utiliza para RAG RetrieveAndGenerate

El BMKB proporciona una función RAG nativa que elimina la necesidad de llamar por separado a un LLM después de la recuperación:

response = bedrock_runtime.retrieve_and_generate( input={ "text": "Explain how to configure VPC endpoints for S3 access" }, retrieveAndGenerateConfiguration={ "type": "KNOWLEDGE_BASE", "knowledgeBaseConfiguration": { "knowledgeBaseId": "your-kb-id", "modelArn": "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0", "retrievalConfiguration": { "managedSearchConfiguration": { "numberOfResults": 5 } } } } ) # Generated answer with citations print(response["output"]["text"]) # Source citations for citation in response.get("citations", []): for ref in citation.get("retrievedReferences", []): print(f"Source: {ref['location']['s3Location']['uri']}")

Esta API devuelve una respuesta en lenguaje natural generada junto con citas que apuntan a los documentos fuente, lo que proporciona un RAG integrado que Kendra no ofrece de forma nativa.

Traducción de sintaxis del filtro de metadatos

Mapeo de operadores de filtros de metadatos
Kendra AttributeFilter Filtro BMKB Notas
EqualsTo equals Mapeo directo
ContainsAll en (parcial) BMKB utiliza una membresía fija
ContainsAny in Mapeo directo
GreaterThan greaterThan Mapeo directo
LessThan lessThan Mapeo directo
GreaterThanOrEquals mayor ThanOrEquals Mapeo directo
LessThanOrEquals menos ThanOrEquals Mapeo directo
NotFilter NotIn/ NotEquals Utilice la negación adecuada
AndAllFilters andAll Mapeo directo
OrAllFilters orAll Mapeo directo
nota

BMKB no admite los operadores StartsWith o StringContains para las bases de conocimiento gestionadas. Si su aplicación Kendra utiliza la coincidencia de caracteres comodín o de subcadenas en los filtros, tendrá que reestructurar el esquema de metadatos para utilizar patrones de coincidencia exacta o de pertenencia a conjuntos.

Presenta brechas y soluciones alternativas

No todas las funciones de Kendra están disponibles en BMKB. Las sugerencias de consulta, la búsqueda por facetas, los sinónimos personalizados, la revisión ortográfica, el aprendizaje incremental y el enriquecimiento de documentos son funciones que requieren soluciones alternativas en BMKB. En esta sección se analizan esas soluciones alternativas.

Sugerencias de consulta (autocompletar)

Kendra proporciona la GetQuerySuggestions API que devuelve sugerencias de autocompletado basadas en el vocabulario de los documentos indexados. Actualmente, BMKB no ofrece esta capacidad.

Solución alternativa: Implemente una capa de autocompletado personalizada mediante Amazon OpenSearch Service con su funcionalidad de sugerencias integrada, o utilice un servicio de finalización de LLM-based consultas. También puede utilizar Bedrock Agents para reformular consultas parciales antes de recuperarlas. Un enfoque práctico consiste en mantener un OpenSearch índice independiente de los términos de consulta habituales extraídos del corpus documental y llamar a su API de sugerencias desde la interfaz antes de recurrir a BMKB retrieval.

Búsqueda facetada

Kendra admite las facetas de los atributos del documento mediante el parámetro Facets de la API de consultas, y muestra hasta 10 valores de faceta por faceta con el recuento de documentos. La arquitectura de BMKB no admite la búsqueda por facetas.

Solución alternativa: simule la navegación por facetas mediante el filtrado de metadatos. Etiquete los documentos con atributos de metadatos estructurados (departamento, autor, tipo de documento, intervalo de fechas) en archivos sidecar .metadata.json. Presente las opciones de filtrado en la interfaz de usuario de la aplicación en función de su esquema de metadatos conocido y aplique los operadores de filtro correspondientes en el momento de la consulta. Si bien esto no proporciona recuentos de facetas dinámicos, permite a los usuarios restringir los resultados por categoría:

# Simulating faceted search with metadata filters response = bedrock_runtime.retrieve( knowledgeBaseId="your-kb-id", retrievalQuery={"text": "security best practices"}, retrievalConfiguration={ "managedSearchConfiguration": { "numberOfResults": 10, "filter": { "andAll": [ {"equals": {"key": "department", "value": "engineering"}}, {"equals": {"key": "doc_type", "value": "policy"}} ] } } } )
Sinónimos personalizados

Kendra permite crear un mapeo personalizado de términos específicos de la empresa que se asignan a otros términos para hacer coincidir los resultados de búsqueda a través de un archivo de tesauros. Actualmente, BMKB no admite sinónimos personalizados.

Solución alternativa: Cree un servicio de expansión de sinónimos ligero para sus consultas en BMKB:

  • Mantenga su archivo de tesauros de Kendra existente (o un diccionario de sinónimos en él) DynamoDB/S3

  • Antes de llamar al BMKB Retrieve o a la RetrieveAndGenerate API, amplíe la consulta del usuario añadiendo sinónimos que coincidan

  • Ejemplo: si el usuario consulta «Problemas con el DNS», tu aplicación la reescribe como «Problemas con la ruta de DNS 53" antes de enviarla a BMKB

Esto funciona especialmente bien porque BMKB siempre utiliza la búsqueda híbrida (palabra clave más semántica), por lo que añadir términos sinónimos al texto de la consulta coincidirá tanto en la dimensión semántica como en la de la palabra clave.

Corrector ortográfico

Kendra proporciona correcciones ortográficas automáticas basadas en el vocabulario de documentos indexados a través de. SpellCorrectionConfiguration Actualmente, BMKB no admite el corrector ortográfico.

Solución alternativa: añada una capa de preprocesamiento antes de enviar las consultas a BMKB. Utilice una función AWS Lambda que invoque una biblioteca de corrección ortográfica (como SymSpell o TextBlob) o llame a un LLM para corregir consultas:

import boto3 lambda_client = boto3.client("lambda") def correct_and_retrieve(query_text, kb_id): # Step 1: Spell-correct the query using a Lambda function correction_response = lambda_client.invoke( FunctionName="spell-correction-function", Payload=json.dumps({"query": query_text}) ) corrected_query = json.loads(correction_response["Payload"].read())["corrected"] # Step 2: Query BMKB with corrected text bedrock_runtime = boto3.client("bedrock-agent-runtime") return bedrock_runtime.retrieve( knowledgeBaseId=kb_id, retrievalQuery={"text": corrected_query}, retrievalConfiguration={"managedSearchConfiguration": {"numberOfResults": 5}} )
Aprendizaje incremental

Kendra admite la SubmitFeedback API para señales de clics y comentarios de relevancia para mejorar la clasificación a lo largo del tiempo. BMKB no ofrece esta capacidad.

Solución alternativa: utilice los modelos de reclasificación de BMKB para mejorar la relevancia en el momento de la consulta. Cree un circuito de retroalimentación personalizado que almacene las señales de clic y calificación de los usuarios en un almacén de datos externo (como DynamoDB) y utilice esas señales para ajustar las ponderaciones de aumento de los metadatos o los parámetros de cambio de clasificación. Para lograr una mejora a largo plazo, considere la posibilidad de ajustar periódicamente su modelo de incrustación en función de los comentarios de relevancia recopilados.

Enriquecimiento de documentos personalizado

Kendra admite los ganchos Lambda previos y posteriores a la extracción que manipulan el contenido y los metadatos del documento durante la ingesta. BMKB utiliza el análisis inteligente para el procesamiento de documentos, pero no ofrece ganchos Lambda equivalentes.

Solución alternativa: Implemente una canalización de preprocesamiento mediante AWS Step Functions o Lambda que transforme los documentos antes de colocarlos en S3 para su ingestión en BMKB. Esta canalización puede realizar la extracción de contenido, el enriquecimiento de los metadatos, la redacción de la PII o la conversión de formato antes de que los documentos lleguen al depósito de fuentes de datos de BMKB.

Estrategia de migración de fuentes de datos

Brecha de cobertura del conector

Kendra admite 32 conectores nativos, mientras que BMKB admite 7. Para las fuentes de datos que BMKB no admite directamente, el enfoque recomendado es exportar el contenido a Amazon S3 y configurar una fuente de datos de S3 en BMKB.

Patrón de migración para conectores no compatibles: cree una canalización automatizada (mediante AWS Lambda, Step Functions o EventBridge Amazon Scheduler) que extraiga contenido del sistema de origen de forma periódica a través de su API, escriba documentos en un bucket de S3 con los metadatos adecuados (archivos sidecar) JSON y active un trabajo de ingestión de BMKB. Esto reproduce el comportamiento de sincronización periódica de los conectores Kendra.

Migración de metadatos

Los atributos del documento de Kendra deben traducirse al formato de metadatos BMKB. En Kendra, los atributos se definen a nivel de índice y se adjuntan a los documentos durante la ingestión. En BMKB, los metadatos se definen mediante archivos.metadata.json guardados junto con los documentos fuente en S3, con un tamaño máximo de 10 KB por archivo. Cada atributo debe escribirse como STRING, NUMBER o BOOLEAN.

Selección de estrategias de fragmentación

Al migrar desde Kendra (que gestiona la fragmentación internamente), debe elegir explícitamente una estrategia de fragmentación para BMKB. Para la mayoría de los escenarios de migración, la Fixed-size estrategia con 200 fichas y un 30% de superposición constituye un buen punto de partida. Si sus documentos tienen una estructura jerárquica clara (capítulos, secciones, subsecciones), considere la posibilidad de fragmentar jerárquicamente para recuperar mejor tanto el contexto general como los detalles específicos.

Pruebas y validación

Para evaluar el rendimiento, ejecute Kendra y BMKB en paralelo. Envíe consultas idénticas a ambos servicios y compare los resultados utilizando las siguientes dimensiones: calidad de relevancia (medida mediante el NDCG o el MRR en comparación con una prueba preliminar), latencia (tiempos de respuesta de p50, p95 y p99), rendimiento (consultas por segundo bajo carga) e integridad (porcentaje de documentos esperados recuperados).

Cree un banco de pruebas que evalúe la calidad de la recuperación:

def compare_retrieval(query, kendra_index_id, bmkb_kb_id): # Query Kendra kendra_results = kendra_client.retrieve( IndexId=kendra_index_id, QueryText=query, PageSize=10 ) # Query BMKB bmkb_results = bedrock_runtime.retrieve( knowledgeBaseId=bmkb_kb_id, retrievalQuery={"text": query}, retrievalConfiguration={ "managedSearchConfiguration": {"numberOfResults": 10} } ) # Compare overlap in top-10 results kendra_docs = {r["DocumentId"] for r in kendra_results["ResultItems"]} bmkb_docs = {r["location"]["s3Location"]["uri"] for r in bmkb_results["retrievalResults"]} overlap = len(kendra_docs.intersection(bmkb_docs)) print(f"Query: {query}") print(f"Result overlap: {overlap}/10 documents in common") return overlap

Antes de cambiar el tráfico de producción a BMKB, compruebe lo siguiente: todas las fuentes de datos estén incorporadas y actualizadas sin documentos defectuosos; los filtros de metadatos producen los resultados esperados para todos los patrones de filtrado de aplicaciones; las soluciones alternativas de control de acceso restringen correctamente el acceso no autorizado; los puntos de referencia de relevancia cumplen o superan la calidad de referencia de Kendra; el manejo de errores de las aplicaciones procesa correctamente los formatos de respuesta de BMKB; y la supervisión y las alertas están configuradas para los errores y la latencia de la API de BMKB.

Resumen

La migración de la base de conocimientos gestionada Amazon Kendra a Bedrock requiere dos esfuerzos principales: volver a ingerir las fuentes de datos en BMKB y reescribir el código de la aplicación para utilizar las API de BMKB. Si bien BMKB presenta potentes RAG-native funciones, como la recuperación de agentes, los clientes que utilicen funciones de búsqueda empresarial, como la creación de facetas, las sugerencias de consultas, los sinónimos personalizados RetrieveAndGenerate y el aprendizaje incremental, deberán implementar las soluciones alternativas que se describen en esta guía.

Si tiene alguna pregunta adicional, póngase en contacto con AWS Support.