As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Lidando com modelos de bate-papo e tokenizadores personalizados
Modelos de bate-papo e tokenizadores personalizados são componentes essenciais para formatar adequadamente as entradas de conversação e gerenciar a geração de tokens em seus modelos importados. O Custom Model Import suporta a importação de modelos com modelos de bate-papo personalizados que definem como as conversas em vários turnos são estruturadas e tokenizadas.
Importando modelos com modelos de bate-papo personalizados
Ao importar um modelo com modelos de bate-papo personalizados, siga as melhores práticas descritas na documentação principal de importação de modelos personalizados, incluindo a inclusão dos pesos do modelo no formato de tensores seguros e o fornecimento de todos os arquivos de configuração necessários.
Requisitos de formato do modelo de bate-papo
Se seu modelo usa um modelo de bate-papo personalizado e você deseja usar esse modelo com o Amazon Bedrock, você deve incluir o arquivo de modelo de bate-papo em um dos seguintes formatos:
-
chat_template.jinja— Um arquivo Jinja2-based de modelo que define como as mensagens são formatadas. -
chat_template.json— Um arquivo JSON contendo o modelo de bate-papo como um valor de string. -
tokenizer_config.jsoncom modelo de bate-papo incorporado — Como alternativa, você pode incluir o modelo de bate-papo diretamente em seutokenizer_config.jsonarquivo como umchat_templatecampo. Para ver um exemplo, veja o Hermes-2-Protokenizer_config.json em Hugging Face.
A importação de modelos personalizados processará automaticamente esses arquivos e os incluirá nos diretórios corretos durante o processo de importação.
Precedência do modelo de bate-papo
Se você fornecer várias fontes de modelos de bate-papo, o Amazon Bedrock aplica as seguintes regras de precedência:
-
Arquivos de modelo de bate-papo separados têm precedência — Se você incluir um arquivo de modelo de bate-papo separado (
chat_template.jinjaouchat_template.json) E umchat_templatecampo no seutokenizer_config.json, o arquivo separado será usado e o modelo incorporadotokenizer_config.jsonserá ignorado. -
Modelo incorporado como substituto — Se você não fornecer um arquivo de modelo de bate-papo separado, o Amazon Bedrock usará o
chat_templatecampo do seu,tokenizer_config.jsonse houver.
Atenção
Escolha uma abordagem: para evitar confusão e garantir um comportamento previsível, é altamente recomendável usar apenas UMA dessas abordagens:
-
Opção 1: forneça arquivos de modelo de bate-papo separados (
chat_template.jinjaouchat_template.json) sem incluir umchat_templatecampo em seutokenizer_config.json. -
Opção 2: Inclua o
chat_templatecampo diretamente no seutokenizer_config.jsone não forneça arquivos de modelo separados.
Se você tiver modelos de ferramentas personalizados ou configurações complexas de modelos de bate-papo, recomendamos usar a Opção 2 (incorporar o modelotokenizer_config.json), pois ela permite definir vários modelos nomeados (como “padrão” e “tool_use”) em um único arquivo de configuração.
nota
O arquivo de modelo de bate-papo deve seguir o formato Hugging Face e as convenções de nomenclatura. Certifique-se de que seu modelo seja compatível com a Transformers biblioteca.
Exemplos de formato de modelo de bate-papo
Aqui estão alguns exemplos dos dois formatos de modelo de bate-papo compatíveis:
Importante
Certifique-se de que seu arquivo de modelo de bate-papo siga a convenção de nomenclatura (chat_template.jinjaouchat_template.json) e o formato exatos mostrados nos exemplos acima. Modelos formatados incorretamente podem causar falhas na importação ou na inferência.
Invocando modelos com modelos de bate-papo personalizados
Depois de importar um modelo com um modelo de bate-papo personalizado, você tem duas opções para invocar o modelo com entradas de conversação formatadas corretamente:
Usando a ChatCompletion API OpenAI com mensagens
Se você estiver fornecendo entradas no formato de esquema de mensagens, você deve usar a API ChatCompletion OpenAI. Quando você usa esse formato de API com um modelo que tenha um modelo de bate-papo enviado (chat_template.jinjaouchat_template.json), o Amazon Bedrock converterá automaticamente suas mensagens de entrada no formato correto usando o modelo de bate-papo.
Essa é a abordagem recomendada, pois fornece a integração mais perfeita e permite que o Amazon Bedrock gerencie o aplicativo de modelo de bate-papo automaticamente.
Exemplo: Usando a ChatCompletion API OpenAI com modelo de bate-papo personalizado
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))
Neste exemplo, o Amazon Bedrock aplicará automaticamente seu modelo de bate-papo personalizado à matriz de mensagens, convertendo-o no formato apropriado para seu modelo.
Abordagem de tokenização manual
Como alternativa, se você preferir ter controle total sobre a aplicação do modelo de bate-papo e o processo de tokenização, você pode aplicar manualmente o modelo de bate-papo à sua conversa e usar a API de conclusão (não ChatCompletion) com o texto pré-formatado.
Essa abordagem é útil quando você precisa personalizar a lógica do aplicativo modelo ou ao trabalhar com requisitos especializados de tokenização.
Etapa 1: aplicar o modelo de bate-papo localmente
Use o trecho de código a seguir para carregar seu modelo de bate-papo personalizado e aplicá-lo a uma conversa 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)
Esse código demonstra como:
-
Carregue sua configuração de tokenizer a partir dos arquivos de modelo
-
Adicione o modelo de bate-papo personalizado à configuração do tokenizer
-
Aplique o modelo de bate-papo a um histórico de conversas
-
Gere o texto formatado que pode ser enviado ao modelo
Etapa 2: invocar com a API de conclusão
Depois de aplicar o modelo de bate-papo localmente, use o texto formatado com a API de conclusão:
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))
Atenção
Sempre use o max_tokens parâmetro: ao usar a API de conclusão com importações de modelos personalizados, sempre use o max_tokens parâmetro para garantir a compatibilidade do esquema de conclusão do OpenAI. Isso evita qualquer confusão de tradução e garante um comportamento consistente em diferentes implementações de SDK. Não use nomes de parâmetros específicos do modelo, como max_gen_len ou variantes semelhantes.
Importante
Ao usar a abordagem de tokenização manual, você deve usar o formato da API de conclusão (com prompt campo), não o formato da ChatCompletion API (com messages campo). A ChatCompletion API espera mensagens brutas e tentará aplicar o modelo de bate-papo novamente, resultando em uma formatação incorreta.
Práticas recomendadas
-
Use a ChatCompletion API quando possível — A ChatCompletion API OpenAI com formato de mensagens fornece a experiência mais perfeita e permite que o Amazon Bedrock gerencie o aplicativo de modelo de bate-papo automaticamente.
-
Valide seu modelo de bate-papo — Antes de importar seu modelo, teste seu modelo de bate-papo localmente usando a Transformers biblioteca para garantir que ele produza o formato de saída esperado.
-
Inclua todos os tokens especiais — Certifique-se de que seu modelo de bate-papo inclua todos os tokens especiais necessários (como início de sequência, fim de sequência e marcadores de função) que seu modelo espera.
-
Teste com conversas de vários turnos — Verifique se seu modelo de bate-papo lida corretamente com conversas de vários turnos com mensagens alternadas de usuários e assistentes.
-
Considere o suporte visual — Se seu modelo oferece suporte a entradas multimodais, certifique-se de que seu modelo de bate-papo inclua lógica para lidar com marcadores de conteúdo de imagem e vídeo.
Atenção
Modelos de bate-papo formatados incorretamente podem resultar em baixo desempenho do modelo, resultados inesperados ou falhas de inferência. Sempre teste seu modelo de bate-papo minuciosamente antes de implantá-lo na produção.