অধ্যায় 11 · প্র্যাকটিস ল্যাব ও ক্যাপস্টোন
ক্যাপস্টোন, চিট শিট ও এরপর কী
- পৃষ্ঠা 22 / 22
- 23 মিনিট পড়া
আক্রার কোয়ামে KnowledgeOps রিলিজ ক্যান্ডিডেট এমন একজন রিভিউয়ারের হাতে তুলে দিচ্ছেন, যিনি এটা আগে দেখেননি। তিনি তিনটা প্রশ্ন করবেন: ঠিক কী সরবরাহ করা হয়েছে, সংখ্যাগুলো কী অনুমতি দেয়, আর রাতে ভেঙে পড়লে কী ঘটে। রিপোজিটরি থেকেই এক ঘণ্টায়, কোয়ামে ঘরে না থেকেও, তিনটার উত্তর পাওয়া গেলে ক্যাপস্টোন শেষ। এই পাতাই সেই এক ঘণ্টা: ব্রিফ ও দশটা ডেলিভারেবল স্ক্রিপ্টে যাচাই, রুব্রিক ও রিলিজ নিয়ম, চিট শিট, রানবুকের রূপরেখা, সত্যিকারে ঘটিয়ে দেখা ব্যর্থতার সমস্যা-সমাধান টেবিল, পরীক্ষার প্রস্তুতি আর সামনের পথ। (এটা একটা বোঝানোর গল্প।)
সবকিছু অফলাইনে চলে। মডেলটা একটা বদলি (আসল মডেল কম অনুমানযোগ্য, আর ঠিক সে কারণেই টেস্ট করতে হয়), ঘড়িটা নকল, আর সৎ ফলাফল এখনো NO-GO: এই পাতা রিলিজ ক্যান্ডিডেট মেরামত করে না, আর এর স্ক্রিপ্ট সেই রায় কখনো উল্টে দিতে পারে না। পাতাটা একটা ফোল্ডার advcapstone/ আর দুটো টেস্ট ফাইল যোগ করে; যা আছে তার কিছু বদলায় না। মূল্যায়নযোগ্য অনুশীলন আছে প্র্যাকটিস ল্যাব পাতায়; এখানে তা আবার দেওয়া হয়নি।
যা শিখবেন
- ক্যাপস্টোন ব্রিফ, দুটো বিকল্প (RAG বা নিয়ন্ত্রিত এজেন্ট), দশটা ডেলিভারেবল, এবং প্রতিটির পেছনের ঠিক কোন আগের পাতা ও কিট মডিউল, সঙ্গে চালানোর মতো একটা চেক।
- রুব্রিক কীভাবে প্রমাণের সঙ্গে মেলে, আর উঁচু স্কোর ও গুরুতর ব্যর্থতা একসঙ্গে এলে রিলিজ নিয়ম কীভাবে কাজ করে।
- এক পাতার চিট শিট (যাচাই-করা কমান্ড, ট্রাস্ট বাউন্ডারিসহ আর্কিটেকচার প্যাটার্ন, রানবুকের রূপরেখা) এবং সত্যিকারে ঘটানো ব্যর্থতা থেকে বানানো সমস্যা-সমাধান টেবিল।
- তিনটা পরীক্ষার প্রস্তুতি, আর এরপর কোথায় যাবেন: বিশেষায়িত পথ, এই কোর্স যা বাদ রেখেছে, এবং পুরো কিটের সৎ সীমা।
ক্যাপস্টোন ব্রিফ ও তার দশটা ডেলিভারেবল
লক্ষ্য। একটা বাস্তবসম্মত, সংকীর্ণ পরিসরের ব্যবহারের জন্য রিলিজ ক্যান্ডিডেট দিন, একটা আর্কিটেকচার বেছে তার পক্ষে যুক্তি দিন। RAG বিকল্প মানে অনুমতি-সচেতন হাইব্রিড রিট্রিভাল, রিরাংকিং, সাইটেশন, ইনজেশন আপডেট ও মাপা যায় এমন রিট্রিভাল মান। এজেন্ট বিকল্প মানে নিয়ন্ত্রিত পরিকল্পনা, স্পষ্ট স্টেট, টুলের অনুমতি, সীমাবদ্ধ কার্যসম্পাদন এবং গুরুতর পরিণতির কাজে মানুষের অনুমোদন। দুটোতেই মূল্যায়ন, ট্রেসিং, নিরাপত্তা যাচাই ও ডিপ্লয়মেন্ট লাগে। এখানে ব্যবহারটা কেস্ট্রেল স্টাফ হেল্প অ্যাসিস্ট্যান্ট, আর ক্যাপস্টোন আর্কিটেকচার ও ইন্টিগ্রেশন পাতায় বেছে নেওয়া হয়েছিল RAG। নতুন কিছু বানানো হয়নি: ক্যাপস্টোন মানে জোড়া দেওয়া ও প্রমাণ করা।
| # | ডেলিভারেবল | পাতা | কিট মডিউল | চেক |
|---|---|---|---|---|
| 1 | ট্রাস্ট বাউন্ডারিসহ আর্কিটেকচার ও ডেটা-ফ্লো ডায়াগ্রাম | ক্যাপস্টোন আর্কিটেকচার ও ইন্টিগ্রেশন, থ্রেট মডেলিং ও ইনজেকশন টেস্টিং | knowledgeops.architecture, threatlayer | D1 |
| 2 | ভার্সন-করা ইনজেশন বা টাস্ক-স্টেট নকশা | ইনজেশন ও অনুমতি-সচেতন রিট্রিভাল, রিট্রিভাল অপারেশন ও ডেটার সতেজতা | ingest.kb, verify, stableid | D2 |
| 3 | প্রোভাইডার-নিরপেক্ষ মডেল ইন্টারফেস, অফলাইন নকল ক্লায়েন্ট | প্রোভাইডার-নিরপেক্ষ LLM ক্লায়েন্ট, অ্যাডাপ্টার, কনফিগারেশন ও এরর হ্যান্ডলিং | knowledgeops.contracts, llmlayer | D3 |
| 4 | হোল্ডআউটসহ মূল্যায়ন ডেটাসেট, নথিভুক্ত মেট্রিক | মূল্যায়নের নকশা ও জাজ ক্যালিব্রেশন, মজবুত মেট্রিক ও রিলিজ গেট | evalkit.dataset, knowledgeops.criteria, gate | D4 |
| 5 | রিট্রিভাল বেঞ্চমার্ক বা এজেন্টের টুল-ব্যবহার মূল্যায়ন | হাইব্রিড রিট্রিভাল ও এরর বিশ্লেষণ, রিরাংকিং ও রিট্রিভাল মূল্যায়ন | retrieval.benchmark (agent: evalkit.tooluse) | D5 |
| 6 | LLM-as-a-judge পরীক্ষা, সীমা ও ক্যালিব্রেশন | মূল্যায়নের নকশা ও জাজ ক্যালিব্রেশন | evalkit.judge, calibrate | D6 |
| 7 | স্ট্রাকচার্ড লগ, ট্রেস নমুনা, ল্যাটেন্সি, ব্যবহার ও খরচের রিপোর্ট | স্ট্রাকচার্ড লগিং ও ট্রেসিং, মনিটরিং, বাজেট ও ইনসিডেন্ট | observe, knowledgeops.report | D7 |
| 8 | থ্রেট মডেল, ইনজেকশন ফিক্সচার, আইসোলেশন টেস্ট, অবশিষ্ট-ঝুঁকির রেজিস্টার | থ্রেট মডেলিং ও ইনজেকশন টেস্টিং, গার্ডরেইল ও নিরাপত্তা রিগ্রেশন | threat, knowledgeops.isolation, stress, threatlayer | D8 |
| 9 | লোকাল ডিপ্লয়মেন্ট, হেলথ চেক, সিক্রেট নীতি, রোলব্যাক পরিকল্পনা | কন্টেইনারাইজেশন ও স্ট্রিমিং ডিপ্লয়মেন্ট, স্কেলিং, রেজিলিয়েন্স ও রোলব্যাক | serve, knowledgeops.deploycheck, runbook | D9 |
| 10 | চূড়ান্ত রিলিজ সিদ্ধান্ত: go, conditional go বা no-go, প্রমাণসহ | রিলিজের প্রমাণ ও প্রোডাকশন প্রস্তুতি | knowledgeops.verdict, release | D10 |
এজেন্ট বিকল্পে ২ (টাস্ক-স্টেট, এজেন্ট লুপ, স্টেট ও মেমরি), ৫ (টুল-ব্যবহার মূল্যায়ন) ও ৮ (অনুমোদন ও ধাপের বাজেট, মানুষের অনুমোদন ও মাল্টি-এজেন্টের সীমা) সারি বদলায়। MCP পাতা (MCP আর্কিটেকচার ও লোকাল সার্ভার, MCP নিরাপত্তা ও আন্তঃকার্যক্ষমতা) দুই বিকল্পেই প্রযোজ্য।
অ্যাকসেপ্টেন্স স্ক্রিপ্ট চালান
বিগিনার ক্যাপস্টোন (ক্যাপস্টোন, চিট শিট ও এরপর কী) তার চেকলিস্টকে capstone/accept.py স্ক্রিপ্টে বদলেছিল। এটা দশটা ডেলিভারেবলের জন্য একই কাজ করে, একই তিন অবস্থা দিয়ে, আর একইভাবে শুরু করে: রিলিজ ক্যান্ডিডেট একবার চালিয়ে প্রমাণ পড়ে। ok: আর্টিফ্যাক্ট আছে এবং তার নিজের চেকার পরিষ্কার। gap: আর্টিফ্যাক্ট আছে এবং রিলিজ প্রমাণে সেটা নিয়ে একটা খোলা পর্যবেক্ষণ তালিকাভুক্ত (রায়ের ১৩টা ব্লকারের প্রতিটিকে স্ক্রিপ্ট তার ডেলিভারেবলে বসায়)। FAIL: আর্টিফ্যাক্ট নেই বা কোডের সঙ্গে মেলে না। বিগিনারের জানা-ফাঁকের তালিকার মতো KNOWN_COPIES ঠিক একটা জানা সমস্যাকে ছাড় দেয়, আর কোনো দিকে অমিল হলে চেক ব্যর্থ হয়।
# excerpt of kit/advcapstone/accept.py
KNOWN_COPIES = {("p10", "g01")}
def d4(c: Ctx) -> Result:
dev, hold = dataset.split(dataset.load_cases())
copies = {(a, b) for a, b, _ in leakage.leakage_report(dev, hold, {})["dev_holdout"]}
p = [] if hold else ["no holdout"]
p += [f"unlisted near-copies {sorted(copies - KNOWN_COPIES)}"] if copies - KNOWN_COPIES else []
p += [f"listed near-copy not found {sorted(KNOWN_COPIES - copies)}: remove it from KNOWN_COPIES"] if KNOWN_COPIES - copies else []
note = f"{len(dev)} dev / {len(hold)} holdout, planted copy {'~'.join(sorted(copies)[0])}, {len(criteria.load_criteria())} criteria; the {len(gate_cases())}-case gate set has no holdout"
status, text = finish(c, 4, p, note)
return ("gap", text) if status == "ok" else (status, text)মূল্যায়ন-নকশার পাতা লিকেজ চেক পরখ করতে একটা কাছাকাছি-কপি (g01-এর p10) রেখেছিল; d4 ঠিক এই জোড়াই আশা করে। তালিকা চালান।
python -m advcapstone.acceptADVANCED CAPSTONE ACCEPTANCE knowledgeops
[ok ] D1 architecture, trust boundaries 7 flows, 6 boundaries, every control imports; threat gaps 4 -> 0
[ok ] D2 versioned ingestion snapshot v3, 12 sources versioned, verify findings 0, regression go
[gap ] D3 provider-neutral, offline fake 2 tool contracts, no provider import, offline stand-in by default
open in the release evidence: M5
[gap ] D4 dataset, holdout, metrics 20 dev / 11 holdout, planted copy p10~g01, 19 criteria; the 19-case gate set has no holdout
open in the release evidence: F1, F4, K1, K3, M2
[ok ] D5 retrieval benchmark 7 variants, 24 questions, best mrr 0.897 (hybrid+overlap)
[ok ] D6 judge experiment, calibration 30 labelled pairs, agreement 0.633, kappa 0.456
[gap ] D7 logs, traces, latency, cost 19 traces well formed, p95 0.31 s (fake clock), 13 model calls
open in the release evidence: M3
[gap ] D8 threats, isolation, risks 123 isolation attempts held, probes 30/31, 8 release risks
open in the release evidence: probe e:2, K6, M1, M6
[gap ] D9 deployment, health, rollback 17 smoke steps, runbook and rollback consistent, no container run
open in the release evidence: M4, M7
[ok ] D10 final release decision NO-GO, 13 blockers, each with a fix
RUBRIC (weights add to 100)
15% Architecture and implementation quality architecture.problems, D1 D3
15% Retrieval or agent behavior retrieval.benchmark, D5
15% Evaluation quality and regression gates evalkit.ci, gate, D4 D6
20% Security and data isolation secgate, isolation, probes, D8
10% Observability, cost, and latency analysis REPORT.md, traces, D7
10% Deployment, resilience, and recovery serve.readiness, drill, D9
10% Reproducibility and documentation repro, docgen --check, D10
5% Trade-off analysis and portfolio defence design review
RELEASE RULE: a high total cannot compensate for a critical failure
[ok ] cross-tenant leakage 123 attempts, failures none
[ok ] unauthorised actions 31 probes, harm markers seen none
[ok ] exposed credentials secret scan findings 0
[skip] non-reproducible mandatory tests repro drift 0; suite: not run (pass --tests)
RELEASE DECISION (from knowledgeops.verdict, not changed here): NO-GO (13 blockers)
RESULT: DELIVERABLES COMPLETE (0 failed, 5 with open findings); release decision NO-GOপ্রতিটা গ্যাপ লাইন একটা সত্যিকারের পর্যবেক্ষণ। D3: লাইসেন্স ও ডেটা-অধিকারের পর্যবেক্ষণ কেউ পড়েননি (M5)। D4: উত্তরের সীমা F1 ও F4 ব্যর্থ (K1), আসল মডেলে রান নেই (K3, M2), আর ১৯ কেসের গেট সেটের নিজস্ব হোল্ডআউট নেই (হোল্ডআউট ৩১ কেসের মূল্যায়ন সেটে); শেষ কথাটা এই পাতায় নতুন, রায় এটা তালিকাভুক্ত করেনি। D7: আসল মডেলে লোড টেস্ট নেই (M3)। D8: প্রোব e:2, নথি যার উত্তর দিতে পারে না এমন একটা প্রশ্নের (“Do you deliver bikes to the moon?”) উত্তর দেওয়া হয়; প্রোভাইডারের শর্ত (K6, M1) ও ঝুঁকির মালিকদের স্বাক্ষর (M6) নেই। D9: কন্টেইনার বানানো হয়নি (M4), টোকেন সামলানো নিশ্চিত নয় (M7)। ডেলিভারেবল সম্পূর্ণ আর রিলিজ NO-GO দুটো আলাদা প্রশ্ন।
স্ক্রিপ্ট যা দেখাতে পারে না: উত্তর ভালো কি না (মডেল বদলি, ১৯ কেস কম), বা কোনো মানুষ কিছু রিভিউ করেছেন কি না। এটা ভুলে যাওয়া ঠেকায়; বিচার মানুষের হাতেই থাকে।
RAG না এজেন্ট: বেছে নিন, পক্ষে যুক্তি দিন
ক্যাপস্টোন আর্কিটেকচার ও ইন্টিগ্রেশন পাতার সিদ্ধান্ত-রেকর্ড আবার ব্যবহার করুন, রুচি দিয়ে তর্ক করার বদলে। এটা ব্যবহারের চাহিদা থেকে পছন্দ বের করে: এজেন্ট শুধু তখনই, যখন তা ছাড়া কোনো চাহিদা মেটে না (সিস্টেমের বাইরে কিছু বদলানো কাজ, যে ধাপের সংখ্যা ও ক্রম আগে জানা নেই, বা খোলা-প্রান্তের টুল বাছাই)। প্রথম রানে ব্যবহার যেমন লেখা আছে তেমন; দ্বিতীয়টায় একটা চাহিদা উল্টে দেওয়া হয়েছে।
from evidencedesk.knowledgeops import decision, usecase
uc = usecase.load_usecase()
for flag in (None, "write_actions"):
needs = uc.needs.model_copy(update={flag: True}) if flag else uc.needs
r = decision.decide_architecture(uc.model_copy(update={"needs": needs}))
print(f"{flag or 'as written':<14}-> {r.decision:<6} triggers {r.triggers} problems {r.problems()}")
r.triggers = []
print("agent with no trigger ->", r.problems())as written -> rag triggers [] problems []
write_actions -> agent triggers ['write_actions'] problems []
agent with no trigger -> ['agent chosen but no requirement needs it: choose the simpler architecture']কী ছাড়ছেন তা বলেই পছন্দের পক্ষে যুক্তি দিন। RAG রাখে নির্দিষ্ট, টেস্টযোগ্য পাইপলাইন, যেখানে অনুমতির বাগ শুধু রিট্রিভালে থাকতে পারে; ছাড়ে পরপর দুই লুকআপ লাগা প্রশ্ন। এজেন্ট সেই নমনীয়তা যোগ করে, দামে ধাপের বাজেট, রিস্টার্টেও টিকে থাকা স্টেট, ক্লান্ত মানুষের চোখ বুজে ক্লিক করা অনুমোদন, আর মূল্যায়নের জন্য অনেক বেশি ব্যর্থতা-ট্রেস। ডিজাইন রিভিউ (রিলিজের প্রমাণ ও প্রোডাকশন প্রস্তুতি) বিকল্প, ট্রেড-অফ আর প্রমাণ-টেস্ট লিখে রাখে।
গ্রেডিং রুব্রিক ও তার প্রমাণ
ক্যাপস্টোন ১০০-এর মধ্যে আটটা বিভাগে গ্রেড হয়। প্রমাণ ছাড়া গ্রেড মত মাত্র, তাই প্রতিটা সারি বলে প্রমাণ কোথায় আছে আর সেই প্রমাণ কী দেখাতে পারে না।
| বিভাগ | ওজন | প্রমাণ | যা দেখাতে পারে না |
|---|---|---|---|
| আর্কিটেকচার ও বাস্তবায়নের মান | ১৫% | architecture.problems, একমুখী ইমপোর্ট, D1, D3 | পরের পরিবর্তনের খরচ |
| রিট্রিভাল বা এজেন্টের আচরণ | ১৫% | retrieval.benchmark, গেটের উত্তর অংশ, D5 | আসল মডেলের আচরণ |
| মূল্যায়নের মান ও রিগ্রেশন গেট | ১৫% | evalkit.ci, knowledgeops.gate, D4, D6 | ১৯ কেস যথেষ্ট কি না |
| নিরাপত্তা ও ডেটা আইসোলেশন | ২০% | threat.secgate, আইসোলেশন প্রমাণ, প্রোব, D8 | যে আক্রমণ কেউ লেখেনি |
| পর্যবেক্ষণ, খরচ ও ল্যাটেন্সি বিশ্লেষণ | ১০% | REPORT.md, TRACE-SAMPLE.txt, D7 | আসল ল্যাটেন্সি বা আসল দাম |
| ডিপ্লয়মেন্ট, রেজিলিয়েন্স ও পুনরুদ্ধার | ১০% | serve.readiness, রানবুক ড্রিল, D9 | বানিয়ে চালানো কন্টেইনার |
| পুনরুৎপাদনযোগ্যতা ও ডকুমেন্টেশন | ১০% | knowledgeops.repro, docgen --check, D10 | অন্য মেশিন ও প্ল্যাটফর্ম |
| ট্রেড-অফ বিশ্লেষণ ও পোর্টফোলিও উপস্থাপনা | ৫% | ডিজাইন রিভিউ, সিদ্ধান্ত-রেকর্ড | মুখে কতটা ভালো যুক্তি দেন |
ওজনের যোগফল ১০০, আর নিরাপত্তা ও আইসোলেশনের ওজন সবচেয়ে বেশি (২০)। মডেল কোনো বিভাগ নয়: কোর্স তার চারপাশের প্রকৌশল গ্রেড করে। স্ক্রিপ্ট ওজন ছাপে ও যোগফল ১০০ কি না দেখে; KnowledgeOps-এর স্কোর বানায় না, কারণ স্কোরের জন্য রিভিউয়ার লাগে।
রিলিজ নিয়ম, একটা সমাধান-করা উদাহরণসহ
উঁচু মোট স্কোর গুরুতর নিরাপত্তা-ব্যর্থতার ক্ষতিপূরণ হতে পারে না। টেন্যান্টের মধ্যে ডেটা ফাঁস, অননুমোদিত কাজ, ফাঁস হওয়া ক্রেডেনশিয়াল বা পুনরুৎপাদনহীন বাধ্যতামূলক টেস্ট পাস করার আগে সংশোধন দাবি করে। accept.rule(scores, failed) ভারযুক্ত মোট হিসাব করে (প্রতি বিভাগে ০ থেকে ১ স্কোর গুণ তার ওজন), তারপর যেকোনো গুরুতর ব্যর্থতা তা বাতিল করতে দেয়।
উদাহরণটা সবখানে ০.৯৫ পাওয়া একটা কাল্পনিক জমায় নিয়মটা চালায়, টেন্যান্ট ফাঁস ছাড়া ও সহ; তারপর আসল ক্যান্ডিডেটে চারটা শর্ত মাপে।
from advcapstone import accept
strong = {k: 0.95 for k in accept.WEIGHTS} # a hypothetical submission that is excellent everywhere
print("no critical failure :", accept.rule(strong))
print("one tenant leak :", accept.rule(strong, ["cross-tenant leakage"]))
ctx = accept.build_ctx() # the real KnowledgeOps release candidate
for name, ok, detail in accept.critical_gates(ctx, None):
print(f"{name:<34}{'not measured' if ok is None else 'held' if ok else 'FAILED':<13}{detail}")no critical failure : (95.0, 'PASS')
one tenant leak : (95.0, 'REMEDIATE: cross-tenant leakage')
cross-tenant leakage held 123 attempts, failures none
unauthorised actions held 31 probes, harm markers seen none
exposed credentials held secret scan findings 0
non-reproducible mandatory tests not measured repro drift 0; suite: not run (pass --tests)একই ৯৫.০ এক লাইনে পাস করে, পরের লাইনে সংশোধন দাবি করে: মোট বদলায়নি, বদলেছে ফাঁস। আসল ক্যান্ডিডেটে তিনটা শর্ত টিকেছে (তিনটা দরজা দিয়ে ১২৩ আইসোলেশন চেষ্টা, ক্ষতির চিহ্ন ছাড়া ৩১ প্রোব, সিক্রেট-আকৃতির স্ট্রিং নেই), আর চতুর্থটা --tests না দিলে মাপা হয় না, কারণ বাদ-দেওয়া স্যুট পাস-করা স্যুট নয়। KnowledgeOps NO-GO অন্য কারণে (ব্যর্থ সীমা, অস্বাক্ষরিত সাইন-অফ): গুরুতর ব্যর্থতা মানে “স্কোর যাই হোক পাস করা যাবে না”, আর কিটের রায় আরও কড়া, যেকোনো ব্লকারেই না বলে।
চিট শিট: কমান্ড
সবকিছু কিট ফোল্ডার থেকে চালান (যেখানে pyproject.toml আছে)। এক্সিট কোড ১ প্রায়ই একটা সিদ্ধান্ত, ক্র্যাশ নয়: BLOCK বলা গেট আর NO-GO বলা রায় ইচ্ছাকৃতভাবেই ১ দেয়, তাই কোডের পাশাপাশি ছাপা শেষ লাইনও পড়ুন। সেটআপ (এনভায়রনমেন্ট ও পিন-করা রিকোয়ারমেন্ট) একমাত্র ধাপ যাতে নেটওয়ার্ক লাগে, তা আবার দেওয়া হয়নি।
| কাজ | কমান্ড | এক্সিট |
|---|---|---|
| সব টেস্ট (শেষ লাইন পড়ুন) | python -m pytest | 0 |
এই পাতার চেকলিস্ট (--tests কি ছাড়াই স্যুট যোগ করে) | python -m advcapstone.accept | 0 |
| রিলিজ ক্যান্ডিডেট রান, গেট, সিদ্ধান্ত প্যাক | python -m evidencedesk.knowledgeops [.gate | .release --out DIR] | 1 |
| পুনরুৎপাদন রেকর্ড | python -m evidencedesk.knowledgeops.repro | 0 |
মূল্যায়ন গেট (--init REASON, --promote REASON) | python -m evidencedesk.evalkit.ci | 1 |
| নিরাপত্তা রিগ্রেশন গেট, নিরাপত্তা প্যাক | python -m evidencedesk.threat.secgate | .secpack | 0 | 1 |
| থ্রেট মডেলের সামঞ্জস্য | python -m evidencedesk.threat | 0 |
| রিট্রিভাল বেঞ্চমার্ক | python -m evidencedesk.retrieval.benchmark | 0 |
| ডিপ্লয়মেন্ট প্রস্তুতি, স্ট্যাটিক কন্টেইনার চেক | python -m evidencedesk.serve.readiness | .container | 0 |
| ইনসিডেন্ট ল্যাব, ইনজেশন অপারেশন ল্যাব | python -m evidencedesk.observe.incident_lab | evidencedesk.ingest.opslab | 0 |
রিলিজ চেক (--tests স্যুট যোগ করে), জেনারেট-করা ডকুমেন্ট | python -m evidencedesk.release | evidencedesk.docgen --check | 0 |
python -m advcapstone.cheat --run সেগুলো সত্যিই চালায় ও প্রতিটির এক্সিট কোড এবং প্রত্যাশিত এক লাইন আউটপুট মেলায়। মূল্যায়ন গেট ইচ্ছাকৃতভাবে দুবার ১ দেয়: পাঠানো ক্যান্ডিডেট ব্লক হয়, বেসলাইন সেটিংসও ব্লক হয়, কারণ বেসলাইন রেকর্ড, অনুমোদন নয়।
python -m advcapstone.cheat --run[ok ] capstone checklist exit 0 (expected 0)
[ok ] release candidate run exit 1 (expected 1)
[ok ] release candidate gate exit 1 (expected 1)
[ok ] release pack and decision exit 1 (expected 1)
[ok ] reproducibility record exit 0 (expected 0)
[ok ] evaluation gate (candidate v2) exit 1 (expected 1)
[ok ] evaluation gate (baseline settings) exit 1 (expected 1)
[ok ] security regression gate exit 0 (expected 0)
[ok ] security verification pack exit 1 (expected 1)
[ok ] threat model consistency exit 0 (expected 0)
[ok ] retrieval benchmark exit 0 (expected 0)
[ok ] deployment readiness exit 0 (expected 0)
[ok ] container files (static) exit 0 (expected 0)
[ok ] incident lab exit 0 (expected 0)
[ok ] ingestion operations lab exit 0 (expected 0)
[ok ] release checks exit 0 (expected 0)
[ok ] generated documents exit 0 (expected 0)টুল নোট (২০২৬-১০-১২ অনুযায়ী): কিট MCP Python SDK ২.৩.০ এবং প্রোটোকলের সংস্করণ 2026-07-28 পিন করে (VERIFY: দুটোই ঘন ঘন বদলায়, SDK-তে একাধিক নিরাপত্তা অ্যাডভাইজরি এসেছে, তাই প্রতিটা রিলিজে পিন আবার দেখুন)। বদলানোর আগে বর্তমান ডকুমেন্টেশন দেখে নিন।
চিট শিট: এক পাতায় আর্কিটেকচার
আটটা প্যাটার্ন, প্রতিটিতে অনুরোধের পথ আর যেখানে বিশ্বাস থামে। প্রম্পট গার্ডরেইল নয়: প্রতিটা সীমা কোডে পাহারা পায় এবং তার টেস্ট আছে। B1 থেকে B7 থ্রেট মডেলের বাউন্ডারি আইডি।
1 RAG caller --B1--> edge --> pipeline --B5--> index (tenant + ACL filter BEFORE ranking)
pipeline --B2--> model --B3--> checks (schema, links, secrets) --> reply, cited chunk ids
2 Hybrid + rerank query --> sparse + dense --> fusion --> reranker (top N only) --> top k to the context
the filter runs first; scores are signals, not probabilities
3 MCP boundary app --B6--> tool server over stdio; tool list pinned, arguments validated, results untrusted
the protocol gives interoperability, not authentication
4 Controlled agent plan --> step budget --> tool gate (allow-list, contract) --B4--> read-only tools
consequential action --> approval queue --> a person decides --> checkpoint, resume
5 Multi-agent coordinator --> planner / researcher / reviewer; one budget; typed envelopes;
a worker's text is data for the next one, never an instruction
6 Ingestion source --> parse --> clean --> classify --> quarantine hostile --> chunk --> index
versioned manifests, stable ids, ACL stored per chunk, verify() after every run
7 Observe request --> spans per stage --> events with lengths, not content --B7--> redaction
metrics, SLOs, alerts, budgets; incident --> runbook --> blameless postmortem
8 Deployment edge (token, size, quota, admission) --> app --> /health, /ready with reason codes
secrets as files, pinned lock file, canary behind a gate, a rollback plan per unit
B1 user>app B2 app>model B3 model>app B4 app>tools B5 app>stores B6 app>third parties B7 app>observers
UNTRUSTED: the caller, documents, model replies, tool results, other agents' text. Trusted only after code checks it.অপারেশনাল রানবুকের রূপরেখা
রানবুক পড়েন ক্লান্ত কেউ রাতে, তাই সেটা ছোট, ক্রমবদ্ধ এবং নামে নয়, ভূমিকায় মালিকানা-ভাগ করা। রিলিজের প্রমাণ ও প্রোডাকশন প্রস্তুতি পাতার রূপরেখা (knowledgeops.runbook) আবার ব্যবহার করুন: মালিকসহ নিয়মিত কাজ; প্রতিটা ইনসিডেন্ট বিভাগের একটা এন্ট্রি (তীব্রতা, মালিকের ভূমিকা, ট্রিগার, ক্রমিক ধাপ, যাচাই); একটা প্রথম পদক্ষেপ (কিল সুইচ বা সার্চ-অনলি মোড, ডিপ্লয় লাগে না); প্রতি রিলিজ ইউনিটের (অ্যাপ্লিকেশন, ডিপেন্ডেন্সি, মডেল, প্রম্পট, কনফিগ) এক সারির রোলব্যাক পরিকল্পনা, আগের সংস্করণ, চেক ও মিনিটসহ; নকল ঘড়িতে ড্রিল; এবং দোষারোপহীন পোস্টমর্টেম (মনিটরিং, বাজেট ও ইনসিডেন্ট)। কোড রূপরেখা যাচাই করে: প্রতিটা বিভাগের এন্ট্রি আছে, লিক এন্ট্রি শুরু হয় উত্তর বন্ধ করে, কারও নাম নেই, প্রতিটা রোলব্যাক ইউনিট এমন টেস্টে নির্দেশ করে যা আছে।
from evidencedesk.knowledgeops import runbook
book = runbook.load_runbook()
for name, e in book["incidents"].items():
print(f"{name:<11}{e['severity']:<6}{e['owner']:<18}{len(e['steps'])} steps")
print("runbook problems:", runbook.problems())
for d in runbook.drill():
print(f"{d.step:<30}{d.code:<32}breaker {d.state}")leak SEV1 security on-call 5 steps
security SEV2 security on-call 4 steps
provider SEV2 app on-call 4 steps
retrieval SEV3 data on-call 4 steps
regression SEV3 app on-call 3 steps
overload SEV3 app on-call 3 steps
runbook problems: []
provider failing, request 1 failed/server breaker closed
provider failing, request 2 failed/server breaker closed
provider failing, request 3 failed/server breaker open
breaker open: search only answered/search_only breaker open
31 s later: one trial call answered/ok breaker closed
kill switch pulled failed/temporarily_unavailable breaker closedড্রিলে: প্রোভাইডারের তিনটা ব্যর্থতায় ব্রেকার খোলে, পরের অনুরোধ মডেল কল ছাড়াই শুধু সার্চ ফলাফল পায়, ৩১ সেকেন্ড পরে একটা পরীক্ষামূলক কল ব্রেকার বন্ধ করে, কিল সুইচ উত্তর থামায়। এটা কৌশল প্রমাণ করে, পরিকল্পনার মিনিট নয়।
সমস্যা-সমাধান: লক্ষণ, কারণ, চেক, সমাধান
প্রতিটা সারি ঘটিয়ে দেখা: python -m advcapstone.cheat --trouble কিটের ফেলে-দেওয়া কপিতে একটা জিনিস ভেঙে (বা বেইট চাহিদা মতো বানিয়ে) প্রমাণ ছাপে।
| লক্ষণ | কারণ | প্রথম চেক | সমাধান |
|---|---|---|---|
DatasetDrift: ফাইল বদলেছে | নতুন সংস্করণ ছাড়া একটা মূল্যায়ন ফাইল বদলেছে | evidencedesk.release | ইচ্ছা করে সংস্করণ বাড়ান ও ম্যানিফেস্ট হালনাগাদ করুন |
ci ছাপে “not comparable” | কেস, প্রম্পট বা সেটিংস সেভ-করা বেসলাইন থেকে আলাদা | evalkit.ci | পরিবর্তন দেখুন, তারপর ci --init REASON বা --promote REASON |
/ready 503 দেয় | চাঙ্ক নেই, টেন্যান্ট পার্টিশন খালি, বা ইনডেক্স ম্যানিফেস্টের সঙ্গে মেলে না | বডির স্থির reason কোড | স্ন্যাপশট আবার লোড করুন; প্রস্তুত হওয়ার আগে ট্রাফিক নয় |
| গেট একটা সীমায় ব্লক করে | মাপা হার লেখা সীমার নিচে | knowledgeops.gate | রিট্রিভাল বা মডেল ভালো করুন; সীমা কখনো নামাবেন না |
| সিক্রেট স্ক্যান একটা ফলাফল দেখায় | কি-আকৃতির স্ট্রিং কোনো ফাইলে ঢুকেছে | evidencedesk.release | সরান, রোটেট করুন (নতুন কি দিন), বেইট চাহিদা মতো বানান |
| পুরোনো উত্তর এমন অংশ উদ্ধৃত করে যা আর নেই | নথি সংশোধিত বা সরানো হয়েছে | ingest.opslab | স্থির আইডি দিয়ে পুরোনো সাইটেশন মেলান, কী বদলেছে বলুন |
| MCP ক্লায়েন্ট ও সার্ভার একমত নয় | SDK বা প্রোটোকলের সংস্করণ পিন থেকে আলাদা | mcp_local.versions.drift | চেঞ্জলগ পড়ুন, তারপর ইচ্ছা করে পিন বদলান |
| repro বদলানো ডেটাসেট জানায় | একটা ডেটা ফাইল কমিট-করা রেকর্ড থেকে আলাদা | knowledgeops.repro | পরিবর্তন ব্যাখ্যা করুন, তারপর repro --write ও দুটোই কমিট করুন |
python -m advcapstone.cheat --troubleDatasetDrift: file changed
evidencedesk.evals.DatasetDrift: rag_cases.jsonl changed (manifest <hash>, file <hash>): bump the version, update the manifest
ci says 'changed: ...' and the numbers are not comparable
review baseline: not comparable: dataset differs (<hash> vs <hash>)
/ready answers 503
GET /ready -> 503 {"chunks": 0, "offline": true, "ready": false, "reason": "empty_index"}
the gate says BLOCK on a floor
floor: answer_correct 0.667 (8/12) is below the floor 0.85
the secret scan reports a finding
notes.md:1 provider-style key
an old answer cites a passage that is gone
kc-stores:c0 gone This passage no longer exists.
the MCP server and client disagree
sdk 2.2.0 != pinned 2.3.0
repro says datasets changed
datasets.knowledgeops/cases.jsonl: <hash> -> <hash>হ্যাশ <hash> দিয়ে ঢাকা। দুটো অবস্থা ত্রুটি নয়: secpack নকশা অনুযায়ীই NOT READY বলে (ফলাফল F-105 খোলা, একটা প্রশিক্ষণ সাইন-অফ বাকি), আর knowledgeops NOT READY বলে কারণ সীমাগুলো ব্যর্থ।
পরীক্ষার প্রস্তুতি
প্রতিটা টিউটোরিয়ালে ৩৫টা প্রশ্ন: কুইজ ১ (১০), কুইজ ২ (১০) ও হার্ড পরীক্ষা (১৫)। এগুলো প্রয়োগ ও বিচার যাচাই করে, মডেলের নাম বা দাম নয়: কোড-পড়া ও আউটপুটের প্রশ্নে ছোট কোড ও নির্দিষ্ট ইনপুট থাকে, ডিবাগিং প্রশ্নে ত্রুটির বার্তা বা ব্যর্থ অ্যাসার্শন দেওয়া হয়, ডিজাইনের প্রশ্নে যুক্তি ও ট্রেড-অফ চাওয়া হয়। কোনোটাতেই কি, GPU বা পেইড সার্ভিস লাগে না। কিটের টেস্টই সেরা অনুশীলন, কারণ প্রশ্ন একইভাবে বানানো।
| পরীক্ষা | পাতা | অনুশীলন |
|---|---|---|
| কুইজ ১: রিট্রিভাল ও MCP | p01 থেকে p04 | test_retrieval_*, test_mcp_local_* |
| কুইজ ২: এজেন্ট, ইভ্যাল ও ফাইন-টিউনিং | p05 থেকে p10 | test_agent_*, test_evalkit_*, test_robust_*, test_finetune_* |
| হার্ড পরীক্ষা (জোর p11 থেকে p20) | p01 থেকে p20 | test_observe_*, test_threat_*, test_guard_*, test_deploy_*, test_scale_*, test_ingest_*, test_retops_*, test_knowledgeops_*, test_readiness_* |
for group in "retrieval mcp_local" "agent evalkit robust finetune" "observe threat guard deploy scale ingest retops knowledgeops readiness"; do
python -m pytest --collect-only $(for g in $group; do echo tests/test_${g}_*.py; done) | tail -1 | sed "s/ in [0-9.]*s//"
done157 tests collected
274 tests collected
715 tests collectedতিনটা লাইন ওপরের তিনটা দল (হার্ড পরীক্ষার জন্য তার জোরের অংশ)। হার্ড পরীক্ষার দৃশ্যকল্পের বিষয়গুলো এমন টেস্টে মেলে যা চালিয়ে পড়া যায়:
| বিষয় | পড়ুন ও চালান |
|---|---|
| হাইব্রিড র্যাংকিং বদল | test_retrieval_fusion |
| MCP প্রোটোকল অসামঞ্জস্য | test_mcp_local_security_interop |
| বাজেট ছাড়ানো এজেন্ট লুপ | test_agent_loop |
| লম্বা উত্তর পছন্দ করা জাজ | test_evalkit_judge |
| ডেটা লিকেজসহ ফাইন-টিউনিং | test_evalkit_design, test_finetune_peft_eval |
| অনুপস্থিত ট্রেস স্প্যান | test_observe_spans |
| টেন্যান্ট-পেরোনো ক্যাশ ফাঁস | test_retops_cache, test_readiness_isolation |
| সিক্রেটের ভুল কনফিগারেশন | test_deploy_settings |
| ব্যর্থ ডিপ্লয়মেন্ট রোলব্যাক | test_scale_rollout |
একটা পদ্ধতি: টেস্ট খুলুন, অ্যাসার্শন ঢেকে ফল অনুমান করুন, তারপর চালান; ভুল হলে খুঁজুন কোন পাতা নিয়মটা শিখিয়েছিল। SDK-র বর্তমান আচরণের প্রশ্নে VERIFY ও পিন-করা সংস্করণ থাকে: অভ্যাসটা শিখুন (পিন করুন, তারপর যাচাই), সিগনেচার নয়।
এরপর কী
এখন আপনি প্রতিটা উপাদান ব্যাখ্যা করতে, কোড চালাতে, প্রত্যাশিত ও ব্যর্থতার আচরণ টেস্ট করতে এবং নকশার পক্ষে যুক্তি দিতে পারেন: কোর্সের মানদণ্ড এটাই, যার জন্য পেইড মডেল বা GPU লাগেনি। বিশেষজ্ঞ-গভীরতা যেখানে শুরু, কোর্স ইচ্ছা করেই সেখানে থেমেছে। যে কাজ চান তার সঙ্গে মেলে এমন পথ বেছে নিন:
| কী শেখায় | কোথায় আছে |
|---|---|
| মডেল ট্রেনিং, ক্লাসিক্যাল ML, ডেটা পাইপলাইন, গভীর ফাইন-টিউনিং, অ্যালাইনমেন্ট গবেষণা | ML & Data |
| ডিস্ট্রিবিউটেড সিস্টেম, GPU ক্লাস্টার, মডেল সার্ভিং, অটোস্কেলিং, ক্লাউড আর্কিটেকচার, মাল্টি-রিজিয়ন পুনরুদ্ধার | AI Infra & Ops |
| আনুষ্ঠানিক নিরাপত্তা প্রকৌশল, পেনিট্রেশন টেস্টিং, আইডেন্টিটি আর্কিটেকচার, কমপ্লায়েন্স, গভর্ন্যান্স, আইনি ব্যাখ্যা | Security & Governance |
| প্রোডাক্ট ডিসকভারি, মূল্য নির্ধারণ, এন্টারপ্রাইজ বিক্রি, গ্রাহক সফলতা | Business & Product |
| নো-কোড অটোমেশন প্ল্যাটফর্ম, ওয়ার্কফ্লো বিল্ডার, ফ্রিল্যান্স ডেলিভারি | Automation & Freelancing |
| খোলা-প্রান্তের ও মাল্টি-এজেন্ট সিস্টেম, মাল্টিমোডাল পাইপলাইন (অডিও, ভিডিও, রিয়েল-টাইম ভিশন) | অ্যাডভান্সড এজেন্ট ইঞ্জিনিয়ারিং ও বিশেষায়িত AI ইঞ্জিনিয়ারিং মডিউল, রোডম্যাপ যেখানে বসিয়েছে |
এই কোর্স যা শেখায়নি তা ওই টেবিল: এটা মডেলের চারপাশের প্রকৌশল শিখিয়েছে, অ্যাপ্লিকেশন-স্তরের থ্রেট মডেলিংসহ; নিরাপত্তা বা গভর্ন্যান্সের যোগ্যতা, আইনি পরামর্শ, প্ল্যাটফর্ম বা ব্যবসা চালু করা নয়। পুরো কিটের সৎ সীমাগুলো আপনার লিমিটেশন ফাইলেও থাকা উচিত: এমবেডার একটা খেলনা, তাই রিট্রিভাল সংখ্যা আসল এমবেডিং সম্পর্কে সামান্যই বলে; প্রতিটা মডেল নকল বা বদলি, তাই আসল ভাষা-মডেলে কোনো মাপ নেই; লোড ও ল্যাটেন্সি নকল ঘড়িতে সিমুলেটেড; বাংলা পাতা ও কেস এআই-এর লেখা, মাতৃভাষী কোনো প্রকৌশলী রিভিউ করেননি; কন্টেইনারে কিছু চলেনি, কারণ Docker চালানো হয়নি; আর প্রতি সেটে ১৯ থেকে ৩১ কেস ছোট নমুনা, ব্যবধান চওড়া। তাই ওপরের প্রতিটা ফলাফল শুধু অফলাইন প্রমাণ।
কাজের জায়গায় এটা কোথায় দেখা যায়
যে দলই LLM ফিচার পাঠায়, একই সভার মুখোমুখি হয়: একজন রিভিউয়ার, একটা তারিখ আর অসম মানের প্রমাণ। এই পাতার দক্ষতাই তার ফয়সালা করে: স্ক্রিপ্টে যাচাই-হওয়া ডেলিভারেবল তালিকা, প্রমাণসহ রুব্রিক, সংখ্যা দেখার আগে লেখা রিলিজ নিয়ম, অন্যের অনুসরণযোগ্য রানবুক, আর সৎ সীমার তালিকা। GO-র পথসহ NO-GO, পথহীন GO-র চেয়ে বেশি আস্থা পায়।
সাধারণ ভুল
- মোট দিয়ে গ্রেড করা। ৯৫ একটা ফাঁস লুকায়। আগে গুরুতর শর্তগুলো চালান; সেগুলো যোগফল বাতিল করে।
- গেট সবুজ করতে সীমা নামানো। কঠিন অনুশীলন দেখায় এটা কীভাবে ধরা পড়ে। নতুন প্রমাণ ও লিখিত কারণ ছাড়া সীমা বদলাবেন না।
- ফাইল আছে বলে ডেলিভারেবল শেষ ধরা। চেকার চালাতে হবে, আর খোলা পর্যবেক্ষণ গ্যাপ হিসেবে দৃশ্যমান থাকতে হবে।
- এক্সিট কোড ১-কে ক্র্যাশ ভাবা, বা উপেক্ষা করা। কোন কমান্ড ইচ্ছাকৃতভাবে ১ দেয় তা জানুন, আর শেষ লাইন পড়ুন।
- যে সমস্যা-সমাধান টেবিল কেউ ঘটিয়ে দেখেনি। এক মাসেই পুরোনো হয়। ওপরের মতো প্রমাণ জেনারেট করুন।
নিজে চেষ্টা করুন
- সহজ। অনুমান করুন
python -m advcapstone.accept --testsওপরের রান থেকে কোন লাইনে আলাদা আর শেষ লাইনে কী থাকে, তারপর চালান (প্রায় এক মিনিট; পাস-করা সংখ্যা N দিয়ে ঢাকা, কারণ তা বাড়ে)। প্যাকেজিং, কনফিগারেশন ও পুনরুৎপাদনযোগ্যতা আবার দেখুন: স্যুট কেন সব কি-ভ্যারিয়েবল সরিয়ে চলে? - মাঝারি। ১০ নম্বর ডেলিভারেবলে conditional go চলে।
outcome(total, critical, floors_failed, only_accepted_open)লিখুন, যাতে গুরুতর ব্যর্থতা বা ব্যর্থ সীমা কখনো conditional go না হয়; আজকের KnowledgeOps, সীমা পাস করা ভবিষ্যৎ, আর টেন্যান্ট ফাঁসসহ ৯৮ পয়েন্টের জমায় চালান। সীমা কেন দর-কষাকষির জিনিস নয়, তার জন্য মজবুত মেট্রিক ও রিলিজ গেট আবার দেখুন। - কঠিন। ভুল পথে গেট সবুজ করুন: কিটের ফেলে-দেওয়া কপিতে F1 ০.৬৬ ও F4 ০.৮-এ নামান, তারপর গেট ও রিলিজ কমান্ড চালান। কী ধরে ফেলে, আর সিদ্ধান্ত কী? ব্যর্থ ক্রাইটেরিয়ন রায় কীভাবে দেখে, তার জন্য রিলিজের প্রমাণ ও প্রোডাকশন প্রস্তুতি আবার দেখুন।
উত্তর
সহজ। শুধু শেষ গুরুতর শর্তটা বদলায়, “মাপা হয়নি” থেকে “টিকেছে”; শেষ লাইন একই থাকে, কারণ ডেলিভারেবল ও রায় স্যুটের ওপর নির্ভর করে না।
python -m advcapstone.accept --tests | grep -E 'non-reproducible|^RESULT' | sed -E 's/[0-9]+ passed/N passed/' [ok ] non-reproducible mandatory tests repro drift 0; suite: ok N passed, 1 xfailed
RESULT: DELIVERABLES COMPLETE (0 failed, 5 with open findings); release decision NO-GOমাঝারি।
from advcapstone import accept
def outcome(total, critical, floors_failed, only_accepted_open):
if critical or floors_failed:
return "no-go"
return "conditional go" if only_accepted_open else "go"
ctx = accept.build_ctx()
floors = [v.id for v in ctx.ev.failing]
print("today :", outcome(82.0, [], floors, False), floors)
print("floors fixed :", outcome(82.0, [], [], True))
print("a tenant leak:", outcome(98.0, ["cross-tenant leakage"], [], True))today : no-go ['F1', 'F4']
floors fixed : conditional go
a tenant leak: no-goকঠিন।
import json
from pathlib import Path
from advcapstone.cheat import copy_run
def lower_floors(work: Path) -> None:
path = work / "data/knowledgeops/acceptance.json"
data = json.loads(path.read_text(encoding="utf-8"))
for c in data["criteria"]:
c["value"] = {"F1": 0.66, "F4": 0.8}.get(c["id"], c["value"])
path.write_text(json.dumps(data, indent=1), encoding="utf-8")
for module in ("evidencedesk.knowledgeops.gate", "evidencedesk.knowledgeops.release --out pack"):
out = copy_run(lower_floors, module)
print("\n".join(l for l in out.splitlines() if l.startswith(("GATE", "criteria", "DECISION", " docs", " risk"))))GATE: GO
criteria met 19/19; gate go; probes 30/31; smoke 17/17
DECISION: NO-GO (12 blockers)
docs 1 repro
risk 3 K1, K3, K6গেট বলে GO আর ১৯টার ১৯ ক্রাইটেরিয়ন পাস, তবু সিদ্ধান্ত NO-GO, ১২ ব্লকারসহ: পুনরুৎপাদন রেকর্ড ধরে ফেলে acceptance.json কমিট-করা রেকর্ডের সঙ্গে মেলে না, আর K1, K3 ও K6 থেকে যায়, কারণ মডেল, মাপ ও প্রোভাইডারের ডেটা-প্রবাহ বদলায়নি। সীমা নামিয়ে দুটো ব্লকার গেল, একটা যোগ হলো।
পাস চেকলিস্ট। সহজ: এক লাইন বদলেছে, not measured থেকে held, শেষ ফল একই। মাঝারি: no-go, conditional go, no-go, আগে গুরুতর ব্যর্থতা ও সীমা দেখা হয়। কঠিন: গেটে GO, ১৯/১৯ ক্রাইটেরিয়ন, একটা repro ব্লকার, ১২ ব্লকারসহ NO-GO, আর কেন সীমা শুধু নতুন প্রমাণে বদলায় তা বলতে পারেন। পুরো ক্যাপস্টোন: ০ ব্যর্থ, প্রতিটা গ্যাপ লাইন এমন পর্যবেক্ষণ বলে যা ব্যাখ্যা করতে পারেন, রায় প্রমাণসম্মত, ডকুমেন্ট হালনাগাদ, আর লিমিটেশন ফাইল যা মাপেননি তা তালিকাভুক্ত করে।
সবশেষে এই পাতার নিজস্ব টেস্ট চালান:
python -m pytest tests/test_advcapstone_accept.py tests/test_advcapstone_cheat.py | tail -1 | sed 's/ in [0-9.]*s//'25 passedসারসংক্ষেপ
- ক্যাপস্টোন আপনার বানানো সিস্টেম, দশটা ডেলিভারেবল চেকে প্রমাণিত, যা সৎভাবে ok, gap বা FAIL জানায়; ক্যান্ডিডেট NO-GO এবং স্ক্রিপ্ট তা বদলায় না।
- চাহিদা থেকে সিদ্ধান্ত-রেকর্ড দিয়ে RAG বা এজেন্ট বাছুন, আর কী ছাড়ছেন বলুন।
- প্রতি বিভাগে প্রমাণসহ গ্রেড করুন; গুরুতর ব্যর্থতা যেকোনো মোট বাতিল করে, ফলের সঙ্গে মেলাতে সীমা নামানো হয় না।
- এক চিট শিট: আসল এক্সিট কোডসহ যাচাই-করা কমান্ড, ট্রাস্ট বাউন্ডারিসহ আটটা প্যাটার্ন, রানবুকের রূপরেখা ও ঘটিয়ে-দেখা ব্যর্থতার টেবিল।
- সৎ সীমা ডেলিভারেবলের অংশ: খেলনা এমবেডার, নকল মডেল, সিমুলেটেড লোড, এআই-লেখা বাংলা, আসল মডেলে মাপ নেই, কন্টেইনার চালানো হয়নি।
এরপর: আর কোনো পাতা নেই। আপনি AI Engineering with LLMs: Advanced শেষ করেছেন। রিপোজিটরি, রিলিজ প্যাক, সীমার তালিকা ও নিজের নোট রেখে দিন, কারণ এগুলোই আপনার প্রমাণ। তারপর পরীক্ষা দিন, আর একটা বিশেষায়িত পথ বেছে নিন: ML & Data, AI Infra & Ops, Security & Governance, Business & Product, অথবা Automation & Freelancing; প্রতিটা শুরু হয় ঠিক সেখানে, যেখানে এই কোর্স ইচ্ছা করে থেমেছে।