Amazon Kendra n'est plus ouvert aux nouveaux clients. Pour des fonctionnalités similaires à Amazon Kendra, explorez les bases de connaissances Amazon Bedrock. En savoir plus.
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Amazon Kendra changement de disponibilité
Présentation de
Après mûre réflexion, nous avons pris la décision de passer Amazon Kendra en mode maintenance, à compter du 30 juin 2026. À cette date, il n'y a aucune nouvelle fonctionnalité ou développement de capacité pour le service et, à compter du 30 juillet 2026, le service n'est plus ouvert aux nouveaux clients.
Pendant le mode maintenance, le service reste entièrement pris en charge et AWS continuera à fournir des corrections de bogues et des mises à jour de sécurité pour les clients existants, mais les demandes de nouvelles fonctionnalités ne seront plus prises en compte.
Nous recommandons aux clients de migrer leurs applications Kendra et d'implémenter toute nouvelle application de recherche sur la base de connaissances gérée Amazon Bedrock (BMKB) pour bénéficier de fonctionnalités similaires à celles de Kendra et de fonctionnalités plus avancées pour les cas d'utilisation de l'IA générative et de l'IA agentique. Bedrock Managed Knowledge Base est une solution RAG entièrement gérée, dotée de connecteurs intégrés, d'une analyse intelligente, d'un magasin vectoriel géré avec recherche hybride, ainsi que de la possibilité de générer des réponses (avec une API Retrieve and Generate) et d'effectuer un raisonnement en plusieurs étapes dans plusieurs bases de connaissances (avec une API Agentic Retrieval). Le BMKB vous permet également d'ajuster les stratégies de segmentation et les modèles d'intégration pour les optimiser en fonction de votre application spécifique, ainsi que de choisir le modèle de base pour la génération de réponses. Ce nouveau niveau de fonctionnalités et de flexibilité s'accompagne de coûts prévisibles en fonction de la taille de la base de connaissances ingérée, du nombre de requêtes effectuées et de l'utilisation du LLM.
Conseils en matière de migration
La migration depuis la base Amazon Kendra de connaissances gérée Amazon Bedrock (BMKB) est réalisable pour la plupart des charges de travail RAG et de recherche d'entreprise, moyennant une planification minutieuse. Les fonctionnalités de Kendra ne sont pas toutes directement disponibles dans la base de connaissances gérée de Bedrock, mais nombre d'entre elles peuvent être mises en œuvre via des solutions de contournement. Ce guide fournit un chemin de migration complet, étape par étape, aux clients existants de Kendra pour la transition de leurs applications vers BMKB, y compris le mappage de l'architecture, la traduction des API, des exemples de code, une analyse des lacunes en matière de fonctionnalités et des solutions de contournement recommandées.
Fonctionnalités de la base de connaissances gérée Amazon Bedrock
La BMKB gère l'ensemble du pipeline RAG de bout en bout. Il prend en charge des modèles d'intégration tels qu'Amazon Titan Text Embeddings V2, Cohere Embed English v3, Cohere Embed Multilingual v3, Cohere Embed v4 et Amazon Nova Multimodal Embeddings, tous fixés à 1024 dimensions avec des vecteurs float32. Le magasin vectoriel géré est entièrement géré par Bedrock, ce qui élimine le besoin de provisionner ou de gérer OpenSearch Aurora ou d'autres bases de données vectorielles. Les stratégies de découpage incluent Default (taille fixe à environ 300 jetons), Fixed-size (maxTokens et overlapPercentage configurables), Hierarchical (configurations parent-enfant avec niveaux) et No Chunking ; le découpage sémantique n'est pas pris en charge pour les bases de connaissances gérées.
BMKB prend actuellement en charge sept connecteurs de sources de données : Amazon S3, Confluence, Microsoft SharePoint, Web Crawler, Google Drive OneDrive, Microsoft et un connecteur personnalisé. Le service effectue toujours une recherche hybride (mot clé et sémantique) et ne propose pas de mode de recherche uniquement sémantique.
| Fonctionnalité | Kendra | Base de connaissances gérée par Bedrock |
|---|---|---|
| Connecteurs natifs | Plus de 32 connecteurs | 7 connecteurs |
| Vectorisation | Géré en interne | Customer-selectable (Titan V2, Cohere, Nova) |
| Boutique vectorielle | Géré en interne | Entièrement géré par Bedrock |
| Type de recherche | Mot-clé, sémantique ou hybride | Hybride (mot clé + sémantique) |
| Support RAG | Nécessite une intégration LLM externe | RetrieveAndGenerate API native |
| Extraction agentique | Non disponible | Récupération native par itérations multiples |
| Résultats maximaux | 100 passages (API de récupération) | 100 résultats (API de récupération) |
Etapes de la migration
Configuration de la base de connaissances gérée Amazon Bedrock
Étape 1 : Configuration des rôles IAM
Créez un rôle IAM qui autorise Bedrock à accéder à vos sources de données et à invoquer des modèles d'intégration. La politique de confiance doit permettre à bedrock.amazonaws.com d'assumer ce rôle, et la politique d'autorisations doit inclure l'accès à vos compartiments S3 et au modèle d'intégration sélectionné.
Configuration IAM (code 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) )
Étape 2 : Création d'une base de connaissances gérée
Utilisez l' CreateKnowledgeBase API avec le type MANAGED pour créer la base de connaissances :
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}")
Étape 3 : Configuration des sources de données
Créez une source de données S3 avec la configuration du connecteur géré :
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}")
Note
CreateDataSource est asynchrone pour les bases de connaissances gérées. L'état de la source de données passe de CREATING à AVAILABLE, généralement en 2 à 5 minutes. Ne procédez pas à l'ingestion tant que le statut n'est pas DISPONIBLE.
Étape 4 : Démarrez et surveillez l'ingestion
Déclenchez l'ingestion de documents et un sondage pour finalisation :
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)
Mappage de migration d'API et exemples de code
Cartographie des opérations d'API
| Opération | API Kendra | API BMKB | Client |
|---|---|---|---|
| Créez index/KB | kendra.create_index () | bedrock-agent.create_knowledge_base () | kendra → agent de base |
| Ajouter une source de données | kendra.create_data_source (Type="S3") | bedrock-agent.create_data_source () | kendra → agent de base |
| Sync/ingest docs | kendra.start_data_source_sync_job () | bedrock-agent.start_ingestion_job () | kendra → agent de base |
| Ajout de documents par lots | kendra.batch_put_document () | Non directement pris en charge (utilisez S3 upload + ingestion) | kendra → S3 + agent de base |
| Récupérez des passages | kendra.retrieve (=...) QueryText | bedrock-agent-runtime.retrieve () | kendra → bedrock-agent-runtime |
| Recherche à l'aide de filtres | AttributeFilter: {"EqualsTo": {...}} | filter : {"equals » : {...}} | Même schéma, syntaxe différente |
| Génération RAG | N/A (LLM externe requis) | bedrock-agent-runtime.retrieve_and_generate () | Nouvelle capacité |
Migration de l'API Retrieve
Avant (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"])
Aprè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']}")
Les principales différences sont les suivantes : le texte de la requête passe d'un paramètre de niveau supérieur à un Query.text champ de récupération imbriqué, AttributeFilter devient un filtre dans la gestion SearchConfiguration et les résultats incluent un champ de score de pertinence.
Utilisation RetrieveAndGenerate pour RAG
Le BMKB fournit une fonctionnalité RAG native qui élimine le besoin d'appeler séparément un LLM après la récupération :
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']}")
Cette API renvoie une réponse en langage naturel générée ainsi que des citations pointant vers les documents sources, fournissant un RAG intégré que Kendra ne propose pas de manière native.
Traduction de la syntaxe des filtres de métadonnées
| Kendra AttributeFilter | Filtre BMKB | Remarques |
|---|---|---|
| EqualsTo | equals | Cartographie directe |
| ContainsAll | en (partiel) | La BMKB utilise un abonnement fixe |
| ContainsAny | in | Cartographie directe |
| GreaterThan | greaterThan | Cartographie directe |
| LessThan | lessThan | Cartographie directe |
| GreaterThanOrEquals | plus grand ThanOrEquals | Cartographie directe |
| LessThanOrEquals | moins ThanOrEquals | Cartographie directe |
| NotFilter | Pas dans/Pas égal | Utiliser la négation appropriée |
| AndAllFilters | andAll | Cartographie directe |
| OrAllFilters | orAll | Cartographie directe |
Note
BMKB ne prend pas en charge les opérateurs StartsWith ou StringContains pour les bases de connaissances gérées. Si votre application Kendra utilise des caractères génériques ou des correspondances de sous-chaînes dans les filtres, vous devrez restructurer votre schéma de métadonnées pour utiliser à la place des modèles de correspondance exacte ou de définition d'appartenance.
Lacunes dans les fonctionnalités et solutions de contournement
Les fonctionnalités de Kendra ne sont pas toutes disponibles dans BMKB. Les suggestions de requêtes, la recherche à facettes, les synonymes personnalisés, la vérification orthographique, l'apprentissage incrémentiel et l'enrichissement des documents sont des fonctionnalités qui nécessitent des solutions de contournement dans BMKB. Cette section décrit ces solutions de contournement.
- Suggestions de requêtes (saisie semi-automatique)
-
Kendra fournit l' GetQuerySuggestions API qui renvoie des suggestions de saisie semi-automatique en fonction du vocabulaire des documents indexés. La BMKB n'offre pas cette fonctionnalité pour le moment.
Solution : implémentez une couche de saisie semi-automatique personnalisée à l'aide d'Amazon OpenSearch Service avec sa fonctionnalité de suggestion intégrée, ou utilisez un service de complétion de LLM-based requêtes. Vous pouvez également tirer parti des agents Bedrock pour reformuler des requêtes partielles avant leur extraction. Une approche pratique consiste à conserver un OpenSearch index distinct des termes de requête courants extraits de votre corpus de documents et à appeler son API de suggestion depuis votre interface avant d'invoquer la récupération BMKB.
- Recherche à facettes
-
Kendra prend en charge les facettes des attributs des documents via le paramètre Facets de l'API Query, qui affiche jusqu'à 10 valeurs de facette par facette avec le nombre de documents. L'architecture de la BMKB ne prend pas en charge la recherche à facettes.
Solution : simulez la navigation à facettes à l'aide du filtrage des métadonnées. Étiquetez les documents avec des attributs de métadonnées structurés (département, auteur, type de document, plage de dates) dans des fichiers annexes .metadata.json. Présentez les options de filtre dans l'interface utilisateur de votre application en fonction de votre schéma de métadonnées connu et appliquez les opérateurs de filtre correspondants au moment de la requête. Bien que cela ne fournisse pas de décompte dynamique des facettes, cela permet aux utilisateurs d'affiner les résultats par catégorie :
# 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"}} ] } } } ) - Synonymes personnalisés
-
Kendra permet de créer un mappage personnalisé de termes spécifiques à l'entreprise qui sont mappés à d'autres termes pour faire correspondre les résultats de recherche via un fichier de thésaurus. BMKB ne prend pas en charge les synonymes personnalisés pour le moment.
Solution : créez un service d'extension de synonymes léger en face de vos requêtes BMKB :
-
Conservez votre fichier de thésaurus Kendra existant (ou un dictionnaire de synonymes dans) DynamoDB/S3
-
Avant d'appeler le BMKB Retrieve ou RetrieveAndGenerate l'API, développez la requête de l'utilisateur en ajoutant les synonymes correspondants
-
Exemple : si l'utilisateur demande « Problèmes DNS », votre application la réécrit en « Problèmes DNS Route53 » avant de l'envoyer à BMKB
Cela fonctionne particulièrement bien car BMKB utilise toujours une recherche hybride (mot clé + sémantique), de sorte que l'ajout de termes synonymes au texte de la requête correspondra à la fois au mot clé et à la dimension sémantique.
-
- Correcteur orthographique
-
Kendra fournit des corrections orthographiques automatiques basées sur le vocabulaire des documents indexés via. SpellCorrectionConfiguration BMKB ne prend pas en charge la vérification orthographique pour le moment.
Solution : ajoutez une couche de prétraitement avant d'envoyer des requêtes à BMKB. Utilisez une fonction AWS Lambda qui invoque une bibliothèque de correction orthographique (telle que SymSpell ou TextBlob) ou appelle un LLM pour corriger les requêtes :
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}} ) - Apprentissage progressif
-
Kendra prend en charge l' SubmitFeedback API pour les signaux de clic et les commentaires de pertinence afin d'améliorer le classement au fil du temps. La BMKB n'offre pas cette fonctionnalité.
Solution : utilisez les modèles de reclassement de la BMKB pour améliorer la pertinence au moment de la requête. Créez une boucle de feedback personnalisée qui stocke les signaux de clic et d'évaluation des utilisateurs dans un magasin de données externe (tel que DynamoDB), et utilisez ces signaux pour ajuster les pondérations d'amplification des métadonnées ou les paramètres de reclassement. Pour une amélioration à long terme, pensez à peaufiner périodiquement votre modèle d'intégration en fonction des commentaires de pertinence collectés.
- Enrichissement personnalisé des documents
-
Kendra prend en charge les hooks Lambda de pré-extraction et de post-extraction qui manipulent le contenu et les métadonnées du document lors de l'ingestion. BMKB utilise Smart Parsing pour le traitement des documents mais ne propose pas de hooks Lambda équivalents.
Solution : implémentez un pipeline de prétraitement à l'aide de AWS Step Functions ou de Lambda qui transforme les documents avant qu'ils ne soient placés dans S3 pour l'ingestion BMKB. Ce pipeline peut effectuer l'extraction de contenu, l'enrichissement des métadonnées, la rédaction des informations personnelles ou la conversion de format avant que les documents n'atteignent le compartiment de sources de données BMKB.
Stratégie de migration des sources de données
Écart de couverture du connecteur
Kendra prend en charge 32 connecteurs natifs tandis que BMKB en prend en charge 7. Pour les sources de données qui ne sont pas directement prises en charge par BMKB, l'approche recommandée consiste à exporter le contenu vers Amazon S3 et à configurer une source de données S3 dans BMKB.
Modèle de migration pour les connecteurs non pris en charge : créez un pipeline automatisé (à l'aide de AWS Lambda, Step Functions ou Amazon EventBridge Scheduler) qui extrait périodiquement le contenu du système source via son API, écrit des documents dans un compartiment S3 contenant des fichiers annexes JSON de métadonnées appropriés et déclenche une tâche d'ingestion BMKB. Cela reproduit le comportement de synchronisation périodique des connecteurs Kendra.
Migration des métadonnées
Les attributs du document Kendra doivent être traduits au format de métadonnées BMKB. Dans Kendra, les attributs sont définis au niveau de l'index et attachés aux documents lors de leur ingestion. Dans BMKB, les métadonnées sont définies via des fichiers annexes .metadata.json stockés avec les documents sources dans S3, avec une taille maximale de 10 Ko par fichier. Chaque attribut doit être saisi sous la forme STRING, NUMBER ou BOOLEAN.
Sélection de la stratégie de découpage
Lorsque vous migrez depuis Kendra (qui gère le découpage en interne), vous devez choisir explicitement une stratégie de découpage pour BMKB. Pour la plupart des scénarios de migration, la Fixed-size stratégie avec 200 jetons et 30 % de chevauchement constitue un bon point de départ. Si la structure hiérarchique de vos documents est claire (chapitres, sections, sous-sections), envisagez le découpage hiérarchique pour une meilleure extraction du contexte général et des détails spécifiques.
Tests et validation
Pour évaluer les performances, exécutez Kendra et BMKB en parallèle. Envoyez des requêtes identiques aux deux services et comparez les résultats à l'aide des dimensions suivantes : qualité de pertinence (mesurée par NDCG ou MRR par rapport à un ensemble de tests dorés), latence (temps de réponse p50, p95, p99), débit (requêtes par seconde en cours de chargement) et exhaustivité (pourcentage des documents attendus récupérés).
Créez un harnais de test qui évalue la qualité de la récupération :
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
Avant de transférer le trafic de production vers BMKB, vérifiez les points suivants : toutes les sources de données sont ingérées et à jour, sans aucun document défectueux ; les filtres de métadonnées produisent les résultats escomptés pour tous les modèles de filtres d'application ; les solutions de contournement du contrôle d'accès limitent correctement les accès non autorisés ; les tests de pertinence atteignent ou dépassent la qualité de base de Kendra ; la gestion des erreurs d'application traite correctement les formats de réponse BMKB ; et la surveillance et les alertes sont configurées pour les erreurs et la latence de l'API BMKB.
Résumé
La migration depuis Amazon Kendra Bedrock Managed Knowledge Base nécessite deux efforts principaux : réingérer les sources de données dans BMKB et réécrire le code de l'application pour utiliser les API BMKB. Alors que BMKB introduit de puissantes RAG-native fonctionnalités, notamment RetrieveAndGenerate la recherche agentique, les clients utilisant des fonctionnalités de recherche d'entreprise telles que le facettage, les suggestions de requêtes, les synonymes personnalisés et l'apprentissage incrémentiel devront mettre en œuvre des solutions de contournement décrites dans ce guide.
Veuillez contacter AWS
le support pour