ইদানীং আমি AI Agents নিয়ে বেশ সময় কাটাচ্ছি, বিশেষ করে Go ব্যাকএন্ডে এগুলোকে কীভাবে আসলে কাজের বানানো যায় তা নিয়ে। মডেলের সাথে চ্যাট করা এক জিনিস, কিন্তু তাকে "হাত-পা" দেওয়া অর্থাৎ টুলস ব্যবহার করার ক্ষমতা দেওয়া একদম অন্যরকম একটা অভিজ্ঞতা। এর ফলে মডেল নিজেই রিয়েল ডেটা ফেচ করতে পারে বা নির্দিষ্ট কোনো অ্যাকশন ট্রিগার করতে পারে।
আমি এর জন্য LangChainGo ব্যবহার করছি। গো ইকোসিস্টেমে এই ধরনের কাজের জন্য এটাই এখন পর্যন্ত সেরা লাইব্রেরি বলে আমার মনে হয়। পুরো সোর্স কোড GitHub-এ পাবেন।
ওয়ার্কস্পেস সেটআপ
লোকালি রান করার জন্য আমি Ollama ব্যবহার করি। এতে ফিডব্যাক লুপ খুব ফাস্ট থাকে আর টেস্টিং করার সময় বাড়তি কোনো খরচও হয় না। আমার অভিজ্ঞতায়, qwen3.5:9b মডেলটি টুল-কলিং ইনস্ট্রাকশন বেশ ভালো ফলো করে।
mkdir ai-agent && cd ai-agent
go mod init ai-agent
go get github.com/tmc/langchaingo@latest
go get github.com/tmc/langchaingo/llms/ollama
# মডেলটি পুল করে নিন
ollama pull qwen3.5:9bএজেন্টকে টুলস দেওয়া
LangChainGo-তে টুল মানে হলো সাধারণ কিছু স্ট্রাক্ট যা নির্দিষ্ট কিছু মেথড ইমপ্লিমেন্ট করে। সবচেয়ে গুরুত্বপূর্ণ পার্ট হলো Description। এখানে একদম স্পেসিফিক হতে হবে কারণ এলএলএম (LLM) এই ডেসক্রিপশন পড়েই ডিসাইড করে সে এই টুলটা কল করবে কি না।
আমি একটা ওয়েদার টুল এভাবে ইমপ্লিমেন্ট করেছি:
func (w Weather) Description() string {
// JSON ফরম্যাট নিয়ে একদম ক্লিয়ার ইনস্ট্রাকশন দিন
return `Get weather. Input: {"city": "Tokyo", "unit": "celsius"}`
}
func (w Weather) Call(ctx context.Context, input string) (string, error) {
var inp WeatherInput
if err := json.Unmarshal([]byte(input), &inp); err != nil {
// এলএলএম ভুল জেসন পাঠালে তাকে কারণটা বলুন যাতে সে ঠিক করতে পারে
return "", fmt.Errorf("invalid JSON: use {"city": "NAME", "unit": "celsius"}")
}
// ...
}থিংক-অ্যাক্ট-অবজার্ভ লুপ
এজেন্টের মূল লজিক থাকে Agent আর Executor-এ। এজেন্ট প্রম্পট ইঞ্জিনিয়ারিং সামলায়, আর এক্সিকিউটর পুরো লুপটা ম্যানেজ করে। লোকাল মডেল ব্যবহার করার সময় আমি দেখেছি সিস্টেম প্রম্পট যদি খুব কড়া না হয়, তবে মডেল আউটপুট ফরম্যাট নিয়ে উল্টাপাল্টা শুরু করে, যা পার্সারকে ব্রেক করে দেয়।
// (Code remains same as original)ডিবাগিং এবং তিক্ত অভিজ্ঞতা
AI Agents নিয়ে কাজ করতে গিয়ে আমার সবচেয়ে বড় বিরক্তির জায়গা হলো যখন এজেন্ট একই লুপে আটকে যায়। বারবার একই ভুল টুল কল করা বা ভুল ইনপুট দেওয়াটা বেশ কমন। callbacks.LogHandler{} ব্যবহার করে আপনি টার্মিনালে দেখতে পাবেন আপনার এজেন্ট আসলে কী ভাবছে।
আমার মনে হয়, যদি এজেন্ট বারবার ভুল করে, তবে বুঝতে হবে আপনার টুলের ডেসক্রিপশন যথেষ্ট পরিষ্কার নয়। শুধু "Error" রিটার্ন না করে এলএলএম বুঝতে পারে এমন ফিডব্যাক দিলে সে পরের অ্যাটেম্পটে সেটা ঠিক করে নেওয়ার চেষ্টা করে। তবে মাঝেমধ্যে মডেল এমন সব আজব টুল কল করার চেষ্টা করে যার কোনো অস্তিত্বই নেই, যা সামলানো বেশ চ্যালেঞ্জিং।
AI Agents নিয়ে কাজ করার সময় ধৈর্য রাখা খুব জরুরি। সবকিছু ঠিকঠাক সেটআপ করার পরও মাঝেমধ্যে মডেল অপ্রত্যাশিত আচরণ করতে পারে, যা আসলে এই টেকনোলজির একটা সীমাবদ্ধতা।
গো (Go) ল্যাঙ্গুয়েজ এবং LangChainGo ব্যবহার করে কীভাবে দক্ষ AI Agents তৈরি করবেন, টুল ইন্টিগ্রেশন এবং ডিবাগিংয়ের বাস্তব অভিজ্ঞতা ও কোডসহ বিস্তারিত জানুন।
