Flagship: Bangla AI Knowledge Assistant — সব একসাথে

Project P7 — GenAI capstone (Series 08, Episode 09)

🔴 ADVANCED Series 08 — Generative AI Engineering Episode 09 / 09

📑 এই পর্বে যা যা আছে

🧩 ১. গল্প: সব টুকরো এবার এক ছবিতে

গত আটটা 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-এ ভূমিকা
E01Prompt engineeringgrounded system prompt, "জানি না" নিয়ম, structured উত্তর
E02Embeddingsবাংলা প্রশ্ন ও chunk vector-এ রূপান্তর
E03Vector DB (pgvector)chunk + metadata store, ANN search
E04RAG architectureপুরো ingestion+query pipeline
E05Reranking, filteringretrieval quality — সেরা chunk উপরে
E06Evaluationgolden set-এ recall + faithfulness প্রমাণ
E07Agent/toolsskill_gap tool — শুধু দরকারে
E08Fine-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-নির্দিষ্ট চ্যালেঞ্জ

এই বাস্তব চ্যালেঞ্জগুলো চেনা ও সমাধান করাই দেখায় আপনি শুধু 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 এখন কী করে না:

💼 ১১. 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 করার পালা।
© 2025 Sheikh Thanbir Alam. All Rights Reserved. thanbirtamim.github.io
এই লেখা মূল লেখকের সম্পত্তি — লিখিত অনুমতি ছাড়া কপি করে অন্য কোনো ওয়েবসাইট, ব্লগ, বই বা প্ল্যাটফর্মে প্রকাশ/বিতরণ করা কঠোরভাবে নিষিদ্ধ। Content may not be copied or republished without permission.