Menangani Template Obrolan Kustom dan Tokenizers - Amazon Bedrock

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menangani Template Obrolan Kustom dan Tokenizers

Template obrolan khusus dan tokenizer adalah komponen penting untuk memformat input percakapan dengan benar dan mengelola pembuatan token dalam model impor Anda. Impor Model Kustom mendukung mengimpor model dengan templat obrolan khusus yang menentukan bagaimana percakapan multi-putaran terstruktur dan diberi token.

Mengimpor Model dengan Template Obrolan Kustom

Saat mengimpor model dengan templat obrolan khusus, pastikan Anda mengikuti praktik terbaik yang diuraikan dalam dokumentasi Impor Model Kustom utama, termasuk memasukkan bobot model dalam format tensor aman dan menyediakan semua file konfigurasi yang diperlukan.

Persyaratan Format Templat Obrolan

Jika model Anda menggunakan templat obrolan khusus dan Anda ingin menggunakan templat itu dengan Amazon Bedrock, Anda harus menyertakan file templat obrolan dalam salah satu format berikut:

  • chat_template.jinja— File template berbasis Jinja2 yang mendefinisikan bagaimana pesan diformat.

  • chat_template.json- File JSON yang berisi template obrolan sebagai nilai string.

  • tokenizer_config.jsondengan template obrolan tertanam - Atau, Anda dapat menyertakan template obrolan langsung di dalam tokenizer_config.json file Anda sebagai chat_template bidang. Sebagai contoh, lihat Hermes-2-Pro tokenizer_config.json di Hugging Face.

Impor Model Kustom akan secara otomatis memproses file-file ini dan memasukkannya ke dalam direktori yang benar selama proses impor.

Prioritas Templat Obrolan

Jika Anda menyediakan beberapa sumber templat obrolan, Amazon Bedrock menerapkan aturan prioritas berikut:

  1. File template obrolan terpisah diutamakan - Jika Anda menyertakan file template obrolan terpisah (chat_template.jinjaatauchat_template.json) DAN chat_template bidang di Andatokenizer_config.json, file terpisah akan digunakan dan templat yang disematkan tokenizer_config.json akan diabaikan.

  2. Template tertanam sebagai fallback - Jika Anda tidak menyediakan file template obrolan terpisah, Amazon Bedrock akan menggunakan chat_template bidang dari jika ada. tokenizer_config.json

Awas

Pilih satu pendekatan: Untuk menghindari kebingungan dan memastikan perilaku yang dapat diprediksi, kami sangat menyarankan hanya menggunakan SATU dari pendekatan ini:

  • Opsi 1: Menyediakan file template obrolan terpisah (chat_template.jinjaatauchat_template.json) tanpa menyertakan chat_template bidang di file Andatokenizer_config.json.

  • Opsi 2: Sertakan chat_template bidang langsung di Anda tokenizer_config.json dan jangan berikan file template terpisah.

Jika Anda memiliki templat alat khusus atau konfigurasi templat obrolan yang kompleks, sebaiknya gunakan Opsi 2 (menyematkan templat ditokenizer_config.json) karena memungkinkan Anda untuk menentukan beberapa templat bernama (seperti “default” dan “tool_use”) dalam satu file konfigurasi.

catatan

File template obrolan harus mengikuti format Hugging Face dan konvensi penamaan. Pastikan template Anda kompatibel dengan Transformers perpustakaan.

Contoh Format Templat Obrolan

Berikut adalah contoh dari dua format template obrolan yang didukung:

Jinja Format (chat_template.jinja)

Contoh sederhana dari template obrolan berbasis 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 %}

Untuk contoh lengkapnya, lihat templat GPT-OSS obrolan di Hugging Face.

JSON Format (chat_template.json)

Contoh sederhana dari template obrolan berbasis JSON dengan dukungan visi:

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

Untuk contoh lengkap dengan dukungan multimodal, lihat template Qwen2-VL obrolan di Hugging Face.

penting

Pastikan file templat obrolan Anda mengikuti konvensi penamaan yang tepat (chat_template.jinjaatauchat_template.json) dan format yang ditunjukkan pada contoh di atas. Templat yang diformat dengan tidak benar dapat menyebabkan kegagalan impor atau inferensi.

Memanggil Model dengan Template Obrolan Kustom

Setelah Anda mengimpor model dengan templat obrolan khusus, Anda memiliki dua opsi untuk menjalankan model dengan input percakapan yang diformat dengan benar:

Menggunakan OpenAI ChatCompletion API dengan Pesan

Jika Anda memberikan input dalam format skema pesan, Anda harus menggunakan OpenAI API. ChatCompletion Saat Anda menggunakan format API ini dengan model yang memiliki templat obrolan yang diunggah (chat_template.jinjaatauchat_template.json), Amazon Bedrock akan secara otomatis mengonversi pesan masukan Anda ke format yang benar menggunakan templat obrolan.

Ini adalah pendekatan yang disarankan karena menyediakan integrasi yang paling mulus dan memungkinkan Amazon Bedrock untuk menangani aplikasi template obrolan secara otomatis.

Contoh: Menggunakan OpenAI ChatCompletion API dengan template obrolan khusus

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))

Dalam contoh ini, Amazon Bedrock akan secara otomatis menerapkan template obrolan kustom Anda ke array pesan, mengubahnya menjadi format yang sesuai untuk model Anda.

Pendekatan Tokenisasi Manual

Atau, jika Anda lebih suka memiliki kontrol penuh atas aplikasi templat obrolan dan proses tokenisasi, Anda dapat menerapkan templat obrolan secara manual ke percakapan Anda dan kemudian menggunakan API Penyelesaian (bukan ChatCompletion) dengan teks yang telah diformat sebelumnya.

Pendekatan ini berguna ketika Anda perlu menyesuaikan logika aplikasi template atau ketika bekerja dengan persyaratan tokenisasi khusus.

Langkah 1: Terapkan Template Obrolan Secara Lokal

Gunakan cuplikan kode berikut untuk memuat templat obrolan khusus Anda dan menerapkannya ke percakapan secara lokal:

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)

Kode ini menunjukkan cara:

  1. Muat konfigurasi tokenizer Anda dari file model

  2. Tambahkan template obrolan khusus ke konfigurasi tokenizer

  3. Terapkan templat obrolan ke riwayat percakapan

  4. Hasilkan teks yang diformat yang dapat dikirim ke model

Langkah 2: Panggil dengan API Penyelesaian

Setelah menerapkan template obrolan secara lokal, gunakan teks yang diformat dengan Completion API:

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))
Awas

Selalu gunakan max_tokens parameter: Saat menggunakan Completion API dengan impor model khusus, selalu gunakan max_tokens parameter untuk memastikan kompatibilitas skema penyelesaian OpenAI. Ini menghindari kebingungan terjemahan dan memastikan perilaku yang konsisten di berbagai implementasi SDK. Jangan gunakan nama parameter khusus model seperti max_gen_len atau varian serupa.

penting

Saat menggunakan pendekatan tokenisasi manual, Anda harus menggunakan format API Penyelesaian (dengan prompt bidang), bukan format ChatCompletion API (dengan messages bidang). ChatCompletion API mengharapkan pesan mentah dan akan mencoba menerapkan template obrolan lagi, yang mengakibatkan pemformatan yang salah.

Praktik Terbaik

  • Gunakan ChatCompletion API bila memungkinkan - ChatCompletion API OpenAI dengan format pesan memberikan pengalaman paling mulus dan memungkinkan Amazon Bedrock menangani aplikasi template obrolan secara otomatis.

  • Validasi templat obrolan Anda — Sebelum mengimpor model Anda, uji templat obrolan Anda secara lokal menggunakan Transformers pustaka untuk memastikannya menghasilkan format keluaran yang diharapkan.

  • Sertakan semua token khusus — Pastikan templat obrolan Anda mencakup semua token khusus yang diperlukan (seperti beginning-of-sequence end-of-sequence,, dan penanda peran) yang diharapkan model Anda.

  • Uji dengan percakapan multi-putaran — Validasi bahwa template obrolan Anda menangani percakapan multi-putaran dengan benar dengan pesan pengguna dan asisten bergantian.

  • Pertimbangkan dukungan visi - Jika model Anda mendukung input multimodal, pastikan template obrolan Anda menyertakan logika untuk menangani penanda konten gambar dan video.

Awas

Templat obrolan yang salah diformat dapat mengakibatkan kinerja model yang buruk, output yang tidak terduga, atau kegagalan inferensi. Selalu uji template obrolan Anda secara menyeluruh sebelum menerapkan ke produksi.