Home »
Blog »
AI/ML Engineer সিরিজ » Series 08 » Episode 09
Flagship: Bangla AI Knowledge Assistant — সব একসাথে
Project P7 — GenAI capstone (Series 08, Episode 09)
🔴 ADVANCED
Series 08 — Generative AI Engineering
Episode 09 / 09
📑 এই পর্বে যা যা আছে
- ১. গল্প: সব টুকরো এবার এক ছবিতে
- ২. আমরা কী বানাচ্ছি: Bangla AI Knowledge Assistant
- ৩. পুরো architecture — উপর থেকে নিচ
- ৪. Series 08-এর প্রতিটা ধারণা কোথায় বসল
- ৫. Ingestion pipeline (offline)
- ৬. Query pipeline (online)
- ৭. Code: assistant-এর core একসাথে
- ৮. Bangla-নির্দিষ্ট চ্যালেঞ্জ
- ৯. Evaluation দিয়ে প্রমাণ করা
- ১০. কী কী সচেতনভাবে বাদ দিলাম (সততা)
- ১১. Boss Question
- ১২. Job Requirement Decoder
- ১৩. সাধারণ ভুল
- ১৪. Interview Prep: এই project কীভাবে বোঝাবেন
- ১৫. হাতে-কলমে
- ১৬. Project Connection ও পরবর্তী Series
- ১৭. সারসংক্ষেপ
🧩 ১. গল্প: সব টুকরো এবার এক ছবিতে
গত আটটা episode-এ Rahim আলাদা আলাদা টুকরো শিখেছে — prompt, embeddings, vector DB, RAG, reranking,
evaluation, agents, fine-tuning। এবার সে থমকে গেল: "এতগুলো জিনিস — একটা সত্যিকারের product-এ
এগুলো একসাথে বসবে কীভাবে?"
Maya: "এটাই capstone-এর মজা। আলাদা টুকরো জানা এক জিনিস, আর সেগুলো জুড়ে একটা
কাজ-করা system বানানো আরেক জিনিস — আর interview-তে এই দ্বিতীয়টাই তোমাকে চাকরি দেয়। চল, আমরা একটা
Bangla AI Knowledge Assistant বানাই, যেখানে Series 08-এর প্রতিটা ধারণা তার সঠিক
জায়গায় বসবে।"
🎯 ২. আমরা কী বানাচ্ছি: Bangla AI Knowledge Assistant
একটা assistant যাকে বাংলায় প্রশ্ন করলে, একটা knowledge base (আমাদের ক্ষেত্রে
job description corpus + এই blog সিরিজ) থেকে relevant অংশ খুঁজে, source সহ নির্ভরযোগ্য বাংলা উত্তর
দেয় — আর প্রয়োজনে একটা tool ব্যবহার করে হিসাবও করে (যেমন skill-gap)।
মূল নীতি: এটা model training নয় — এটা একটা LLM application। আমরা
existing LLM + embedding model + pgvector জুড়ে একটা RAG system বানাচ্ছি। এই পার্থক্যটা মনে রাখা
interview-তে গুরুত্বপূর্ণ।
🏗️ ৩. পুরো architecture — উপর থেকে নিচ
Bangla AI Knowledge Assistant
┌───────────────────────────────────────────────────────────┐
│ INGESTION (offline) │
│ Docs (JD + blog) → clean → chunk → embed → pgvector │
├───────────────────────────────────────────────────────────┤
│ QUERY (online) │
│ বাংলা প্রশ্ন │
│ → embed → pgvector search (top-20) │
│ → rerank (cross-encoder) → top-4 │
│ → grounded prompt বানাও → LLM → বাংলা উত্তর + source │
│ → (দরকারে) tool: skill_gap() │
├───────────────────────────────────────────────────────────┤
│ EVALUATION │
│ golden set → recall@k + faithfulness → report │
└───────────────────────────────────────────────────────────┘
🧩 ৪. Series 08-এর প্রতিটা ধারণা কোথায় বসল
| Episode | ধারণা | এই project-এ ভূমিকা |
| E01 | Prompt engineering | grounded system prompt, "জানি না" নিয়ম, structured উত্তর |
| E02 | Embeddings | বাংলা প্রশ্ন ও chunk vector-এ রূপান্তর |
| E03 | Vector DB (pgvector) | chunk + metadata store, ANN search |
| E04 | RAG architecture | পুরো ingestion+query pipeline |
| E05 | Reranking, filtering | retrieval quality — সেরা chunk উপরে |
| E06 | Evaluation | golden set-এ recall + faithfulness প্রমাণ |
| E07 | Agent/tools | skill_gap tool — শুধু দরকারে |
| E08 | Fine-tuning | সচেতনভাবে না করা — RAG যথেষ্ট |
📥 ৫. Ingestion pipeline (offline)
নতুন document এলে একবার চলে — clean, chunk, embed, store:
from sentence_transformers import SentenceTransformer
import psycopg2
embed = SentenceTransformer(
"sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
)
conn = psycopg2.connect("dbname=jobs user=postgres")
def chunk_text(text, size=400, overlap=50):
words = text.split()
step = size - overlap
return [" ".join(words[i:i + size])
for i in range(0, len(words), step)
if words[i:i + size]]
def ingest(doc_id, source, text):
cur = conn.cursor()
for ci, chunk in enumerate(chunk_text(text)):
vec = embed.encode(chunk, normalize_embeddings=True).tolist()
cur.execute(
"INSERT INTO kb_chunks "
"(doc_id, source, chunk_index, content, embedding) "
"VALUES (%s, %s, %s, %s, %s)",
(doc_id, source, ci, chunk, vec),
)
conn.commit()
source metadata রাখছি — যাতে query-তে filter করা যায় এবং উত্তরে citation দেওয়া যায়।
ভালো metadata = ভালো retrieval + বিশ্বাসযোগ্যতা।
📤 ৬. Query pipeline (online)
প্রতিটা প্রশ্নে চলে — embed → retrieve → rerank → grounded prompt → LLM:
from openai import OpenAI
from sentence_transformers import CrossEncoder
client = OpenAI()
reranker = CrossEncoder("cross-encoder/ms-marco-MiniLM-L-6-v2")
def retrieve(question, k=20):
q = embed.encode(question, normalize_embeddings=True).tolist()
cur = conn.cursor()
cur.execute(
"SELECT content, source FROM kb_chunks "
"ORDER BY embedding <=> %s::vector LIMIT %s",
(q, k),
)
return cur.fetchall() # [(content, source), ...]
def rerank(question, rows, top=4):
pairs = [(question, r[0]) for r in rows]
scores = reranker.predict(pairs)
ranked = sorted(zip(rows, scores),
key=lambda x: x[1], reverse=True)
return [r for r, _ in ranked[:top]]
💻 ৭. Code: assistant-এর core একসাথে
এবার সব জুড়ি। grounded prompt-এ "শুধু context, না থাকলে জানি না" নিয়ম, আর source citation:
SYSTEM = (
"তুমি একজন সহায়ক Bangla assistant। শুধুমাত্র নিচের "
"CONTEXT ব্যবহার করে বাংলায় উত্তর দাও। প্রতিটা তথ্যের সাথে "
"[source] উল্লেখ করবে। CONTEXT-এ উত্তর না থাকলে স্পষ্ট "
"বলবে: 'এই তথ্য আমার knowledge base-এ নেই।' কিছু বানাবে না।"
)
def answer(question: str) -> str:
rows = retrieve(question, k=20)
if not rows:
return "এই তথ্য আমার knowledge base-এ নেই।"
best = rerank(question, rows, top=4)
context = "\n\n".join(
f"[{src}] {content}" for content, src in best
)
resp = client.chat.completions.create(
model="gpt-4o-mini",
temperature=0,
messages=[
{"role": "system", "content": SYSTEM},
{"role": "user",
"content": f"CONTEXT:\n{context}\n\nপ্রশ্ন: {question}"},
],
)
return resp.choices[0].message.content
print(answer("Python জানা junior-দের জন্য কোন role ভালো?"))
লক্ষ্য করুন — কোনো fine-tuning নেই, কোনো model training নেই। শুধু retrieval + reranking + grounded
prompt। এটাই বেশিরভাগ বাস্তব GenAI feature-এর চেহারা।
🔤 ৮. Bangla-নির্দিষ্ট চ্যালেঞ্জ
- Tokenization: অনেক model বাংলা text বেশি token-এ ভাঙে — context window ও খরচে প্রভাব ফেলে।
- Embedding quality: সব embedding model বাংলায় সমান ভালো নয়; multilingual model বেছে নিন এবং eval দিয়ে যাচাই করুন।
- মিশ্র ভাষা: বাস্তব বাংলা প্রশ্নে English term থাকে ("Python developer লাগবে?") — multilingual model এটা ভালো সামলায়।
- উত্তরের ভাষা: prompt-এ স্পষ্ট করুন "বাংলায় উত্তর দাও", নাহলে model English-এ চলে যেতে পারে।
এই বাস্তব চ্যালেঞ্জগুলো চেনা ও সমাধান করাই দেখায় আপনি শুধু tutorial নয়, একটা সত্যিকারের Bangla
product নিয়ে ভেবেছেন — যা বাংলাদেশের চাকরির বাজারে আলাদা মূল্য রাখে।
📊 ৯. Evaluation দিয়ে প্রমাণ করা
capstone মানেই "মনে হচ্ছে কাজ করছে" নয়। E06-এর golden set + recall harness এই assistant-এ
চালান — baseline (vector only) বনাম full (rerank + filter) তুলনা করে একটা table বানান:
# উদাহরণ ফলাফল (আপনার নিজের golden set-এ)
# ─────────────────────────────────────────
# config recall@5 faithfulness
# vector-only 0.62 0.78
# + rerank 0.81 0.86
# + rerank + filter 0.88 0.91
এই একটা table-ই আপনার README ও interview-এর সবচেয়ে শক্তিশালী অস্ত্র — "আমি শুধু বানাইনি, মেপে
প্রমাণ করেছি যে প্রতিটা সিদ্ধান্ত quality বাড়িয়েছে।"
🙏 ১০. কী কী সচেতনভাবে বাদ দিলাম (সততা)
একজন ভালো engineer সততার সাথে বলে system এখন কী করে না:
- কোনো fine-tuning নেই (RAG যথেষ্ট ছিল — এটা সিদ্ধান্ত, অক্ষমতা নয়)।
- এখনো hybrid search যোগ করা হয়নি — technical term-heavy query-তে পরে যোগ করা যায়।
- Production-grade auth, caching, rate-limit, deployment — এগুলো Series 09-এর কাজ।
- Hallucination কমানো হয়েছে, দূর হয়নি — তাই sensitive উত্তরে source দেখানো বাধ্যতামূলক।
💼 ১১. Boss Question
Boss: "এই assistant দিয়ে আমার কোম্পানির কী লাভ?"
উত্তর: কর্মী বা customer বাংলায় প্রশ্ন করলে কোম্পানির নিজের document থেকে তাৎক্ষণিক,
source-সহ উত্তর পায় — support সময় ও খরচ কমে, ভুল কমে। নতুন document এলে শুধু ingestion চালাই,
model retrain লাগে না। আর evaluation table দিয়ে আমরা quality প্রমাণ করতে পারি deploy করার আগেই।
মানে — কম খরচে, নিজের data-র উপর, পরিমাপযোগ্য মানের একটা বাংলা AI সেবা।
🔎 ১২. Job Requirement Decoder
JD: "Build end-to-end GenAI / LLM-powered applications"।
১. কী বোঝায়? একাধিক component (embed, vector DB, LLM, eval) জুড়ে একটা সম্পূর্ণ, কাজ-করা AI product বানাতে পারা।
২. কেন চায়? কোম্পানির দরকার deploy-যোগ্য feature, বিচ্ছিন্ন demo নয়।
৩. কোন সমস্যা সমাধান করে? private data-র উপর বিশ্বাসযোগ্য, source-সহ প্রশ্নোত্তর।
৪. junior-এর কী জানা লাগে? RAG pipeline জোড়া, reranking, grounded prompt, evaluation, LLM app vs training পার্থক্য।
৫. এখনই কী master লাগে না? multi-agent orchestration, বড় স্কেল distributed retrieval, custom model।
৬. GitHub-এ কীভাবে দেখাবে? এই capstone repo — architecture diagram, ingestion+query code, eval table, "কী বাদ দিলাম ও কেন" section।
৭. interview প্রশ্ন? "একটা domain knowledge assistant design করো", "quality কীভাবে নিশ্চিত করলে?", "কেন fine-tune করোনি?"
⚠️ ১৩. সাধারণ ভুল
ভুল ১: সব component একসাথে না জুড়ে বিচ্ছিন্ন demo দেখানো। → end-to-end একটা flow দেখান।
ভুল ২: evaluation বাদ দেওয়া। → eval table ছাড়া capstone দুর্বল।
ভুল ৩: Bangla-তে English embedding model ব্যবহার। → multilingual + eval দিয়ে যাচাই।
ভুল ৪: citation/grounding না রাখা। → বিশ্বাসযোগ্যতা ও hallucination নিয়ন্ত্রণ হারায়।
ভুল ৫: এটাকে "model training" বলে দাবি করা। → এটা LLM application; স্পষ্ট থাকুন।
🎤 ১৪. Interview Prep: এই project কীভাবে বোঝাবেন
৩০-সেকেন্ড pitch: "আমি একটা Bangla knowledge assistant বানিয়েছি — RAG-based।
Document chunk করে multilingual embedding-এ pgvector-এ রাখি; query-তে vector search করে
cross-encoder দিয়ে rerank করি, তারপর grounded prompt দিয়ে source-সহ বাংলা উত্তর দিই। quality
একটা golden set-এ recall ও faithfulness দিয়ে মাপি — rerank যোগ করে recall ০.৬২ থেকে ০.৮৮-এ
নিয়েছি। fine-tune করিনি কারণ RAG যথেষ্ট ছিল।"
সম্ভাব্য follow-up: "hallucination কীভাবে সামলালে?", "chunk size কীভাবে বাছলে?",
"scale বাড়লে কী বদলাবে?" — প্রতিটার উত্তর এই সিরিজের episode-গুলোতে আছে।
✍️ ১৫. হাতে-কলমে
নিজের একটা ছোট knowledge base বাছুন (যেমন আপনার প্রিয় ৫টা blog বা কিছু বাংলা FAQ)। এই episode-এর
ingestion + query code দিয়ে একটা mini assistant বানান। ১০টা প্রশ্নের golden set-এ recall মাপুন।
তারপর rerank যোগ করে আগে-পরে তুলনা করে একটা ছোট table README-তে লিখুন — এটাই আপনার প্রথম
portfolio-grade GenAI project।
🚀 ১৬. Project Connection ও পরবর্তী Series
এটাই flagship-এর V6/V7 consolidated এবং standalone P7 (Bangla AI Knowledge
Assistant) — Series 08-এর GenAI capstone। কিন্তু এটা এখনো একটা script/notebook। বাস্তব
চাকরিতে এটাকে হতে হবে একটা API, containerized, deployed ও monitored service —
সেটাই Series 09 (Notebook থেকে Production AI)-এর কাজ। সেখানে আমরা এই assistant-কে
FastAPI + Docker + cloud-এ তুলব।
📌 ১৭. সারসংক্ষেপ
✓ Series 08-এর সব ধারণা এক capstone-এ জুড়লাম: Bangla AI Knowledge Assistant
✓ ingestion (offline) + query (online) + evaluation — সম্পূর্ণ RAG system
✓ embed → pgvector → rerank → grounded prompt → source-সহ বাংলা উত্তর
✓ Bangla-নির্দিষ্ট চ্যালেঞ্জ (tokenization, embedding, মিশ্র ভাষা) সচেতনভাবে সামলানো
✓ evaluation table দিয়ে প্রতিটা সিদ্ধান্তের প্রভাব প্রমাণ
✓ fine-tuning সচেতনভাবে বাদ — এটা model training নয়, একটা LLM application
✓ পরের ধাপ: Series 09-এ এটাকে production API-তে রূপান্তর
অভিনন্দন! আপনি এখন একটা সম্পূর্ণ GenAI application-এর architecture বোঝেন ও বানাতে
পারেন — যা বাংলাদেশের AI/ML চাকরির বাজারে সবচেয়ে চাহিদাসম্পন্ন skill-গুলোর একটি। এবার এটাকে
production-ready করার পালা।