![]()
পূর্বের পাঠে এজেন্টগুলো আপ অর্থাৎ ক্লাউডে স্কেল করা হয়েছিল। এইটাতে এজেন্টগুলোকে একটি একক মেশিনে ডাউন আনা হয়েছে। পাঠ শেষে আপনার কাছে একটি কাজ করা ইঞ্জিনিয়ারিং সহকারী থাকবে যা যুক্তি করে, সরঞ্জাম কল করে, আপনার ফাইলগুলো পড়ে এবং আপনার ডকুমেন্টেশন অনুসন্ধান করে — একটুও ক্লাউড ইনফারেন্স কল ছাড়াই।
কেন এটা আপনি চাইবেন? প্রকৃত ইঞ্জিনিয়ারিং কাজে তিনটি কারণ যা বারবার আসে:
ধরণাটি হল যে আপনি একটি আধুনিক ক্লাউড মডেলকে বদলে একটি ছোট ভাষার মডেল (SLM) পাবেন যা আপনার CPU, GPU বা NPU তে চলে। এই পাঠে আমরা সেই সীমাবদ্ধতায় ভাল কাজ করে এমন এজেন্ট তৈরি করার কথা বলব, যেন সীমাবদ্ধতা থাকে কিন্তু প্রভাবিত না হয়।
এই পাঠে আলোচনা হবে:
এই পাঠ শেষ করার পর আপনি জানবেন কীভাবে:
এই পাঠটিতে ধরে নেওয়া হয়েছে যে আপনি আগের পাঠগুলো শেষ করেছেন এবং নিচের বিষয়গুলোতে স্বাচ্ছন্দ্যবোধ করেন:
আপনাকে আরও প্রয়োজন:
requirements.txt এর প্যাকেজগুলো, প্লাস এই পাঠের জন্য foundry-local-sdk, openai, ও chromadb।একটি আধুনিক ক্লাউড মডেলে শত শত বিলিয়ন প্যারামিটার থাকে এবং একটি ডেটা সেন্টার থাকে তার পেছনে। একটি SLM এর কিছু বিলিয়ন প্যারামিটার থাকে এবং তা আপনার ল্যাপটপের RAM এ ফিট করতে হয়। এই পার্থক্য স্পষ্ট প্রত্যাশা তৈরি করে।
SLM ভালো যা:
SLM দুর্বল যা:
তাই লোকাল এজেন্টদের জন্য সফল কৌশল হলো: SLM কে পরিচালনা করতে দিন, এবং টুলকে ভারী কাজ করতে দিন। মডেলকে আপনার কোডবেস জানতে হয় না — তবে জানতে হয় কখন read_file এবং search_docs কল করতে হবে। এটা SLM এর শক্তির সঙ্গে সরাসরি খেলে।
flowchart LR
U[ডেভেলপার] --> A[লোকাল SLM এজেন্ট]
A -->|কোন টুল ব্যবহার করবেন তা সিদ্ধান্ত নেয়| T1[ফাইল পড়ুন]
A -->|কোন টুল ব্যবহার করবেন তা সিদ্ধান্ত নেয়| T2[search_docs RAG]
A -->|কোন টুল ব্যবহার করবেন তা সিদ্ধান্ত নেয়| T3[কোড বিশ্লেষণ করুন]
T1 --> A
T2 --> A
T3 --> A
A --> R[সম্পূর্ণ ডিভাইস-অনুষ্ঠিত উত্তর]
মাইক্রোসফ্ট ফাউন্ড্রি লোকাল হল একটি হালকা রUNTIME যা মডেলগুলো ডাউনলোড করে, পরিচালনা করে, এবং সম্পূর্ণ আপনার মেশিনে সার্ভ করে। আমাদের জন্য এর সবচেয়ে গুরুত্বপূর্ণ বৈশিষ্ট্য হল এটি একটি OpenAI-সঙ্গত HTTP এন্ডপয়েন্ট সরবরাহ করে — যার অর্থ OpenAI SDK এবং মাইক্রোসফ্ট এজেন্ট ফ্রেমওয়ার্কের OpenAI ক্লায়েন্ট শুধুমাত্র base_url পরিবর্তন করে এটিকে ব্যবহার করতে পারে। এজেন্ট তৈরির শিক্ষিত সবকিছু সরাসরি প্রয়োগযোগ্য; শুধুমাত্র এন্ডপয়েন্ট ক্লাউড থেকে localhost এ চলে এসেছে।
ফাউন্ড্রি লোকাল স্বয়ংক্রিয়ভাবে আপনার হার্ডওয়্যারের জন্য একটি সেরা মডেল বিল্ড বেছে নেয় — এটি CPU বিল্ড, CUDA/GPU বিল্ড, বা NPU বিল্ড — সুতরাং আপনাকে প্রতিটি মেশিনে হাতে-হাতে অপ্টিমাইজ করতে হয় না।
ফাউন্ড্রি লোকাল ইনস্টল করুন (আপনার OS এর জন্য ডকুমেন্টেশন দেখুন), তারপর নিশ্চিত করুন এটা কাজ করছে:
# ইনস্টল করুন (উদাহরণ; আপনার প্ল্যাটফর্মের জন্য ডকুমেন্টেশন অনুসরণ করুন)
winget install Microsoft.FoundryLocal # উইন্ডোজ
# brew install microsoft/foundrylocal/foundrylocal # ম্যাকওএস
# একটি Qwen মডেল ডাউনলোড এবং চালান, তারপর স্থানীয় সার্ভিস শুরু করুন
foundry model run qwen2.5-7b-instruct
foundry service status
সার্ভিস চালু হলে আপনার কাছে একটি লোকাল, OpenAI-সঙ্গত এন্ডপয়েন্ট থাকবে (সাধারণত http://localhost:PORT/v1)। নোটবুকটি foundry-local-sdk ব্যবহার করে স্বয়ংক্রিয়ভাবে এন্ডপয়েন্ট আবিষ্কার করে, তাই আপনাকে পোর্ট হার্ড-কোড করতে হয় না।
একটি এজেন্ট শুধুমাত্র তখনই এজেন্ট যখন তা টুল কল করতে পারে। অনেক SLM চ্যাট করতে পারে কিন্তু অননুমোদিত, ভ্রান্ত টুল কল তৈরি করে। কুউয়েন মডেল ফাংশন কলের জন্য প্রশিক্ষিত এবং ধারাবাহিকভাবে সু-গঠিত টুল কল স্ট্রাকচার সৃষ্টি করে — এগুলোই লোকাল চ্যাট মডেলকে একটি বাস্তব লোকাল এজেন্ট এ পরিণত করে।
প্রবাহটি হল প্রচলিত টুল-কলিং লুপ যা আপনি ইতোমধ্যে জানেন, শুধু ডিভাইসে চলছে:
sequenceDiagram
participant U as ব্যবহারকারী
participant A as কুয়েন এজেন্ট (স্থানীয়)
participant T as স্থানীয় সরঞ্জাম
U->>A: "auth.py কী করে?"
A->>A: সিদ্ধান্ত নিন: read_file কল করুন
A->>T: read_file("auth.py")
T-->>A: ফাইলের বিষয়বস্তু
A->>A: বিষয়বস্তু বিশ্লেষণ করুন
A-->>U: ব্যাখ্যা
ডকুমেন্টেশন অনুসন্ধান যেখানে লোকাল এজেন্টরা তাদের মূল্য জোগায়। SLM আপনার ফ্রেমওয়ার্কের ডক মেমোরাইজ করার আশা রাখার বদলে, আপনি সেই ডকুমেন্টগুলোকে একটি লোকাল ভেক্টর ডাটাবেস এ এমবেড করেন এবং এজেন্টকে প্রয়োজন অনুযায়ী প্রাসঙ্গিক অংশগুলি পুনরুদ্ধার করতে দেন।
আমরা ব্যবহার করি Chroma, একটি এমবেডেড ভেক্টর স্টোর যা কোনো সার্ভার ছাড়াই প্রসেসে চলে। সম্পূর্ণ পাইপলাইন হল: লোকাল এমবেডিং মডেল → লোকাল ভেক্টর → লোকাল রিট্রিভাল → লোকাল SLM।
flowchart TB
D[আপনার ডকস / কোড] --> E[স্থানীয় এমবেডিং মডেল]
E --> V[(কোমরা ভেক্টর ডিবি - ডিস্কে)]
Q[এজেন্ট প্রশ্ন] --> QE[স্থানীয়ভাবে প্রশ্ন এমবেড করুন]
QE --> V
V -->|শীর্ষ-k অংশ| A[কিউয়েন এজেন্ট]
A --> Ans[ভিত্তিক উত্তর]
এটি Lesson 5 থেকে একই Agentic RAG প্যাটার্ন — একমাত্র পার্থক্য হলো প্রতিটি উপাদান আপনার মেশিনে চলে।
MCP একটি পরিবহন ব্যবস্থা, ক্লাউড সার্ভিস নয়। একটি MCP সার্ভার লোকাল প্রসেস হিসাবে stdio তে চালানো যেতে পারে, স্ট্যান্ডার্ড প্রোটোকলের মাধ্যমে আপনার এজেন্টকে টুল সরবরাহ করে। এটা MCP সার্ভার ইকোসিস্টেম পুনঃব্যবহার সম্ভব করে — ফাইল সিস্টেম অ্যাক্সেস, গিট অপারেশন, ডাটাবেস প্রশ্ন — সম্পূর্ণ অফলাইন।
সুরক্ষা দৃষ্টিকোণ ক্লাউড থেকে আলাদা, কিন্তু না থাকেনা: একটি লোকাল MCP সার্ভার আপনার ব্যবহারকারীর অনুমতিতে চলে, তাই এর যে জায়গাগুলো স্পর্শ করতে পারে সেগুলো সীমাবদ্ধ করুন (একটি প্রকল্প ডিরেক্টরি, আপনার পুরো হোম ফোল্ডার নয়) এবং এর আউটপুট ইনপুট হিসাবে মান্য করে যাচাই করুন।
লোকাল-প্রথম মানে শুধুমাত্র লোকাল নয়। পরিণত সিস্টেমগুলি সংবেদনশীলতা এবং জটিলতা অনুসারে চালনা করে:
| পরিস্থিতি | কোথায় চলে |
|---|---|
| সংবেদনশীল কোড / ডেটা, অথবা অফলাইন | লোকাল SLM |
| সাধারণ, সীমাবদ্ধ কাজ | লোকাল SLM (সস্তা, দ্রুত) |
| কঠিন বহু-ধাপ যুক্তি অ-সংবেদনশীল ডেটায় | ক্লাউড মডেল |
| সবকিছু, আউটেজের সময় | লোকাল SLM (শিষ্ট আচরণে অবনতি) |
এটি Lesson 16 এর মডেল রাউটিং আইডিয়ার মতো — শুধু এক “মডেল” এখন আপনার নিজস্ব মেশিন। একটি দৃঢ় ডিজাইন ক্লাউড না থাকলে লোকালে ফিরে যায়, তাই এজেন্ট সম্পূর্ণ ব্যর্থ না হয়ে ধীরগতিতে নিস্তেজ হয়।
flowchart LR
Q[অনুরোধ] --> S{সংবেদনশীল নাকি অফলাইন?}
S -->|হ্যাঁ| L[স্থানীয় SLM]
S -->|না| C{গভীর বিশ্লেষণ দরকার?}
C -->|না| L
C -->|হ্যাঁ| Cloud[ক্লাউড মডেল]
L --> Out[উত্তর]
Cloud --> Out
খুলুন code_samples/17-local-agent-foundry-local.ipynb এবং এটি সম্পূর্ণ করুন। আপনি একটি লোকাল ইঞ্জিনিয়ারিং সহকারী তৈরি করবেন যা সম্পূর্ণ আপনার ওয়ার্কস্টেশনে চলে এবং পারে:
১. টুল কল করুন — ফাউন্ড্রি লোকালের মাধ্যমে কুউয়েন ফাংশন কল ব্যবহার করে। ২. লোকাল ফাইল অপারেশন করুন — একটি প্রকল্প ডিরেক্টরির ফাইল তালিকা দেখুন এবং পড়ুন। ৩. কোড বিশ্লেষণ করুন — একটি সোর্স ফাইলের মৌলিক পরিমাপক রিপোর্ট করুন। ৪. ডকুমেন্টেশন অনুসন্ধান করুন — চ্রমা ব্যবহার করে একটি ডক ফোল্ডারের উপর লোকাল RAG। ৫. MCP ব্যবহার করুন — একটি লোকাল MCP সার্ভার এর সাথে কানেক্ট করুন (যদি না থাকে তবে সুন্দরভাবে বাদ দিন)।
একটুও ক্লাউড ইনফারেন্স ব্যবহার করা হবে না।
এজেন্ট ফাউন্ড্রি লোকালের সঙ্গে OpenAI-সঙ্গত এন্ডপয়েন্টের মাধ্যমে কানেক্ট করে, তাই এজেন্ট কোড ক্লাউডের পাঠের মতোই প্রায় অভিন্ন — শুধু ক্লায়েন্ট পরিবর্তন হয়:
from foundry_local import FoundryLocalManager
from openai import OpenAI
# Foundry Local মডেলটি আবিষ্কার/ডাউনলোড করে এবং আমাদের একটি লোকাল এন্ডপয়েন্ট দেয়।
manager = FoundryLocalManager(\"qwen2.5-7b-instruct\")
client = OpenAI(base_url=manager.endpoint, api_key=manager.api_key) # api_key একটি লোকাল প্লেসহোল্ডার।
টুলগুলি হল সাধারণ পাইথন ফাংশন যা একটি প্রকল্প ডিরেক্টরির জন্য সীমাবদ্ধ:
def read_file(path: str) -> str:
\"\"\"Read a file, but only inside the sandboxed project directory.\"\"\"
full = (PROJECT_ROOT / path).resolve()
if PROJECT_ROOT not in full.parents and full != PROJECT_ROOT:
return \"Access denied: path is outside the project directory.\"
return full.read_text(encoding=\"utf-8\")
স্যান্ডবক্স চেক লক্ষ্য করুন — এমনকি লোকালেও, একটি টুল যা এলোমেলো পাথ পড়ে তা ঝুঁকিপূর্ণ। নোটবুক প্রতিটি টুলকে একটি প্রকল্প মূল সীমাবদ্ধ করে রাখে।
অ্যাসাইনমেন্টে যাওয়ার আগেই আপনার বোঝাপড়া পরীক্ষা করুন।
১. ক্লাউডের বদলে লোকাল এজেন্ট চালানোর দুটি স্পষ্ট কারণ দিন।
২. একটি SLM এবং তার টুলের মধ্যে লোকাল এজেন্টে কী কাজ ভাগাভাগি করা উচিত এবং কেন?
৩. Foundry Local দিয়ে ক্লাউড এজেন্ট কোড পুনঃব্যবহার কেন সম্ভব?
৪. কেন আমরা নির্দিষ্টভাবে একটি কুউয়েন ফাংশন-কলিং মডেল ব্যবহার করি, যেকোনো SLM নয়?
৫. লোকাল RAG পাইপলাইনে কোন কোন উপাদানগুলো মেশিনে চলে?
৬. একটি লোকাল MCP সার্ভার আপনার মেশিনে চলে। এটা কি স্বয়ংক্রিয়ভাবে নিরাপদ? আপনি কী সাবধানতা অবলম্বন করবেন?
৭. একটি যুক্তিসঙ্গত হাইব্রিড রাউটিং নিয়ম বর্ণনা করুন যেখানে একটি লোকাল মডেল অন্তর্ভুক্ত।
৮. এই পাঠে লোকাল এজেন্ট চলানোর জন্য বাস্তবসম্মত ন্যূনতম RAM কত এবং বেশি RAM আপনাকে কী দেয়?
লোকাল ইঞ্জিনিয়ারিং সহকারীকে একটি ছোট প্রকল্পের জন্য লোকাল ডকুমেন্টেশন রিভিউয়ার হিসেবে সম্প্রসারিত করুন (আপনি চাইলে এই রিপোর যেকোনো পাঠ ফোল্ডার ব্যবহার করতে পারেন)।
আপনার জমা দেওয়া উচিত:
১. একটি বাস্তব ডকস/কোড ফোল্ডার ইনডেক্স করুন Chroma তে (অন্তত পাঁচটি ফাইল)।
২. একটি find_todos টুল যোগ করুন যা প্রকল্প থেকে TODO/FIXME মত মন্তব্য স্ক্যান করে ফাইল ও লাইন নম্বরসহ ফিরিয়ে দেয় — read_file এর মতো স্যান্ডবক্স চেক রক্ষা করে।
তারপর একটি ছোট প্যারাগ্রাফ লিখুন আপনি কোনগুলি ক্লাউডে নিয়ে যাবেন এবং কোনগুলি লোকাল রাখবেন এই পর্যালোচকের জন্য, এবং কেন। আপনাকে মূল্যায়ন করা হবে লোকাল উপাদানগুলি সঠিকভাবে সংযুক্ত হয়েছে কিনা এবং আপনার হাইব্রিড যুক্তি সঠিক কিনা — মডেল গুণমানের উপর নয়।
এই পাঠে আপনি এমন একটি এজেন্ট নির্মাণ করেছেন যা সম্পূর্ণ আপনার নিজস্ব মেশিনে চলে:
এটি মোতায়েন আর্ক শেষ করে: পাঠ ১৬ এজেন্টকে Microsoft Foundry-তে বড় করেছিল, এবং এই পাঠে সেগুলোকে একটি একটি ওয়ার্কস্টেশনে ছোট করেছে। পরবর্তী পাঠ মোতায়েনকৃত এজেন্টদের সুরক্ষার দিকে নজর দেয়।
অস্বীকৃতি: এই নথিটি AI অনুবাদ পরিষেবা Co-op Translator ব্যবহার করে অনূদিত হয়েছে। যদিও আমরা শুদ্ধতার জন্য চেষ্টা করি, অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল নথিটি তার স্বভাষায় কর্তৃত্বপূর্ণ উৎস হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদের ব্যবহারে প্রয়োজনীয় ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়বদ্ধ নই।