Kembali ke blog

AI untuk pemulaPanduan

Beri label setiap dokumen dalam prompt agar model tidak mencampuradukkannya

Cara memberi setiap teks yang ditempel nama dan peran, dengan prompt sebelum/sesudah dan permintaan chat completion yang berfungsi dalam Python dan curl.

Oleh CheapTokens TeamDiterbitkan 5 menit baca

Sampul: prompt dengan dua dokumen, masing-masing dibungkus dalam tag-nya sendiri dengan nama sumber
Di halaman ini
  1. Apa yang salah saat Anda hanya menempel
  2. Beri setiap teks nama dan tugas
  3. Kirim sebagai permintaan nyata
  4. Berapa biaya label
  5. Kebiasaan untuk tumpukan teks yang lebih besar

Anda menempelkan dua teks ke dalam satu pesan dan meminta model membandingkannya. Kecuali Anda menyebutkan mana yang mana, model harus menebak. Perbaikannya kecil: beri setiap teks nama dan tugas, dan bungkus masing-masing dalam tag-nya sendiri. Panduan prompting Anthropic (halaman yang terus diperbarui, diperiksa 31 Oktober 2026) merekomendasikan penandaan setiap jenis konten agar model tidak salah membaca mana yang instruksi, mana yang latar belakang, dan mana yang input. Berikut adalah prompt sebelum/sesudah dan permintaan chat completion yang berfungsi yang dapat Anda kirim ke CheapTokens API.

Apa yang salah saat Anda hanya menempel#

Ambil kasus paling sederhana. Pemasok mengirim deskripsi produk baru, dan Anda ingin tahu apa yang berubah dibandingkan dengan yang ada di halaman toko Anda. Anda menempelkan keduanya di bawah "Apa yang berubah?" dan tekan kirim. Bagi Anda urutannya jelas. Bagi model itu dua blok teks tanpa pemisah, dan pertanyaannya tidak pernah menyebut mana yang lama. Model mungkin menebak dengan benar. Mungkin juga menyebut teks baru sebagai yang lama dan memberi Anda daftar perubahan yang terbalik, dengan suara yang sangat percaya diri.

Jebakan yang sama tersembunyi dalam pekerjaan sehari-hari:

  • dua versi kontrak, dan Anda bertanya apa yang diubah pihak lain;
  • tiga catatan rapat, dan Anda bertanya keputusan mana yang saling bertentangan;
  • contoh gaya plus draf: mana yang harus ditiru, mana yang harus ditulis ulang?
  • log error ditempel bersama kode, dan pertanyaannya adalah "perbaiki ini".

Dalam setiap kasus, model membutuhkan dua hal per teks: nama (apa itu dan dari mana asalnya) dan peran (apa yang ingin Anda lakukan dengannya).

Beri setiap teks nama dan tugas#

Tiga langkah kecil:

  1. Letakkan setiap teks dalam tag-nya sendiri. Panduan Anthropic menyarankan pembungkus <documents> dengan satu <document index="1"> per teks, dan di dalamnya ada <source> untuk nama dan <document_content> untuk teks itu sendiri.
  2. Sebutkan apa masing-masing dalam instruksi, di luar tag: "Dokumen 1 adalah teks LAMA dari toko kami. Dokumen 2 adalah teks BARU dari pemasok."
  3. Ajukan pertanyaan dengan kata-kata yang sama. "Sebutkan setiap fakta yang berubah, sebagai lama -> baru" sekarang memiliki lama dan baru untuk dirujuk.

Berikut contoh botol sebelum dan sesudah:

Bandingkan

Permintaan yang sama, sebelum dan sesudah

Sebelum

text
What changed?

Steel water bottle, 500 ml. Keeps drinks cold for 12 hours. Dishwasher safe.

Steel water bottle, 750 ml. Keeps drinks cold for 24 hours. Hand wash only.

Sesudah

text
Document 1 is the OLD text from our shop. Document 2 is the NEW text from the supplier. List every fact that changed, one per line, as old -> new.

<documents>
<document index="1">
<source>old description (current shop page)</source>
<document_content>
Steel water bottle, 500 ml. Keeps drinks cold for 12 hours. Dishwasher safe.
</document_content>
</document>
<document index="2">
<source>new description (from the supplier)</source>
<document_content>
Steel water bottle, 750 ml. Keeps drinks cold for 24 hours. Hand wash only.
</document_content>
</document>
</documents>
Prompt di mana instruksi menyebutkan setiap dokumen dan setiap teks berada dalam tag-nya sendiri
Instruksi menyebutkan apa setiap dokumen; tag menjaga teks tetap terpisah

Label memakan beberapa token dan menghilangkan tebakan. Anthropic menulis saran ini untuk model Claude mereka, tetapi label adalah teks biasa, jadi tidak ada yang menghalangi Anda mengirim tata letak yang sama ke model chat lain.

Kirim sebagai permintaan nyata#

Berikut prompt "sesudah" sebagai panggilan API. Alamatnya adalah https://api.cheaptokens.dev/v1, API-nya kompatibel dengan OpenAI, dan modelnya adalah deepseek-ai/DeepSeek-V4-Flash-0731. Ambil id model dari dokumentasi CheapTokens: nama berbeda antar penyedia. DeepSeek-V4-Flash memiliki jendela konteks 380K dan hingga 32.768 token output per jawaban, yang menyisakan ruang untuk banyak teks panjang. Kunci berasal dari variabel lingkungan, tidak pernah dari kode.

Permintaan yang sama di dua alat

Python

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

old = "Steel water bottle, 500 ml. Keeps drinks cold for 12 hours. Dishwasher safe."
new = "Steel water bottle, 750 ml. Keeps drinks cold for 24 hours. Hand wash only."

prompt = f"""Document 1 is the OLD text from our shop. Document 2 is the NEW text from the supplier. List every fact that changed, one per line, as old -> new.

<documents>
<document index="1">
<source>old description (current shop page)</source>
<document_content>
{old}
</document_content>
</document>
<document index="2">
<source>new description (from the supplier)</source>
<document_content>
{new}
</document_content>
</document>
</documents>"""

response = client.chat.completions.create(
    model="deepseek-ai/DeepSeek-V4-Flash-0731",
    messages=[{"role": "user", "content": prompt}],
    max_tokens=300,
)
print(response.choices[0].message.content)
print(response.usage)

curl

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-ai/DeepSeek-V4-Flash-0731",
    "max_tokens": 300,
    "messages": [{
      "role": "user",
      "content": "Document 1 is the OLD text from our shop. Document 2 is the NEW text from the supplier. List every fact that changed, one per line, as old -> new.\n\n<documents>\n<document index=\"1\">\n<source>old description (current shop page)</source>\n<document_content>\nSteel water bottle, 500 ml. Keeps drinks cold for 12 hours. Dishwasher safe.\n</document_content>\n</document>\n<document index=\"2\">\n<source>new description (from the supplier)</source>\n<document_content>\nSteel water bottle, 750 ml. Keeps drinks cold for 24 hours. Hand wash only.\n</document_content>\n</document>\n</documents>"
    }]
  }'

Balasannya adalah teks biasa di choices[0].message.content, dan usage di sebelahnya menghitung token. Jawaban yang baik mencantumkan tiga perubahan: 500 ml -> 750 ml, 12 jam -> 24 jam, aman untuk mesin pencuci piring -> hanya cuci tangan. Jika panahnya terbalik, model kehilangan jejak label. Periksa bahwa instruksi menyebut dokumen dengan nama yang sama seperti yang digunakan tag.

Berapa biaya label#

Tag adalah teks, dan teks ditagih. Katakanlah seorang team lead memasukkan tiga catatan rapat masing-masing sekitar 2.000 token dan bertanya keputusan mana yang bertentangan. Tiga catatan: 3 × 2.000 = 6.000 token. Tambahkan sekitar 150 token untuk instruksi dan tag (asumsi) dan permintaan membawa 6.150 token masuk, dengan jawaban 300 token keluar. Pada DeepSeek-V4-Flash, satu permintaan itu berbiaya $0.00012, dan tag itu sendiri adalah kesalahan pembulatan dibandingkan catatan. Berikut permintaan yang sama dikirim 1.000 kali, dengan OpenRouter di sampingnya:

Model Per permintaan 1.000 permintaan OpenRouter, 1.000 permintaan
GLM-5.3-Flash $0.00014 $0.135 $0.231
DeepSeek-V4-Flash $0.00012 $0.122 $0.473
MiniMax-M2.7 $0.00035 $0.353 $4.23

6.150 token input dan 300 token output per permintaan. Harga per 1 juta token adalah harga saat ini dan berubah seiring tarif kami; kolom OpenRouter menunjukkan harga referensi untuk beban kerja yang sama.

Semua 6.150 token masuk ke jendela 380K dengan sisa ruang (apa itu jendela konteks). Dihitung secara total, input dan output bersama, permintaan menjadi lebih murah daripada OpenRouter. Input dan output ditagih dengan tarif berbeda, dan token input vs output menjelaskan mengapa. Angka terkini untuk setiap model ada di halaman harga.

Kebiasaan untuk tumpukan teks yang lebih besar#

Setelah ada lebih dari dua teks, angka saja tidak cukup: masing-masing membutuhkan namanya sendiri. Gambar di bawah menunjukkan tata letak dari contoh: instruksi dengan pertanyaan terlebih dahulu, lalu setiap dokumen dalam tag-nya sendiri.

Alur: instruksi dan pertanyaan, dokumen 1 (lama), dokumen 2 (baru)
Instruksi dan pertanyaan, lalu setiap dokumen berlabel: tata letak prompt contoh
  • Beri nama berdasarkan konten, bukan hanya angka. <source>contract v2, sent by the client</source> lebih baik daripada document 2 ketika jawaban mengutipnya kembali kepada Anda.
  • Letakkan instruksi Anda di luar tag, agar baris di dalam teks yang ditempel tidak dianggap perintah.
  • Satu teks, satu tag. File panjang tetap satu tag; dua file berarti dua tag.
  • Gunakan kembali nama-nama dalam pertanyaan: "keputusan mana di monday-notes yang bertentangan dengan wednesday-notes?"
  • Beri peran pada contoh juga. "Dokumen 1 adalah contoh gaya: tiru nadanya, bukan faktanya. Dokumen 2 adalah draf yang harus ditulis ulang."
Coba sendiriCoba: Anda memiliki log error dan kode yang menghasilkannya dalam satu prompt. Apa yang Anda tambahkan ke masing-masing?Tampilkan jawaban

Nama dan tugas. Untuk log: <source>error log from the last run</source> plus "ini adalah gejalanya, jangan edit". Untuk kode: <source>app.py</source> plus "ini yang harus diperbaiki". Lalu minta perbaikan dengan nama-nama itu.

Untuk dasar-dasar sisa prompt (tujuan, konteks, format), lihat cara menulis prompt yang baik.