

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
<a name="custom-chat-templates-tokenizers"></a>

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
<a name="import-chat-template"></a>

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
<a name="chat-template-format-requirements"></a>

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.json`dengan 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. ](https://huggingface.co/NousResearch/Hermes-2-Pro-Llama-3-8B/blob/main/tokenizer_config.json#L2059) 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
<a name="chat-template-precedence"></a>

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.jinja`atau`chat_template.json`) DAN `chat_template` bidang di Anda`tokenizer_config.json`, file terpisah akan digunakan dan template yang disematkan `tokenizer_config.json` akan diabaikan.

1. **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.jinja`atau`chat_template.json`) tanpa menyertakan `chat_template` bidang di Anda`tokenizer_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 di`tokenizer_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
<a name="chat-template-examples"></a>

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 ](https://huggingface.co/openai/gpt-oss-20b/blob/main/chat_template.jinja) 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 ](https://huggingface.co/Qwen/Qwen2-VL-72B-Instruct/blob/main/chat_template.json) di Hugging Face.

------

**penting**  
Pastikan file template obrolan Anda mengikuti konvensi penamaan yang tepat (`chat_template.jinja`atau`chat_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
<a name="invoke-custom-chat-templates"></a>

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
<a name="chatcompletion-api-approach"></a>

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.jinja`atau`chat_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
<a name="manual-tokenization-approach"></a>

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
<a name="apply-chat-template-locally"></a>

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

1. Tambahkan template obrolan khusus ke konfigurasi tokenizer

1. Menerapkan template obrolan ke riwayat percakapan

1. Hasilkan teks yang diformat yang dapat dikirim ke model

#### Langkah 2: Panggil dengan API Penyelesaian
<a name="invoke-with-completion-api"></a>

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
<a name="chat-template-best-practices"></a>
+ **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.