অধ্যায় 6 · অনুশীলন ও ক্যাপস্টোন
ক্যাপস্টোন, চিট শিট ও এরপর কী: গো/নো-গো মূল্যায়ন প্যাক
- পৃষ্ঠা 22 / 22
- 21 মিনিট পড়া
এটা অ্যাডভান্সড টিউটোরিয়ালের শেষ পাতা। এখানে বিশটা পাতার কাজ এক জায়গায় আনা হয়েছে, এমন একটা নথিতে যা অন্য কেউ পড়তে, প্রশ্ন করতে আর আবার চালিয়ে দেখতে পারেন: একটা ছোট AI ফিচারের জন্য রেসপন্সিবল-AI রিভিউ প্যাক (Responsible-AI Review Pack), যার শেষে থাকে একটা সুপারিশ।
শুধু Python 3.12 আর এর স্ট্যান্ডার্ড লাইব্রেরি লাগবে। পাতাটা একটা নতুন ফোল্ডারে একটা প্যাক বানায়, packcheck.py নামের ছোট স্ক্রিপ্ট দিয়ে সেটা পরীক্ষা করে, তারপর একটা কপি ইচ্ছে করে নষ্ট করে আবার পরীক্ষা করে।
সততার নিয়ম। স্কুল, মানুষ, তারিখ আর সংখ্যা সবই বানানো, আর ডেটাগুলো টয় ডেটা (Toy data)।
packcheck.pyশুধু নথি খুঁজে বের করে; সেগুলো সত্য, ন্যায্য বা আইনসম্মত কি না তা বলতে পারে না। মান বিচার করেন একজন মানুষ। এখানে কিছুই আইনি পরামর্শ নয়।
যা শিখবেন
- ক্যাপস্টোনে কী থাকতে হবে: ১৩টা মাইলস্টোন আর ১৩টা গ্রহণযোগ্যতার পরীক্ষা।
- একটা বানানো ফিচারের জন্য প্যাক কীভাবে জোড়া লাগাবেন, আর একটা স্ক্রিপ্ট মান বিচার না করেই কীভাবে PASS, MISSING বা NEEDS-HUMAN-REVIEW জানাতে পারে।
- পুরো টিউটোরিয়ালের একটা চিট শিট আর শব্দকোষ।
- Level 1-এ কোথায় যাবেন, আর নিজের বিচার ও নথি কীভাবে হালনাগাদ রাখবেন।
ক্যাপস্টোন: রেসপন্সিবল-AI রিভিউ প্যাক
ডেলিভারেবল। একটা সীমিত AI ফিচারের কাঠামোবদ্ধ রিভিউ: শিক্ষার্থীদের ফিডব্যাক সহকারী, সাপোর্ট-টিকিট ক্লাসিফায়ার, সিন্থেটিক-মিডিয়া লেবেলিং ফিচার, কিংবা এক বাক্যে বর্ণনা করা যায় এমন অন্য কোনো ফিচার। এটা কোর্সের সিদ্ধান্ত-কাঠামো (পরিস্থিতি থেকে রিভিউয়ের তারিখ) মেনে চলে, আর শেষ হয় একটা সুপারিশ ও তার কারণ দিয়ে: এগিয়ে যান (proceed), শর্তসহ এগিয়ে যান (proceed with conditions), অথবা এগোবেন না (do not proceed)।
নিচে "পাতা ৫" মানে এই টিউটোরিয়ালের ৫ নম্বর পাতা। প্র্যাকটিস ল্যাব: টয় ডেটা ও Python দিয়ে একটা সীমিত AI ফিচারের মূল্যায়ন আরেকটা ফিচারে এর কয়েকটা ধাপ অনুশীলন করায়, তাই আগে সেটা করে নিন।
| নং | মাইলস্টোন: যা বানাবেন | এখানকার ফাইল; সাহায্য |
|---|---|---|
| ১ | উদ্দেশ্য, পরিধি, পরিধির বাইরের ব্যবহার | README.md; পাতা ১ |
| ২ | ব্যবহারকারী, প্রভাবিত অ-ব্যবহারকারী, স্টেকহোল্ডার | README.md; পাতা ১, ১৫, ১৬ |
| ৩ | AI ও AI-ছাড়া বিকল্প | README.md; পাতা ২ |
| ৪ | ইমপ্যাক্ট অ্যাসেসমেন্ট ও রিস্ক রেজিস্টার | risk_register.json; পাতা ১, ২ |
| ৫ | টয় ডেটাসেট ও তার সীমাবদ্ধতা | toy_data.csv; পাতা ৫, ৬, ১৯ |
| ৬ | অফলাইন Python-এ ন্যায্যতার মেট্রিক | fairness.py; পাতা ৫, ৬ |
| ৭ | সিস্টেম কার্ডের খসড়া, ডেটা ডকুমেন্টেশন | system_card.json; পাতা ৭ থেকে ১০ |
| ৮ | গ্রহণযোগ্যতার মানদণ্ডসহ নিয়ন্ত্রণ-পরীক্ষার পরিকল্পনা | test_plan.json; পাতা ১৯ |
| ৯ | তদারকি, আপিল, ব্যবহার-বন্ধের শর্ত | oversight.md; পাতা ১১, ১২ |
| ১০ | ঘটনা-পরিকল্পনা, পোস্ট-মর্টেমের টেমপ্লেট | incident_plan.md; পাতা ২০ |
| ১১ | নীতি ও ফ্রেমওয়ার্ককে নিয়ন্ত্রণের সঙ্গে মেলানো | frameworks.json; পাতা ৩, ৪ |
| ১২ | খোলা আইনি, গোপনীয়তা ও প্রকিউরমেন্টের প্রশ্ন | open_questions.md; পাতা ৪, ৮, ১৭, ১৮ |
| ১৩ | কারণসহ সুপারিশ | README.md; পাতা ২, ১২, ১৪ |
১৩টা গ্রহণযোগ্যতার পরীক্ষা
যিনি প্যাকটা বানাননি, এমন একজন রিভিউয়ারের ১৩টা প্রশ্নেরই উত্তর "হ্যাঁ" হওয়া উচিত। একটা স্ক্রিপ্ট কিছু প্রমাণ খুঁজে পেতে পারে; বাকিটা একজন মানুষকে বিচার করতে হবে।
| নং | প্যাকে যা দেখাতে হবে | স্ক্রিপ্ট যা খুঁজে পায় | মানুষকে যা বিচার করতে হবে |
|---|---|---|---|
| ১ | ব্যবহার, পরিধি, স্টেকহোল্ডার | README-র পাঁচটা অংশ | পরীক্ষার মতো সংকীর্ণ কি না; কেউ বাদ পড়েননি কি না |
| ২ | সুবিধা, ক্ষতি, অনুমান, AI-ছাড়া বিকল্পের তুলনা | README-র চারটা অংশ | তুলনাটা ন্যায্য কি না |
| ৩ | রেজিস্টার: মালিক, নিয়ন্ত্রণ, অবশিষ্ট ঝুঁকি | প্রতিটা ঝুঁকিতে ওই ঘরগুলো | স্কোর যুক্তিসঙ্গত কি না; নিয়ন্ত্রণ সত্যিই চালু কি না |
| ৪ | টয় ডেটায় ঠিক ন্যায্যতার মেট্রিক | স্ক্রিপ্টটা চলে | সংখ্যা ঠিক কি না, ব্যাখ্যা সৎ কি না |
| ৫ | স্যাম্পলের আকার ও প্রতিনিধিত্বের সীমা | ডেটা ফাইল, সীমার এন্ট্রি | সীমাগুলো পূর্ণ ও সৎ কি না |
| ৬ | সিস্টেম কার্ড: জানা বনাম অজানা | দুটো তালিকা, প্রতিটা অজানার কারণ | "জানা" কথাগুলো সত্যিই জানা কি না |
| ৭ | টেস্ট প্ল্যান: প্রমাণ, মানদণ্ড | প্রতি পরীক্ষায় পাঁচটা ঘর | ফলের আগে মানদণ্ড ঠিক হয়েছে কি না |
| ৮ | তদারকি ও আপিলের পথ | তিনটা অংশ | রিভিউয়ারের সময় ও ক্ষমতা আছে কি না |
| ৯ | নিয়ন্ত্রণ ও ঘটনা-পরবর্তী রিভিউ | চারটা অংশ | চাপের মধ্যে কাজ করবে কি না |
| ১০ | ম্যাপিং: সংস্করণ, রিভিউয়ের তারিখ | দুটো ঘর; পেরিয়ে যাওয়া তারিখ | "aligned" মানে "compliant" নয় |
| ১১ | যাচাই-না-হওয়া আইনি প্রশ্নে লেবেল | স্ট্যাটাস ও কাকে জিজ্ঞেস করা হয়েছে | প্রশ্নগুলো ঠিক কি না |
| ১২ | সুপারিশ: কারণ, শর্ত | তিনটা বাক্যাংশের একটা, দুটো অংশ | যুক্তি পক্ষে দাঁড়ানোর মতো কি না |
| ১৩ | অফলাইন অনুশীলন আবার চালানো যায় | দুবার চালালে একই আউটপুট | অপরিচিত কেউ ধাপগুলো মানতে পারবেন কি না |
উদাহরণ: একটা প্যাক জোড়া লাগানো
কাল্পনিক পরিস্থিতি:
School: Brightside Language School (invented), evening English classes for adults.
Feature: HomeworkNote drafts a short feedback note on each written homework and flags
homework that may need a teacher's attention. A teacher edits and sends every note.
People: Head of Studies, six teachers, about 100 learners, reception staff.
Question: should the school pilot it for one term, and on what conditions?ব্রাইটসাইড ল্যাঙ্গুয়েজ স্কুল (কাল্পনিক) প্রাপ্তবয়স্কদের সন্ধ্যার ইংরেজি ক্লাস চালায়। তাদের HomeworkNote ফিচার প্রতিটা হোমওয়ার্কের জন্য ছোট একটা ফিডব্যাক নোট লেখে আর যেসব হোমওয়ার্কে শিক্ষকের নজর লাগতে পারে সেগুলো ফ্ল্যাগ করে; শিক্ষক প্রতিটা নোট এডিট করে পাঠান। প্রশ্ন: স্কুল এক টার্মের পাইলট চালাবে কি না, আর কোন শর্তে? এটা শুরুর পাতাগুলোর আবেদনকারী-বাছাইয়ের ফিচার নয়, কিন্তু ধাপগুলো একই। প্যাক মানে সাধারণ কিছু ফাইলের একটা ফোল্ডার। README-তে মাইলস্টোন ১ থেকে ৩ আর ১৩ আছে; তার হেডারে একজন মালিক আর একটা রিভিউয়ের তারিখ লেখা।
# file: pack/README.md
# Review pack: HomeworkNote (invented)
Owner: Head of Studies (a role)
Review date: 2027-03-01
## Purpose
Draft feedback notes on adult learners' homework and flag homework that may need a teacher.
A teacher edits and sends every note.
## Scope
One school, evening English classes, written homework, about 100 learners.
## Out of scope
Marking, ranking learners, any decision about fees or places.
## Users
Six teachers, trained on the tool.
## Affected non-users
Learners (they see the note, not the flag) and reception staff.
## Benefits
Teachers save reading time; notes arrive within a day.
## Harms
A missed flag leaves a learner without help; a wrong note can discourage.
## Assumptions
The teacher's later judgement of "needed help" is a fair label (untested).
## Alternatives
Teachers write all notes by hand, or use a shared list of common comments.
## Recommendation
proceed with conditions
## Rationale
Time is saved, but the toy check shows a group gap and the evidence is thin.
## Conditions
One-term pilot; a teacher reads every homework; a real group check at the end; the stop rule.# file: pack/risk_register.json
[
{"id": "R1", "text": "Learners who need help are missed, more often in one group",
"likelihood": 3, "severity": 4, "owner": "Head of Studies",
"controls": ["teacher reads every homework", "weekly group check"],
"res_likelihood": 2, "res_severity": 3, "evidence": "toy data only"},
{"id": "R2", "text": "Homework text goes to the vendor without a checked permission",
"likelihood": 2, "severity": 4, "owner": "Privacy adviser",
"controls": ["no names in the text sent", "vendor asked about retention"],
"res_likelihood": 2, "res_severity": 3, "evidence": "opinion"}
]টয় ডেটা: প্রতিটা গ্রুপের গণনা, লেবেল (১ = শিক্ষক পরে বিচার করেছেন শিক্ষার্থীর সাহায্য দরকার ছিল) আর ফ্ল্যাগ (১ = টুল হোমওয়ার্কটা ফ্ল্যাগ করেছে)।
# file: pack/toy_data.csv
group,label,flag,count
english,1,1,18
english,1,0,4
english,0,1,5
english,0,0,33
other,1,1,9
other,1,0,7
other,0,1,4
other,0,0,20
unrecorded,1,1,2
unrecorded,1,0,1
unrecorded,0,1,0
unrecorded,0,0,3যে গ্রুপে কেস খুব কম, স্ক্রিপ্ট তার কোনো রেট দেখায় না।
# file: pack/fairness.py
import csv
from pathlib import Path
MIN_EACH = 10 # a chosen limit: with fewer positives or negatives, no rate is reported
rows = list(csv.DictReader(open(Path(__file__).resolve().parent / "toy_data.csv")))
print("Toy data: a calculation only, not any real group.")
found = {}
for g in sorted({r["group"] for r in rows}):
c = {(int(r["label"]), int(r["flag"])): int(r["count"]) for r in rows if r["group"] == g}
tp, fn, fp, tn = c[1, 1], c[1, 0], c[0, 1], c[0, 0]
n, pos, neg = tp + fn + fp + tn, tp + fn, fp + tn
if min(pos, neg) < MIN_EACH:
print(f"{g:<11}n={n:<4}NOT REPORTED ({pos} needed help, {neg} did not; minimum {MIN_EACH})")
else:
found[g] = tp / pos
print(f"{g:<11}n={n:<4}flag rate {(tp + fp) / n:.2f} flagged among those who needed help {tp / pos:.2f}")
print(f"gap in that last rate, english minus other: {found['english'] - found['other']:.2f}")সিস্টেম কার্ডে অজানা বিষয়গুলো কারণসহ আছে; টেস্ট প্ল্যানে ফলের আগেই প্রতিটা মানদণ্ড লেখা।
# file: pack/system_card.json
{"name": "HomeworkNote (invented)", "version": "0.1", "as_of": "2026-10-12",
"known": ["drafts a note from homework text", "flags homework", "a teacher sends every note"],
"unknown": [{"what": "accuracy on handwriting scans", "why": "never tested"},
{"what": "accuracy by group on real data", "why": "only toy counts so far"}],
"data_limits": "toy counts only; the unrecorded group has 3 who needed help, so no rate"}# file: pack/test_plan.json
[
{"control": "C1", "claim": "a teacher reads every homework before a note is sent",
"evidence": "weekly sample of 20 notes", "criterion": "at least 19 show a teacher edit",
"owner": "Head of Studies", "result": "NOT TESTED"},
{"control": "C2", "claim": "the flag misses learners in one group no more than in another",
"evidence": "fairness.py on the term's data", "criterion": "gap in the last rate at most 0.10",
"owner": "Data lead", "result": "FAIL"}
]# file: pack/oversight.md
## Oversight
A teacher reads the homework and the draft and may change or delete the note. The flag never
changes a mark or a place.
## Appeal
A learner may ask the Head of Studies for a new note from another teacher, answered in 14 days.
## Stop-use
Stop, and write notes by hand, if the C2 gap is above 0.20 twice in a row, a note is sent
unread, or a privacy incident is open. Owner: Head of Studies.# file: pack/incident_plan.md
## Severity
S1 rights harm or data exposure; S2 many learners or cause unknown; S3 small and reversible;
S4 inconvenience. Unknown facts raise the level.
## Containment
Flag off, model version pinned, notes written by hand. Owner: incident lead.
## Evidence
Versions, times, counts, redacted samples. No homework text in chat.
## Post-incident review
Blameless, within 10 working days; each action has one owner, a date and a check.NIST AI RMF স্বেচ্ছামূলক, তাই প্যাকে লেখা হয় "maps to", কখনো "compliant with" নয়। আইনি প্রশ্নগুলো খোলা থাকে, কাকে জিজ্ঞেস করা হয়েছে তাসহ; এই প্যাক কোনো আইন বলে না। তারিখসহ আইনি নোটের জন্য দেখুন স্ট্যান্ডার্ড, নিয়ন্ত্রণ ও প্রয়োজন ম্যাপিং: কী, কার জন্য এবং কেন প্রযোজ্য।
# file: pack/frameworks.json
[
{"framework": "NIST AI RMF", "version": "1.0 (2023, voluntary)", "review_date": "2026-12-01",
"maps": {"Govern": "oversight.md", "Map": "risk_register.json", "Measure": "test_plan.json",
"Manage": "incident_plan.md"}},
{"framework": "School AI-use policy", "version": "2026-03 (company policy)",
"review_date": "2027-03-01", "maps": {"Govern": "README.md"}}
]# file: pack/open_questions.md
- Q1 | status: OPEN | asked: the school's privacy adviser | May homework text go to the vendor?
- Q2 | status: OPEN | asked: a lawyer in our country | Do local rules cover automated notes?চেকার
packcheck.py ১৩টা পরীক্ষা চালায়। PASS: ফাইল পাওয়া গেছে আর ঘরগুলো ভরা। MISSING: নেই বা ফাঁকা। NEEDS-HUMAN-REVIEW: শুধু মানুষ বিচার করতে পারে, কিংবা কোনো সংস্করণ অজানা বা রিভিউয়ের তারিখ পেরিয়ে গেছে। এটা কখনো ফাঁক ভরে না, মানও দেয় না।
# file: packcheck.py
import json, subprocess, sys
from datetime import date
from pathlib import Path
AS_OF = date(2026, 10, 12) # a fixed "today", so every run repeats
ROOT = Path(sys.argv[1] if len(sys.argv) > 1 else "pack")
def text(name):
p = ROOT / name
return p.read_text(encoding="utf-8") if p.is_file() else ""
def data(name):
try:
return json.loads(text(name))
except ValueError:
return None
def sections(name):
out, cur = {}, None
for line in text(name).splitlines():
if line.startswith("## "):
cur = line[3:].strip()
out[cur] = ""
elif cur:
out[cur] += line + "\n"
return {k: v.strip() for k, v in out.items()}
def verdict(missing):
if missing:
return "MISSING", "empty or absent: " + ", ".join(missing)
return "PASS", "found, filled"
def sec(name, wanted):
s = sections(name)
return verdict([w for w in wanted if not s.get(w)])
def rows(name, fields):
d = data(name)
if not isinstance(d, list) or not d:
return d, ("MISSING", name + " absent or empty")
gaps = [f"{r.get('id', r.get('control'))}.{f}" for r in d for f in fields if not r.get(f)]
return d, verdict(gaps)
def fairness():
try:
p = subprocess.run([sys.executable, "-I", "fairness.py"], cwd=ROOT,
capture_output=True, text=True, timeout=20)
return p.returncode == 0 and bool(p.stdout.strip()), p.stdout
except Exception:
return False, ""
def c05():
if len(text("toy_data.csv").splitlines()) < 2:
return "MISSING", "toy_data.csv absent or empty"
return verdict([] if (data("system_card.json") or {}).get("data_limits") else ["data_limits"])
def c06():
card = data("system_card.json") or {}
gaps = [k for k in ("known", "unknown") if not card.get(k)]
gaps += [f"unknown[{i}].why" for i, u in enumerate(card.get("unknown", [])) if not u.get("why")]
return verdict(gaps)
def c10():
d, v = rows("frameworks.json", ["framework", "version", "review_date"])
for r in d if v[0] == "PASS" else []:
try:
late = date.fromisoformat(r["review_date"]) < AS_OF
except ValueError:
return "NEEDS-HUMAN-REVIEW", r["framework"] + ": review_date is not a date"
if late or "UNKNOWN" in r["version"]:
return "NEEDS-HUMAN-REVIEW", r["framework"] + (": review date passed" if late else ": version unknown")
return v
def c11():
lines = [x for x in text("open_questions.md").splitlines() if x.startswith("- ")]
bad = [x.split("|")[0].strip("- ") for x in lines if "status:" not in x or "asked:" not in x]
return verdict(["status or asked on " + ", ".join(bad)] if bad else [] if lines else ["questions"])
def c12():
s = sections("README.md")
rec = s.get("Recommendation", "").lower()
if rec not in ("proceed", "proceed with conditions", "do not proceed"):
return "MISSING", "Recommendation is not one of the three phrases"
if not s.get("Rationale") or (rec.endswith("conditions") and not s.get("Conditions")):
return "MISSING", "Rationale or Conditions empty"
return "NEEDS-HUMAN-REVIEW", "present; a person judges the reasoning"
def c13():
a, b = fairness(), fairness()
if not (a[0] and b[0]):
return "MISSING", "the offline script did not run"
return ("PASS", "two runs, same output") if a == b else ("NEEDS-HUMAN-REVIEW", "outputs differ")
CHECKS = [
("scope", lambda: sec("README.md", ["Purpose", "Scope", "Out of scope", "Users", "Affected non-users"])),
("benefits", lambda: sec("README.md", ["Benefits", "Harms", "Assumptions", "Alternatives"])),
("risks", lambda: rows("risk_register.json", ["owner", "controls", "res_likelihood", "res_severity"])[1]),
("fairness", lambda: ("NEEDS-HUMAN-REVIEW", "it runs; a person checks the figures")
if fairness()[0] else ("MISSING", "fairness.py absent or failed")),
("data limits", c05), ("known/unknown", c06),
("test plan", lambda: rows("test_plan.json", ["claim", "evidence", "criterion", "owner", "result"])[1]),
("oversight", lambda: sec("oversight.md", ["Oversight", "Appeal", "Stop-use"])),
("incidents", lambda: sec("incident_plan.md", ["Severity", "Containment", "Evidence", "Post-incident review"])),
("frameworks", c10), ("legal", c11), ("recommendation", c12), ("reproducible", c13)]
tally = {"PASS": 0, "NEEDS-HUMAN-REVIEW": 0, "MISSING": 0}
print("packcheck:", ROOT.name, "as of", AS_OF)
for n, (title, check) in enumerate(CHECKS, 1):
status, note = check()
tally[status] += 1
if status != "PASS" or "--problems" not in sys.argv:
print(f"{n:02d} {status:<19}{title}: {note}")
print(tally)
print("PASS means a file was found with its fields filled. It is not a quality verdict.")প্যাকের ওপর চালান (run ফাংশন packcheck.py চালায়)।
import subprocess, sys
def run(*args):
out = subprocess.run([sys.executable, "packcheck.py", *args], capture_output=True, text=True)
print(out.stdout, end="")
run("pack")packcheck: pack as of 2026-10-12
01 PASS scope: found, filled
02 PASS benefits: found, filled
03 PASS risks: found, filled
04 NEEDS-HUMAN-REVIEW fairness: it runs; a person checks the figures
05 PASS data limits: found, filled
06 PASS known/unknown: found, filled
07 PASS test plan: found, filled
08 PASS oversight: found, filled
09 PASS incidents: found, filled
10 PASS frameworks: found, filled
11 PASS legal: found, filled
12 NEEDS-HUMAN-REVIEW recommendation: present; a person judges the reasoning
13 PASS reproducible: two runs, same output
{'PASS': 11, 'NEEDS-HUMAN-REVIEW': 2, 'MISSING': 0}
PASS means a file was found with its fields filled. It is not a quality verdict.এগারোটা PASS, দুটো NEEDS-HUMAN-REVIEW। এই দুটো ব্যর্থতা নয়: সংখ্যা ঠিক কি না (পরীক্ষা ৪) বা যুক্তি পক্ষে দাঁড়ানোর মতো কি না (পরীক্ষা ১২), তা শুধু মানুষ বলতে পারে। এগারোটা PASS দেখে প্যাক ভালো হয়ে যায় না।
এবার সিদ্ধান্ত। টয় পরীক্ষায় এক গ্রুপে যাঁদের সাহায্য দরকার ছিল তাঁদের ০.৮২ অংশ ফ্ল্যাগ হয়েছে, অন্য গ্রুপে ০.৫৬; ফারাক ০.২৬, তাই পরীক্ষা C2 FAIL। যুক্তিসঙ্গত মানুষ এটা ভিন্নভাবে ওজন করেন: পড়াশোনা বিভাগের প্রধান সময় বাঁচানোকে মূল্য দেন, শিক্ষক বলতে পারেন প্রতিটা হোমওয়ার্ক পড়তে হলে সেই সাশ্রয় থাকে না, শিক্ষার্থীদের পক্ষের একজন চাইতে পারেন AI-ছাড়া পথ খোলা থাকুক। প্যাকে তিনটা মতই লেখা থাকে আর বেছে নেওয়া হয় proceed with conditions, কারণ টয় গণনা এত অল্প যে তা ক্ষতি বা নিরাপত্তা কোনোটাই প্রমাণ করে না। শর্ত ছাড়া "proceed" পরীক্ষা ১২-তে মানুষের বিচারে আটকে যেত, যদিও স্ক্রিপ্ট চুপ থাকত।
নষ্ট করা কপি
প্যাকটা কপি করুন, পাঁচটা জিনিস ভাঙুন, আর শুধু যেসব লাইন PASS নয় সেগুলো দেখান।
import shutil
from pathlib import Path
shutil.copytree("pack", "pack_damaged")
d = Path("pack_damaged")
def edit(name, old, new):
p = d / name
text = p.read_text()
assert old in text, name
p.write_text(text.replace(old, new))
(d / "toy_data.csv").unlink()
edit("oversight.md", "## Appeal", "## Notes")
edit("test_plan.json", "gap in the last rate at most 0.10", "")
edit("frameworks.json", "1.0 (2023, voluntary)", "UNKNOWN")
edit("open_questions.md", "| status: OPEN | asked: a lawyer", "| asked: a lawyer")
run("pack_damaged", "--problems")packcheck: pack_damaged as of 2026-10-12
04 MISSING fairness: fairness.py absent or failed
05 MISSING data limits: toy_data.csv absent or empty
07 MISSING test plan: empty or absent: C2.criterion
08 MISSING oversight: empty or absent: Appeal
10 NEEDS-HUMAN-REVIEW frameworks: NIST AI RMF: version unknown
11 MISSING legal: empty or absent: status or asked on Q2
12 NEEDS-HUMAN-REVIEW recommendation: present; a person judges the reasoning
13 MISSING reproducible: the offline script did not run
{'PASS': 5, 'NEEDS-HUMAN-REVIEW': 2, 'MISSING': 6}
PASS means a file was found with its fields filled. It is not a quality verdict.ছয়টা MISSING, দুটো NEEDS-HUMAN-REVIEW। একটা ফাইল মুছে যাওয়ায় তিনটা ব্যর্থতা হয়েছে (পরীক্ষা ৪, ৫, ১৩), তাই গোনার আগে কারণ খুঁজুন। চেকার সংস্করণ আন্দাজ করেনি, স্ট্যাটাসও বানায়নি।
চিট শিট
শুধু মনে করিয়ে দেওয়ার জন্য। পাতা ৩ মানে ৩ নম্বর পাতা।
| বিষয় | পরীক্ষা | সীমা বা সতর্কতা |
|---|---|---|
| ইমপ্যাক্ট অ্যাসেসমেন্ট (পাতা ১, ২) | সীমানা, উদ্দেশ্য; ব্যবহারকারী ও প্রভাবিত অ-ব্যবহারকারী; সিদ্ধান্তের বিন্দু; সহজাত ও অবশিষ্ট ঝুঁকি; AI-ছাড়া বিকল্প | শুধু চালু ও পরীক্ষিত নিয়ন্ত্রণ গুনুন |
| ঝুঁকির স্কোরিং (পাতা ১, ২) | সম্ভাবনা, তীব্রতা, ফেরানোর সম্ভাব্যতা, এক্সপোজার আলাদা রাখুন; ঝুঁকি গ্রহণে মালিক ও মেয়াদ | স্কোর বেছে নেওয়া একটা পদ্ধতি: স্কেল আর কে একমত হয়েছেন লিখে রাখুন |
| ন্যায্যতার মেট্রিক (পাতা ৫, ৬) | সিলেকশন রেট; ট্রু- ও ফল্স-পজিটিভ রেট; ইকুয়ালাইজড ওডস মানে দুটো ফারাক; ছোট গ্রুপে গণনা | লেবেল মানে কারও বিচার; অ্যাকুরেসি এররের ফারাক লুকায়; বেস রেট আলাদা হলে মেট্রিকে দ্বন্দ্ব বাধে |
| ডেটা গভর্ন্যান্স (পাতা ৭, ৮) | উৎস, মালিক, উদ্দেশ্য, অনুমতি; প্রোভেন্যান্স; পুনঃশনাক্তকরণ; সম্মতি; সংরক্ষণ; স্থানান্তর, ভেন্ডর | সংগ্রহ করা মানে পুনর্ব্যবহারের অনুমতি নয়; নাম সরালেই বেনামি হয় না |
| ডকুমেন্টেশন (পাতা ৯, ১০) | সংস্করণ, as_of, মালিক, ব্যবহার, ডেটা ও অনুমতি, প্রমাণ, সীমা, তদারকি, ব্যর্থতার ধরন, পরের রিভিউ; সহজ ভাষায় প্রকাশ | UNKNOWN ও কারণ, কখনো ফাঁকা বা আন্দাজ নয়; কার্ড সার্টিফিকেট নয় |
| মানুষের তদারকি (পাতা ১১, ১২) | ক্ষমতা, সামর্থ্য, দ্বিমত করার নিরাপত্তা, সচেতনতা; প্রতি কেসে মিনিট; আপিল অন্য কেউ শোনেন; ব্যবহার-বন্ধের সংখ্যা, মালিক | বেশি মিল থাকা নিছক আনুষ্ঠানিকতা হতে পারে; "মাপা হয়নি" একটা ট্রিগার |
| নিরাপত্তা, সিন্থেটিক মিডিয়া (পাতা ১৩, ১৪) | অপব্যবহারের তালিকা; একাধিক স্তর; ফল্স-পজিটিভ ও ফল্স-নেগেটিভ গুনুন; দ্বিতীয় চ্যানেলে যাচাই | লেবেল ও ক্রেডেনশিয়াল সাহায্য করে, প্রমাণ নয়; অবশিষ্ট ঝুঁকি কখনো "নেই" নয় |
| গভর্ন্যান্স (পাতা ১৭, ১৮) | একজন মালিক ও একজন ডেপুটি; সংস্করণে বাঁধা অনুমোদনের স্তর; প্রতিটা সিদ্ধান্তে একটাই জবাবদিহির ভূমিকা | চুক্তি দায়িত্ব ভাগ করে, জবাবদিহি নয় |
| পরিমাপ, ঘটনা (পাতা ১৯, ২০) | পরিমাপ, সীমা, মালিক, পদক্ষেপ; আগে মানদণ্ড; ক্ষতি দিয়ে তীব্রতা; আগে নিয়ন্ত্রণ; দোষারোপহীন রিভিউ; মালিকসহ কাজ; ট্রিগার | NOT TESTED মানে অজানা; প্রমাণ রাখুন, বাড়তি ব্যক্তিগত ডেটা নয় |
| ফ্রেমওয়ার্ক, স্ট্যান্ডার্ড, আইন (পাতা ৩, ৪) | মর্যাদা | যা লিখতে পারেন |
|---|---|---|
| নীতিমালা (OECD, UNESCO) | স্বেচ্ছামূলক | ম্যাপিংসহ "aligned with" |
| NIST AI RMF 1.0 ও এর প্রোফাইল | স্বেচ্ছামূলক | "maps to"; চেকলিস্ট নয় |
| ISO/IEC 42001 | iso.org দেখুন | সার্টিফিকেট থাকলেই কেবল "certified to" |
| আইন (যেমন EU AI Act) | যেখানে প্রযোজ্য সেখানে বাধ্যতামূলক | আইনি যাচাইয়ের পরই কেবল "compliant" |
তারিখের শৃঙ্খলা: নাম, সংস্করণ, কবে যাচাই করেছেন, কে করেছেন আর পরের রিভিউয়ের তারিখ লিখে রাখুন; স্মৃতি থেকে কোনো তারিখ উদ্ধৃত করবেন না (পাতা ৪-এর তারিখসহ আইনি নোট দেখুন)।
শব্দকোষ
- প্রভাবিত অ-ব্যবহারকারী (affected non-user): যাঁর সম্পর্কে সিদ্ধান্ত হয় অথচ যিনি ফিচারটা ব্যবহার করেন না।
- অটোমেশন বায়াস (automation bias): আউটপুট কর্তৃত্বপূর্ণ দেখায় বলেই তাকে বিশ্বাস করা।
- বেস রেট (base rate): কোনো গ্রুপে একটা ফলাফল কতটা সাধারণ।
- দোষারোপহীন রিভিউ (blameless review): ব্যক্তির দোষ নয়, সিস্টেমের পরিস্থিতির পর্যালোচনা।
- ক্যালিব্রেশন (calibration): স্কোরের মানে প্রতিটা গ্রুপের জন্য একই কি না।
- কনটেইনমেন্ট (containment): কারণ জানার আগেই এখনই ক্ষতি সীমিত করা।
- অবদানকারী উপাদান (contributing factor): সিস্টেমের এমন পরিস্থিতি যা ব্যর্থতাকে সম্ভব করেছে।
- নিয়ন্ত্রণ (control): ঝুঁকি কমানোর ব্যবস্থা; পরীক্ষা হলেই তা গোনা হয়।
- সিদ্ধান্ত-কাঠামো (decision pattern): পরিস্থিতি থেকে রিভিউয়ের তারিখ পর্যন্ত আটটা ধাপ।
- প্রকাশ (disclosure): প্রভাবিত মানুষকে সহজ ভাষায় জানানো যে AI জড়িত।
- ইকুয়ালাইজড ওডস (equalised odds): ট্রু-পজিটিভ ও ফল্স-পজিটিভ রেট দুটোই সমান; দুটো ফারাক।
- ফল্স-পজিটিভ রেট (false-positive rate): ফলাফল-নেই এমন যাঁদের ভুলে ফ্ল্যাগ করা হয়, তাঁদের অনুপাত।
- ফ্রেমওয়ার্ক (framework): প্রশ্ন সাজিয়ে দেওয়া স্বেচ্ছামূলক নির্দেশিকা; আইন নয়।
- সহজাত ঝুঁকি (inherent risk): কোনো নিয়ন্ত্রণের আগের ঝুঁকি।
- লিডিং ইন্ডিকেটর (leading indicator): ভালো পরিস্থিতি তৈরি আছে তার আগাম লক্ষণ।
- MISSING, UNKNOWN, NOT TESTED: নেই এমন ঘর, জানা ফাঁক, পরীক্ষা-না-হওয়া নিয়ন্ত্রণ।
- মডেল কার্ড (model card): একটা মডেলের ডকুমেন্টেশন; সিস্টেম কার্ড পুরো ওয়ার্কফ্লো ধরে।
- আউটকাম মেজার (outcome measure): মানুষের ওপর কী ঘটেছে তার পরিমাপ।
- প্রোভেন্যান্স (provenance): ডেটা কোথা থেকে এল আর কী তাকে বদলেছে।
- প্রক্সি ভ্যারিয়েবল (proxy variable): যে ঘর সুরক্ষিত বৈশিষ্ট্যের তথ্য বহন করে।
- পুনর্মূল্যায়নের ট্রিগার (reassessment trigger): যে পরিবর্তন একটা মূল্যায়ন আবার খোলে।
- পুনঃশনাক্তকরণ (re-identification): বেনামি-দেখতে রেকর্ডকে আবার একজন মানুষের সঙ্গে জোড়া।
- অবশিষ্ট ঝুঁকি (residual risk): নিয়ন্ত্রণের পরও যে ঝুঁকি থাকে।
- রিভিউয়ের তারিখ (review date): যেদিন নথিটা আবার পড়া হবে, কারণসহ।
- রিস্ক রেজিস্টার (risk register): মালিক, নিয়ন্ত্রণ ও অবশিষ্ট ঝুঁকিসহ ঝুঁকির রেকর্ড।
- সিলেকশন রেট (selection rate): একটা গ্রুপের যে অংশ ফ্ল্যাগ বা নির্বাচিত হয়।
- ব্যবহার-বন্ধের শর্ত (stop-use condition): সংখ্যা ও মালিকসহ নিয়ম, যা ব্যবহার শেষ করে।
- সিস্টেমের সীমানা (system boundary): একটা মূল্যায়ন কী কী ধরে।
- টয় ডেটা (toy data): বানানো ডেটা, যা একটা হিসাব শেখায়, বাস্তব কিছু নয়।
- ট্রু-পজিটিভ রেট (true-positive rate): ফলাফল-আছে এমন যাঁদের ঠিকভাবে ফ্ল্যাগ করা হয়, তাঁদের অনুপাত।
এরপর কী
Level 1-এ আপনাকে একটা পথ বেছে নিতে হবে।
| পথ | এক বাক্যে |
|---|---|
| AI Engineer | AI মডেল ব্যবহার করা অ্যাপ্লিকেশন ও সার্ভিস বানানো। |
| ML and Data | ডেটা নিয়ে কাজ করা, আর মডেল ট্রেনিং ও মূল্যায়ন। |
| AI Infra and Ops | AI সিস্টেম নির্ভরযোগ্যভাবে চালানো। |
| AI Quality, Security and Governance | AI সিস্টেম পরীক্ষা, সুরক্ষিত ও পরিচালনা করা; এটা এই বিষয়ের কাজই এগিয়ে নেয়। |
| AI Business and Product | কোন AI ফিচার কাদের জন্য বানানো সার্থক, তা ঠিক করা। |
| AI Automation and Freelancing | কাজ স্বয়ংক্রিয় করতে ও ক্লায়েন্টদের সেবা দিতে AI টুল ব্যবহার। |
নিজের বিচার ও নথি হালনাগাদ রাখুন।
- আইন ও স্ট্যান্ডার্ড বদলায়। তারিখসহ নোটগুলোতে "২০২৬-১০-১২ অনুযায়ী" লেখা; ভরসা করার আগে আপনার দেশ ও খাতের বর্তমান সরকারি পাঠের সঙ্গে আবার মিলিয়ে নিন।
- প্রতিটা নথির একজন মালিক, একটা সংস্করণ, একটা রিভিউয়ের তারিখ আর রিভিউ এগিয়ে আনার মতো দুটো ঘটনা রাখুন।
- রিভিউয়ের তারিখে প্যাকটা আবার পড়ুন, চেকার আবার চালান, আর যে সংস্করণগুলো উদ্ধৃত করেছেন সেগুলো হালনাগাদ করুন। আইনি প্রশ্ন কোনো যোগ্য ব্যক্তিকে জিজ্ঞেস করুন।
কাজের জায়গায় এটা কোথায় দেখা যায়
টেন্ডার, প্রশ্নমালা আর অডিটে মালিক, তারিখ ও খোলা প্রশ্নসহ ছোট নথি চাওয়া হয়। যে স্ক্রিপ্ট ফাঁকগুলো তালিকা করে, সেটা একটা মিটিং বাঁচায়; যা আছে তা যথেষ্ট কি না, সেটা মানুষ ঠিক করেন।
সাধারণ ভুল
- PASS-কে "ভালো" পড়া। এর মানে শুধু ফাইল পাওয়া গেছে; প্রতিটা বিষয় নিজে বিচার করুন।
- লাইন সবুজ করতে ঘর ভরা। বানানো মালিক বা সংস্করণ ফাঁক লুকায়। MISSING বা UNKNOWN লিখুন।
- প্যাক একবারই বানিয়ে রাখা। রিভিউয়ের তারিখ আর ট্রিগার না থাকলে তা পুরোনো হয়ে যায়।
- শর্ত বা কারণ ছাড়া সুপারিশ। কী সত্য হতে হবে, কে যাচাই করবে, আর কী হলে ব্যবহার থামবে তা লিখুন।
- ম্যাপিংকে "compliant" লেখা। "Maps to" আপনার নিজের দাবি; compliance-এর জন্য বাধ্যতামূলক পাঠ আর আইনি যাচাই লাগে।
নিজে চেষ্টা করুন
কাজগুলো এই পাতার নেমস্পেস ব্যবহার করে আর স্ট্যান্ডার্ড, নিয়ন্ত্রণ ও প্রয়োজন ম্যাপিং: কী, কার জন্য এবং কেন প্রযোজ্য থেকে সংস্করণ ও তারিখের শৃঙ্খলা আবার ছুঁয়ে যায়।
- সহজ। প্রথমবার চালানোয় কোন পরীক্ষাগুলো NEEDS-HUMAN-REVIEW ছিল, আর সেটা কেন ব্যর্থতা নয়?
- মাঝারি। ভালো প্যাকটা
shutil.copytreeদিয়ে কপি করুন,editসহায়ক দিয়ে (d-কে কপির দিকে ঘুরিয়ে) NIST-এর রিভিউয়ের তারিখ 2026-09-01 করুন, আর কপির ওপর চেকার চালান। আগে অনুমান করুন কোন পরীক্ষা বদলাবে। - কঠিন। নিজের একটা ফিচার বেছে মাইলস্টোন ১ থেকে ৪ আর ১৩ কয়েক লাইনে লিখুন, সঙ্গে একটা সুপারিশ, তার শর্ত আর এমন একটা তথ্য যা সিদ্ধান্ত বদলে দিত।
উত্তর
সহজ। পরীক্ষা ৪ আর ১২: স্ক্রিপ্ট দেখাতে পারে যে ন্যায্যতার স্ক্রিপ্ট চলে আর সুপারিশ, কারণ ও শর্ত আছে; সংখ্যা বা যুক্তি ঠিক কি না তা পারে না। পাস চেকলিস্ট: দুটো পরীক্ষাই নাম ধরে বলা; মানুষকে বিচার করতে হবে; এগুলোকে ব্যর্থতা না বলা। দুর্বল উত্তর: "প্যাকটা ফেল করেছে"।
মাঝারি। পরীক্ষা ১০ হয়ে যায় NEEDS-HUMAN-REVIEW ("review date passed"); বাকি স্ট্যাটাস আগের মতোই থাকে।
পাস চেকলিস্ট: চালানোর আগেই পরীক্ষা আর স্ট্যাটাস অনুমান করা; কারণ হিসেবে পেরিয়ে যাওয়া তারিখ বলা; সমাধান হলো একজন মানুষ ফ্রেমওয়ার্কটা আবার পড়ে নতুন তারিখ ঠিক করবেন। দুর্বল: লাইনটা সবুজ করতে শুধু তারিখ বদলে দেওয়া।
কঠিন। ভালো উত্তর: পরিধির বাইরের ব্যবহারের লাইনসহ সংকীর্ণ পরিধি; প্রভাবিত অ-ব্যবহারকারীদের নাম ধরা; একটা বাস্তব AI-ছাড়া বিকল্প; ভূমিকাভিত্তিক মালিক; পরীক্ষাযোগ্য একটা শর্ত আর সিদ্ধান্ত বদলে দিতে পারে এমন একটা তথ্যসহ সুপারিশ। দুর্বল: উদ্দেশ্য হিসেবে "সেবার মান বাড়ানো", শুধু ব্যবহারকারীদের তালিকা, কোনো শর্ত না থাকা, বা প্রমাণ ছাড়া "ন্যায্য" বলে দাবি।
সারসংক্ষেপ
- ক্যাপস্টোন হলো একটা সীমিত ফিচারের রেসপন্সিবল-AI রিভিউ প্যাক: ১৩টা মাইলস্টোন, ১৩টা গ্রহণযোগ্যতার পরীক্ষা, আর কারণ ও শর্তসহ একটা সুপারিশ।
- একটা চেকার নথি খুঁজে PASS, MISSING বা NEEDS-HUMAN-REVIEW জানায়; মান, সত্যতা আর আইনি অর্থ শুধু মানুষ বিচার করেন।
- চিট শিট আর শব্দকোষে পুরো টিউটোরিয়ালের পরীক্ষা ও শব্দ এক জায়গায় আছে।
- Level 1-এ ছয়টা পথ আছে; AI Quality, Security and Governance এই বিষয়ের কাজই এগিয়ে নেয়।
- নথি হালনাগাদ রাখুন মালিক, সংস্করণ, রিভিউয়ের তারিখ আর আবার যাচাই করা তারিখসহ নোট দিয়ে।
এরপর: Level 1 শুরু হয় একটা পথ বেছে নেওয়া দিয়ে: AI Engineer, ML and Data, AI Infra and Ops, AI Quality, Security and Governance, AI Business and Product, অথবা AI Automation and Freelancing।