0Pricing
AI Prompt Engineering · Ders

Sorgu Yeniden Yazımı ve HyDE

Bilgi alma duyarlılığını artırma.

Sorgu Yeniden Yazımı ve HyDE, CoddyKit'te ücretsiz bir AI Prompt Engineering dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Prompt Engineering öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Prompt Engineering kursu toplamda 4 dersten oluşur.

Sorgu Zayıf Halkadır

Getirme kalitesi sorguyla sınırlıdır. Ham kullanıcı sorguları genellikle kısadır, belirsizdir, zamirlerle doludur veya belgelerdekinden farklı biçimde ifade edilir. Sorgu dönüştürme, geri çağırmayı ve kesinliği artırmak için getirmeden önce sorguyu yeniden şekillendirir.

Bu, basit RAG'e kıyasla en ucuz ve en yüksek getirili iyileştirmelerden biridir: sorguyu düzeltin, sonraki her aşama bundan yararlansın.

def transform_query(raw, history):
    # Resolve references, expand, decompose, or hypothesize
    # BEFORE embedding and retrieving.
    return rewrite(raw, history)

Sorguyu Yeniden Yazma

En basit dönüşüm şudur: bir LLM, kullanıcı sorgusunu daha açık, kendi başına anlaşılır ve getirmeye uygun bir biçimde yeniden yazar. Yazım hatalarını düzeltir, kısaltmaları açar ve konuşmaya özgü gereksiz gürültüyü kaldırır.

Bu, özellikle son mesajın bağlam olmadan anlaşılmadığı çok turlu sohbetlerde önemlidir (Peki ya ikincisi?).

def rewrite_query(raw):
    prompt = (
        'Rewrite the user question into a clear, standalone search '
        'query optimized for document retrieval. Keep key entities.\n'
        'Question: ' + raw
    )
    return llm(prompt, temperature=0).strip()

Konuşma Yoğunlaştırması

Sohbet RAG'inde diyaloğu ve yeni turu tek bir bağımsız soruda yoğunlaştırın. Aksi hâlde zamirler ve eksiltili ifadeler gömmeyi anlamsız hâle getirir ve getirme çöker.

Önceki turları aktarın; böylece yeniden yazıcı o, şu ve önceki gibi ifadeleri getiricinin eşleştirebileceği açık varlıklara dönüştürebilir.

def condense(history, follow_up):
    prompt = (
        'Given the conversation, rewrite the follow-up as a standalone '
        'question with all references resolved.\nConversation:\n' +
        render(history) + '\nFollow-up: ' + follow_up
    )
    return llm(prompt, temperature=0).strip()

Sorgu Genişletme

Genişletme, sözlüksel ve anlamsal kapsamı genişletmek için eş anlamlılar, ilişkili terimler veya alternatif ifadeler üretir. Söz varlığı uyuşmazlığıyla mücadele eder: belgede geçersiz kılmak, kullanıcıda iptal etmek olarak ifade edilebilir.

Getirme için expand edin, ardından birleşimle getirme yapın; genişletilmiş biçimi kullanıcıya göstermeyin. Aşırı genişletmeye dikkat edin; bu, konu dışı sonuçların gelmesine neden olabilir.

def expand(query, n=3):
    prompt = (
        'List ' + str(n) + ' alternative phrasings of this query using '
        'synonyms and domain terms, one per line.\n' + query
    )
    variants = parse_lines(llm(prompt, temperature=0.5))
    return [query] + variants

Çoklu Sorgu Getirme

Birbirinden farklı birkaç yeniden ifade üretin, her biri için getirme yapın ve sonuç listelerini birleştirin (karşılıklı sıra birleştirmesi). Farklı ifadeler farklı ilgili parçaları ortaya çıkarır; birleştirme bunların güçlü yönlerini toplar ve geri çağırmayı daha kararlı hâle getirir.

Bu yaklaşım, tek bir kötü ifadeye karşı dayanıklılık için ek getirme çağrılarını göze alır.

def multi_query(raw, n=4):
    queries = expand(raw, n)
    rankings = [dense_retrieve(q, 30) for q in queries]
    fused = rrf(*rankings)
    return dedup(fused)

Sorgu Ayrıştırma

Karmaşık, çok adımlı soruların alt sorulara ayrıştırılması, her biri için ayrı getirme yapılması ve ardından birleştirilmesi gerekir. X'i satın alan şirketin CEO'sunun kimden daha yaşlı olduğunu sormak, tek bir getirmeyle yanıtlanamaz.

Ayrıştırın, her alt soru için getirme yapın ve üreticinin toplanan kanıtları birleştirmesine izin verin.

def decompose_and_retrieve(question):
    subs = parse_lines(llm(
        'Break this into independent sub-questions, one per line.\n' +
        question, temperature=0))
    evidence = {s: rerank(s, dense_retrieve(s, 30))[:3] for s in subs}
    return evidence  # generator synthesizes the final answer

HyDE: Temel Fikir

HyDE (Varsayımsal Belge Gömüleri, Gao et al., 2022) sorunu tersine çevirir. Kısa sorguyu gömmek yerine LLM'den varsayımsal bir yanıt belgesi üretmesini ister, ardından bu belgeyi gömer ve onunla getirme yapar.

Varsayımsal belge, gerçek belgelerle aynı üsluptadır; bu nedenle gömmesi gerçek yanıtlara daha yakın konumlanır ve sorgu-belge uyuşmazlığını giderir.

def hyde(query):
    hypo = llm(
        'Write a short passage that would answer this question, as if '
        'from a reference document.\nQuestion: ' + query,
        temperature=0.3)
    return dense_retrieve_by_vector(embed(hypo), k=30)  # embed the answer

HyDE Geri Çağırmayı Neden İyileştirir

Bir soru ve yanıtı farklı biçimde ifade edilir; bir soru ile sahte ama makul bir yanıt ise gerçek yanıta benzer biçimde ifade edilir. HyDE, varsayımsal metin olgusal hatalar içerse bile bu boşluğu kapatmak için LLM'nin üretici önselinden yararlanır.

Varsayımsal metnin doğruluğu çok önemli değildir: gömme uzayında gerçek belgelere yakın konumlanması için doğru söz varlığına ve yapıya sahip olması yeterlidir.

# Robustness: average several hypothetical docs to reduce variance
def hyde_avg(query, n=3):
    vecs = [embed(llm(HYDE_PROMPT + query, temperature=0.5))
            for _ in range(n)]
    centroid = sum(vecs) / n
    return dense_retrieve_by_vector(centroid, 30)

HyDE'nin Ödünleri ve Hata Modları

HyDE, getirmeden önce bir LLM üretimi ekler; bu da gecikmeyi ve maliyeti artırır. Ayrıca konu dışına kayan bir varsayımsal metin halüsinasyonu üretebilir ve modelin hakkında hiçbir şey bilmediği niş veya dağılım dışı sorgularda geri çağırmayı düşürebilir.

Kötü bir varsayımsal metnin geri çağırmayı tamamen bozmasını önlemek için HyDE-vektör getirmesini ham sorgu getirmesiyle birleştirme yoluyla kullanın.

def hyde_hybrid(query):
    a = dense_retrieve_by_vector(embed(hyde_doc(query)), 30)
    b = dense_retrieve(query, 30)          # raw-query fallback
    return dedup(rrf(a, b))                 # robust to bad hypotheticals

Teknikleri Seçme ve Birleştirme

Bu dönüşümler birbirini tamamlar. Sohbet için yoğunlaştırma, söz varlığı boşlukları için genişletme/çoklu sorgu, çok adımlı sorular için ayrıştırma ve soru-belge üslup uyuşmazlığı için HyDE kullanın. Birçok üretim sistemi önce condense uygular, ardından HyDE kullanır, sonra ham sorguyla birleştirir ve yeniden sıralar.

Eklenen her dönüşüm bir LLM çağrısına mal olur; bu nedenle hepsini her zaman çalıştırmak yerine sorgu türüne göre devreye alın.

def route_transform(query, history, qtype):
    q = condense(history, query) if history else query
    if qtype == 'multi_hop': return decompose_and_retrieve(q)
    if qtype == 'mismatch':  return hyde_hybrid(q)
    if qtype == 'vocab_gap': return multi_query(q)
    return dense_retrieve(q, 30)

Dönüşümleri Değerlendirme

Her dönüşümü, sızıntısız bir kümede ham sorguya kıyasla geri getirme oranı@k kazanımı ve nihai yanıt doğruluğu üzerinden ölçün. Eklenen gecikmeyi ve LLM maliyetini izleyin; böylece yalnızca maliyetini karşılayan dönüşümleri tutun.

Dikkat: Geri getirmeyi iyileştirip dikkat dağıtıcı sonuçlar ekleyen bir dönüşüm, yeniden sıralama ve sıkıştırmayla eşleştirilmezse yanıt doğruluğunu düşürebilir.

def eval_transform(name, fn, eval_set):
    return {
        'recall@10': recall_at_k(eval_set, retriever=fn, k=10),
        'answer_acc': answer_accuracy(eval_set, retriever=fn),
        'extra_latency_ms': transform_latency(fn),
    }

Hızlı Kontrol

Kusurlu varsayımsal yanıtlarına rağmen HyDE'nin neden işe yaradığını düşünün.

Özet

Temel çıkarımlar:

  • Bilgi getirme sorguyla sınırlıdır; sorguyu dönüştürmek ucuz ve etkisi yüksek bir RAG yükseltmesidir.
  • Yeniden yazma ve yoğunlaştırma sohbet sorgularını bağımsız hâle getirir; genişletme ve çoklu sorgu, kelime dağarcığı boşluklarını giderir.
  • Ayrıştırma, her alt soru için bilgi getirerek çok adımlı soruların üstesinden gelir.
  • HyDE, soru ile belge arasındaki dil düzeyi uyumsuzluğunu gidermek için varsayımsal bir yanıtın vektör temsilini kullanır; varsayımın doğru olması gerekmez.
  • Dönüşümleri sorgu türüne göre birleştirin, dayanıklılık için ham sorguyla kaynaştırın ve geri getirme oranını, yanıt doğruluğunu, gecikmeyi ve maliyeti değerlendirin.

Sıkça Sorulan Sorular

“Sorgu Yeniden Yazımı ve HyDE” dersi ücretsiz mi?

Evet — “Sorgu Yeniden Yazımı ve HyDE” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Prompt Engineering kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Prompt Engineering kursu toplamda 4 dersten oluşur.

“Sorgu Yeniden Yazımı ve HyDE” dersinde ne öğreneceğim?

Bilgi alma duyarlılığını artırma. AI Prompt Engineering ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

AI Prompt Engineering öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Prompt Engineering, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Sorgu Yeniden Yazımı ve HyDE” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu AI Prompt Engineering dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Prompt Engineering dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Naif RAG'ın Ötesi
  2. Alınan Parçaları Yeniden Sıralama
  3. Bağlam Sıkıştırma
  4. Sorgu Yeniden Yazımı ve HyDE
← AI Prompt Engineering Sayfasına Dön