

# Creación de un sistema de RAG personalizado con Amazon Nova
<a name="rag-building"></a>

**nota**  
Amazon Nova Premier aún no está disponible a través de la API [RetrieveAndGenerate](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html). Si desea utilizar la API [RetrieveAndGenerate](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html) con Amazon Nova Premier, debe proporcionar una petición personalizada al llamar a la API [RetrieveAndGenerate](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html). Para ello, se debe proporcionar la `promptTemplate` en el argumento `generationConfiguration` en la llamada a la API [RetrieveAndGenerate](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html), como se muestra a continuación:  

```
'generationConfiguration': {
                        'promptTemplate': {
                            'textPromptTemplate': promptTemplate
                        }
                    }
```
Si desea crear una plantilla de peticiones personalizada, consulte la [guía de peticiones para RAG](https://docs.aws.amazon.com/nova/latest/userguide/prompting-tools-rag.html).

Puede utilizar los modelos de Amazon Nova como LLM dentro de un sistema de RAG de texto personalizado. Para crear su propio sistema de RAG con Amazon Nova, puede configurar su sistema de RAG para que consulte directamente una base de conocimientos o puede asociar una base de conocimientos a un agente (para obtener más información, consulte [Creación de agentes de IA con Amazon Nova](agents.md)).

Cuando se utiliza Amazon Nova en cualquier sistema de RAG, hay dos enfoques generales:
+ **Usar un recuperador como herramienta** (recomendado): puede definir su recuperador para usarlo como herramienta en el ToolParameter de la API de Converse o en la API de InvokeModel. Por ejemplo, puede definir la [API de recuperación](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Retrieve.html) de Bedrock o cualquier otro recuperador como “herramienta”.
+ **Usar instrucciones personalizadas para sistemas de RAG:** puede definir sus propias instrucciones personalizadas para crear un sistema de RAG personalizado.

**Usar un recuperador como herramienta**

Defina una herramienta que permita al modelo invocar un recuperador. La definición de la herramienta es un esquema JSON que se pasa en el parámetro de solicitud `toolConfig` ([ToolConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolConfiguration.html)) a la operación `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"
                        ]
                    }
                }
            }
        }
    ]
}
```

Una vez definida la herramienta, puede pasar su configuración como parámetro en la API de Converse.

**Cómo interpretar los elementos de respuesta**

Recibirá una respuesta del modelo en formato JSON en el “rol” del asistente; el tipo de contenido será “toolUse” o el tipo de contexto será “text” si el modelo decide no utilizar la herramienta recuperadora. Si el modelo elige usar la herramienta recuperadora, la respuesta identificará la herramienta (tool\_name). La información sobre cómo utilizar la herramienta consultada se encuentra en el mensaje que devuelve el modelo en el campo `output` ([ConverseOutput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseOutput.html)). Específicamente, el campo `toolUse` ([ToolUseBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolUseBlock.html)). El campo `toolUseId` se utiliza para identificar la solicitud de herramienta en llamadas 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"
}
```

En el campo `toolUse` de la respuesta del modelo, puede utilizar el campo `name` para identificar el nombre de la herramienta. A continuación, llame a la implementación de la herramienta y pase los parámetros de entrada desde el campo `input`.

**Cómo volver a introducir el contenido recuperado en la API de Converse**

Para volver a ejecutar los resultados recuperados en Amazon Nova, ahora puede crear un mensaje de bloque de herramientas que incluya un bloque de contenido `toolResult` ([ToolResultBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolResultBlock.html)) dentro del rol de usuario. En el bloque de contenido, incluya la respuesta de la herramienta y el ID de la solicitud de herramienta que ha recibido en el paso 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"
            }
        }
    ]
}
```

El [toolResult](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolResultBlock.html) puede tener “content”, que puede incluir “text”, “JSON” e “image” (según el modelo utilizado). Si se produce un error en la herramienta, como la solicitud de un argumento no existente o incorrecto, puede enviar la información del error al modelo en el campo `toolResult`. Para indicar un error, especifique `error` en el campo `status`.