Aufbau eines benutzerdefinierten RAG-Systems mit Amazon Nova - Amazon Nova

Aufbau eines benutzerdefinierten RAG-Systems mit Amazon Nova

Anmerkung

Amazon Nova Premier ist noch nicht über die RetrieveAndGenerate-API verfügbar. Um die RetrieveAndGenerate-API mit Amazon Nova Premier zu verwenden, müssen Sie beim Aufruf der RetrieveAndGenerate-API einen benutzerdefinierten Prompt angeben. Dies wird erreicht, indem man den promptTemplate im generationConfiguration-Argument des RetrieveAndGenerate-API-Aufrufs wie unten gezeigt angibt:

'generationConfiguration': { 'promptTemplate': { 'textPromptTemplate': promptTemplate } }

Informationen zum Erstellen einer benutzerdefinierten Prompt-Vorlage finden Sie in der Anleitung zu Prompts für RAG.

Sie können Amazon-Nova-Modelle als LLM innerhalb eines benutzerdefinierten Text-RAG-Systems verwenden. Um Ihr eigenes RAG-System mit Amazon Nova zu erstellen, können Sie Ihr RAG-System entweder so konfigurieren, dass es eine Wissensdatenbank direkt abfragt, oder Sie können eine Wissensdatenbank mit einem Agenten verknüpfen (weitere Informationen finden Sie unter KI-Agenten mit Amazon Nova erstellen).

Bei der Verwendung von Amazon Nova in einem beliebigen RAG-System gibt es zwei allgemeine Ansätze.

  • Verwendung eines Retrievers als Tool (empfohlen): Sie können Ihren Retriever für die Verwendung als Tool im ToolParameter der Converse-API oder der Invokemodel-API definieren. Sie können beispielsweise die Bedrock Retrieve API oder einen anderen Retriever als „Tool“ definieren.

  • Verwenden von benutzerdefinierten Anweisungen für RAG-Systeme: Sie können Ihre eigenen benutzerdefinierten Anweisungen definieren, um ein benutzerdefiniertes RAG-System zu erstellen.

Einen Retriever als Tool verwenden

Definieren Sie ein Tool, mit dem das Modell einen Retriever aufrufen kann. Die Definition des Tools ist ein JSON-Schema, das Sie im Anforderungsparameter toolConfig (ToolConfiguration) an den Converse-Vorgang übergeben.

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

Nachdem das Tool definiert wurde, können Sie die Tool-Konfiguration als Parameter in der Converse-API übergeben.

Interpretieren der Antwortelemente

Sie erhalten eine Antwort vom Modell als eine JSON-Datei unter der „Rolle” des Assistenten mit dem Inhaltstyp „toolUse” oder als einen Kontext vom Typ „text”, falls das Modell das Retriever-Tool nicht verwendet. Wenn das Modell das Retriever-Tool verwendet, identifiziert die Antwort das Tool (tool_name). Informationen zur Verwendung des angeforderten Tools finden Sie in der Nachricht, die das Modell im Feld output (ConverseOutput) zurückgibt. Insbesondere das Feld toolUse (toolUseBlock). Sie verwenden das Feld toolUseId, um die Tool-Anforderung bei späteren Aufrufen zu identifizieren.

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

Verwenden Sie das Feld name aus dem Feld toolUse in der Modellantwort, um den Namen des Tools zu identifizieren zu können. Rufen Sie dann Ihre Implementierung des Tools auf und übergeben Sie die Eingabeparameter aus dem Feld input.

Abgerufenen Inhalt wieder in die Converse-API eingeben

Um die abgerufenen Ergebnisse erneut an Amazon Nova zu senden, können Sie nun eine Tool-Block-Nachricht erstellen, die einen toolResult-Inhaltsblock (ToolResultBlock) innerhalb der Benutzerrolle enthält. Fügen Sie in den Inhaltsblock die Antwort des Tools und die ID für die Tool-Anforderung ein, welche Sie im vorherigen Schritt erhalten haben.

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

Das ToolResult kann „Inhalt“ enthalten, der „Text“, „JSON“ und „Bild“ enthalten kann (abhängig vom verwendeten Modell). Sollte ein Fehler im Tool auftreten, beispielsweise eine Anforderung für nicht vorhandene oder falsche Argumente, können Sie die Fehlerinformationen an das Modell im toolResult-Feld senden. Um auf einen Fehler hinzuweisen, geben Sie error in das Feld status ein.