Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Manejo de plantillas de chat y tokenizadores personalizados
Las plantillas de chat y los tokenizadores personalizados son componentes esenciales para formatear correctamente las entradas de conversación y gestionar la generación de tokens en los modelos importados. Custom Model Import permite importar modelos con plantillas de chat personalizadas que definen cómo se estructuran y se tokenizan las conversaciones en varios turnos.
Importación de modelos con plantillas de chat personalizadas
Al importar un modelo con plantillas de chat personalizadas, asegúrese de seguir las mejores prácticas descritas en la documentación principal de importación de modelos personalizados, incluida la introducción de los pesos de los modelos en un formato de tensores seguros y el suministro de todos los archivos de configuración necesarios.
Requisitos de formato de la plantilla de chat
Si su modelo usa una plantilla de chat personalizada y quiere usarla con Amazon Bedrock, debe incluir el archivo de plantilla de chat en uno de los siguientes formatos:
-
chat_template.jinja— Un archivo de plantilla basado en JinjA2 que define el formato de los mensajes. -
chat_template.json— Un archivo JSON que contiene la plantilla de chat como un valor de cadena. -
tokenizer_config.jsoncon plantilla de chat integrada: también puedes incluir la plantilla de chat directamente en tutokenizer_config.jsonarchivo como unchat_templatecampo. Para ver un ejemplo, consulta el tokenizer_config.json de Hermes-2-Proen Hugging Face.
Custom Model Import procesará automáticamente estos archivos y los incluirá en los directorios correctos durante el proceso de importación.
Precedencia de la plantilla de chat
Si proporciona varias fuentes de plantillas de chat, Amazon Bedrock aplica las siguientes reglas de prioridad:
-
Los archivos de plantillas de chat independientes tienen prioridad: si incluye un archivo de plantilla de chat independiente (
chat_template.jinjaochat_template.json) Y unchat_templatecampo en el suyotokenizer_config.json, se utilizará el archivo independiente y se ignorará la plantilla incrustada.tokenizer_config.json -
Plantilla incrustada como alternativa: si no proporciona un archivo de plantilla de chat independiente, Amazon Bedrock utilizará el
chat_templatecampo suyotokenizer_config.jsonsi está presente.
aviso
Elija un enfoque: Para evitar confusiones y garantizar un comportamiento predecible, le recomendamos encarecidamente que utilice solo uno de estos enfoques:
-
Opción 1: proporciona archivos de plantilla de chat separados (
chat_template.jinjaochat_template.json) sin incluir unchat_templatecampo en el tuyotokenizer_config.json. -
Opción 2: incluye el
chat_templatecampo directamente en tu plantillatokenizer_config.jsony no proporciones archivos de plantilla separados.
Si tiene plantillas de herramientas personalizadas o configuraciones de plantillas de chat complejas, le recomendamos que utilice la opción 2 (incrustar la plantillatokenizer_config.json), ya que le permite definir varias plantillas con nombres (como «default» y «tool_use») en un único archivo de configuración.
nota
El archivo de plantilla de chat debe seguir el formato Hugging Face y las convenciones de nomenclatura. Asegúrese de que la plantilla sea compatible con la Transformers biblioteca.
Ejemplos de formatos de plantillas de chat
Estos son algunos ejemplos de los dos formatos de plantilla de chat compatibles:
importante
Asegúrese de que el archivo de la plantilla de chat siga exactamente la convención de nomenclatura (chat_template.jinjaochat_template.json) y el formato que se muestran en los ejemplos anteriores. Las plantillas con un formato incorrecto pueden provocar errores de importación o inferencia.
Invocar modelos con plantillas de chat personalizadas
Una vez que hayas importado un modelo con una plantilla de chat personalizada, tienes dos opciones para invocar el modelo con entradas de conversación con el formato adecuado:
Uso de la ChatCompletion API OpenAI con mensajes
Si proporciona entradas en el formato de esquema de mensajes, debe usar la API OpenAI ChatCompletion . Cuando utilice este formato de API con un modelo que tenga una plantilla de chat cargada (chat_template.jinjaochat_template.json), Amazon Bedrock convertirá automáticamente los mensajes de entrada al formato correcto mediante la plantilla de chat.
Este es el enfoque recomendado, ya que proporciona la integración más fluida y permite a Amazon Bedrock gestionar la aplicación de plantillas de chat automáticamente.
Ejemplo: uso de la ChatCompletion API OpenAI con una plantilla de chat personalizada
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))
En este ejemplo, Amazon Bedrock aplicará automáticamente la plantilla de chat personalizada a la matriz de mensajes y la convertirá en el formato adecuado para su modelo.
Enfoque de tokenización manual
Como alternativa, si prefieres tener el control total sobre la aplicación de la plantilla de chat y el proceso de tokenización, puedes aplicar manualmente la plantilla de chat a tu conversación y luego usar la API de finalización (no ChatCompletion) con el texto preformateado.
Este enfoque resulta útil cuando se necesita personalizar la lógica de la aplicación de la plantilla o cuando se trabaja con requisitos de tokenización especializados.
Paso 1: Aplicar la plantilla de chat localmente
Usa el siguiente fragmento de código para cargar tu plantilla de chat personalizada y aplicarla a una conversación local:
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)
Este código muestra cómo:
-
Cargue la configuración del tokenizador desde los archivos del modelo
-
Añada la plantilla de chat personalizada a la configuración del tokenizador
-
Aplica la plantilla de chat a un historial de conversaciones
-
Genere el texto formateado que se puede enviar al modelo
Paso 2: Invoca con la API de finalización
Después de aplicar la plantilla de chat de forma local, usa el texto formateado con la API de finalización:
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))
aviso
Utilice siempre el max_tokens parámetro: cuando utilice la API de finalización con importaciones de modelos personalizados, utilice siempre el max_tokens parámetro para garantizar la compatibilidad del esquema de finalización de OpenAI. Esto evita cualquier confusión en la traducción y garantiza un comportamiento coherente en las diferentes implementaciones del SDK. No utilices nombres de parámetros específicos del modelo max_gen_len ni variantes similares.
importante
Si utiliza el enfoque de tokenización manual, debe utilizar el formato API de finalización (con prompt campo), no el formato ChatCompletion API (con campo). messages La ChatCompletion API espera mensajes sin procesar e intentará volver a aplicar la plantilla de chat, lo que dará como resultado un formato incorrecto.
Prácticas recomendadas
-
Utilice la ChatCompletion API siempre que sea posible: la ChatCompletion API OpenAI con formato de mensajes proporciona la experiencia más fluida y permite a Amazon Bedrock gestionar automáticamente la aplicación de plantillas de chat.
-
Valide su plantilla de chat: antes de importar su modelo, pruebe la plantilla de chat localmente utilizando la Transformers biblioteca para asegurarse de que produce el formato de salida esperado.
-
Incluye todas las fichas especiales: asegúrate de que tu plantilla de chat incluya todas las fichas especiales necesarias (como beginning-of-sequence end-of-sequence, y marcadores de roles) que tu modelo espera.
-
Pruebe con conversaciones en varios turnos: compruebe que su plantilla de chat gestiona correctamente las conversaciones en varios turnos con mensajes alternos entre el usuario y el asistente.
-
Considere la compatibilidad visual: si su modelo admite entradas multimodales, asegúrese de que la plantilla de chat incluya una lógica para gestionar los marcadores de contenido de imagen y vídeo.
aviso
Las plantillas de chat con un formato incorrecto pueden provocar un rendimiento deficiente del modelo, resultados inesperados o errores en las inferencias. Pruebe siempre minuciosamente la plantilla de chat antes de ponerla en producción.