Helium Agent ডিজাইন করা
Helium Agent হলো Python দিয়ে তৈরি একটি হালকা ওজনের (lightweight) AI এজেন্ট। এটি আপনার টার্মিনালে চলে। এটি ন্যূনতম জটিলতার কথা মাথায় রেখে ডিজাইন করা হয়েছে।
বিল্ড করার সময় নেওয়া মূল ডিজাইন সিদ্ধান্তগুলো নিচে দেওয়া হলো:
• আর্কিটেকচার (Architecture)
সিস্টেমটি একটি ফ্ল্যাট আর্কিটেকচার ব্যবহার করে। আমি ভারী ফ্রেমওয়ার্ক এবং গভীর ডিপেন্ডেন্সি ট্রি (dependency trees) এড়িয়ে চলি। আমি OpenAI function calling-এর পরিবর্তে
• ডিপেন্ডেন্সি ইনজেকশনের মাধ্যমে কম্পোজেবিলিটি (Composability through Dependency Injection) আমি AgenticLoop নামক একটি সাধারণ লুপ ব্যবহার করি। এটি দুটি ইনপুট গ্রহণ করে: একটি model caller এবং একটি tool executor। এই একটি সিদ্ধান্ত চারটি ভিন্ন মোড ব্যবহারের সুযোগ দেয়:
- সাধারণ চ্যাট (General chat)
- কোডিং ওয়ার্কফ্লো (Coding workflows)
- সাব-এজেন্ট (Subagents)
- কাস্টম স্কিল (Custom skills) আমি কোনো সাবক্লাস বা জটিল প্যাটার্ন ব্যবহার করি না। শুধু দুটি সাধারণ ফাংশন।
• স্টেট ম্যানেজমেন্ট (State Management) Helium হলো একটি সিঙ্গেল-ইউজার টুল। আমি কনভারসেশন হিস্ট্রি এবং মেমরির জন্য module-level singletons ব্যবহার করি। একটি সিঙ্গেল ইউজার সেশন রিপ্রেজেন্ট করার জন্য গ্লোবাল স্টেট (Global state) হলো সবচেয়ে সহজ উপায়। এটি ওভার-ইঞ্জিনিয়ারিং প্রতিরোধ করে।
• সেফটি গেটস (Safety Gates) আমি টুল এক্সিকিউশনের জন্য একটি তিন-স্তরের (three-tier) সিস্টেম ব্যবহার করি:
- Safe: ফাইল পড়া বা সার্চ করার মতো কাজগুলো স্বয়ংক্রিয়ভাবে সম্পন্ন করে।
- Risky: ফাইল লেখার মতো কাজের জন্য ব্যবহারকারীর অনুমতির প্রয়োজন হয়।
- Conditional: বিপদ আছে কিনা তা যাচাই করতে bash script-এর মতো কমান্ডগুলো পরীক্ষা করে দেখে। এটি একটি হ্যালুসিনেশন করা মডেলকে আপনার ফাইল ডিলিট করা থেকে বিরত রাখে।
• কমিউনিকেশন (Communication) আমি OpenAI SDK-এর পরিবর্তে র (raw) HTTP রিকোয়েস্ট ব্যবহার করি। এটি ডিপেন্ডেন্সি কমায় এবং কোডকে স্বচ্ছ রাখে। API-তে ঠিক কী পাঠানো হচ্ছে তা আপনি স্পষ্টভাবে দেখতে পাবেন।
• স্কিল সিস্টেম (Skill System) স্কিলগুলো হলো সাধারণ Markdown ফাইল। আপনি YAML frontmatter সহ একটি টেক্সট ফাইল লিখে নতুন স্কিল যোগ করতে পারেন। এখানে কোনো জটিল রেজিস্ট্রেশন API নেই। এটি প্লাগইন সিস্টেমটিকে যে কারো জন্য ব্যবহার করা সহজ করে তোলে।
• শিক্ষা (Lessons Learned) ১. Dependency injection সাশ্রয়ী কম্পোজেবিলিটি (composability) প্রদান করে। ২. সিস্টেম প্রম্পট হলো আপনার API। এটিকে কোডের একটি প্রথম-শ্রেণীর (first-class) অংশ হিসেবে বিবেচনা করুন। ৩. যদি সার্কুলার ডিপেন্ডেন্সি (circular dependencies) ঠিক করতে আপনার lazy imports-এর প্রয়োজন হয়, তবে বুঝতে হবে আপনার মডিউল বাউন্ডারিগুলো ভুল। পরিবর্তে আর্কিটেকচারটি ঠিক করুন।
সরলতা স্কেল করতে পারে। আপনার নির্দিষ্ট ব্যবহারের ক্ষেত্রে (use case) যা কাজ করে, সেই সবচেয়ে সহজ সমাধানটি বেছে নিন।
উৎস: https://dev.to/debmalyasen34/designing-helium-agent-1b39
ঐচ্ছিক লার্নিং কমিউনিটি: https://t.me/GyaanSetuAi
