Pemilihan Few-Shot Dinamis
Mengambil contoh untuk setiap kueri.
Pemilihan Few-Shot Dinamis 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.
Dari Demo Statis ke Dinamis
Few-shot statis menggunakan contoh yang sama untuk setiap kueri. Few-shot dinamis mengambil demonstrasi yang paling relevan untuk setiap kueri dari suatu kumpulan, sehingga model dikondisikan dengan contoh yang menyerupai input saat ini.
Ini adalah pembelajaran dalam konteks yang diperkuat dengan retrieval: pendekatan ini meningkatkan relevansi demonstrasi, yang merupakan salah satu faktor pengungkit terkuat bagi kualitas ICL, terutama pada lalu lintas yang heterogen.
class DynamicSelector:
def __init__(self, pool, embedder, index):
self.pool = pool # candidate demonstrations
self.embed = embedder
self.index = index # ANN index over pool embeddings
def select(self, query, k):
q = self.embed(query)
ids = self.index.search(q, k)
return [self.pool[i] for i in ids]Menyematkan Kumpulan Demonstrasi
Hitung terlebih dahulu embedding untuk setiap demonstrasi kandidat dan simpan embedding tersebut dalam indeks tetangga terdekat aproksimatif (FAISS, HNSW, atau basis data vektor). Saat kueri diterima, lakukan embed pada input sekali dan ambil kecocokan teratas.
Pilih model embedding yang selaras dengan semantik tugas Anda; embedder generik dapat mengelompokkan data berdasarkan fitur permukaan, bukan dimensi yang memprediksi label yang benar.
import numpy as np
def build_index(pool, embed):
vecs = np.stack([embed(d.input) for d in pool]).astype('float32')
vecs /= np.linalg.norm(vecs, axis=1, keepdims=True) # cosine via dot
index = HNSW(dim=vecs.shape[1])
index.add(vecs)
return indexPrompt kNN
Metode kanonis (Liu et al., 2022) mengambil k tetangga terdekat dari kueri dalam kumpulan berlabel dan menggunakannya sebagai demonstrasi. Seleksi berbasis retrieval secara konsisten mengungguli seleksi acak karena demo yang relevan membantu mengenali tugas dan menyediakan ruang label yang tepat.
Label yang diambil juga berfungsi sebagai prior pengklasifikasi kNN lunak, yang mendorong model ke arah jawaban para tetangga.
def knn_prompt(query, selector, k, build):
demos = selector.select(query, k)
demos = order_by_similarity(embed(query), demos) # most similar last
return build(demos, query)Retrieval yang Memperhatikan Keberagaman
Top-k murni dapat menghasilkan duplikat yang hampir sama, sehingga memboroskan konteks. Terapkan MMR atau pengelompokan pada kandidat yang diambil untuk mempertahankan relevansi sekaligus memastikan demo yang dipilih mencakup aspek-aspek kueri yang berbeda.
Hal ini paling penting untuk input komposisional, ketika setiap subaspek yang berbeda memerlukan demonstrasi yang mewakili.
def diverse_retrieve(query, selector, k, pool_n=30, lam=0.7):
cand = selector.select(query, pool_n)
q = embed(query)
return mmr_against_query(cand, q, k, lam) # relevance + diversityLatensi dan Anggaran Retrieval
Seleksi dinamis menambahkan pemanggilan embedding dan pencarian ANN pada setiap permintaan. Perhitungkan hal ini dalam anggaran: simpan embedding kueri untuk input yang berulang, lakukan retrieval secara berkelompok, dan simpan indeks di memori.
Untuk sistem dengan QPS tinggi, langkah retrieval harus berlangsung di bawah satu milidetik; jika tidak, peningkatan relevansi akan tersisih oleh tambahan latensi ekor.
from functools import lru_cache
@lru_cache(maxsize=50_000)
def cached_embed(text):
return embed(text)
# Plus: warm in-RAM HNSW, batched search, async prefetchKetegangan antara Penyimpanan Tembolok dan Demo Dinamis
Demo dinamis merusak penyimpanan tembolok awalan prompt karena blok contoh berubah pada setiap kueri. Atasi hal ini dengan mempertahankan pembuka yang stabil dan disimpan di tembolok (instruksi serta beberapa contoh universal), lalu tambahkan hanya demo yang diambil dan spesifik terhadap kueri setelahnya.
Pendekatan ini mengembalikan sebagian besar penghematan dari penyimpanan tembolok sekaligus mempertahankan relevansi per kueri pada bagian akhir.
prompt = (
STATIC_PREAMBLE # cached: instructions + anchor demos
+ render(diverse_retrieve(query, selector, k)) # dynamic tail
+ format_query(query)
)Menghindari Kebocoran Pelatihan/Pengujian
Jika kueri itu sendiri berada dalam kumpulan (hal yang umum selama evaluasi), retrieval dapat mengembalikan jawaban yang persis sama sehingga metrik meningkat secara semu. Selalu kecualikan kueri dan tetangga yang hampir identik dengan kemiripan di atas ambang batas selama evaluasi.
Dalam produksi, hapus duplikat dari kumpulan dan cegah input pengguna sebelumnya dikembalikan sebagai demonstrasi milik pengguna tersebut.
def leak_safe_select(query, selector, k, sim_cap=0.97):
cand = selector.select(query, k + 5)
q = embed(query)
cand = [d for d in cand if cos(q, d.emb) < sim_cap]
return cand[:k]Awal yang Dingin dan Pertumbuhan Kumpulan
Pada tahap awal, kumpulan masih kecil sehingga retrieval mungkin menghasilkan kecocokan yang lemah. Mulailah dengan kumpulan statis yang telah dikurasi, lalu kembangkan kumpulan dari rekam jejak produksi yang telah diverifikasi, dengan menghitung ulang embedding dan membangun ulang indeks secara berkala.
Lacak penggunaan dan hasil setiap demo agar Anda dapat memangkas contoh yang bernilai rendah atau sudah usang serta menjaga indeks tetap ringkas.
def maybe_add_to_pool(trace, verified):
if verified and novelty(trace, index) > THRESH:
emb = embed(trace.input)
index.add(emb)
pool.append(Demo(trace.input, trace.output, trace.meta))Seleksi di Luar Kemiripan
Relevansi tetangga terdekat merupakan pengaturan default yang kuat, tetapi tidak selalu optimal. Selektor tingkat lanjut mempertimbangkan keinformatifan (apakah demo tersebut menyelesaikan ambiguitas kueri?), keberagaman, dan cakupan label. Beberapa metode mempelajari kebijakan seleksi yang memaksimalkan akurasi hilir, bukan kemiripan mentah.
Pandang seleksi sebagai proses memilih kumpulan demonstrasi yang paling banyak mengurangi ketidakpastian model terhadap kueri ini.
def select_by_uncertainty_reduction(query, pool, k):
base = entropy(model_probs(build([], query)))
gains = []
for d in pool:
h = entropy(model_probs(build([d], query)))
gains.append((d, base - h)) # info gain per demo
return [d for d, _ in sorted(gains, key=lambda x: -x[1])[:k]]Mengevaluasi Pipeline Dinamis
Bandingkan sistem dinamis dengan acuan statis dan acak pada data yang disisihkan dan dikendalikan dari kebocoran. Laporkan akurasi, distribusi kemiripan retrieval, latensi menyeluruh, dan tingkat keberhasilan penggunaan tembolok.
Sistem dinamis yang unggul dalam akurasi tetapi sangat mengurangi penggunaan kembali tembolok dapat merugikan secara keseluruhan dari sisi biaya; evaluasi sasaran secara menyeluruh, bukan hanya kualitas.
def eval_pipeline(eval_set):
return {
'acc_dynamic': run(dynamic, eval_set),
'acc_static': run(static, eval_set),
'acc_random': run(random_sel, eval_set),
'p95_latency': latency_p95(),
'cache_hit': cache_hit_rate(),
}Arsitektur Referensi
Secara menyeluruh: kumpulan demonstrasi terverifikasi, model embedding, indeks ANN dalam memori, selektor yang menerapkan perlindungan kebocoran, keberagaman, dan pengurutan berdasarkan kemiripan, pembuka stabil yang disimpan di tembolok, serta putaran umpan balik yang mengembangkan dan memangkas kumpulan.
Arsitektur ini mengubah prompting few-shot menjadi sistem retrieval dengan disiplin operasional yang menyertainya.
def answer(query):
demos = leak_safe_select(query, selector, k=4)
demos = mmr_against_query(demos, embed(query), 4)
demos = order_by_similarity(embed(query), demos)
prompt = STATIC_PREAMBLE + render(demos) + format_query(query)
out = llm(prompt)
log_for_pool_growth(query, out)
return outPemeriksaan Singkat
Diagnosis hasil evaluasi yang tampak sangat kuat tetapi menyesatkan.
Ringkasan
Inti pembelajaran:
- Few-shot dinamis mengambil demonstrasi untuk setiap kueri dan mengungguli pendekatan acak atau statis dengan meningkatkan relevansi.
- Sematkan kumpulan ke dalam indeks ANN; prompting kNN adalah pengaturan default yang kuat, dengan urutan berdasarkan kemiripan menaik.
- Tambahkan keberagaman (MMR) dan pertimbangkan selektor keinformatifan atau pengurangan ketidakpastian.
- Lindungi sistem dari kebocoran retrieval, kelola latensi, dan pertahankan pembuka statis yang disimpan di tembolok bersama bagian akhir yang dinamis.
- Kembangkan dan pangkas kumpulan dari rekam jejak terverifikasi; evaluasi akurasi, latensi, dan penggunaan tembolok secara bersamaan.
Belajar AI Prompt Engineering dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 53
- Pelajaran
- 199
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pemilihan Few-Shot Dinamis” gratis?
Ya — teks lengkap “Pemilihan Few-Shot Dinamis” 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 “Pemilihan Few-Shot Dinamis”?
Mengambil contoh untuk setiap kueri. 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 “Pemilihan Few-Shot Dinamis” 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
- Zero-Shot, One-Shot, dan Few-Shot
- Merancang Contoh yang Efektif
- Urutan Contoh dan Kebaruan
- Pemilihan Few-Shot Dinamis