Création d’un système RAG personnalisé avec Amazon Nova
Note
Amazon Nova Premier n’est pas encore disponible via l’API RetrieveAndGenerate. Pour utiliser l’API RetrieveAndGenerate avec Amazon Nova Premier, vous devez fournir une invite personnalisée lorsque vous appelez l’API RetrieveAndGenerate. Pour ce faire, fournissez le paramètre promptTemplate dans l’argument generationConfiguration de l’appel d’API RetrieveAndGenerate, comme indiqué ci-dessous :
'generationConfiguration': { 'promptTemplate': { 'textPromptTemplate': promptTemplate } }
Pour créer un modèle d’invite personnalisé, consultez les conseils d’invite pour RAG.
Vous pouvez utiliser les modèles Amazon Nova comme LLM dans un système RAG de texte personnalisé. Pour créer votre propre système RAG avec Amazon Nova, vous pouvez soit configurer votre système RAG pour interroger directement une base de connaissances, soit associer une base de connaissances à un agent (pour plus d’informations, consultez Création d’agents d’IA avec Amazon Nova)
Lorsque vous utilisez Amazon Nova dans un système RAG, deux approches générales sont possibles
-
Utilisation d’un extracteur comme outil (recommandé) : vous pouvez définir votre extracteur pour qu’il soit utilisé comme outil dans le paramètre ToolParameter de l’API converse ou de l’API Invokemodel. Par exemple, vous pouvez définir l’API Retrieve de Bedrock ou tout autre extracteur comme « outil ».
-
Utilisation d’instructions personnalisées pour les systèmes RAG : vous pouvez définir vos propres instructions personnalisées afin de créer un système RAG personnalisé.
Utilisation d’un extracteur comme outil
Définissez un outil qui permet au modèle d’invoquer un extracteur. La définition de l’outil est un schéma JSON que vous transmettez dans le paramètre de demande toolConfig (ToolConfiguration) à l’opération Converse.
{ "tools": [ { "toolSpec": { "name": "Retrieve information tool", "description": "This tool retrieves information from a custom database", "inputSchema": { "json": { "type": "object", "properties": { "query": { "type": "string", "description": "This is the description of the query parameter" } }, "required": [ "query" ] } } } } ] }
Une fois l’outil défini, vous pouvez transmettre la configuration de l’outil en tant que paramètre dans l’API converse.
Comment interpréter les éléments de réponse
Vous recevrez une réponse du modèle sous forme de JSON sous le « rôle » assistant avec le type de contenu « toolUse » ou sous forme de type de contexte « text » si le modèle choisit de ne pas utiliser l’outil d’extracteur. Si le modèle choisit d’utiliser l’outil d’extracteur, la réponse identifiera l’outil (tool_name). Les informations sur la manière dont l’outil de demande doit être utilisé se trouvent dans le message que le modèle renvoie dans le champ output (ConverseOutput). Plus précisément, dans le champ toolUse (ToolUseBlock). Vous utilisez le champ toolUseId pour identifier la demande d’outil dans les appels ultérieurs.
{ "output": { "message": { "role": "assistant", "content": [ { "toolUse": { "toolUseId": "tooluse_1234567", "name": "Retrieve information tool", "input": { "query": "Reformatted user query" #various arguments needed by the chosen tool } } } ] } }, "stopReason": "tool_use" }
À partir du champ toolUse dans la réponse du modèle, vous pouvez utiliser le champ name pour identifier le nom de l’outil. Appelez ensuite l’implémentation de l’outil et transmettez les paramètres d’entrée à partir du champ input.
Comment réintroduire le contenu extrait dans l’API Converse
Pour réexécuter les résultats extrayés dans Amazon Nova, vous pouvez désormais créer un message Tool Block qui inclut un bloc de contenu toolResult (ToolResultBlock) dans le rôle utilisateur. Dans le bloc de contenu, incluez la réponse de l’outil et l’ID de la demande d’outil que vous avez obtenu à l’étape précédente.
{ "role": "user", "content": [ { "toolResult": { "toolUseId": "tooluse_1234567", "content": [ { "json": { "Text chunk 1": "retrieved information chunk 1", "Text chunk 2": "retrieved information chunk 2" } } ], "status": "success | error" } } ] }
Le toolResult peut avoir un « contenu » qui peut être « text », « JSON » et « image » (selon le modèle utilisé). Si une erreur se produit dans l’outil, telle qu’une demande pour des arguments inexistants ou erronés, vous pouvez envoyer des informations d’erreur au modèle dans le champ toolResult. Pour indiquer une erreur, spécifiez error dans le champ status.