Thuta Learning
ရှာဖွေရန်
ExercisesAIbeginner

Warm-up Practice — RAG အခြေခံ စမ်းသပ်ခန်း

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Warm-up Practice — RAG အခြေခံ စမ်းသပ်ခန်း ကို ကိုယ်တိုင် လေ့ကျင့်ကြည့်မယ်
  • သင်ခဲ့ပြီးသား skill တွေကို practice လုပ်ပြီး ခိုင်မာအောင်လုပ်မယ်
  • အမှားရှာ၊ ပြင်တတ်၊ ကိုယ်တိုင် check လုပ်တတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

ဒီ lesson က သင်ခန်းစာအသစ်မဟုတ်ပါဘူး။ အရင် lessons တွေမှာသင်ခဲ့တဲ့ chunking၊ embeddings၊ search-then-read အခြေခံတွေကို ပြန်လှန်ကျင့်ကြည့်ဖို့ပါ။ Task တစ်ခုချင်းစီက သေးငယ်ပေမယ့် RAG pipeline ရဲ့ core skill တွေကို တိုက်ရိုက်ထိတွေ့ရအောင် ဒီဇိုင်းလုပ်ထားပါတယ်။ စာအုပ်ကို အပိုင်းလိုက်ဖြတ်တာ၊ vector ဖြစ်အောင်ပြောင်းတာ၊ ရှာဖွေတာနဲ့ ဖတ်တာ — ဒီလေးခုက RAG ရဲ့ ဖောင်ဒေးရှင်းပါ။ အားလုံးလက်တွေ့ကိုယ်တိုင်စမ်းကြည့်ရင် နောက်ပိုင်း advanced lesson တွေ ပိုနားလည်လာမှာပါ။

လေ့ကျင့်ခန်းများ

Task 1: Paragraph ၅ ခုပါတဲ့ .txt file တစ်ခုကို 200-character chunk အနေနဲ့ ဘယ်လိုပိုင်းရမလဲ ရေးကြည့်ပါ (overlap 20 characters ထည့်ပါ)။ Task 2: Chunk ၅ ခုကို embedding vector အဖြစ် imagine လုပ်ပြီး, query တစ်ခုနဲ့ cosine similarity အနီးဆုံး chunk ၂ ခုကို manual ရွေးထုတ်ကြည့်ပါ။ Task 3: search-then-read pattern အတိုင်း, retrieve() function ကနေ ပြန်လာတဲ့ chunk တွေကို prompt ထဲ ဘယ်လို context အဖြစ်ထည့်ရမလဲ code skeleton ဖြည့်ပါ။ Task 4 (optional): chunk size ကို 100 vs 400 characters လုပ်ကြည့်ပြီး retrieval quality ဘယ်လိုပြောင်းလဲ observe လုပ်ကြည့်ပါ.

Code နမူနာ

javascript
// Task skeleton — ဖြည့်ရမယ့်နေရာတွေကို TODO နဲ့ မှတ်ထားပါတယ်

function chunkText(text, size = 200, overlap = 20) {
  const chunks = [];
  // TODO: text ကို size အလိုက်ဖြတ်ပြီး overlap ထည့်ပါ
  return chunks;
}

function cosineSimilarity(vecA, vecB) {
  // TODO: dot product / (magnitudeA * magnitudeB)
}

function retrieve(query, chunks, embeddings, topK = 2) {
  const queryVec = embed(query); // embed() က already implement လုပ်ပြီးသား ဟု assume
  const scored = chunks.map((chunk, i) => ({
    chunk,
    score: cosineSimilarity(queryVec, embeddings[i]),
  }));
  // TODO: score အလိုက် sort ပြီး topK ကို return ပါ
}

function buildPrompt(query, retrievedChunks) {
  // TODO: retrievedChunks တွေကို context block အဖြစ် join ပြီး
  // query နဲ့ တွဲထည့်တဲ့ prompt string တစ်ခု return ပါ
}
You should see
chunkText, cosineSimilarity, retrieve, buildPrompt လေးခုစလုံးကို correct ဖြည့်ပြီးရင် sample query တစ်ခုအတွက် အနီးဆုံး chunk ၂ ခုပါတဲ့ grounded prompt string တစ်ခု ရလာပါလိမ့်မယ်။

၅ မိနစ် စမ်းကြည့်

Notepad ဖွင့်ပြီး paragraph ၅ ခုပါတဲ့ text တစ်ခုရေးပါ။ ၅ မိနစ်အတွင်း chunkText() function ကို paper-code (ကိုယ်တိုင်လက်ရေး) နည်းနဲ့ ပြီးအောင်ဖြည့်ကြည့်ပါ, computer မလိုပါဘူး။

သတိလေးတစ်ချက်

ဒီ exercise တွေက pipeline ရဲ့ mechanics ကို နားလည်ဖို့ပါ။ Production မှာတော့ real embedding model (OpenAI, Cohere, စသည်) သုံးရမှာမို့ manual vector နဲ့ တိုက်ရိုက်မတူပါဘူး။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • Overlap ကို လုံးဝမထည့်ဘဲ chunk တွေကို ပုံသေ အပိုင်းလိုက် ဖြတ်ချလိုက်တာ — sentence တစ်ခု နှစ်ပိုင်းကျဲသွားနိုင်တယ်
  • cosine similarity အစား chunk length ကို score အဖြစ် မှားယူသုံးတာ — ရှည်တဲ့ chunk တွေချည်း ထိပ်တန်းရောက်သွားနိုင်တယ်

အခု ကိုယ်တိုင် စမ်းကြည့်

Notepad ဖွင့်ပြီး paragraph ၅ ခုပါတဲ့ text တစ်ခုရေးပါ။ ၅ မိနစ်အတွင်း chunkText() function ကို paper-code (ကိုယ်တိုင်လက်ရေး) နည်းနဲ့ ပြီးအောင်ဖြည့်ကြည့်ပါ, computer မလိုပါဘူး။

You'll know it worked when: chunkText, cosineSimilarity, retrieve, buildPrompt လေးခုစလုံးကို correct ဖြည့်ပြီးရင် sample query တစ်ခုအတွက် အနီးဆုံး chunk ၂ ခုပါတဲ့ grounded prompt string တစ်ခု ရလာပါလိမ့်မယ်။