SSD Nodes Learn 🎉 VPS $5.50/মাস থেকে
নির্দেশিকা Matt Connorদ্বারা Matt Connor

টেকনিক্যাল বইকে কীভাবে এআই এজেন্ট স্কিলে রূপান্তর করবেন

আপনার PDF বা EPUB ফাইলকে এজেন্ট স্কিলে রূপান্তর করার উপায় জানুন। এতে টোকেন বাজেট সাশ্রয় হয় এবং বড় নথিপত্র থেকে সরাসরি তথ্য খুঁজে পাওয়া সহজ হয়। কনভার্টার সেটআপ ও ব্যবহারের নিয়ম দেখুন।

একটি টেকনিক্যাল বইকে এজেন্ট স্কিলে রূপান্তর: আপনি যা পাবেন

একটি টেকনিক্যাল বইকে এজেন্ট স্কিলে রূপান্তর করতে আপনি একটি কনভার্টারকে PDF, EPUB, DOCX এক্সপোর্ট বা আপনার নিজস্ব অভ্যন্তরীণ নথিপত্রের ফোল্ডারের দিকে নির্দেশ করবেন। এটি একটি স্কিল ডিরেক্টরি তৈরি করে: একটি এন্ট্রি ফাইল যাতে নামযুক্ত ফ্রেমওয়ার্ক এবং অধ্যায়গুলোর সূচী থাকে, এবং প্রতিটি অধ্যায়ের জন্য একটি করে ফাইল যা এজেন্ট শুধুমাত্র আপনার প্রশ্নের প্রয়োজনে পড়ে। বইটি কখনোই কনটেক্সট উইন্ডোতে প্রবেশ করে না। শুধুমাত্র সূচীটি প্রবেশ করে।

এটি শূন্য থেকে এজেন্ট স্কিল তৈরি করা-এর বিপরীত কাজ, যেখানে আপনি আপনার জানা কোনো পদ্ধতিকে এনকোড করেন। এখানে জ্ঞানটি বিদ্যমান কিন্তু কেউ এটি ব্যবহার করতে পারে না: যেমন 800 পৃষ্ঠার কোনো ভেন্ডর PDF, অথবা এমন কোনো হ্যান্ডবুক যা এটি যিনি লিখেছিলেন তিনি চলে যাওয়ার পর থেকে আর খোলা হয়নি। এই কাজটি হলো কমপ্রেশন এবং ইনডেক্সিং। যদি 'স্কিল' শব্দটি আপনার কাছে নতুন হয়, তবে প্রথমে এজেন্ট স্কিল আসলে কী তা পড়ুন।

এখানে ব্যবহৃত কনভার্টারটি হলো book-to-skill, যা একটি MIT-লাইসেন্সপ্রাপ্ত স্কিল এবং এটি আপনার নিজের মেশিনে চলে। আগস্ট 2026 অনুযায়ী বর্তমান ট্যাগ হলো v1.4.0। এটি যে কাঠামো তৈরি করে তা টুলের চেয়েও বেশি গুরুত্বপূর্ণ, এবং FAQ-এর আগের শেষ সেকশনটি দেখায় কীভাবে হাতে কলমে একই কাঠামো তৈরি করতে হয়।

কেন টোকেন বাজেটই পুরো ডিজাইনের ভিত্তি

একটি বইকে কনটেক্সট উইন্ডোতে পেস্ট করলে প্রতিবার কথোপকথনের সময় এর পুরো সাইজের খরচ হয়। একটি স্কিল (skill) তার এন্ট্রি ফাইলের জন্য একবার খরচ করে, এবং এরপর প্রশ্ন অনুযায়ী যে অধ্যায়গুলো প্রয়োজন হয় শুধু সেগুলোর জন্য খরচ হয়। প্রতিটি প্রজেক্ট ডকুমেন্ট তার প্রতিটি জেনারেট করা ফাইলের জন্য একটি বাজেট নির্ধারণ করে।

ChartDocumented token budget per generated file, book-to-skill v1.4.0
The data behind this chart
[
  {
    "label": "SKILL.md entry file",
    "tokens": "4,000"
  },
  {
    "label": "One chapter file",
    "tokens": "1,000"
  },
  {
    "label": "glossary.md",
    "tokens": "1,500"
  },
  {
    "label": "patterns.md",
    "tokens": "2,000"
  },
  {
    "label": "cheatsheet.md",
    "tokens": "1,000"
  }
]

এন্ট্রি ফাইল, SKILL.md, 4,000 টোকেনের মধ্যে সীমাবদ্ধ থাকে এবং এতে নামযুক্ত ফ্রেমওয়ার্ক ও চ্যাপ্টার ইনডেক্স থাকে। প্রতিটি চ্যাপ্টার ফাইল প্রায় 1,000 টোকেনের হয় এবং কোনো কিছু প্রয়োজন না হওয়া পর্যন্ত তা ডিস্কেই থাকে। সাপোর্ট ফাইলগুলোর ক্ষেত্রেও একই নিয়ম: glossary.md-এর জন্য 1,500 টোকেন, patterns.md-এর জন্য 2,000 এবং cheatsheet.md-এর জন্য 1,000 টোকেন।

এই বাজেটগুলো Claude Code যেভাবে কনটেক্সট খরচ করে তার সাথে সামঞ্জস্যপূর্ণ। একটি স্কিলের description স্কিল লিস্টিংয়ে থাকে যাতে মডেলটি জানতে পারে যে স্কিলটির অস্তিত্ব আছে। স্কিলটি ইনভোক (invoke) করা হলে এর বডি লোড হয় এবং একবার লোড হওয়ার পর সেশনের বাকি সময় তা কনটেক্সটেই থাকে, তাই এন্ট্রি ফাইলের প্রতিটি লাইন একটি পুনরাবৃত্তিমূলক খরচ। সাপোর্ট ফাইলগুলো শুধুমাত্র তখনই লোড হয় যখন এজেন্ট সেগুলো পড়ে, আর এ কারণেই প্রতি-চ্যাপ্টার ফাইলগুলো সাশ্রয়ী।

এন্ট্রি ফাইলের এই সংখ্যার পেছনে একটি কঠোর সীমা রয়েছে। যখন অটো-কম্প্যাকশন (auto-compaction) একটি দীর্ঘ কথোপকথনকে সারসংক্ষেপ করে, তখন Claude Code প্রতিটি স্কিলের সর্বশেষ ইনভোকেশনকে সামারির পরে পুনরায় যুক্ত করে এবং প্রতিটির প্রথম 5,000 টোকেন সংরক্ষণ করে। সব মিলিয়ে পুনরায় যুক্ত করা স্কিলগুলোর জন্য মোট 25,000 টোকেনের বাজেট থাকে। 5,000 টোকেনের মধ্যে থাকা একটি এন্ট্রি ফাইল কম্প্যাকশনের পরেও সম্পূর্ণ টিকে থাকে। 20,000 টোকেনের একটি এন্ট্রি ফাইল ফিরে আসে তার প্রথম এক-চতুর্থাংশ হিসেবে, এবং বাকি তিন-চতুর্থাংশ কোথায় হারিয়ে গেল তা জানার কোনো উপায় থাকে না।

এটি হলো প্রগ্রেসিভ ডিসক্লোজার (progressive disclosure): একটি ছোট ইনডেক্স যা সবসময় তার খরচের যোগ্য, এবং মূল তথ্যের বিশাল অংশ থাকে একটি দরজার পেছনে যা এজেন্ট প্রয়োজনে খোলে। Claude Code কীভাবে তার কনটেক্সট উইন্ডো ম্যানেজ করে এই হিসাবের বাকি অংশগুলো কভার করে।

আপনার VPS-এ কনভার্টারটি ইনস্টল করুন এবং একটি নির্দিষ্ট রিলিজ ভার্সনে পিন করুন

এই স্কিলটি একটি git রিপোজিটরি। আপনি যে এজেন্ট ব্যবহার করেন তার skills ডিরেক্টরিতে এটি ক্লোন করুন। ডিরেক্টরির নামটিই স্ল্যাশ কমান্ড হিসেবে কাজ করে, তাই ক্লোন করার পাথটি গুরুত্বপূর্ণ।

git clone --depth 1 --branch v1.4.0 \
  https://github.com/virgiliojr94/book-to-skill.git \
  ~/.claude/skills/book-to-skill

--branch একটি ট্যাগ গ্রহণ করে, তাই এটি শুধুমাত্র v1.4.0 চেক আউট করবে এবং এর পরবর্তী কোনো ভার্সন নয়। এটিকে পিন করে রাখুন, কারণ একটি স্কিল হলো আপনার এজেন্টের অনুসরণ করা নির্দেশাবলির সমষ্টি, এবং এই নির্দেশাবলিতে কোনো অনিরীক্ষিত পরিবর্তন মানেই আপনার সার্ভারে যা চলছে তাতে পরিবর্তন আসা। GitHub Copilot CLI এর পরিবর্তে ~/.copilot/skills/ পড়ে এবং Amp পড়ে ~/.agents/skills/

এছাড়া একটি এক-লাইনের ইনস্টল কমান্ডও আছে, npx skills add virgiliojr94/book-to-skill, যা বর্তমান ভার্সনটি নিয়ে আসে। টুলটি পরীক্ষা করার জন্য এটি ব্যবহার করুন। আর যেসব কাজ আপনি বারবার করবেন, সেগুলোর জন্য পিন করা ক্লোনটি ব্যবহার করুন।

এখন নিশ্চিত করুন যে বক্সে কোন কোন এক্সট্রাক্টর আছে:

cd ~/.claude/skills/book-to-skill
python3 scripts/extract.py --check

--check রিপোর্ট করে যে কোন এক্সট্রাক্টরগুলো ইনস্টল করা আছে এবং যেগুলো নেই সেগুলোর জন্য ইনস্টল কমান্ড প্রিন্ট করে। এই প্যাকেজটির জন্য Python 3.9 বা তার নতুন ভার্সন প্রয়োজন।

যদি ক্লোন করার পর অটো-কমপ্লিটে /book-to-skill না আসে, তবে আপনার এজেন্টটি রিস্টার্ট করুন। Claude Code সেশন শুরু হওয়ার সময় যে স্কিল ডিরেক্টরিগুলো ছিল সেগুলো পর্যবেক্ষণ করে, তাই দুই মিনিট আগে তৈরি করা কোনো ~/.claude/skills/ এখনো পর্যবেক্ষণের আওতায় আসেনি।

আপনার আসলে কোন কোন extractor প্রয়োজন?

Python ছাড়া আর কিছুরই প্রয়োজন নেই, কারণ প্রতিটি ফরম্যাটের জন্য স্ট্যান্ডার্ড লাইব্রেরিতেই বিকল্প ব্যবস্থা রয়েছে। তবে সেই বিকল্পগুলো তুলনামূলক কম কার্যকর এবং ছোট সার্ভারে অপ্রয়োজনীয় extractor ইনস্টল করে সময় নষ্ট করার কোনো মানে হয় না।

  • pdftotext, যা poppler-utils প্যাকেজের অংশ, টেক্সট-প্রধান PDF ফাইলগুলো দ্রুত প্রসেস করতে পারে। এটি ইনস্টল করতে sudo apt install poppler-utils ব্যবহার করুন।
  • pypdf এবং pdfminer.six হলো PDF-এর জন্য Python-ভিত্তিক বিকল্প।
  • docling প্রযুক্তিগত PDF-এর জন্য, যেখানে টেবিল এবং কোড লিস্টিং গুরুত্বপূর্ণ। এই প্রজেক্টের পরিমাপ অনুযায়ী, প্রতি পৃষ্ঠার জন্য এটি প্রায় 1.5 সেকেন্ড সময় নেয়।
  • ebooklib এবং beautifulsoup4 সঠিকভাবে EPUB ফাইল পড়তে পারে। এগুলো ছাড়া টুলটি স্ট্যান্ডার্ড লাইব্রেরির zipfile রিডারে ফিরে যায়।
  • python-docx DOCX ফাইল এবং striprtf RTF ফাইল পড়তে পারে।
  • MOBI এবং AZW ফাইলের জন্য Calibre-এর ebook-convert প্রয়োজন।
  • ocrmypdf স্ক্যান করা বইয়ের ওপর OCR (অপটিক্যাল ক্যারেক্টার রিকগনিশন) চালায়, যেগুলোতে কোনো টেক্সট লেয়ার থাকে না।

Ubuntu 24.04-এ সাধারণ pip3 install pypdf কমান্ডটি চালালে নিচের ত্রুটিটি দেখা দেয়:

error: externally-managed-environment

এটি pip-এর কোনো সমস্যা নয়। Ubuntu এবং Debian সিস্টেমের Python-কে apt দ্বারা পরিচালিত হিসেবে চিহ্নিত করে, তাই pip সরাসরি সেখানে কিছু লিখতে পারে না। এর দুটি সমাধান আছে। sudo apt install poppler-utils একটি বাইনারি ইনস্টল করে যার জন্য pip-এর প্রয়োজন হয় না, এবং pdftotext বেশিরভাগ সাধারণ PDF ফাইল একাই সামলাতে পারে। Python extractor-গুলোর জন্য একটি virtual environment তৈরি করুন এবং সেখান থেকেই আপনার এজেন্ট চালু করুন, যাতে স্কিলটি যে python3 কল করে, সেটি সেই ইন্টারপ্রেটার হয় যেখানে প্যাকেজগুলো ইনস্টল করা আছে।

python3 -m venv ~/.venvs/book-to-skill
source ~/.venvs/book-to-skill/bin/activate
pip install "$HOME/.claude/skills/book-to-skill[pdf,epub,docx]"
claude

এই রিপোজিটরিতে pdf, epub, docx, rtf, technical এবং all এক্সট্রাগুলো ঘোষণা করা হয়েছে, যেখানে technical হলো docling। প্রজেক্টের ইনস্টল পেজে pip install "book-to-skill[pdf,epub,docx]"-এর উল্লেখ থাকলেও, আগস্ট 2026 পর্যন্ত PyPI-তে এই নামে কোনো প্যাকেজ প্রকাশিত হয়নি, তাই আপনার নিজস্ব চেকআউট থেকে ইনস্টল করুন।

যতক্ষণ না কোনো বইয়ের জন্য প্রয়োজন হচ্ছে, ততক্ষণ docling ইনস্টল করবেন না। এটি একটি মেশিন লার্নিং স্ট্যাক নিয়ে আসে, তাই ছোট কোনো প্ল্যানে ইনস্টল করার আগে ডিস্কের খালি জায়গা চেক করে নিন।

একটি ফোল্ডারের সব ডকুমেন্টের ওপর এটি চালান, headless মোডসহ

এই কমান্ডটি একটি ফাইল, একটি ফোল্ডার, কোটেশনের ভেতর থাকা গ্লোব (glob) অথবা একসাথে একাধিক পাথ গ্রহণ করে, যার পরে ঐচ্ছিক একটি স্কিল (skill) নাম দেওয়া যায়। একটি ডিরেক্টরিতে যা কিছু রাখা সম্ভব, তার সবকিছুই এখানে কাজ করবে, যার মধ্যে RFC সেটও (request for comments, ইন্টারনেট প্রোটোকল নির্ধারণকারী ডকুমেন্টসমূহ) অন্তর্ভুক্ত।

/book-to-skill ~/library/platform-docs/ platform-handbook
/book-to-skill "~/books/*.epub" my-library
/book-to-skill ~/papers/paper1.pdf ~/notes/export.txt unified-research

গ্লোবটিকে কোটেশনের ভেতর রাখুন যাতে স্কিলটি দেখার আগে আপনার শেল সেটিকে এক্সপ্যান্ড (expand) না করে। কমান্ডটিকে একটি বিদ্যমান স্কিল ডিরেক্টরির দিকে নির্দেশ করলে এটি নতুন সোর্সগুলোকে আলাদা একটি স্কিল তৈরি না করে বিদ্যমান স্কিলের সাথেই যুক্ত করে দেয়।

একটি ইন্টারঅ্যাক্টিভ রান আপনাকে কিছু প্রশ্ন করবে। উপাদানগুলো কি টেকনিক্যাল নাকি টেক্সট-হেভি, যা এক্সট্র্যাক্টর নির্ধারণ করে। আপনি কি রেফারেন্স ডেপথ নাকি স্টাডি ডেপথ চান, যা প্রতি চ্যাপ্টারের বাজেট নির্ধারণ করে। স্কিলটির নাম কী হওয়া উচিত এবং কোন স্কিল রুটে এটি যাবে। জেনারেশনের আগে এটি টোকেন ও সময়ের একটি আনুমানিক হিসাবও দেখায় এবং আপনার নিশ্চিতকরণের জন্য অপেক্ষা করে।

একটি headless রানে এই প্রশ্নগুলোর উত্তর দেওয়ার জন্য কেউ থাকে না। ইউজার-ইনভোকেবল স্কিলগুলো claude -p-এ কাজ করে: প্রম্পট স্ট্রিংয়ে স্ল্যাশ কমান্ডটি দিন এবং রান শুরু হওয়ার আগেই Claude Code সেটিকে এক্সপ্যান্ড করে নেবে। তাই একই প্রম্পটে প্রশ্নগুলোর উত্তর দিন।

claude -p "/book-to-skill ~/library/platform-docs/ platform-handbook
The sources are technical. Use reference depth. Write the skill to
~/.claude/skills/. Do not publish it to GitHub. Proceed without asking me." \
  --allowedTools "Bash,Read,Write,Edit"

--allowedTools রানটির প্রয়োজনীয় টুলগুলোকে আগে থেকেই অনুমোদন দেয়, কারণ টার্মিনাল ছাড়া পারমিশন প্রম্পট থাকলে সেই রান কখনোই শেষ হয় না। --output-format json যোগ করলে ফলাফলে total_cost_usd দেখা যায়, যা আপনার বিলের চেয়ে ক্লায়েন্ট-সাইড এস্টিমেট বা আনুমানিক হিসাব।

কোনো মডেল পড়ার আগেই এক্সট্র্যাকশন প্রতিটি সোর্সকে /tmp-এর অধীনে একটি অস্থায়ী ওয়ার্ক ডিরেক্টরিতে একত্রিত করে এবং রান শেষ হওয়ার পর সেই ডিরেক্টরি মুছে ফেলে। যে সোর্সটি এক্সট্র্যাক্ট হতে ব্যর্থ হয় সেটি বাদ দেওয়া হয় যাতে ব্যাচটি টিকে থাকে, যার অর্থ হলো আপনি যতগুলো ফাইল দিয়েছেন তার চেয়ে কম ফাইল পড়েও একটি রান সফল হতে পারে। চূড়ান্ত রিপোর্টে ফাইলের ইনভেন্টরি আপনার ফোল্ডারে থাকা ফাইলের সাথে মিলিয়ে দেখুন। কোনো চ্যাপ্টার বাদ পড়া মানে সাধারণত কোনো সোর্স মিস হওয়া।

রানটি এমন একটি সার্ভারে চালান যা আপনি কোনো এজেন্টের হাতে তুলে দিতে স্বাচ্ছন্দ্যবোধ করেন। নিরাপদে Claude Code চালানো VPS-এ এই বিষয়ের পারমিশন সংক্রান্ত দিকগুলো কভার করা হয়েছে।

আউটপুট যেখানে জমা হয় যাতে আপনার কোডিং এজেন্ট তা খুঁজে পায়

তৈরি করা স্কিলটি একটি স্কিলস রুটে জমা হয়। এর মধ্যে দুটি রুট গুরুত্বপূর্ণ।

  • ~/.claude/skills/<skill-name>/ হলো ব্যক্তিগত, যা ওই মেশিনের প্রতিটি প্রজেক্টে ব্যবহার করা যায়।
  • .claude/skills/<skill-name>/ একটি রিপোজিটরির ভেতরে থাকে এবং রিপোজিটরির সাথেই স্থানান্তরিত হয়।

যেকোনো একটির ভেতরে আপনি পাবেন SKILL.md, একটি chapters/ ডিরেক্টরি যেখানে প্রতিটি অধ্যায়ের জন্য একটি করে ফাইল এবং প্রয়োজনীয় অন্যান্য ফাইল থাকে। ডিরেক্টরির নামটিই হলো কমান্ড, তাই ~/.claude/skills/platform-handbook/ আপনাকে দেবে /platform-handbook, এবং এর পরে আপনি কোনো বিষয় বা সাধারণ প্রশ্ন যোগ করতে পারেন।

সুবিধার চেয়ে লাইসেন্সিংয়ের ওপর ভিত্তি করে রুট নির্বাচন করুন। আপনার কেনা কোনো বই থেকে তৈরি স্কিল আপনার ব্যক্তিগত ডিরেক্টরিতে রাখা উচিত। আপনার নিজস্ব টিমের লেখা ডকুমেন্টেশন থেকে তৈরি স্কিল রিপোজিটরিতে রাখা উচিত, যা একাধিক রিপোজিটরিতে একটি স্কিল শেয়ার করা-কে পরবর্তী সমাধানের বিষয় করে তোলে।

প্রতিটি স্কিল যোগ করার সাথে সাথে একটি খরচ বাড়তে থাকে। প্রতিটি স্কিলের বিবরণ স্কিল তালিকায় থাকে যাতে মডেল সিদ্ধান্ত নিতে পারে এটি ব্যবহার করবে কি না। সম্মিলিত বিবরণের টেক্সট প্রতি এন্ট্রিতে 1,536 ক্যারেক্টারে সীমাবদ্ধ থাকে এবং পুরো তালিকার জন্য একটি নির্দিষ্ট বাজেট থাকে। দশটি বইয়ের স্কিল মানে হলো দশটি বিবরণ এই বাজেটের জন্য প্রতিযোগিতা করছে। যেগুলোকে আপনি সবসময় নাম ধরে ডাকেন, সেগুলোর জন্য জেনারেট করা ফ্রন্টম্যাটারের সাথে একটি লাইন যোগ করুন:

---
name: platform-handbook
description: Frameworks and chapter index from the internal platform handbook.
disable-model-invocation: true
---

disable-model-invocation: true ব্যবহার করলে বিবরণটি কনটেক্সট থেকে সম্পূর্ণ বাইরে থাকে, এবং আপনি যখন /platform-handbook টাইপ করেন তখন স্কিলটি পূর্ণাঙ্গভাবে লোড হয়। এতে আপনি স্বয়ংক্রিয় ডিসকভারি সুবিধাটি হারাবেন, কিন্তু কনটেক্সট উইন্ডোটি আরও নিরিবিলি থাকবে।

লাইসেন্সিং: MIT লাইসেন্স কনভার্টারের জন্য প্রযোজ্য, বইয়ের জন্য নয়

এই বিষয়টি সম্পর্কে নিশ্চিত থাকুন, কারণ এখানে ব্যর্থতাটি প্রযুক্তিগত নয়।

  • MIT লাইসেন্স শুধুমাত্র কনভার্টারের কোড এবং এর স্কিল ডেফিনিশনের ক্ষেত্রে প্রযোজ্য। আপনি যে ডকুমেন্ট এতে ইনপুট দিচ্ছেন, সে সম্পর্কে এটি কিছুই বলে না।
  • আপনার কেনা কোনো বইয়ের ওপর কনভার্টার চালানো এবং আপনার নিয়ন্ত্রণে থাকা হার্ডওয়্যারে তা ব্যবহার করা মানে হলো আপনি আপনার নিজের কপি থেকে নোট তৈরি করছেন।
  • ফলাফলটি প্রকাশ করা মানে হলো ডিস্ট্রিবিউশন বা বিতরণ করা। টুলের MIT লাইসেন্স আপনাকে অন্য কারো বই থেকে প্রাপ্ত কোনো কিছু বিতরণ করার অধিকার দেয় না।
  • আউটপুটটি একটি ডেরিভেটিভ ওয়ার্ক বা উদ্ভূত কাজ। ফ্রেমওয়ার্ক এবং অধ্যায়ের মূল বিষয়বস্তুগুলো এখনো মূল উৎসের আদলেই তৈরি, এবং একটি ডেরিভেটিভ ওয়ার্ক মূল উৎসের কপিরাইট দ্বারাই নিয়ন্ত্রিত হয়।
  • যে উপাদান আপনি পুনরায় বিতরণ করতে পারবেন না, তা থেকে তৈরি করা স্কিল শুধুমাত্র সেই মেশিনে রাখা উচিত যেখানে এটি তৈরি হয়েছে। এটি কোনো পাবলিক রিপোজিটরিতে রাখা যাবে না। কোনো শেয়ারড টিম মার্কেটপ্লেসেও নয়।
  • যখন উৎসটি আপনার নিজের অথবা উন্মুক্ত লাইসেন্সযুক্ত হয়, তখনই প্রকাশ করুন: যেমন আপনার টিমের লেখা ডকুমেন্টেশন, অথবা এমন কোনো স্ট্যান্ডার্ড যার শর্তাবলী পুনরায় বিতরণের অনুমতি দেয়।

টুলটি এই বিষয়টিকে কেন্দ্র করেই তৈরি করা হয়েছে। এটি কোনো বইয়ের কন্টেন্ট সরবরাহ করে না, এক্সট্রাকশন লোকালি রান করে এবং এর পাবলিশ ধাপটি রিপোজিটরির দৃশ্যমানতা সম্পর্কে একটি আলাদা প্রশ্ন করে, যেখানে শুধুমাত্র public অথবা private শব্দটি গ্রহণ করা হয়, কোনো অনুমান করা হয় না। সেই প্রম্পটটিকে লাইসেন্সিং সিদ্ধান্ত হিসেবে গণ্য করুন, কারণ এটি আসলে তাই।

অভ্যন্তরীণ হ্যান্ডবুকগুলোর ক্ষেত্রে দ্বিতীয় একটি সমস্যা রয়েছে। এগুলোতে প্রায়ই গোপন ক্রেডেনশিয়াল থাকে যা কেউ স্বীকার করতে চায় না। একটি কনভার্টার এমন একটি PDF-কে এমন ফাইলে রূপান্তর করে যা কেউ খোলে না, কিন্তু আপনার এজেন্ট প্রয়োজনে তা পড়ে ফেলে। জেনারেট করা ফাইলগুলো কমিট করার আগে একবার পড়ে দেখুন এবং keeping secrets out of your AI agents দেখুন।

একটি কনভার্সনের খরচ কত?

নিচের সংখ্যাগুলো আমাদের নয়, বরং প্রজেক্টের নিজস্ব প্রকাশিত পরিমাপ।

ChartCost to convert one full-length book, as published by the project
The data behind this chart
[
  {
    "label": "Think Python 2",
    "cost_usd": 0.88
  },
  {
    "label": "Working Backwards",
    "cost_usd": 0.96
  },
  {
    "label": "Pro Git",
    "cost_usd": 1.23
  },
  {
    "label": "Moby-Dick",
    "cost_usd": 1.42
  }
]

প্রজেক্টটি যে 4 টি বই পরিমাপ করেছে, তার মধ্যে একটি কনভার্সনের খরচ 0.88 থেকে 1.42 মার্কিন ডলারের মধ্যে ছিল, যেখানে Pro Git-এর খরচ ছিল 1.23। এই হিসাবগুলো Claude Sonnet 4.5 মডেলে পরিমাপ করা হয়েছে, যেখানে টোকেন গণনা করা হয়েছে tiktoken ব্যবহার করে এবং cl100k_base এর মাধ্যমে। এগুলো আগস্ট 2026 পর্যন্ত প্রজেক্টের docs/performance.md-এ প্রকাশিত হয়েছে। আপনার নিজস্ব খরচ আপনার ব্যবহৃত মডেল এবং মূল্যের ওপর নির্ভর করে পরিবর্তিত হবে।

প্রজেক্টটি আরও উল্লেখ করেছে যে, পুরো বই কনটেক্সটে পেস্ট করার তুলনায় স্কিল থেকে একটি প্রশ্নের উত্তর দিতে 24 থেকে 51 গুণ কম টোকেন খরচ হয়। এটিকে একটি নিশ্চিত প্রতিশ্রুতি হিসেবে না দেখে সাশ্রয়ের একটি ধারণা হিসেবে দেখুন, কারণ এটি বই এবং প্রশ্নের ধরনের ওপর নির্ভর করে। কাঠামোগত বিষয়টি সব ক্ষেত্রেই প্রযোজ্য: কনভার্সনের খরচ একবারই দিতে হয়, কিন্তু কনটেক্সট ডাম্পের খরচ প্রতিবার সেই বইয়ের প্রয়োজন হয় এমন প্রতিটি কথোপকথনের জন্য দিতে হয়।

কেন PDF পেস্ট করবেন না বা RAG ইনডেক্স তৈরি করবেন না?

পেস্ট করা কাজ করে এবং একটি নথির একটি প্রশ্নের জন্য এটি সঠিক সমাধান। কিন্তু যখন একই বই মঙ্গলবার এবং আবার শুক্রবার প্রয়োজন হয়, তখন এটি আর সঠিক সমাধান থাকে না, কারণ প্রতিবারই আপনাকে এর পুরো আকার অনুযায়ী খরচ করতে হয়।

Retrieval বা RAG (retrieval augmented generation) কুয়েরি করার সময় অনুসন্ধান করে এবং আপনার শব্দের সাথে মিলে যাওয়া অংশগুলো ফেরত দেয়। যখন আপনার হুবহু বাক্য প্রয়োজন হয়, তখন এটি শক্তিশালী। কিন্তু যখন প্রয়োজনীয় বিষয়টি একটি পুরো অধ্যায় জুড়ে বিস্তৃত একটি ফ্রেমওয়ার্ক হয়, তখন এটি দুর্বল হয়ে পড়ে, কারণ কোনো একটি নির্দিষ্ট অংশে তা থাকে না। একটি Skill রূপান্তরের সময় একবারই সেই নির্যাস বের করে নেয় এবং অনুচ্ছেদের পরিবর্তে কাঠামোটি সংরক্ষণ করে।

সত্যিকারের সীমাবদ্ধতা হলো: একটি জেনারেটেড Skill হলো মডেলের লেখা একটি তথ্যবহুল সারাংশ। এটি একটি পড়ার সহায়ক মাত্র, এবং মূল উৎসটিই আসল। যখন হুবহু শব্দচয়নের আইনি বা প্রোটোকলগত গুরুত্ব থাকে, তখন PDF-টি রেখে দিন এবং সেখান থেকে উদ্ধৃতি দিন। MCP servers এবং rules files-এর সাথে Skills-এর তুলনা অংশে কোন পদ্ধতি কোথায় প্রযোজ্য তা আলোচনা করা হয়েছে।

ব্যর্থতার ধরন এবং যে বার্তাগুলো আপনি দেখবেন

স্ক্যান করা PDF থেকে কিছুই পাওয়া যাচ্ছে না। এক্সট্র্যাক্টরটি শুরুর দিকের পৃষ্ঠাগুলোতে টেক্সট লেয়ার আছে কি না তা পরীক্ষা করে এবং কোনো টেক্সট না পেলে 400 পৃষ্ঠার ইমেজ প্রসেস না করে একটি ব্যাখ্যাসহ থেমে যায়। প্রথমে ocrmypdf input.pdf output.pdf চালান, তারপর আউটপুট ফাইলটি এতে ইনপুট হিসেবে দিন।

pip ইনস্টল করতে অস্বীকার করছে। Ubuntu 24.04-এ error: externally-managed-environment হলো সিস্টেম পাইথন সুরক্ষার জন্য apt-এর একটি ব্যবস্থা। উপরের ভার্চুয়াল এনভায়রনমেন্ট ব্যবহার করুন, অথবা poppler-utils ইনস্টল করে pip পুরোপুরি এড়িয়ে যান।

অধ্যায়গুলো ভুলভাবে আসছে। অধ্যায় শনাক্তকরণ প্রক্রিয়া Chapter 7 বা এর সমতুল্য ভাষার শিরোনামগুলো খোঁজে। যে বইয়ে সাধারণ শিরোনাম বা রোমান সংখ্যা ব্যবহার করা হয়েছে সেখানে বিভাজন ঠিকমতো হয় না। এর সমাধান হলো, সফটওয়্যারটিকে অনুমান করতে না দিয়ে অধ্যায়গুলো কোথায় শুরু হয়েছে তা নির্দিষ্ট করে বলে দেওয়া।

কমান্ডটি খুঁজে পাওয়া যাচ্ছে না। অটো-কমপ্লিট থেকে /book-to-skill অনুপস্থিত থাকার মানে হলো আপনার সেশন শুরু হওয়ার পর স্কিল ডিরেক্টরি তৈরি করা হয়েছে। এজেন্টটি রিস্টার্ট করুন।

Docling অনেক সময় নিচ্ছে। প্রতি পৃষ্ঠায় প্রায় 1.5 সেকেন্ড সময় লাগলে একটি বড় বই প্রসেস করতে কয়েক মিনিট CPU সময় প্রয়োজন হয়। শেয়ারড সার্ভারে এই প্রসেসটি আপনার হোস্ট করা অন্যান্য অ্যাপের সাথে রিসোর্সের জন্য প্রতিযোগিতা করে। রান করার সময় কন্টেন্ট টাইপ জানতে চাইলে "text-heavy" উত্তর দিন, অথবা আপনি নিজে scripts/extract.py চালানোর সময় --mode text পাস করুন। --mode technical হলো সেই উত্তর যা docling নির্বাচন করে।

একটি সোর্স নীরবে অদৃশ্য হয়ে যাচ্ছে। যে ফাইলটি পড়া সম্ভব নয় সেটি এড়িয়ে যাওয়া হয় যাতে ব্যাচ প্রসেসটি সম্পন্ন হতে পারে। রান শেষে দেখা যায় আপনি যতগুলো সোর্স দিয়েছিলেন তার চেয়ে কম সোর্স সফল হয়েছে। এটি শুধুমাত্র চূড়ান্ত রিপোর্টের ফাইল ইনভেন্টরিতে দেখা যায়।

একই প্যাটার্ন হাতে কলমে প্রয়োগ করুন

এই টুলটি কেবল সুবিধার জন্য। এর মূল কাঠামোটিই স্থানান্তরযোগ্য, এবং যেকোনো রেফারেন্স উপাদানের জন্য একটি টেক্সট এডিটর ব্যবহার করে এটি তৈরি করা সম্ভব।

  1. একটি এন্ট্রি ফাইল লিখুন এবং সেটিকে 4,000 টোকেনের কাছাকাছি রাখুন, যা কনভার্টারটি লক্ষ্য করে। এতে নামযুক্ত ধারণাগুলো তাদের সঠিক বিন্যাসে লিখুন, এবং একটি ইনডেক্স যোগ করুন যেখানে প্রতিটি ডিটেইল ফাইল এবং সেই ফাইলে থাকা বিষয়গুলোর তালিকা থাকবে।
  2. উপাদানগুলোকে প্রায় 1,000 টোকেন আকারের ফাইলে ভাগ করুন। প্রতিটি ফাইলে একটি করে বিষয় রাখুন এবং ফাইলের নাম এমনভাবে দিন যেন নাম দেখেই বোঝা যায় ভেতরে কী আছে।
  3. এন্ট্রি ফাইল থেকে প্রতিটি ফাইলের বর্ণনা দিন, সেই বাক্যে উল্লেখ করুন কখন ফাইলটি পড়তে হবে।

3 নম্বর ধাপটি মানুষ এড়িয়ে যায়, অথচ এই ধাপটিই প্যাটার্নটিকে কার্যকর করে তোলে। এজেন্ট ইনডেক্সটি পড়ে সিদ্ধান্ত নেয় কোন ফাইলটি খুলবে, তাই ইনডেক্সে যে ফাইলের বর্ণনা নেই, এজেন্ট সেটি কখনোই খোলে না। ইনডেক্সটিই হলো মূল পণ্য, আর চ্যাপ্টার ফাইলগুলো হলো স্টোরেজ।

এন্ট্রি ফাইলটিকে কমপ্যাকশন বাজেটের ভেতরে রাখুন, তাহলে দীর্ঘ সেশনের পরেও পুরো কাঠামোটি টিকে থাকবে। কনভার্টার ফাইলগুলো তৈরি করুক বা আপনি নিজে, এই নিয়মটি সব ক্ষেত্রেই প্রযোজ্য।

FAQ

আমি কি কেনা বই থেকে তৈরি কোনো skill প্রকাশ করতে পারি?

না, যদি না সেই বইয়ের লাইসেন্স পুনঃবিতরণের অনুমতি দেয়। কনভার্টারের MIT লাইসেন্স শুধুমাত্র কনভার্টারের কোডকে কভার করে, আপনার ইনপুট দেওয়া উপাদানকে নয়, এবং তৈরি হওয়া skill-টি বইটির একটি derivative work। এটিকে আপনার নিজের মেশিনে ~/.claude/skills/-এ রাখুন। আপনি নিজে লিখেছেন এমন ডকুমেন্টেশন বা উন্মুক্ত লাইসেন্সপ্রাপ্ত উৎসের ক্ষেত্রে প্রকাশ করা ঠিক আছে, এবং টুলটি নিজেই রিপোজিটরির দৃশ্যমানতা সম্পর্কে জিজ্ঞাসা করে, যেখানে শুধুমাত্র একটি খালি public বা private গ্রহণ করা হয়, তাই এই সিদ্ধান্তটি সচেতনভাবে নেওয়া হয়।

আমার কি docling প্রয়োজন, নাকি pdftotext-ই যথেষ্ট?

গদ্যের জন্য poppler-utils থেকে docling-এর pdftotext যথেষ্ট এবং এটি প্রায় তাৎক্ষণিক কাজ করে। যখন বইয়ের মূল বিষয়বস্তু এর টেবিল এবং কোড লিস্টিংয়ের মধ্যে থাকে, তখন docling ইনস্টল করুন, কারণ সাধারণ টেক্সট এক্সট্র্যাক্টর সেগুলো বাদ দিয়ে দেয়। এর বিনিময়ে গতি কিছুটা কমে যায়: প্রজেক্ট অনুযায়ী docling প্রতি পৃষ্ঠায় প্রায় 1.5 সেকেন্ড সময় নেয়, তাই 300 পৃষ্ঠার একটি ম্যানুয়াল প্রসেস করতে একটি VPS-এ কয়েক মিনিট CPU সময় লাগতে পারে।

আমার VPS-এ কেন pip externally-managed-environment এর কারণে ব্যর্থ হয়?

Ubuntu 24.04 এবং বর্তমান Debian-এ সিস্টেম Python-কে apt দ্বারা পরিচালিত হিসেবে চিহ্নিত করা হয়, তাই pip এতে কিছু ইনস্টল করতে অস্বীকার করে এবং error: externally-managed-environment প্রদর্শন করে। python3 -m venv ~/.venvs/book-to-skill দিয়ে একটি virtual environment তৈরি করুন, সেটি activate করুন, সেখানে এক্সট্র্যাক্টরগুলো ইনস্টল করুন, তারপর সেই একই shell থেকে আপনার agent শুরু করুন। skill-টি python3 কল করে, তাই এটি আপনার PATH-এ থাকা যেকোনো interpreter ব্যবহার করবে, যা এখন virtual environment-এর ভেতরে থাকা interpreter।

আমার তৈরি করা skill কেন slash command হিসেবে দেখাচ্ছে না?

এর দুটি কারণ থাকতে পারে। কমান্ডের নামটি ডিরেক্টরির নাম থেকে আসে, তাই skill-টিকে অবশ্যই ~/.claude/skills/<name>/SKILL.md বা .claude/skills/<name>/SKILL.md-এ থাকতে হবে, এবং SKILL.md-এর বানান ঠিক থাকতে হবে। যদি পাথ সঠিক থাকে, তবে agent রিস্টার্ট করুন। Claude Code ইতিমধ্যে পর্যবেক্ষণ করা skill ডিরেক্টরির ভেতরের পরিবর্তনগুলো শনাক্ত করতে পারে, কিন্তু সেশন শুরু হওয়ার পরে তৈরি করা কোনো skills ডিরেক্টরি মোটেও পর্যবেক্ষণ করা হয় না।