View a markdown version of this page

Menangani Template dan Tokenizer Obrolan Kustom - Amazon Bedrock

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

Menangani Template dan Tokenizer Obrolan Kustom

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 pengimporan model dengan templat obrolan khusus yang menentukan bagaimana percakapan multi-turn terstruktur dan diberi token.

Mengimpor Model dengan Templat 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 Template Obrolan

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

  • chat_template.jinja- File Jinja2-based template 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 dalam tokenizer_config.json file Anda sebagai chat_template bidang. Sebagai contoh, lihat Hermes-2-Pro tokenizer_config. json di Hugging Face.

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

Prioritas Template Obrolan

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

  1. File template obrolan terpisah diut amakan - 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 template 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 Anda tokenizer_config.json jika ada.

Awas

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

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

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

Jika Anda memiliki template alat khusus atau konfigurasi template obrolan yang kompleks, sebaiknya gunakan Opsi 2 (menyematkan template 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 pust Transformers aka.

Contoh Format Template Obrolan

Berikut adalah contoh dari dua format template obrolan yang didukung:

Jinja Format (chat_template.jinja)

Contoh sederhana dari template Jinja2-based obrolan:

{% 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 template GPT-OSS obrolan di Hugging Face.

JSON Format (chat_template.json)

Contoh sederhana dari template JSON-based obrolan 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 template obrolan Anda mengikuti konvensi penamaan yang tepat (chat_template.jinjaatauchat_template.json) dan format yang ditunjukkan dalam contoh di atas. Template yang diformat secara tidak benar dapat menyebabkan kegagalan impor atau inferensi.

Memanggil Model dengan Template Obrolan Kustom

Setelah Anda mengimpor model dengan template obrolan khusus, Anda memiliki dua opsi untuk memanggil 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 ChatCompletion API. Saat Anda menggunakan format API ini dengan model yang memiliki template obrolan yang diunggah (chat_template.jinjaatauchat_template.json), Amazon Bedrock akan secara otomatis mengonversi pesan masukan Anda ke format yang benar menggunakan template obrolan.

Ini adalah pendekatan yang disarankan karena menyediakan integrasi paling mulus dan memungkinkan Amazon Bedrock 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 template obrolan dan proses tokenisasi, Anda dapat menerapkan template obrolan secara manual ke percakapan Anda dan kemudian menggunakan API Penyel esaian (tidak ChatCompletion) dengan teks yang telah diformat sebelumnya.

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

Langkah 1: Terapkan Template Obrolan Secara Lokal

Gunakan cuplikan kode berikut untuk memuat template obrolan kustom 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. Menerapkan template 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 API Penyelesaian:

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 API Penyelesaian 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, mengakibatkan pemformatan yang salah.

Praktik Terbaik

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

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

  • Sertakan semua token khusus — Pastikan template obrolan Anda menyertakan semua token khusus yang diperlukan (seperti penanda awal urutan, akhir urutan, dan penanda peran) yang diharapkan model Anda.

  • Uji dengan percakapan multi-putaran — Memvalidasi bahwa templat obrolan Anda menangani percakapan multi-putaran dengan pesan pengguna dan asisten yang bergantian dengan benar.

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

Awas

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