

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Creazione di un sistema RAG personalizzato con Amazon Nova
<a name="rag-building"></a>

**Nota**  
Amazon Nova Premier non è ancora disponibile tramite l'[RetrieveAndGenerate](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html)API. Per utilizzare l'[RetrieveAndGenerate](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html)API con Amazon Nova Premier, devi fornire un prompt personalizzato quando chiami l'[RetrieveAndGenerate](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html)API. A tale scopo, è necessario fornire l'`generationConfiguration`argomento `promptTemplate` in nella chiamata [RetrieveAndGenerate](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html)API, come illustrato di seguito:  

```
'generationConfiguration': {
                        'promptTemplate': {
                            'textPromptTemplate': promptTemplate
                        }
                    }
```
Per creare un modello di prompt personalizzato, consulta la [guida ai prompt per RAG](https://docs.aws.amazon.com/nova/latest/userguide/prompting-tools-rag.html).

Puoi utilizzare i modelli Amazon Nova come LLM all’interno di un sistema RAG di testo personalizzato. Per creare il tuo sistema RAG con Amazon Nova, puoi configurare il sistema RAG per interrogare direttamente una knowledge base oppure puoi associare una knowledge base a un agente (per ulteriori informazioni, consulta [Creazione di agenti IA con Amazon Nova](agents.md))

Quando si utilizza Amazon Nova all’interno di qualsiasi sistema RAG, vi sono due approcci generali:
+ **Utilizzo di un retriever come strumento** (consigliato): è possibile definire il retriever da utilizzare come strumento nell'API converse o nell'API ToolParameter Invokemodel. Ad esempio, puoi definire l’[API Retrieve](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Retrieve.html) di Bedrock o qualsiasi altro strumento di recupero come “strumento”.
+ **Utilizzo di istruzioni personalizzate per i sistemi RAG:** puoi definire istruzioni personalizzate per creare un sistema RAG personalizzato.

**Utilizzo di uno strumento di recupero**

Definisci uno strumento che consenta al modello di invocare uno strumento di recupero. La definizione dello strumento è uno schema JSON che si passa il parametro di richiesta `toolConfig` () [ToolConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolConfiguration.html)all'operazione. `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"
                        ]
                    }
                }
            }
        }
    ]
}
```

Dopo aver definito lo strumento, puoi passare la configurazione dello strumento come parametro nell’API Converse.

**Come interpretare gli elementi di risposta**

Riceverai una risposta dal modello sotto forma di JSON nel “ruolo” di assistente con il tipo di contenuto “toolUse” o sotto forma di tipo di contesto come “testo” se il modello sceglie di non utilizzare lo strumento di recupero. Se il modello sceglie di utilizzare lo strumento di recupero, la risposta identificherà lo strumento (tool\_name). Le informazioni su come utilizzare lo strumento richiesto si trovano nel messaggio che il modello restituisce nel campo `output` ([ConverseOutput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseOutput.html)). In particolare, il campo `toolUse` ([ToolUseBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolUseBlock.html)). Il campo `toolUseId` viene utilizzato per identificare la richiesta dello strumento nelle chiamate successive.

```
{
    "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"
}
```

Dal campo `toolUse` nella risposta del modello, puoi utilizzare il campo `name` per identificare il nome dello strumento. Poi chiama l’implementazione dello strumento e passa i parametri di input dal campo `input`.

**Come inserire nuovamente i contenuti recuperati nell’API Converse**

Per eseguire nuovamente i risultati recuperati su Amazon Nova, ora puoi creare un messaggio Tool Block che includa un blocco di contenuto `toolResult` ([ToolResultBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolResultBlock.html)) all'interno del ruolo utente. Nel blocco di contenuto, includi la risposta dallo strumento e l’ID per la richiesta dello strumento che hai ricevuto nel passaggio precedente.

```
{
    "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"
            }
        }
    ]
}
```

Il [toolResult](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolResultBlock.html) può avere “contenuti” che possono avere “testo”, “JSON” e “immagine” (a seconda del modello utilizzato). Se si verifica un errore nello strumento, come una richiesta di argomenti inesistenti o errati, puoi inviare informazioni sull’errore al modello presente nel campo `toolResult`. Per indicare un errore, specifica `error` nel campo `status`.