![]()
আগের পাঠে এজেন্টগুলো ক্লাউডে স্কেল করা হয়েছিল। এই পাঠে সেগুলোকে একক যন্ত্রে আনা হবে। শেষে আপনার কাছে এমন একটি প্রকৌশল সহকারী থাকবে যা যুক্তি করে, টুলস কল করে, আপনার ফাইল পড়ে এবং ডকুমেন্টেশন অনুসন্ধান করে — একটিও ক্লাউড ইনফারেন্স কল ছাড়াই।
আপনি কেন এটা চান? প্রকৌশল কাজের মধ্যে নিয়মিত তিনটি কারণ আসে:
তবে আপনি একটি frontier cloud মডেলকে tradeoff করছেন একটি Small Language Model (SLM) এর জন্য যা আপনার CPU, GPU, অথবা NPU তে চলে। এই পাঠে এমন এজেন্টগুলি তৈরি করা শিখবেন যা সেই সীমার মধ্যে ভালো পারফর্ম করে, বরং মনে করেন যে সীমাটি নেই।
এই পাঠে আপনি শিখবেন:
এই পাঠ শেষ করার পরে, আপনি পারবেন:
এই পাঠটি ধরে নেয় আপনি পূর্ববর্তী পাঠসমূহ সম্পন্ন করেছেন এবং পরিচিত:
এছাড়াও প্রয়োজন:
requirements.txt-এ প্যাকেজ, সঙ্গে foundry-local-sdk, openai, এবং chromadb এই পাঠের জন্য।একটি frontier ক্লাউড মডেল এর শত কোটি পরামিতি এবং একটি ডেটা সেন্টার থাকে। একটি 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[উত্তর, সম্পূর্ণ ডিভাইসে]
Microsoft Foundry Local একটি হালকা-ওজনের runtime যা সম্পূর্ণরূপে আপনার মেশিনে মডেল ডাউনলোড, ম্যানেজ এবং সার্ভ করে। আমাদের জন্য এর সবচেয়ে গুরুত্বপূর্ণ বৈশিষ্ট্য হল এটি একটি OpenAI-সঙ্গত HTTP endpoint এক্সপোজ করে — অর্থাৎ OpenAI SDK এবং Microsoft Agent Framework এর OpenAI ক্লায়েন্ট শুধু base_url পরিবর্তন করে এটি ব্যবহার করতে পারে। এজেন্ট তৈরির সবকিছু একই রূপে থাকে; শুধু endpoint ক্লাউড থেকে localhost এ চলে আসে।
Foundry Local স্বয়ংক্রিয়ভাবে আপনার হার্ডওয়্যারের জন্য সেরা মডেল বিল্ড বেছে নেয় — CPU বিল্ড, CUDA/GPU বিল্ড, অথবা NPU বিল্ড — যাতে আপনি প্রতি মেশিনে হ্যান্ড-অপটিমাইজ করতে না হয়।
Foundry Local ইনস্টল করুন (আপনার OS এর জন্য ডকুমেন্টেশন দেখুন), তারপর নিশ্চিত করুন এটি কাজ করছে:
# ইনস্টল করুন (উদাহরণস্বরূপ; আপনার প্ল্যাটফর্মের জন্য ডকুমেন্টেশন অনুসরণ করুন)
winget install Microsoft.FoundryLocal # উইন্ডোজ
# brew install microsoft/foundrylocal/foundrylocal # ম্যাকওএস
# একটি Qwen মডেল ডাউনলোড করুন এবং চালান, তারপর লোকাল সার্ভিস শুরু করুন
foundry model run qwen2.5-7b-instruct
foundry service status
সার্ভিস চালু হলে আপনার একটি লোকাল OpenAI-সঙ্গত endpoint থাকে (সাধারণত http://localhost:PORT/v1)। নোটবুকটি স্বয়ংক্রিয়ভাবে foundry-local-sdk ব্যবহার করে endpoint আবিষ্কার করে, তাই আপনাকে পোর্ট হার্ডকোড করতে হবে না।
একটি এজেন্ট শুধু এজেন্ট যখন সেটি টুলস কল করতে পারে। অনেক SLM চ্যাট করতে পারে, কিন্তু অবিশ্বস্ত, ভুলগঠিত টুল কল তৈরি করে। Qwen মডেলগুলি function calling এর জন্য প্রশিক্ষিত এবং ধারাবাহিকভাবে সঠিক টুল কল গঠন তৈরি করে — যা একটি লোকাল চ্যাট মডেলকে একটি লোকাল এজেন্ট করে তোলে।
ফ্লো হল পরিচিত টুল কলিং লুপ, শুধু যেটা ডিভাইসে চলে:
sequenceDiagram
participant U as ব্যবহারকারী
participant A as Qwen এজেন্ট (স্থানীয়)
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 এবং এটি অনুসরণ করুন। আপনি একটি লোকাল ইঞ্জিনিয়ারিং সহকারী তৈরি করবেন যা সম্পূর্ণরূপে আপনার ওয়ার্কস্টেশনে চলে এবং করতে পারে:
কোনো ক্লাউড ইনফারেন্স ব্যবহার হয় না।
সহকারী Foundry Local এর OpenAI-সঙ্গত endpoint এর মাধ্যমে সংযুক্ত হয়, তাই এজেন্ট কোড ক্লাউড পাঠের মতোই প্রায়ই একরকম দেখায় — শুধু ক্লায়েন্ট বদলায়:
from foundry_local import FoundryLocalManager
from openai import OpenAI
# ফাউন্ড্রি লোকাল মডেল সনাক্ত করে/ডাউনলোড করে এবং আমাদের একটি লোকাল এন্ডপয়েন্ট দেয়।
manager = FoundryLocalManager(\"qwen2.5-7b-instruct\")
client = OpenAI(base_url=manager.endpoint, api_key=manager.api_key) # api_key একটি স্থানীয় প্লেসহোল্ডার।
টুলগুলি প্রকল্প ডিরেক্টরিতে সীমাবদ্ধ সাধারণ Python ফাংশন:
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\")
স্যান্ডবক্স চেক লক্ষ্য করুন—লোকাল হলেও এমন একটি টুল যা এলোমেলো পথ পড়ে সেটা ঝুঁকিপূর্ণ। নোটবুক প্রতিটি টুলকে একটি প্রকল্প রুটে সীমাবদ্ধ রাখে।
অ্যাসাইনমেন্টে যাওয়ার আগে আপনার বোঝার পরীক্ষা করুন।
1. একটি এজেন্ট লোকাল চালানোর দুইটি নির্দিষ্ট কারণ দিন ক্লাউডের পরিবর্তে।
2. লোকাল এজেন্টে SLM এবং এর টুলগুলোর মধ্যে কীভাবে বরাদ্দ রাখা উচিত, এবং কেন?
3. Foundry Local সঙ্গে ক্লাউড এজেন্ট কোড পুনর্ব্যবহার সম্ভব করে কী?
4. আমরা কেন কোনো SLM নয়, বিশেষ করে Qwen function-calling মডেল ব্যবহার করি?
5. লোকাল RAG পাইপলাইনে কোন উপাদানগুলো মেশিনে চলে?
6. একটি লোকাল MCP সার্ভার আপনার মেশিনে চালানো হচ্ছে। এটি কি স্বয়ংক্রিয়ভাবে নিরাপদ? কোন সাবধানতা নেওয়া উচিত?
7. একটি বোধগম্য হাইব্রিড রাউটিং নিয়ম বর্ণনা করুন যেখানে একটি লোকাল মডেল অন্তর্ভুক্ত।
8. এ পাঠের লোকাল এজেন্ট চালানোর জন্য বাস্তবসম্মত সর্বনিম্ন RAM কত, এবং বেশি RAM কি দেয়?
লোকাল ইঞ্জিনিয়ারিং সহকারীকে লোকাল ডকুমেন্টেশন রিভিউয়ার এ সম্প্রসারিত করুন আপনার পছন্দের একটি ছোট প্রকল্পের জন্য (প্রয়োজনে এই রিপোর কোন লেসন ফোল্ডার ব্যবহার করুন)।
আপনার সাবমিশন হওয়া উচিত:
find_todos টুল যোগ করা যা প্রকল্পের TODO/FIXME মন্তব্যগুলি স্ক্যান করে এবং ফাইল ও লাইন নম্বর সহ ফিরে দেয় — read_file এর স্যান্ডবক্স চেক একই থাকবে।৩. এজেন্টকে তিনটি প্রশ্ন করুন যাতে এটি টুলগুলো একত্রিত করে: একটি খাঁটি RAG প্রশ্ন, একটি যা একটি নির্দিষ্ট ফাইল পড়া দরকার, এবং একটি যা TODO খুঁজে বের করার দরকার। ৪. এটির মাপ নিন: তিনটি প্রতিক্রিয়ার প্রত্যেকটির সময় পরিমাপ করুন এবং একটি মার্কডাউন সেলে নোট করুন। মন্তব্য করুন যে বিলম্ব আপনার পরিকল্পিত ওয়ার্কফ্লোর জন্য গ্রহণযোগ্য কিনা।
তারপরে একটি সংক্ষিপ্ত প্যারাগ্রাফ লিখুন আপনি কী ক্লাউডে স্থানান্তর করবেন এবং কী স্থানীয়ভাবে রাখবেন এই পর্যালোচনাকারীর জন্য, এবং কেন। আপনার মূল্যায়ন হবে স্থানীয় উপাদানগুলি সঠিকভাবে সংযুক্ত হয়েছে কিনা এবং আপনার হাইব্রিড যুক্তি যুক্তিসঙ্গত কিনা — মডেল গুণগত মানের উপর নয়।
এই পাঠে আপনি একটি এজেন্ট তৈরি করেছেন যা সম্পূর্ণরূপে আপনার নিজস্ব মেশিনে চলে:
এটি ডিপ্লয়মেন্ট চক্র সম্পন্ন করে: পাঠ ১৬ এ এজেন্টদের Microsoft Foundry তে স্কেল করা হয়েছে, এবং এই পাঠে একক ওয়ার্কস্টেশনে তাদের স্কেল করা হয়েছে। পরবর্তী পাঠে ডিপ্লয়ড এজেন্টদের সুরক্ষিত রাখা নিয়ে আলোচনা করা হবে।
অস্বীকৃতি: এই নথিটি AI অনুবাদ পরিষেবা Co-op Translator ব্যবহার করে অনূদিত হয়েছে। যদিও আমরা শুদ্ধতার জন্য চেষ্টা করি, অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল নথিটি তার স্বভাষায় কর্তৃত্বপূর্ণ উৎস হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদের ব্যবহারে প্রয়োজনীয় ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়বদ্ধ নই।