Gestione di modelli di chat e tokenizzatori personalizzati - Amazon Bedrock

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 tokenizzatori 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 la struttura e la tokenizzazione delle conversazioni a più turni.

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, inclusa l'inserimento dei pesi dei modelli in formato safe tensors 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 modello basato su Jinja2 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 tokenizer_config.json file come chat_template campo. Per un esempio, vedi Hermes-2-Pro tokenizer_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:

  1. I file modello di chat separati hanno la precedenza: se includi sia un file modello di chat separato (chat_template.jinjaochat_template.json) SIA un chat_template campo nel tuo modello di chattokenizer_config.json, il file separato verrà utilizzato e il modello incorporato tokenizer_config.json verrà ignorato.

  2. Modello incorporato come riserva: se non fornisci un file modello di chat separato, Amazon Bedrock utilizzerà il chat_template campo del tuo, tokenizer_config.json se presente.

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 un chat_template campo nel tuotokenizer_config.json.

  • Opzione 2: includi il chat_template campo direttamente nel tuo tokenizer_config.json e 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 (incorporamento del modellotokenizer_config.json) in quanto consente di definire più modelli denominati (come «default» e «tool_use») all'interno di un unico file di configurazione.

Nota

Il file modello di chat deve seguire il formato Hugging Face e le convenzioni di denominazione. Assicurati che il tuo modello sia compatibile con la libreria. Transformers

Esempi di formati di modelli di chat

Ecco alcuni esempi dei due formati di modelli di chat supportati:

Jinja Format (chat_template.jinja)

Un esempio semplificato di modello di chat basato su Jinja2:

{% for message in messages %} {% if loop.first and message['role'] != 'system' %} <|im_start|>system You are a helpful assistant.<|im_end|> {% endif %} <|im_start|>{{ message['role'] }} {{ message['content'] }}<|im_end|> {% endfor %} {% if add_generation_prompt %} <|im_start|>assistant {% endif %}

Per un esempio completo, guarda il modello di GPT-OSS chat su Hugging Face.

JSON Format (chat_template.json)

Un esempio semplificato di modello di chat basato su JSON con supporto visivo:

{ "chat_template": "{% for message in messages %}{% if loop.first and message['role'] != 'system' %}<|im_start|>system\nYou are a helpful assistant.<|im_end|>\n{% endif %}<|im_start|>{{ message['role'] }}\n{% if message['content'] is string %}{{ message['content'] }}<|im_end|>\n{% else %}{% for content in message['content'] %}{% if content['type'] == 'image' %}<|vision_start|><|image_pad|><|vision_end|>{% elif 'text' in content %}{{ content['text'] }}{% endif %}{% endfor %}<|im_end|>\n{% endif %}{% endfor %}{% if add_generation_prompt %}<|im_start|>assistant\n{% endif %}" }

Per un esempio completo con supporto multimodale, consulta il modello di Qwen2-VL chat su Hugging Face.

Importante

Assicurati che il file del modello di chat segua la convenzione di denominazione (chat_template.jinjaochat_template.json) e il formato esatti mostrati negli esempi precedenti. I modelli formattati in modo errato possono causare errori di importazione o inferenza.

Richiamare 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 di conversazione formattati correttamente:

Utilizzo dell' ChatCompletion API OpenAI con i messaggi

Se stai fornendo 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ù semplice e consente ad Amazon Bedrock di gestire automaticamente l'applicazione modello di chat.

Esempio: utilizzo dell' ChatCompletion API OpenAI con 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 dei messaggi, convertendolo nel formato appropriato per il modello.

Approccio di 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 Completion (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:

  1. Carica la configurazione del tokenizer dai file del modello

  2. Aggiungi il modello di chat personalizzato alla configurazione del tokenizer

  3. Applica il modello di chat alla cronologia delle conversazioni

  4. Genera il testo formattato che può essere inviato al modello

Fase 2: Richiama con l'API Completion

Dopo aver applicato il modello di chat localmente, usa 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 nella traduzione e garantisce un comportamento coerente tra le diverse implementazioni SDK. Non utilizzate nomi di parametri specifici del modello come 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 prevede 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 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 (ad esempio beginning-of-sequence end-of-sequence, e i marker di ruolo) previsti dal modello.

  • Prova con conversazioni a turni multipli: 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 dei marcatori di contenuti di immagini e video.

avvertimento

I modelli di chat formattati in modo errato possono causare scarse prestazioni del modello, output imprevisti o errori di inferenza. Testa sempre a fondo il tuo modello di chat prima di implementarlo in produzione.