Lesson 58 — Intermediate
Query Transformation & RAG-Fusion
User ka sawaal seedha retrieval query nahi hota — lamba, ghumao hua, kabhi kabhi ekdum chhota. Is lesson mein hum query rewriting, expansion, multi-query retrieval, HyDE, aur RAG-Fusion (multi-query + RRF) dekhenge — saath mein uska cost bill aur wo cases jahan sab skip kar dete hain.
User question retrieval query kyun nahi
Kya hai?
Query transformation: LLM se user ke sawaal ko 1-3 alag retrieval queries mein badalna, ya hypothetical answer bana ke embed karna. Motive — jo meaning user ne bola hai, wo vector space mein sahi se jagah le jaaye.
Kab kaam aata hai?
Ambiguous, chhote ya bahut lambe sawaal; Hinglish phrasing jiske terms corpus se match nahi karte; multi-faceted questions jinme do cheezein poochhi gayi hain.
Kahan milta hai?
RAG pipeline mein retrieve se pehle ek transform step ke roop mein — M4.11 wala layer. RAG-Fusion isi ka extended form hai.
Sawaal user ki bhasha mein hai, corpus ki bhasha alag. "paisa wapas kab milega" corpus mein "refund timeline" hai — meaning same, terms alag. Transformation ka kaam isi bridge ko banana hai.
Rewriting aur expansion
REWRITE = """Rewrite the question for document search.
Give 3 versions: exact terms, synonyms, shorter keywords.
One per line, no numbering."""
def variants(query, llm):
out = llm(REWRITE + "\n\nQuestion: " + query)
return [v.strip() for v in out.strip().splitlines() if v.strip()]
# "mera paisa wapas kab milega" ->
# "refund timeline policy"
# "reimbursement processing time"
# "payment status check kar" <- chhoti/ashuddhi variant bhi aa sakti hai, filter karo
- Rewrite: ek hi query ko saaf, corpus-friendly banao — sabse sasta transformation (1 LLM call).
- Expansion: synonyms aur related terms add karo — coverage badhti hai, par noise bhi aa sakta hai.
- Filter: variants ki language/content check karo — LLM kabhi kabhi topic chhod deta hai.
- Variants ke saath original query hamesha rakhho — kabhi kabhi seedha sawaal hi best chalta hai.
HyDE — hypothetical answer embed karna
HYP = "Write a short passage that would answer this question. Do not include the question."
def hyde_query(query, llm):
hyp_doc = llm(HYP + "\n\nQuestion: " + query)
return embed(hyp_doc) # sawaal ka nahi, jawab-jaise text ka vector
# sawaal chhota/ashuddha ho toh:
# query "refund?" -> hypothetical answer paragraph -> embedding
- Sawaal chhota hai toh uski embedding thodi noisy hoti hai — hypothetical jawab lamba, structured aur corpus jaisa.
- Kyunki corpus ke docs bhi aise hi bhasha mein hain, unke paas hypothetical answer ka vector jaata hai.
- Ek extra LLM call = cost + latency; isliye tabhi use karo jab baseline clearly weak hai.
- Parso: HyDE ko tumhare LLM ne jo likha wo galat ho sakta hai — retrieval phir bhi galat jagah jaayega.
RAG-Fusion — multi-query + RRF
def rag_fusion(query, llm, k=5):
qs = [query] + variants(query, llm) # original + 3 rewrites
rankings = [dense_rank(q, top=20) for q in qs]
fused = rrf(rankings, k=60) # M4.6 wala RRF
return fused[:k]
# har query ki alag ranking -> RRF se fused top-k
- RAG-Fusion: multiple queries se retrieve, phir RRF se rankings fuse — jo doc har list mein top pe hai wo overall top pe.
- RRF kaafi hai kyunki scores ki scaling ki fikr nahi — alag queries ke alag scales se farq nahi padta.
- Ambiguous/multi-faceted sawaal pe sabse zyada fayda: har interpretation ki apni ranking, fusion sabki common ground dhoondhta hai.
- k badhao candidates ka (20 per query), fusion ke baad top-k chhota — wahi wide-then-narrow pattern.
Extra calls ka bill aur kab skip karein
- Per query ka kharcha: 1 LLM rewrite + 3 embeddings + 3 retrievals — latency aur dono badhte hain.
- Skip rule: baseline ka score pehle se achha hai (apne eval pe) — transformation ka asar hi nahi dikhega, sirf bill badhega.
- Real-time products mein latency budget tight — rewrite tabhi karo jab quality ka stake ho.
- Cost ko log karo: har request pe transformation on/off flag, taaki A/B comparison ho sake.
Sahi rhythm: baseline chalao → weak query types identify karo → sirf unme transformation on karo. Har query pe sab kuch lagana maturity nahi, cost leak hai.
Exercise
Question: Sawaal ke bajaye hypothetical jawab embed karne wali technique ka naam?
Question: Multiple queries se aaye rankings ko combine karne wala method kya hai?
Question: Ambiguous sawaal ke liye ek hi query ki jagah kitni retrieval queries banai jaati hain?
Question: RAG-Fusion mein pehle kya add hota hai — LLM calls ya kam?
Common mistakes
- Har query pe transformation on rakhna: Baseline achha chal raha hai, phir bhi 3 extra LLM calls har request pe — cost aur latency barbaad. Fix: A/B test se sirf weak query types pe on karo.
- Variants bina filter ke chalana: LLM ne query ka matlab hi badal diya — retrieval galat jagah jaayega. Fix: variants ki language/topic check karo, original hamesha rakhho.
- Fusion ke baad k candidate count bhool jaana: Per-query retrieval chhoti rakhi toh fusion ke paas overlap dhoondhne ko kuch nahi. Fix: wide candidates (20-50 per query), phir top-k.
Customer ne order Hindi mein diya, waiter ne kitchen ke liye 3 alag-alag words mein likha — jo baat teeno mein common hai wahi pakki order hai. RAG-Fusion wahi karti hai, order ki nahi query ki:
user: "paisa wapas kab aayega?"
variant 1: "refund processing time"
variant 2: "reimbursement timeline policy"
variant 3: "return payment schedule"
har variant ki ranking -> RRF -> jo doc sabme top, wahi final- Q: Query transformation kyun chahiye? — User ki phrasing corpus ke terms se alag hoti hai; LLM se bridge banwate hain.
- Q: HyDE kaise kaam karta hai? — LLM ek hypothetical answer likhta hai, uska embedding query ki jagah use hota hai.
- Q: RAG-Fusion ke steps? — Multiple query variants, har ek se retrieve, RRF se rankings fuse, top-k.
- Q: Kab transformation skip karo? — Baseline eval pe pehle se strong, latency tight, ya A/B mein fark hi nahi dikha.
Query transformation aur fusion clear — ab mushkil sawaal ko retrieval-friendly bana sakte ho. Agla lesson — Grounding, Citations & Abstention — mein dekhenge jawab ko traceable kaise rakhte hain.