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à.
Gestione di modelli di chat e tokenizer personalizzati
I modelli di chat e i tokenizer personalizzati sono componenti essenziali per formattare correttamente gli input conversazionali e gestire la generazione di token nei modelli importati. Custom Model Import supporta l'importazione di modelli con modelli di chat personalizzati che definiscono in che modo le conversazioni a più turni sono strutturate e tokenizzate.
Importazione di modelli con modelli di chat personalizzati
Quando importi un modello con modelli di chat personalizzati, assicurati di seguire le migliori pratiche descritte nella documentazione principale di Custom Model Import, incluso l'inserimento dei pesi dei modelli in formato tensori sicuri e la fornitura di tutti i file di configurazione necessari.
Requisiti di formato dei modelli di chat
Se il tuo modello utilizza un modello di chat personalizzato e desideri utilizzarlo con Amazon Bedrock, devi includere il file del modello di chat in uno dei seguenti formati:
-
chat_template.jinja— Un file Jinja2-based modello che definisce la modalità di formattazione dei messaggi. -
chat_template.json— Un file JSON contenente il modello di chat come valore di stringa. -
tokenizer_config.jsoncon modello di chat incorporato: in alternativa, puoi includere il modello di chat direttamente nel tuotokenizer_config.jsonfile comechat_templatecampo. Per un esempio, vedi Hermes-2-Protokenizer_config.json su Hugging Face.
Custom Model Import elaborerà automaticamente questi file e li includerà nelle directory corrette durante il processo di importazione.
Precedenza dei modelli di chat
Se fornisci più fonti di modelli di chat, Amazon Bedrock applica le seguenti regole di precedenza:
-
I file modello di chat separati hanno la precedenza: se includi sia un file di modello di chat separato (
chat_template.jinjaochat_template.json) CHE unchat_templatecampo nel tuotokenizer_config.json, verrà utilizzato il file separato e il modello incorporatotokenizer_config.jsonverrà ignorato. -
Modello incorporato come riserva: se non fornisci un file modello di chat separato, Amazon Bedrock utilizzerà il tuo
chat_templatecampo, se presente.tokenizer_config.json
avvertimento
Scegli un approccio: per evitare confusione e garantire un comportamento prevedibile, consigliamo vivamente di utilizzare SOLO UNO di questi approcci:
-
Opzione 1: fornisci file modello di chat separati (
chat_template.jinjaochat_template.json) senza includere unchat_templatecampo nel tuotokenizer_config.json. -
Opzione 2: includi il
chat_templatecampo direttamente nel tuo file modellotokenizer_config.jsone non fornire file modello separati.
Se disponi di modelli di strumenti personalizzati o configurazioni complesse di modelli di chat, ti consigliamo di utilizzare l'opzione 2 (incorporando il modellotokenizer_config.json) in quanto consente di definire più modelli denominati (come «default» e «tool_use») all'interno di un singolo file di configurazione.
Nota
Il file del modello di chat deve seguire il formato Hugging Face e le convenzioni di denominazione. Assicurati che il modello sia compatibile con la libreria. Transformers
Esempi di formati per modelli di chat
Ecco alcuni esempi dei due formati di modelli di chat supportati:
Importante
Assicurati che il file del modello di chat segua l'esatta convenzione di denominazione (chat_template.jinjaochat_template.json) e il formato mostrati negli esempi precedenti. I modelli formattati in modo errato possono causare errori di importazione o inferenza.
Richiamo di modelli con modelli di chat personalizzati
Dopo aver importato un modello con un modello di chat personalizzato, hai due opzioni per richiamare il modello con input conversazionali formattati correttamente:
Utilizzo dell'API OpenAI con messaggi ChatCompletion
Se fornisci input nel formato dello schema dei messaggi, dovresti usare l'API ChatCompletion OpenAI. Quando utilizzi questo formato API con un modello che ha un modello di chat caricato (chat_template.jinjaochat_template.json), Amazon Bedrock convertirà automaticamente i messaggi di input nel formato corretto utilizzando il modello di chat.
Questo è l'approccio consigliato in quanto fornisce l'integrazione più fluida e consente ad Amazon Bedrock di gestire automaticamente l'applicazione del modello di chat.
Esempio: utilizzo dell' ChatCompletion API OpenAI con un modello di chat personalizzato
import json import boto3 # Initialize Bedrock Runtime client client = boto3.client('bedrock-runtime', region_name='us-east-1') # Define the model ARN for your imported model with custom chat template model_id = 'arn:aws:bedrock:us-east-1:123456789012:imported-model/your-model-id' # Prepare the request payload using messages format payload = { "messages": [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": "Hello, how are you?" } ], "max_tokens": 150, "temperature": 0.7 } # Invoke the model response = client.invoke_model( modelId=model_id, body=json.dumps(payload), accept='application/json', contentType='application/json' ) # Parse and display the response response_body = json.loads(response['body'].read()) print(json.dumps(response_body, indent=2))
In questo esempio, Amazon Bedrock applicherà automaticamente il modello di chat personalizzato all'array di messaggi, convertendolo nel formato appropriato per il modello.
Approccio alla tokenizzazione manuale
In alternativa, se preferisci avere il pieno controllo sull'applicazione del modello di chat e sul processo di tokenizzazione, puoi applicare manualmente il modello di chat alla conversazione e quindi utilizzare l'API di completamento (non ChatCompletion) con il testo preformattato.
Questo approccio è utile quando è necessario personalizzare la logica dell'applicazione del modello o quando si lavora con requisiti di tokenizzazione specializzati.
Passaggio 1: applica il modello di chat localmente
Usa il seguente frammento di codice per caricare il tuo modello di chat personalizzato e applicarlo a una conversazione localmente:
from transformers import AutoTokenizer # Configuration paths - update these with your actual paths TOKENIZER_PATH = "" # Path to tokenizer directory # Load tokenizer with updated chat template tokenizer = AutoTokenizer.from_pretrained(TOKENIZER_PATH) # Test chat template with sample conversation chat_history = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Hello, how are you?"}, ] # Apply chat template and display formatted output to make sure chat template works as expected formatted_chat = tokenizer.apply_chat_template(chat_history, tokenize=False) print(formatted_chat)
Questo codice dimostra come:
-
Carica la configurazione del tokenizer dai file del modello
-
Aggiungi il modello di chat personalizzato alla configurazione del tokenizer
-
Applica il modello di chat a una cronologia delle conversazioni
-
Genera il testo formattato che può essere inviato al modello
Fase 2: Invoke with Completion API
Dopo aver applicato il modello di chat localmente, utilizza il testo formattato con l'API Completion:
import json import boto3 # Initialize Bedrock Runtime client client = boto3.client('bedrock-runtime', region_name='us-east-1') # Define the model ARN for your imported model model_id = 'arn:aws:bedrock:us-east-1:123456789012:imported-model/your-model-id' # Use the formatted_chat output from Step 1 as the prompt payload = { "prompt": formatted_chat, "max_tokens": 150, "temperature": 0.7 } # Invoke the model using Completion format (not ChatCompletion) response = client.invoke_model( modelId=model_id, body=json.dumps(payload), accept='application/json', contentType='application/json' ) # Parse and display the response response_body = json.loads(response['body'].read()) print(json.dumps(response_body, indent=2))
avvertimento
Usa sempre il max_tokens parametro: quando usi l'API Completion con importazioni di modelli personalizzati, usa sempre il max_tokens parametro per garantire la compatibilità dello schema di completamento OpenAI. Ciò evita qualsiasi confusione nelle traduzioni e garantisce un comportamento coerente tra le diverse implementazioni SDK. Non utilizzare nomi di parametri specifici del modello simili o varianti simili. max_gen_len
Importante
Quando si utilizza l'approccio di tokenizzazione manuale, è necessario utilizzare il formato API Completion (con prompt campo), non il formato ChatCompletion API (con campo). messages L' ChatCompletion API si aspetta messaggi non elaborati e tenterà di applicare nuovamente il modello di chat, con conseguente formattazione errata.
Best practice
-
Usa l' ChatCompletion API quando possibile: l' ChatCompletion API OpenAI con formato di messaggi offre l'esperienza più fluida e consente ad Amazon Bedrock di gestire automaticamente l'applicazione dei modelli di chat.
-
Convalida il modello di chat: prima di importare il modello, testalo localmente utilizzando la Transformers libreria per assicurarti che produca il formato di output previsto.
-
Includi tutti i token speciali: assicurati che il modello di chat includa tutti i token speciali necessari (come gli indicatori di inizio sequenza, fine sequenza e ruolo) previsti dal modello.
-
Prova con conversazioni a più turni: verifica che il tuo modello di chat gestisca correttamente le conversazioni a più turni con messaggi alternati tra utente e assistente.
-
Prendi in considerazione il supporto visivo: se il tuo modello supporta input multimodali, assicurati che il modello di chat includa la logica per la gestione degli indicatori di immagini e contenuti video.
avvertimento
I modelli di chat formattati in modo errato possono causare prestazioni scadenti del modello, output imprevisti o errori di inferenza. Testa sempre accuratamente il tuo modello di chat prima di distribuirlo in produzione.