0Pricing
AI Prompt Engineering · Pelajaran

Panjang dan Relevansi Konteks

Seimbangkan konteks yang lengkap dengan batas token dan relevansi.

Panjang dan Relevansi Konteks adalah pelajaran AI Prompt Engineering gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Prompt Engineering, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Prompt Engineering mencakup 4 pelajaran total.

Anggaran Jendela Konteks

Setiap model memiliki jendela konteks maksimum — jumlah total token yang dapat diprosesnya dalam satu panggilan API. Jumlah ini mencakup masukan (perintah Anda + riwayat) dan keluaran (balasan model).

Memahami anggaran ini sangat penting: jika melebihinya, perintah Anda akan terpotong atau keluaran akan hilang. Jika anggaran ini terbuang untuk konteks yang tidak relevan, model memiliki lebih sedikit ruang untuk menalar hal-hal yang penting.

Ukuran Jendela Konteks

Model yang berbeda memiliki batas konteks yang berbeda. Per 2025:

  • GPT-4o: 128.000 token
  • Claude Opus 4.5: 200.000 token
  • Gemini 1.5 Pro: 1.000.000 token
  • GPT-3.5 Turbo: 16.385 token

Jendela yang lebih besar memungkinkan Anda menyertakan lebih banyak konteks — tetapi biayanya lebih tinggi untuk setiap panggilan. Untuk sebagian besar tugas, 8.000–16.000 token sudah memadai. Lebih besar tidak selalu lebih baik jika berarti menyertakan konten yang tidak relevan.

import tiktoken

def estimate_tokens(text, model='gpt-4o'):
    encoding = tiktoken.encoding_for_model(model)
    return len(encoding.encode(text))

# Quick token budget calculator
models = {
    'GPT-3.5 Turbo':  16385,
    'GPT-4o':        128000,
    'Claude Opus 4.5': 200000,
}

prompt = 'Explain the concept of technical debt in 500 words for a non-technical CEO.'
prompt_tokens = estimate_tokens(prompt)

for model_name, limit in models.items():
    reserved_for_output = 1024
    available = limit - prompt_tokens - reserved_for_output
    print(f'{model_name}: limit={limit:,} | prompt={prompt_tokens} | '
          f'context budget={available:,} tokens')

Yang Perlu Disertakan: Penilaian Relevansi

Sebelum menyertakan bagian konteks apa pun, tanyakan: Apakah informasi ini mengubah jawabannya?

Kerangka berpikir sederhana — beri nilai pada setiap elemen konteks:

  • Relevansi tinggi (sertakan): secara langsung memengaruhi tugas, membentuk kosakata, atau membatasi pilihan
  • Relevansi sedang (mungkin): memberikan informasi tambahan yang berguna, tetapi keluaran tetap akan baik tanpanya
  • Relevansi rendah (jangan sertakan): benar, tetapi sama sekali tidak memengaruhi jawaban
def score_context_element(element, task):
    '''
    Heuristic: does this context element directly constrain or shape the answer?
    Returns: HIGH / MEDIUM / LOW
    '''
    high_signals = ['stack', 'constraint', 'deadline', 'must', 'cannot', 'budget',
                    'audience', 'goal', 'version', 'scale', 'limit']
    low_signals  = ['founded', 'headquartered', 'fun fact', 'history', 'awards',
                    'team building', 'company culture', 'office location']

    el_lower = element.lower()
    if any(s in el_lower for s in high_signals):
        return 'HIGH'
    if any(s in el_lower for s in low_signals):
        return 'LOW'
    return 'MEDIUM'

context_elements = [
    'Our stack is Python FastAPI and PostgreSQL',
    'We cannot use any paid third-party APIs',
    'Our company was founded in Berlin in 2020',
    'We need the solution to handle 1000 requests/second',
    'We won a startup award last year',
]

for el in context_elements:
    score = score_context_element(el, task='optimize our API')
    print(f'[{score:6}] {el}')

Masalah Informasi yang Hilang di Tengah

Penelitian menunjukkan bahwa LLM memberikan perhatian yang lebih sedikit pada informasi yang ditempatkan di tengah perintah yang sangat panjang. Konteks penting yang ditempatkan di tengah perintah sepanjang 50.000 token mungkin sebagian diabaikan.

Praktik terbaik: letakkan konteks yang paling penting di awal atau akhir perintah Anda — model memberikan perhatian paling kuat pada posisi-posisi tersebut.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

# Structure: critical constraint at the TOP, then the body, then the task
well_structured_prompt = (
    # Critical constraint FIRST
    'CRITICAL CONSTRAINT: Output must be under 50 words and contain no code.\n\n'
    # Background in the middle
    'Background: we are explaining our API rate limiting policy to non-technical support agents. '
    'They handle billing inquiries and need to explain errors to customers. '
    'Our rate limit is 100 requests per minute per API key.\n\n'
    # Task at the end
    'Task: Write the explanation.'
)

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=128,
    messages=[{'role': 'user', 'content': well_structured_prompt}]
)
print(response.content[0].text)

Membagi Dokumen Panjang Menjadi Bagian

Ketika Anda perlu bekerja dengan dokumen yang lebih panjang daripada anggaran token, Anda memiliki tiga pilihan:

  • Ringkas terlebih dahulu: minta model memadatkan dokumen, lalu gunakan ringkasannya
  • Bagi dan proses: pecah dokumen menjadi beberapa bagian, proses setiap bagian, lalu gabungkan hasilnya
  • Ekstrak dan masukkan: ekstrak hanya bagian yang relevan sebelum menyertakannya dalam perintah

Jangan pernah memaksakan dokumen yang melebihi jendela konteks — dokumen tersebut akan terpotong secara diam-diam.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

def chunk_and_summarize(long_text, chunk_size=2000):
    '''Split text into chunks, summarize each, combine summaries.'''
    words = long_text.split()
    chunks = []
    for i in range(0, len(words), chunk_size):
        chunk = ' '.join(words[i:i + chunk_size])
        chunks.append(chunk)

    summaries = []
    for idx, chunk in enumerate(chunks):
        response = client.messages.create(
            model='claude-opus-4-5',
            max_tokens=256,
            messages=[{
                'role': 'user',
                'content': f'Summarize this section in 3 bullet points:\n\n{chunk}'
            }]
        )
        summaries.append(f'Section {idx+1}:\n{response.content[0].text}')

    return '\n\n'.join(summaries)

# Example usage
long_doc = 'word ' * 5000  # placeholder for a real document
print('Chunks needed:', len(long_doc.split()) // 2000 + 1)

Penyaringan Relevansi dalam Praktik

Penyaringan relevansi berarti mengekstrak hanya bagian yang relevan dari dokumen besar sebelum menyertakannya dalam perintah. Hal ini sangat penting untuk:

  • Laporan panjang yang hanya memiliki satu bagian relevan
  • File kode yang hanya memerlukan peninjauan terhadap satu fungsi
  • Rangkaian email yang hanya memerlukan tiga pesan terakhir
  • Skema basis data yang hanya memiliki dua tabel relevan dari 50 tabel
import openai

client = openai.OpenAI(api_key='sk-your-key-here')

# Step 1: Filter first, then ask
full_schema = (
    'Table: users (id, name, email, created_at, role)\n'
    'Table: products (id, name, price, stock, category_id)\n'
    'Table: orders (id, user_id, total, status, created_at)\n'
    'Table: order_items (id, order_id, product_id, quantity, unit_price)\n'
    'Table: categories (id, name, parent_id)\n'
    'Table: reviews (id, product_id, user_id, rating, body)\n'
    'Table: sessions (id, user_id, token, expires_at)'
)

# Only include relevant tables for the specific question
relevant_context = (
    'Relevant tables for this query:\n'
    'Table: orders (id, user_id, total, status, created_at)\n'
    'Table: order_items (id, order_id, product_id, quantity, unit_price)\n'
)

response = client.chat.completions.create(
    model='gpt-4o',
    messages=[{
        'role': 'user',
        'content': f'{relevant_context}\nWrite SQL to find the top 5 orders by total value this month.'
    }]
)
print(response.choices[0].message.content)

Mengelola Riwayat Percakapan

Dalam percakapan dengan banyak giliran, riwayat bertambah pada setiap giliran. Mengelolanya dengan cermat membantu menjaga anggaran token tetap sehat:

  • Jendela geser: pertahankan hanya N giliran terakhir
  • Penyisipan ringkasan: secara berkala ringkas giliran-giliran lama menjadi satu pesan
  • Ekstraksi fakta penting: catat keputusan penting sebagai daftar berpoin, lalu masukkan sebagai konteks sistem
  • Atur ulang saat topik berubah: mulai sesi baru ketika beralih ke topik yang tidak berkaitan
import openai

client = openai.OpenAI(api_key='sk-your-key-here')

def summarize_history(old_history):
    '''Compress old conversation turns into a brief summary.'''
    history_text = '\n'.join(
        f'{m["role"].upper()}: {m["content"]}' for m in old_history
    )
    response = client.chat.completions.create(
        model='gpt-4o',
        max_tokens=200,
        messages=[{
            'role': 'user',
            'content': (
                'Summarize this conversation history in 3 bullet points. '
                'Focus on decisions made and key information established.\n\n'
                + history_text
            )
        }]
    )
    return response.choices[0].message.content

# Example: compressing old history before continuing
old_turns = [
    {'role': 'user',      'content': 'We are building a Kanban app.'},
    {'role': 'assistant', 'content': 'Great, what is your stack?'},
    {'role': 'user',      'content': 'React + FastAPI + PostgreSQL.'},
    {'role': 'assistant', 'content': 'Good choice for a Kanban app.'}
]
summary = summarize_history(old_turns)
print('Summary of old history:', summary)

Teknik Pemadatan Konteks

Ketika Anda harus menyertakan banyak konteks tetapi anggaran token terbatas, gunakan teknik pemadatan:

  • Gunakan daftar berpoin, bukan prosa: daftar berpoin 30–50% lebih hemat token daripada kalimat
  • Singkat istilah yang sudah dikenal: 'PostgreSQL 15' → 'PG15' setelah penggunaan pertama
  • Hapus frasa pengisi: 'Perlu diperhatikan bahwa...' → langsung nyatakan faktanya
  • Gunakan format terstruktur: pasangan kunci:nilai lebih padat daripada kalimat
import tiktoken

def count_tokens(text):
    enc = tiktoken.encoding_for_model('gpt-4o')
    return len(enc.encode(text))

# Same information, different token counts
prose_context = (
    'Our company is a startup that was founded recently and we are building '
    'a data analytics platform. It is worth noting that we use Python for our backend. '
    'Additionally, we have chosen PostgreSQL as our primary database. '
    'Furthermore, we deploy on AWS using ECS containers.'
)

bullet_context = (
    'Company: data analytics startup\n'
    'Stack: Python backend, PostgreSQL, AWS ECS'
)

print('Prose context tokens: ', count_tokens(prose_context))
print('Bullet context tokens:', count_tokens(bullet_context))
print('Tokens saved:', count_tokens(prose_context) - count_tokens(bullet_context))
print('Same information? Yes — same facts, 60% fewer tokens')

Pemilihan Konteks Dinamis

Dalam aplikasi AI produksi, konteks sering dipilih secara dinamis berdasarkan hal yang paling relevan dengan kueri saat ini. Proses ini disebut Retrieval-Augmented Generation (RAG).

Alih-alih menyertakan semua dokumen, Anda hanya mengambil dokumen yang paling mirip secara semantik dengan pertanyaan pengguna, lalu memasukkannya ke dalam perintah. Dengan demikian, konteks tetap ringkas dan sangat relevan.

# Simplified RAG pattern: retrieve relevant chunks, inject into prompt
import openai

client = openai.OpenAI(api_key='sk-your-key-here')

# Simulated knowledge base (in production: vector database)
knowledge_base = [
    {'id': 1, 'topic': 'billing',   'text': 'Refunds are processed within 5-7 business days.'},
    {'id': 2, 'topic': 'shipping',  'text': 'Standard shipping takes 3-5 days.'},
    {'id': 3, 'topic': 'returns',   'text': 'Returns accepted within 30 days with receipt.'},
    {'id': 4, 'topic': 'warranty',  'text': 'All products come with a 1-year warranty.'},
]

def get_relevant_docs(user_query, kb, top_k=2):
    '''Simplified relevance: keyword match. Production uses embeddings.'''
    scored = [(doc, sum(w in user_query.lower() for w in doc['topic'].split())) for doc in kb]
    scored.sort(key=lambda x: x[1], reverse=True)
    return [doc['text'] for doc, _ in scored[:top_k]]

query = 'Can I return this and get my money back?'
relevant = get_relevant_docs(query, knowledge_base)
context = '\n'.join(relevant)
print('Injected context:', context)
response = client.chat.completions.create(
    model='gpt-4o', max_tokens=80,
    messages=[{'role': 'user', 'content': f'Context:\n{context}\n\nQuestion: {query}'}]
)
print('Answer:', response.choices[0].message.content.strip())

Perencanaan Anggaran Konteks

Untuk aplikasi produksi, rencanakan anggaran konteks secara eksplisit sebelum membangun aplikasi:

  • Sisihkan 25% dari jendela konteks untuk keluaran
  • Alokasikan 10% untuk pesan sistem dan persona
  • Alokasikan 30% untuk riwayat percakapan terbaru
  • Sisakan 35% untuk konteks dinamis (dokumen yang diambil, data yang dimasukkan)

Dokumentasikan alokasi ini sebagai konstanta dalam kode Anda agar mudah disesuaikan seiring berkembangnya kebutuhan penggunaan Anda.

# Context budget planner
MODEL_LIMIT = 128000  # GPT-4o

BUDGET = {
    'output_reserve':  int(MODEL_LIMIT * 0.25),  # 32,000 tokens
    'system_message':  int(MODEL_LIMIT * 0.05),  # 6,400 tokens
    'recent_history':  int(MODEL_LIMIT * 0.30),  # 38,400 tokens
    'dynamic_context': int(MODEL_LIMIT * 0.35),  # 44,800 tokens
    'task_prompt':     int(MODEL_LIMIT * 0.05),  # 6,400 tokens
}

total_input = sum(v for k, v in BUDGET.items() if k != 'output_reserve')
print('Context budget plan:')
for key, tokens in BUDGET.items():
    pct = round(tokens / MODEL_LIMIT * 100)
    print(f'  {key:<20}: {tokens:>7,} tokens ({pct}%)')
print(f'  {"total input":<20}: {total_input:>7,} tokens')
print(f'  {"+ output reserve":<20}: {BUDGET["output_reserve"]:>7,} tokens')
print(f'  {"= model limit":<20}: {MODEL_LIMIT:>7,} tokens')

Saat Relevansi Lebih Penting daripada Panjang

Konteks sepanjang 500 token yang sangat relevan menghasilkan keluaran yang lebih baik daripada konteks sepanjang 5.000 token yang relevansinya longgar. Model menghasilkan keluaran yang lebih baik ketika memiliki lebih sedikit hal untuk disaring.

Tanda-tanda bahwa konteks Anda terlalu panjang dan tidak terarah:

  • Model mengabaikan sebagian batasan Anda
  • Keluaran terasa umum meskipun konteksnya panjang
  • Model membahas bagian yang salah dari pertanyaan Anda
  • Latensi dan biaya lebih tinggi daripada yang diperkirakan

Jika melihat tanda-tanda ini: ringkas konteks, lalu jalankan kembali.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

# Demonstrating: lean context produces sharper output
lean_context = (
    'Task: write a 50-word product tagline.\n'
    'Product: CLI tool that auto-generates Git commit messages from your diff.\n'
    'Audience: senior developers who hate writing commit messages.\n'
    'Tone: dry, witty, technical.'
)

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=100,
    messages=[{'role': 'user', 'content': lean_context}]
)
print('Lean context output:')
print(response.content[0].text.strip())

Pemeriksaan Pengetahuan

Seorang pengembang sedang membangun chatbot dengan riwayat percakapan sebanyak 20 giliran. Setelah 20 giliran, jendela konteks hampir penuh. Apa strategi TERBAIK untuk melanjutkan percakapan tanpa kehilangan konteks penting?

Panjang dan Relevansi Konteks — Ringkasan

Mengelola konteks secara efektif adalah keterampilan utama dalam menyusun perintah yang menjadi sangat penting dalam aplikasi produksi. Prinsip-prinsip utamanya:

  • Beri nilai pada setiap elemen konteks: relevansi tinggi / sedang / rendah — sertakan hanya yang relevansinya tinggi
  • Tempatkan batasan penting di awal atau akhir, bukan di tengah
  • Gunakan format daftar berpoin, bukan prosa, untuk menghemat 30–50% token
  • Ringkas atau bagi menjadi beberapa bagian dokumen yang melebihi anggaran Anda
  • Dalam percakapan dengan banyak giliran, padatkan riwayat lama daripada memulai dari awal
  • Rencanakan anggaran konteks secara eksplisit sebagai konstanta kode

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Panjang dan Relevansi Konteks” gratis?

Ya — teks lengkap “Panjang dan Relevansi Konteks” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Prompt Engineering, upgrade ke CoddyKit PRO. Kursus AI Prompt Engineering mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Panjang dan Relevansi Konteks”?

Seimbangkan konteks yang lengkap dengan batas token dan relevansi. Kamu berlatih AI Prompt Engineering dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Prompt Engineering?

Tidak diperlukan pengalaman sebelumnya. AI Prompt Engineering di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Panjang dan Relevansi Konteks” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Prompt Engineering ini?

Ya. Setiap pelajaran AI Prompt Engineering menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Makna Konteks dalam Pemberian Prompt kepada Kecerdasan Buatan
  2. Memberikan Informasi Latar
  3. Menetapkan Situasi secara Efektif
  4. Panjang dan Relevansi Konteks
← Kembali ke AI Prompt Engineering