

# Como criar um sistema de RAG com o Amazon Nova
<a name="rag-building"></a>

**nota**  
O Amazon Nova Premier ainda não está disponível por meio da API [RetrieveAndGenerate](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html). Para usar a API [RetrieveAndGenerate](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html) com o Amazon Nova Premier, você precisa fornecer um prompt personalizado ao chamar a API [RetrieveAndGenerate](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html). Isso é feito fornecendo o `promptTemplate` no argumento `generationConfiguration` na chamada de API [RetrieveAndGenerate](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html), conforme mostrado abaixo:  

```
'generationConfiguration': {
                        'promptTemplate': {
                            'textPromptTemplate': promptTemplate
                        }
                    }
```
Para criar um modelo de prompt personalizado, consulte as [orientações de criação de prompts para RAG](https://docs.aws.amazon.com/nova/latest/userguide/prompting-tools-rag.html).

Você pode usar os modelos do Amazon Nova como o LLM dentro de um sistema personalizado de RAG de texto. Para criar seu próprio sistema de RAG com o Amazon Nova, você pode configurar seu sistema de RAG para consultar uma base de conhecimento diretamente ou associar uma base de conhecimento a um agente (para obter mais informações, consulte [Criar agentes de IA com o Amazon Nova](agents.md)).

Ao usar o Amazon Nova em qualquer sistema de RAG, há duas abordagens gerais
+ **Usar um recuperador como ferramenta** (recomendado): você pode definir seu recuperador para uso como ferramenta no ToolParameter da API Converse ou da API InvokeModel. Por exemplo, você pode definir a [API Retrieve](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Retrieve.html) do Bedrock ou qualquer outro recuperador como uma “ferramenta”.
+ **Usar instruções personalizadas para sistemas de RAG:** você pode definir suas próprias instruções personalizadas para criar um sistema de RAG personalizado.

**Usar um recuperador como ferramenta**

Defina uma ferramenta que permita ao modelo invocar um recuperador. A definição da ferramenta é um esquema JSON que você passa no parâmetro de solicitação `toolConfig` ([ToolConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolConfiguration.html)) para a operação `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"
                        ]
                    }
                }
            }
        }
    ]
}
```

Depois que a ferramenta for definida, você poderá passar a configuração da ferramenta como um parâmetro na API Converse.

**Como interpretar os elementos de resposta**

Você receberá uma resposta do modelo como JSON no “perfil” de assistente com o tipo de conteúdo sendo “toolUse”, ou como um tipo de contexto sendo “texto” se o modelo optar por não usar a ferramenta de recuperação. Se o modelo optar por usar a ferramenta de recuperação, a resposta identificará a ferramenta (tool\_name). As informações sobre como a ferramenta solicitada deve ser usada estão na mensagem que o modelo retorna no campo `output` ([ConverseOutput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseOutput.html)). Especificamente, o campo `toolUse` ([ToolUseBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolUseBlock.html)). Use o campo `toolUseId` para identificar a solicitação da ferramenta em chamadas posteriores.

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

No campo `toolUse` na resposta do modelo, você pode usar o campo `name` para identificar o nome da ferramenta. Depois chame a implementação da ferramenta e passe os parâmetros de entrada do campo `input`.

**Como inserir o conteúdo recuperado de volta na API Converse**

Para executar novamente os resultados recuperados no Amazon Nova, agora você pode criar uma mensagem do Bloco de Ferramentas que inclua um bloco de conteúdo `toolResult` ([ToolResultBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolResultBlock.html)) dentro do perfil do usuário. No bloco de conteúdo, inclua a resposta da ferramenta e o ID da solicitação da ferramenta que você recebeu na etapa anterior.

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

O [toolResult](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolResultBlock.html) pode ter “conteúdo” que pode ter “texto”, “JSON” e “imagem” (dependendo do modelo usado). Caso ocorra um erro na ferramenta, como uma solicitação de argumentos inexistentes ou errados, você poderá enviar as informações de erro ao modelo no campo `toolResult`. Para indicar um erro, especifique `error` no campo `status`.