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.
| 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
| 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
| 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